From d77af43a417184ef00337ac86705bbba7e61f08f Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 17 Jan 2018 23:35:26 -0500 Subject: add another packaging build dir to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4050468..1807b29 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ __pycache__/ build/** bootstrap/** .idea/ +src/build/** # Translations -- cgit v0.12 From e25d4155b872845af6df188efdf50a660f235572 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 17 Jan 2018 23:37:06 -0500 Subject: Added find_program_path() to SCons.Tool. Logic was in mingw. Use this to allow tools to search for normal SCOns paths, and then specify alternative default install paths for such tools. This should resolve clang failing on appveyor on windows --- src/engine/SCons/Tool/__init__.py | 29 +++++++++++++++++++++++++++++ src/engine/SCons/Tool/clang.py | 7 +++++++ src/engine/SCons/Tool/clangxx.py | 11 ++++++++++- src/engine/SCons/Tool/mingw.py | 31 +++++++------------------------ 4 files changed, 53 insertions(+), 25 deletions(-) diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py index 42f84e1..0b340c0 100644 --- a/src/engine/SCons/Tool/__init__.py +++ b/src/engine/SCons/Tool/__init__.py @@ -1247,6 +1247,35 @@ def tool_list(platform, env): return [x for x in tools if x] + +def find_program_path(env, key_program, default_paths=[]): + """ + Find the location of key_program and then return the path it was located at. + Checking the default install locations. + Mainly for windows where tools aren't all installed in /usr/bin,etc + :param env: Current Environment() + :param key_program: Program we're using to locate the directory to add to PATH. + """ + # First search in the SCons path + path=env.WhereIs(key_program) + if (path): + return path + # then the OS path: + path=SCons.Util.WhereIs(key_program) + if (path): + return path + + # If that doesn't work try default location for mingw + save_path = env['ENV']['PATH'] + for p in default_paths: + env.AppendENVPath('PATH',p) + path = env.WhereIs(key_program) + if not path: + env['ENV']['PATH']=save_path + return path + + + # Local Variables: # tab-width:4 # indent-tabs-mode:nil diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index 177e6b2..a6bae43 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -52,6 +52,13 @@ def generate(env): """Add Builders and construction variables for clang to an Environment.""" SCons.Tool.cc.generate(env) + if env['PLATFORM'] == 'win32': + # Ensure that we have a proper path for clang + clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + if clang: + clang_bin_dir = os.path.dirname(clang) + env.AppendENVPath('PATH', clang_bin_dir) + env['CC'] = env.Detect(compilers) or 'clang' if env['PLATFORM'] in ['cygwin', 'win32']: env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') diff --git a/src/engine/SCons/Tool/clangxx.py b/src/engine/SCons/Tool/clangxx.py index dd501af..63f1b0d 100644 --- a/src/engine/SCons/Tool/clangxx.py +++ b/src/engine/SCons/Tool/clangxx.py @@ -66,13 +66,22 @@ def generate(env): env['SHOBJSUFFIX'] = '.pic.o' elif env['PLATFORM'] == 'sunos': env['SHOBJSUFFIX'] = '.pic.o' + elif env['PLATFORM'] == 'win32': + # Ensure that we have a proper path for clang++ + clangxx = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + if clangxx: + clangxx_bin_dir = os.path.dirname(clangxx) + env.AppendENVPath('PATH', clangxx_bin_dir) + # determine compiler version if env['CXX']: pipe = SCons.Action._subproc(env, [env['CXX'], '--version'], stdin='devnull', stderr='devnull', stdout=subprocess.PIPE) - if pipe.wait() != 0: return + if pipe.wait() != 0: + return + # clang -dumpversion is of no use line = pipe.stdout.readline() if sys.version_info[0] > 2: diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index 778db3c..4121902 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -42,26 +42,6 @@ import SCons.Defaults import SCons.Tool import SCons.Util -# This is what we search for to find mingw: -key_program = 'mingw32-gcc' - -def find(env): - # First search in the SCons path - path=env.WhereIs(key_program) - if (path): - return path - # then the OS path: - path=SCons.Util.WhereIs(key_program) - if (path): - return path - - # If that doesn't work try default location for mingw - save_path=env['ENV']['PATH'] - env.AppendENVPath('PATH',r'c:\MinGW\bin') - path =env.WhereIs(key_program) - if not path: - env['ENV']['PATH']=save_path - return path def shlib_generator(target, source, env, for_signature): cmd = SCons.Util.CLVar(['$SHLINK', '$SHLINKFLAGS']) @@ -126,12 +106,15 @@ res_builder = SCons.Builder.Builder(action=res_action, suffix='.o', source_scanner=SCons.Tool.SourceFileScanner) SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan) +# This is what we search for to find mingw: +key_program = 'mingw32-gcc' + + def generate(env): - mingw = find(env) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) if mingw: - dir = os.path.dirname(mingw) - env.PrependENVPath('PATH', dir ) - + mingw_bin_dir = os.path.dirname(mingw) + env.AppendENVPath('PATH', mingw_bin_dir) # Most of mingw is the same as gcc and friends... gnu_tools = ['gcc', 'g++', 'gnulink', 'ar', 'gas', 'gfortran', 'm4'] -- cgit v0.12 From a4ca5012e89b136ffbc0d7fb201976551bf63227 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 17 Jan 2018 23:42:48 -0500 Subject: Add info on changes --- src/CHANGES.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 42b44d7..df25dac 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -22,6 +22,13 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE - Updated Jar builder to flatten source list which could contain embedded lists - Removed some magic numbers from jar.py on behalf of Mats Wichmann (mats@linux.com) + From William Deegan: + - Updated logic for mingw and clang on win32 to search default tool install paths if not + found in normal SCons PATH. If the user specifies PATH or tool specific paths they + will be used and the default paths below will be ignored. + - Default path for clang/clangxx : C:\Program Files\LLVM\bin + - Default path for mingw : c:\MinGW\bin + RELEASE 3.0.1 - Mon, 12 Nov 2017 15:31:33 -0700 From Daniel Moody: -- cgit v0.12 From 4685be01723dd4ef4917217e8aff25e92a55f1a5 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 14 Feb 2018 11:44:59 -0500 Subject: Update default paths for clang compilers. This should hopefully fix some appveyor failures. --- src/engine/SCons/Tool/clang.py | 5 ++++- src/engine/SCons/Tool/clang/__init__.py | 16 ++++++++++++++++ src/engine/SCons/Tool/clangxx.py | 4 +++- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/engine/SCons/Tool/clang/__init__.py diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index a6bae43..aba5598 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -45,6 +45,8 @@ import sys import SCons.Util import SCons.Tool.cc +from SCons.Tool.clang import get_clang_install_dirs + compilers = ['clang'] @@ -54,7 +56,7 @@ def generate(env): if env['PLATFORM'] == 'win32': # Ensure that we have a proper path for clang - clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=get_clang_install_dirs(env['PLATFORM'])) if clang: clang_bin_dir = os.path.dirname(clang) env.AppendENVPath('PATH', clang_bin_dir) @@ -64,6 +66,7 @@ def generate(env): env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') else: env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS -fPIC') + # determine compiler version if env['CC']: #pipe = SCons.Action._subproc(env, [env['CC'], '-dumpversion'], diff --git a/src/engine/SCons/Tool/clang/__init__.py b/src/engine/SCons/Tool/clang/__init__.py new file mode 100644 index 0000000..775ba80 --- /dev/null +++ b/src/engine/SCons/Tool/clang/__init__.py @@ -0,0 +1,16 @@ +""" +Common routines and data for clang tools +""" + +clang_win32_dirs = [ + r'C:\Program Files\LLVM\bin', + r'C:\cygwin64\bin', + r'C:\msys64', + r'C:\cygwin\bin', + r'C:\msys', +] + +def get_clang_install_dirs(platform): + if platform == 'win32': + return clang_win32_dirs + else return [] \ No newline at end of file diff --git a/src/engine/SCons/Tool/clangxx.py b/src/engine/SCons/Tool/clangxx.py index 63f1b0d..2bf4cf4 100644 --- a/src/engine/SCons/Tool/clangxx.py +++ b/src/engine/SCons/Tool/clangxx.py @@ -46,6 +46,8 @@ import sys import SCons.Tool import SCons.Util import SCons.Tool.cxx +from SCons.Tool.clang import get_clang_install_dirs + compilers = ['clang++'] @@ -68,7 +70,7 @@ def generate(env): env['SHOBJSUFFIX'] = '.pic.o' elif env['PLATFORM'] == 'win32': # Ensure that we have a proper path for clang++ - clangxx = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + clangxx = SCons.Tool.find_program_path(env, compilers[0], default_paths=get_clang_install_dirs(env['PLATFORM'])) if clangxx: clangxx_bin_dir = os.path.dirname(clangxx) env.AppendENVPath('PATH', clangxx_bin_dir) -- cgit v0.12 From 0cefc2bf199dd56d16b752042f9569a420b6ddab Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sun, 25 Mar 2018 12:53:56 -0400 Subject: rename clang command package to clangCommon as it was breaking imports test. --- src/engine/SCons/Tool/clang.py | 2 +- src/engine/SCons/Tool/clang/__init__.py | 16 ---------------- src/engine/SCons/Tool/clangCommon/__init__.py | 17 +++++++++++++++++ src/engine/SCons/Tool/clangxx.py | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) delete mode 100644 src/engine/SCons/Tool/clang/__init__.py create mode 100644 src/engine/SCons/Tool/clangCommon/__init__.py diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index aba5598..c51e753 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -45,7 +45,7 @@ import sys import SCons.Util import SCons.Tool.cc -from SCons.Tool.clang import get_clang_install_dirs +from SCons.Tool.clangCommon import get_clang_install_dirs compilers = ['clang'] diff --git a/src/engine/SCons/Tool/clang/__init__.py b/src/engine/SCons/Tool/clang/__init__.py deleted file mode 100644 index 775ba80..0000000 --- a/src/engine/SCons/Tool/clang/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -Common routines and data for clang tools -""" - -clang_win32_dirs = [ - r'C:\Program Files\LLVM\bin', - r'C:\cygwin64\bin', - r'C:\msys64', - r'C:\cygwin\bin', - r'C:\msys', -] - -def get_clang_install_dirs(platform): - if platform == 'win32': - return clang_win32_dirs - else return [] \ No newline at end of file diff --git a/src/engine/SCons/Tool/clangCommon/__init__.py b/src/engine/SCons/Tool/clangCommon/__init__.py new file mode 100644 index 0000000..37efbf6 --- /dev/null +++ b/src/engine/SCons/Tool/clangCommon/__init__.py @@ -0,0 +1,17 @@ +""" +Common routines and data for clang tools +""" + +clang_win32_dirs = [ + r'C:\Program Files\LLVM\bin', + r'C:\cygwin64\bin', + r'C:\msys64', + r'C:\cygwin\bin', + r'C:\msys', +] + +def get_clang_install_dirs(platform): + if platform == 'win32': + return clang_win32_dirs + else: + return [] \ No newline at end of file diff --git a/src/engine/SCons/Tool/clangxx.py b/src/engine/SCons/Tool/clangxx.py index 2bf4cf4..7194d9e 100644 --- a/src/engine/SCons/Tool/clangxx.py +++ b/src/engine/SCons/Tool/clangxx.py @@ -46,7 +46,7 @@ import sys import SCons.Tool import SCons.Util import SCons.Tool.cxx -from SCons.Tool.clang import get_clang_install_dirs +from SCons.Tool.clangCommon import get_clang_install_dirs compilers = ['clang++'] -- cgit v0.12 From 14d20880efb6029420ff7c9fd55da4ee26893098 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sun, 25 Mar 2018 13:41:06 -0400 Subject: Fix clang and mingw tests --- src/engine/SCons/Tool/mingw.py | 7 ++++++- test/import.py | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index 4121902..de493f0 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -156,7 +156,12 @@ def generate(env): env['PROGSUFFIX'] = '.exe' def exists(env): - return find(env) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) + if mingw: + mingw_bin_dir = os.path.dirname(mingw) + env.AppendENVPath('PATH', mingw_bin_dir) + + return mingw # Local Variables: # tab-width:4 diff --git a/test/import.py b/test/import.py index b6e5a8d..11fee9c 100644 --- a/test/import.py +++ b/test/import.py @@ -75,6 +75,8 @@ ignore = ('__init__.py', '386asm.py', 'linkloc.py', # Directory of common stuff for MSVC and MSVS 'MSCommon', + # clang common + "clangCommon", # Sun pkgchk and pkginfo common stuff 'sun_pkg.py', # RPM utilities -- cgit v0.12 From 23f357c1addfe7edbccbf0b804b7b29c12b5049c Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sun, 25 Mar 2018 13:51:42 -0400 Subject: added more default mingw paths per comments on pull request --- src/engine/SCons/Tool/mingw.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index de493f0..f2e9442 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -43,6 +43,14 @@ import SCons.Tool import SCons.Util +mingw_paths = [ + r'c:\MinGW\bin', + r'C:\cygwin64\bin', + r'C:\msys64', + r'C:\cygwin\bin', + r'C:\msys', +] + def shlib_generator(target, source, env, for_signature): cmd = SCons.Util.CLVar(['$SHLINK', '$SHLINKFLAGS']) @@ -111,7 +119,7 @@ key_program = 'mingw32-gcc' def generate(env): - mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=mingw_paths) if mingw: mingw_bin_dir = os.path.dirname(mingw) env.AppendENVPath('PATH', mingw_bin_dir) @@ -156,7 +164,7 @@ def generate(env): env['PROGSUFFIX'] = '.exe' def exists(env): - mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=mingw_paths) if mingw: mingw_bin_dir = os.path.dirname(mingw) env.AppendENVPath('PATH', mingw_bin_dir) -- cgit v0.12 From 7d6468b7bf017ec8b0a412342b15d2a4d940c89d Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Mon, 9 Apr 2018 15:34:24 -0500 Subject: updated yacc tool to add default paths, updated to test to use the tool specifically and know when to skip on windows. --- src/engine/SCons/Tool/yacc.py | 9 +++++++++ test/YACC/YACC.py | 8 ++++---- test/YACC/live-check-output-cleaned.py | 2 +- test/YACC/live.py | 12 +++++++++--- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index 648433b..be65104 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/engine/SCons/Tool/yacc.py @@ -34,6 +34,7 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import os.path +import sys import SCons.Defaults import SCons.Tool @@ -113,6 +114,14 @@ def generate(env): cxx_file.add_action('.yy', YaccAction) cxx_file.add_emitter('.yy', yyEmitter) + if(sys.platform == 'win32'): + bison = SCons.Tool.find_program_path(env, 'bison', default_paths=['C:\\cygwin64\\bin', 'C:\\cygwin\\bin', 'C:\\msys', 'C:\\msys64' ]) + if bison: + bison_bin_dir = os.path.dirname(bison) + env.AppendENVPath('PATH', bison_bin_dir) + else: + SCons.Warnings.Warning('yacc tool requested, but bison binary not found in ENV PATH') + env['YACC'] = env.Detect('bison') or 'yacc' env['YACCFLAGS'] = SCons.Util.CLVar('') env['YACCCOM'] = '$YACC $YACCFLAGS -o $TARGET $SOURCES' diff --git a/test/YACC/YACC.py b/test/YACC/YACC.py index 3fc1f7c..b27c2a7 100644 --- a/test/YACC/YACC.py +++ b/test/YACC/YACC.py @@ -53,10 +53,10 @@ env.CFile(target = 'ddd', source = 'ddd.ym') test.run(arguments = '.', stderr = None) -test.must_match('aaa.c', "aaa.y\nmyyacc.py\n") -test.must_match('bbb.c', "bbb.yacc\nmyyacc.py\n") -test.must_match('ccc.cc', "ccc.yacc\nmyyacc.py\n") -test.must_match('ddd.m', "ddd.yacc\nmyyacc.py\n") +test.must_match('aaa.c', "aaa.y" + os.linesep + "myyacc.py" + os.linesep) +test.must_match('bbb.c', "bbb.yacc" + os.linesep + "myyacc.py" + os.linesep) +test.must_match('ccc.cc', "ccc.yacc" + os.linesep + "myyacc.py" + os.linesep) +test.must_match('ddd.m', "ddd.yacc" + os.linesep + "myyacc.py" + os.linesep) diff --git a/test/YACC/live-check-output-cleaned.py b/test/YACC/live-check-output-cleaned.py index a6240c9..8329b94 100644 --- a/test/YACC/live-check-output-cleaned.py +++ b/test/YACC/live-check-output-cleaned.py @@ -40,7 +40,7 @@ if not yacc: test.skip_test('No yacc or bison found; skipping test.\n') test.write('SConstruct', """ -foo = Environment(YACCFLAGS='-v -d') +foo = Environment(YACCFLAGS='-v -d', tools = ['default', 'yacc']) foo.CFile(source = 'foo.y') """ % locals()) diff --git a/test/YACC/live.py b/test/YACC/live.py index 6dd08f7..35f6c37 100644 --- a/test/YACC/live.py +++ b/test/YACC/live.py @@ -29,6 +29,8 @@ Test YACC and YACCFLAGS with a live yacc compiler. """ import TestSCons +import sys +import os _exe = TestSCons._exe _python_ = TestSCons._python_ @@ -40,12 +42,16 @@ yacc = test.where_is('yacc') or test.where_is('bison') if not yacc: test.skip_test('No yacc or bison found; skipping test.\n') +if sys.platform == 'win32': + if not test.where_is('gcc'): + test.skip_test('No gcc found on windows; skipping test.\n') + test.file_fixture('wrapper.py') test.write('SConstruct', """ -foo = Environment(YACCFLAGS='-d') +foo = Environment(YACCFLAGS='-d', tools = ['default', 'yacc']) yacc = foo.Dictionary('YACC') -bar = Environment(YACC = r'%(_python_)s wrapper.py ' + yacc) +bar = Environment(YACC = r'%(_python_)s wrapper.py ' + yacc, tools = ['default', 'yacc']) foo.Program(target = 'foo', source = 'foo.y') bar.Program(target = 'bar', source = 'bar.y') foo.Program(target = 'hello', source = ['hello.cpp']) @@ -152,7 +158,7 @@ test.run(arguments = 'bar' + _exe) test.up_to_date(arguments = 'bar' + _exe) -test.must_match(test.workpath('wrapper.out'), "wrapper.py\n") +test.must_match(test.workpath('wrapper.out'), "wrapper.py" + os.linesep) test.run(program = test.workpath('bar'), stdin = "b\n", stdout = "bar.y\n") -- cgit v0.12 From e8ee5e89e0c301324aaa3b78a7a2e8c8919d53e8 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 08:03:43 -0500 Subject: removed binary read and write so newlines are crossplatform and updated path for appveyor script --- .appveyor.yml | 2 +- test/YACC/YACC-fixture/myyacc.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index a9d2dfc..a735070 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -2,7 +2,7 @@ image: Visual Studio 2017 shallow_clone: true install: - - "set PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" + - "set PATH=%PYTHON%;%PYTHON%\\Scripts;C:\\cygwin64\\bin;C:\\msys64;%PATH%" - python --version - pip install lxml - pip install pypiwin32 diff --git a/test/YACC/YACC-fixture/myyacc.py b/test/YACC/YACC-fixture/myyacc.py index c2e1abf..756c98f 100644 --- a/test/YACC/YACC-fixture/myyacc.py +++ b/test/YACC/YACC-fixture/myyacc.py @@ -4,10 +4,10 @@ cmd_opts, args = getopt.getopt(sys.argv[1:], 'o:', []) output = None opt_string = '' for opt, arg in cmd_opts: - if opt == '-o': output = open(arg, 'wb') + if opt == '-o': output = open(arg, 'w') else: opt_string = opt_string + ' ' + opt for a in args: - contents = open(a, 'rb').read() - output.write(contents.replace(b'YACC', b'myyacc.py')) + contents = open(a, 'r').read() + output.write(contents.replace('YACC', 'myyacc.py')) output.close() sys.exit(0) -- cgit v0.12 From 5f3e6792dbaa74b3c384f9dcbf6ff71e984ba766 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 11:17:40 -0500 Subject: removed unnecessary parans --- src/engine/SCons/Tool/yacc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index be65104..a43b3b3 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/engine/SCons/Tool/yacc.py @@ -114,7 +114,7 @@ def generate(env): cxx_file.add_action('.yy', YaccAction) cxx_file.add_emitter('.yy', yyEmitter) - if(sys.platform == 'win32'): + if sys.platform == 'win32': bison = SCons.Tool.find_program_path(env, 'bison', default_paths=['C:\\cygwin64\\bin', 'C:\\cygwin\\bin', 'C:\\msys', 'C:\\msys64' ]) if bison: bison_bin_dir = os.path.dirname(bison) -- cgit v0.12 From f526583e514cb1cbcfd44cd26b95d4025b3ba7f8 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 12:40:36 -0500 Subject: moved default paths for cywing and mingw to their own platform modules. --- src/engine/SCons/Platform/cygwin.py | 9 +++++++++ src/engine/SCons/Platform/mingw.py | 39 +++++++++++++++++++++++++++++++++++++ src/engine/SCons/Tool/yacc.py | 4 +++- 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/engine/SCons/Platform/mingw.py diff --git a/src/engine/SCons/Platform/cygwin.py b/src/engine/SCons/Platform/cygwin.py index 8b4669c..f6c5086 100644 --- a/src/engine/SCons/Platform/cygwin.py +++ b/src/engine/SCons/Platform/cygwin.py @@ -32,9 +32,18 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" +import sys + from . import posix from SCons.Platform import TempFileMunge +CYGWIN_DEFAULT_PATHS = [] +if sys.platform == 'win32': + CYGWIN_DEFAULT_PATHS = [ + r'C:\cygwin64\bin', + r'C:\cygwin\bin' + ] + def generate(env): posix.generate(env) diff --git a/src/engine/SCons/Platform/mingw.py b/src/engine/SCons/Platform/mingw.py new file mode 100644 index 0000000..73633d7 --- /dev/null +++ b/src/engine/SCons/Platform/mingw.py @@ -0,0 +1,39 @@ +"""SCons.Platform.mingw + +Platform-specific initialization for the MinGW system. + +""" + +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + +import sys + +MINGW_DEFAULT_PATHS = [] +if sys.platform == 'win32': + MINGW_DEFAULT_PATHS = [ + r'C:\msys64', + r'C:\msys' + ] \ No newline at end of file diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index a43b3b3..cd9b9a8 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/engine/SCons/Tool/yacc.py @@ -39,6 +39,8 @@ import sys import SCons.Defaults import SCons.Tool import SCons.Util +from SCons.Platform.mingw import MINGW_DEFAULT_PATHS +from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS YaccAction = SCons.Action.Action("$YACCCOM", "$YACCCOMSTR") @@ -115,7 +117,7 @@ def generate(env): cxx_file.add_emitter('.yy', yyEmitter) if sys.platform == 'win32': - bison = SCons.Tool.find_program_path(env, 'bison', default_paths=['C:\\cygwin64\\bin', 'C:\\cygwin\\bin', 'C:\\msys', 'C:\\msys64' ]) + bison = SCons.Tool.find_program_path(env, 'bison', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) if bison: bison_bin_dir = os.path.dirname(bison) env.AppendENVPath('PATH', bison_bin_dir) -- cgit v0.12 From f8b479702bb0b5c81c147438f9ce91b5b6b460f2 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 16:08:32 -0500 Subject: updated CHANGES.txt --- src/CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 43efa9e..76487f6 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -8,6 +8,8 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE From Daniel Moody: + - Add common location for default paths for cygwin and mingw in Platform modules + - Updated YACC tool to work on windows with Cygwin/MinGW setups - Set the pickling protocal back to highest which was causing issues with variant dir tests. This will cause issues if reading sconsigns pickled with the previous lower protocal. -- cgit v0.12 From 56b55490167e165b70dd591da13468cdace315b8 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Thu, 12 Apr 2018 15:06:44 -0500 Subject: updated gettext tools to work on windows cygwin and mingw environments. --- src/engine/SCons/Tool/GettextCommon.py | 2 +- src/engine/SCons/Tool/gettext_tool.py | 12 ++++++++++++ src/engine/SCons/Tool/msgfmt.py | 14 ++++++++++++++ src/engine/SCons/Tool/msginit.py | 14 ++++++++++++++ src/engine/SCons/Tool/msgmerge.py | 15 ++++++++++++++- src/engine/SCons/Tool/xgettext.py | 14 +++++++++++++- 6 files changed, 68 insertions(+), 3 deletions(-) diff --git a/src/engine/SCons/Tool/GettextCommon.py b/src/engine/SCons/Tool/GettextCommon.py index 3b840a6..2d37def 100644 --- a/src/engine/SCons/Tool/GettextCommon.py +++ b/src/engine/SCons/Tool/GettextCommon.py @@ -447,7 +447,7 @@ def _detect_msgfmt(env): """ Detects *msgmfmt(1)* program. """ if 'MSGFMT' in env: return env['MSGFMT'] - msgfmt = env.Detect('msgfmt'); + msgfmt = env.Detect('msgfmt') if msgfmt: return msgfmt raise SCons.Errors.StopError(MsgfmtNotFound, "Could not detect msgfmt") diff --git a/src/engine/SCons/Tool/gettext_tool.py b/src/engine/SCons/Tool/gettext_tool.py index 6031e49..41bd70b 100644 --- a/src/engine/SCons/Tool/gettext_tool.py +++ b/src/engine/SCons/Tool/gettext_tool.py @@ -27,10 +27,22 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" ############################################################################# def generate(env,**kw): + import sys + import os import SCons.Tool + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + from SCons.Tool.GettextCommon \ import _translate, tool_list for t in tool_list(env['PLATFORM'], env): + if sys.platform == 'win32': + tool = SCons.Tool.find_program_path(env, t, default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if tool: + tool_bin_dir = os.path.dirname(tool) + env.AppendENVPath('PATH', tool_bin_dir) + else: + SCons.Warnings.Warning(t + ' tool requested, but binary not found in ENV PATH') env.Tool(t) env.AddMethod(_translate, 'Translate') ############################################################################# diff --git a/src/engine/SCons/Tool/msgfmt.py b/src/engine/SCons/Tool/msgfmt.py index 4fe6afd..3c9dde7 100644 --- a/src/engine/SCons/Tool/msgfmt.py +++ b/src/engine/SCons/Tool/msgfmt.py @@ -75,8 +75,22 @@ def _create_mo_file_builder(env, **kw): ############################################################################# def generate(env,**kw): """ Generate `msgfmt` tool """ + import sys + import os import SCons.Util + import SCons.Tool from SCons.Tool.GettextCommon import _detect_msgfmt + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + msgfmt = SCons.Tool.find_program_path(env, 'msgfmt', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if msgfmt: + msgfmt_bin_dir = os.path.dirname(msgfmt) + env.AppendENVPath('PATH', msgfmt_bin_dir) + else: + SCons.Warnings.Warning('msgfmt tool requested, but binary not found in ENV PATH') + try: env['MSGFMT'] = _detect_msgfmt(env) except: diff --git a/src/engine/SCons/Tool/msginit.py b/src/engine/SCons/Tool/msginit.py index 39f460d..9e056e7 100644 --- a/src/engine/SCons/Tool/msginit.py +++ b/src/engine/SCons/Tool/msginit.py @@ -77,8 +77,22 @@ def _POInitBuilderWrapper(env, target=None, source=_null, **kw): ############################################################################# def generate(env,**kw): """ Generate the `msginit` tool """ + import sys + import os import SCons.Util + import SCons.Tool from SCons.Tool.GettextCommon import _detect_msginit + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + msginit = SCons.Tool.find_program_path(env, 'msginit', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if msginit: + msginit_bin_dir = os.path.dirname(msginit) + env.AppendENVPath('PATH', msginit_bin_dir) + else: + SCons.Warnings.Warning('msginit tool requested, but binary not found in ENV PATH') + try: env['MSGINIT'] = _detect_msginit(env) except: diff --git a/src/engine/SCons/Tool/msgmerge.py b/src/engine/SCons/Tool/msgmerge.py index 11d7b48..76661d2 100644 --- a/src/engine/SCons/Tool/msgmerge.py +++ b/src/engine/SCons/Tool/msgmerge.py @@ -68,8 +68,21 @@ def _POUpdateBuilderWrapper(env, target=None, source=_null, **kw): ############################################################################# def generate(env,**kw): - """ Generate the `xgettext` tool """ + """ Generate the `msgmerge` tool """ + import sys + import os + import SCons.Tool from SCons.Tool.GettextCommon import _detect_msgmerge + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + msgmerge = SCons.Tool.find_program_path(env, 'msgmerge', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if msgmerge: + msgmerge_bin_dir = os.path.dirname(msgmerge) + env.AppendENVPath('PATH', msgmerge_bin_dir) + else: + SCons.Warnings.Warning('msgmerge tool requested, but binary not found in ENV PATH') try: env['MSGMERGE'] = _detect_msgmerge(env) except: diff --git a/src/engine/SCons/Tool/xgettext.py b/src/engine/SCons/Tool/xgettext.py index 2c0ce40..e4a17ca 100644 --- a/src/engine/SCons/Tool/xgettext.py +++ b/src/engine/SCons/Tool/xgettext.py @@ -288,9 +288,21 @@ def _POTUpdateBuilder(env, **kw): ############################################################################# def generate(env, **kw): """ Generate `xgettext` tool """ + import sys + import os import SCons.Util + import SCons.Tool from SCons.Tool.GettextCommon import RPaths, _detect_xgettext - + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + xgettext = SCons.Tool.find_program_path(env, 'xgettext', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if xgettext: + xgettext_bin_dir = os.path.dirname(xgettext) + env.AppendENVPath('PATH', xgettext_bin_dir) + else: + SCons.Warnings.Warning('xgettext tool requested, but binary not found in ENV PATH') try: env['XGETTEXT'] = _detect_xgettext(env) except: -- cgit v0.12 From 6135c8f37e53ef8aae352893c413d0676d586798 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Fri, 13 Apr 2018 11:08:56 -0500 Subject: updated CHANGES.txt --- src/CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 76487f6..dccf61e 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -8,6 +8,7 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE From Daniel Moody: + - Updated gettext tools to setup default paths for windows with Cygwin/MinGW setups - Add common location for default paths for cygwin and mingw in Platform modules - Updated YACC tool to work on windows with Cygwin/MinGW setups - Set the pickling protocal back to highest which was causing issues -- cgit v0.12 From 14c4bbd1d9e5f87a7964fd69a60e7d21d69319ea Mon Sep 17 00:00:00 2001 From: maiphi <39464783+maiphi@users.noreply.github.com> Date: Sun, 20 May 2018 19:42:52 +0200 Subject: Make class SCons.Subst.Literal hashable When using Python 3, substitution of Literal objects requires the objects to be hashable, otherwise an error will be thrown. The hash value is that of the lstr member. --- src/engine/SCons/Subst.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engine/SCons/Subst.py b/src/engine/SCons/Subst.py index 68d247f..0b4190b 100644 --- a/src/engine/SCons/Subst.py +++ b/src/engine/SCons/Subst.py @@ -86,6 +86,9 @@ class Literal(object): def __neq__(self, other): return not self.__eq__(other) + def __hash__(self): + return hash(self.lstr) + class SpecialAttrWrapper(object): """This is a wrapper for what we call a 'Node special attribute.' This is any of the attributes of a Node that we can reference from -- cgit v0.12 From 8d504fd00127bdcffcf436993aa8e8c89011c63e Mon Sep 17 00:00:00 2001 From: maiphi <39464783+maiphi@users.noreply.github.com> Date: Sun, 20 May 2018 20:13:45 +0200 Subject: Update Changes.txt with hashable Literal --- src/CHANGES.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index a4590d0..f9cb5c4 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -7,6 +7,10 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE + From Philipp Maierhöfer + - Added a __hash__ method to the class Scons.Subst.Literal. Required when substituting Literal + objects when SCons runs with Python 3. + From Richard West: - Add SConstruct.py, Sconstruct.py, sconstruct.py to the search path for the root SConstruct file. Allows easier debugging within Visual Studio -- cgit v0.12 From 21335a0ef0463d51ecc9ea9cc86c3388415f12aa Mon Sep 17 00:00:00 2001 From: Philipp Maierhoefer Date: Mon, 21 May 2018 11:43:56 +0200 Subject: Added a test case for expansion of Literal objects in ${_concat()} --- test/Subst/Literal.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 test/Subst/Literal.py diff --git a/test/Subst/Literal.py b/test/Subst/Literal.py new file mode 100644 index 0000000..38ed3c4 --- /dev/null +++ b/test/Subst/Literal.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + +""" +Verify that Literal objects expand correctly in ${_concat()}. +""" + +import TestSCons + +test = TestSCons.TestSCons() + +test.write('SConstruct', """\ +env = Environment(PRE='pre=', MID=Literal('\$$ORIGIN'), SUF='') +print(env.subst('${_concat(PRE, MID, SUF, __env__)}')) +""") + +test.run() + +expect = """\ +pre=\$ORIGIN +""" + +test.run(arguments='-Q -q', stdout=expect) + +# Local Variables: +# tab-width:4 +# indent-tabs-mode:nil +# End: +# vim: set expandtab tabstop=4 shiftwidth=4: -- cgit v0.12 From 75059479aff3cd50b9e547858a56c39eabeb111f Mon Sep 17 00:00:00 2001 From: maiphi <39464783+maiphi@users.noreply.github.com> Date: Tue, 22 May 2018 13:53:23 +0200 Subject: Added missing pass_test() to Literal.py test --- test/Subst/Literal.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Subst/Literal.py b/test/Subst/Literal.py index 38ed3c4..dec243d 100644 --- a/test/Subst/Literal.py +++ b/test/Subst/Literal.py @@ -45,6 +45,8 @@ pre=\$ORIGIN test.run(arguments='-Q -q', stdout=expect) +test.pass_test() + # Local Variables: # tab-width:4 # indent-tabs-mode:nil -- cgit v0.12 From 880fce9c7982397fe16f49160591199d1e117c80 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Thu, 24 May 2018 21:55:52 -0500 Subject: issue-3130: udpated travis file to update apt-get. --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9d8b96d..a1f58b0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,10 @@ dist: trusty language: python +addons: + apt: + update: true + install: - ./.travis/install.sh -- cgit v0.12 From 100f49aa06ff3e8ed09fb77edc787f35d2de10fc Mon Sep 17 00:00:00 2001 From: William Deegan Date: Fri, 25 May 2018 11:26:02 -0700 Subject: Handful of changes to get clang tests passing on windows. Use glob to find other possible default mingw install paths. mingw is needed in many cases on windows to compile/archive. --- src/engine/SCons/Tool/clang.py | 3 ++- src/engine/SCons/Tool/mingw.py | 21 ++++++++++++++++++++- test/Clang/clang_default_environment.py | 5 ++--- test/Clang/clang_shared_library.py | 12 +++++++----- test/Clang/clang_specific_environment.py | 1 + test/Clang/clang_static_library.py | 3 ++- test/Clang/clangxx_default_environment.py | 5 ++--- test/Clang/clangxx_shared_library.py | 11 +++++++---- test/Clang/clangxx_specific_environment.py | 3 ++- test/Clang/clangxx_static_library.py | 3 ++- 10 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index c51e753..cbb48cb 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -56,7 +56,8 @@ def generate(env): if env['PLATFORM'] == 'win32': # Ensure that we have a proper path for clang - clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=get_clang_install_dirs(env['PLATFORM'])) + clang = SCons.Tool.find_program_path(env, compilers[0], + default_paths=get_clang_install_dirs(env['PLATFORM'])) if clang: clang_bin_dir = os.path.dirname(clang) env.AppendENVPath('PATH', clang_bin_dir) diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index f2e9442..738460d 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -35,6 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import os import os.path +import glob import SCons.Action import SCons.Builder @@ -115,10 +116,28 @@ res_builder = SCons.Builder.Builder(action=res_action, suffix='.o', SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan) # This is what we search for to find mingw: -key_program = 'mingw32-gcc' +# key_program = 'mingw32-gcc' +key_program = 'mingw32-make' + + + +def find_version_specific_mingw_paths(): + """ + One example of default mingw install paths is: + C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev2\mingw64\bin + + Use glob'ing to find such and add to mingw_paths + """ + new_paths = glob.glob(r"C:\mingw-w64\*\mingw64\bin") + + return new_paths def generate(env): + global mingw_paths + # Check for reasoanble mingw default paths + mingw_paths +=find_version_specific_mingw_paths() + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=mingw_paths) if mingw: mingw_bin_dir = os.path.dirname(mingw) diff --git a/test/Clang/clang_default_environment.py b/test/Clang/clang_default_environment.py index 4ac1c68..5ebd839 100644 --- a/test/Clang/clang_default_environment.py +++ b/test/Clang/clang_default_environment.py @@ -35,9 +35,8 @@ if not test.where_is('clang'): ## This will likely NOT use clang test.write('SConstruct', """ -env = Environment() -if env['CC'] != 'clang': - env['CC'] = 'clang' +DefaultEnvironment(tools=[]) +env = Environment(tools=['clang','link']) env.Program('foo.c') """) diff --git a/test/Clang/clang_shared_library.py b/test/Clang/clang_shared_library.py index 5e4d36f..9af3770 100644 --- a/test/Clang/clang_shared_library.py +++ b/test/Clang/clang_shared_library.py @@ -33,20 +33,22 @@ test = TestSCons.TestSCons() if not test.where_is('clang'): test.skip_test("Could not find 'clang', skipping test.\n") -platform = Base()['PLATFORM'] +base = Base() +platform = base['PLATFORM'] if platform == 'posix': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.so' elif platform == 'darwin': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.dylib' elif platform == 'win32': - filename = 'foo.obj' + filename_options = ['foo.obj','foo.os'] libraryname = 'foo.dll' else: test.fail_test() test.write('SConstruct', """\ +DefaultEnvironment(tools=[]) env = Environment(tools=['clang', 'link']) env.SharedLibrary('foo', 'foo.c') """) @@ -59,7 +61,7 @@ int bar() { test.run() -test.must_exist(test.workpath(filename)) +test.must_exist_one_of([test.workpath(f) for f in filename_options]) test.must_exist(test.workpath(libraryname)) test.pass_test() diff --git a/test/Clang/clang_specific_environment.py b/test/Clang/clang_specific_environment.py index 7266a9f..81991f0 100644 --- a/test/Clang/clang_specific_environment.py +++ b/test/Clang/clang_specific_environment.py @@ -33,6 +33,7 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang', skipping test.\n") test.write('SConstruct', """\ +DefaultEnvironment(tools=[]) env = Environment(tools=['clang', 'link']) env.Program('foo.c') """) diff --git a/test/Clang/clang_static_library.py b/test/Clang/clang_static_library.py index 39e9931..7dedc6f 100644 --- a/test/Clang/clang_static_library.py +++ b/test/Clang/clang_static_library.py @@ -33,7 +33,8 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang', skipping test.\n") test.write('SConstruct', """\ -env = Environment(tools=['clang', 'ar']) +DefaultEnvironment(tools=[]) +env = Environment(tools=['mingw','clang', 'ar']) env.StaticLibrary('foo', 'foo.c') """) diff --git a/test/Clang/clangxx_default_environment.py b/test/Clang/clangxx_default_environment.py index beef1e5..5e46404 100644 --- a/test/Clang/clangxx_default_environment.py +++ b/test/Clang/clangxx_default_environment.py @@ -35,9 +35,8 @@ if not test.where_is('clang'): ## This will likely NOT use clang++. test.write('SConstruct', """\ -env = Environment() -if env['CXX'] != 'clang++': - env['CXX'] = 'clang++' +DefaultEnvironment(tools=[]) +env = Environment(tools=['clangxx','link']) env.Program('foo.cpp') """) diff --git a/test/Clang/clangxx_shared_library.py b/test/Clang/clangxx_shared_library.py index d6337ba..6240299 100644 --- a/test/Clang/clangxx_shared_library.py +++ b/test/Clang/clangxx_shared_library.py @@ -36,18 +36,21 @@ if not test.where_is('clang'): platform = Base()['PLATFORM'] if platform == 'posix': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.so' elif platform == 'darwin': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.dylib' elif platform == 'win32': - filename = 'foo.obj' + filename_options = ['foo.obj','foo.os'] libraryname = 'foo.dll' else: test.fail_test() + + test.write('SConstruct', """\ +DefaultEnvironment(tools=[]) env = Environment(tools=['clang++', 'link']) env.SharedLibrary('foo', 'foo.cpp') """) @@ -60,7 +63,7 @@ int bar() { test.run() -test.must_exist(test.workpath(filename)) +test.must_exist_one_of([test.workpath(f) for f in filename_options]) test.must_exist(test.workpath(libraryname)) test.pass_test() diff --git a/test/Clang/clangxx_specific_environment.py b/test/Clang/clangxx_specific_environment.py index 773fa94..35540bb 100644 --- a/test/Clang/clangxx_specific_environment.py +++ b/test/Clang/clangxx_specific_environment.py @@ -33,7 +33,8 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang++', skipping test.\n") test.write('SConstruct', """\ -env = Environment(tools=['clang++', 'link']) +DefaultEnvironment(tools=[]) +env = Environment(tools=['mingw','clang++', 'link']) env.Program('foo.cpp') """) diff --git a/test/Clang/clangxx_static_library.py b/test/Clang/clangxx_static_library.py index 77ea58e..c768deb 100644 --- a/test/Clang/clangxx_static_library.py +++ b/test/Clang/clangxx_static_library.py @@ -33,7 +33,8 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang++', skipping test.\n") test.write('SConstruct', """\ -env = Environment(tools=['clang++', 'ar']) +DefaultEnvironment(tools=[]) +env = Environment(tools=['mingw','clang++', 'ar']) env.StaticLibrary('foo', 'foo.cpp') """) -- cgit v0.12 From 49a553beb72d3192f77e3ae39b449daed086c22f Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 17 Jan 2018 23:35:26 -0500 Subject: add another packaging build dir to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4050468..1807b29 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ __pycache__/ build/** bootstrap/** .idea/ +src/build/** # Translations -- cgit v0.12 From acb358617aecd3d7ba974585c386a1e31ae40f71 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 17 Jan 2018 23:37:06 -0500 Subject: Added find_program_path() to SCons.Tool. Logic was in mingw. Use this to allow tools to search for normal SCOns paths, and then specify alternative default install paths for such tools. This should resolve clang failing on appveyor on windows --- src/engine/SCons/Tool/__init__.py | 29 +++++++++++++++++++++++++++++ src/engine/SCons/Tool/clang.py | 7 +++++++ src/engine/SCons/Tool/clangxx.py | 11 ++++++++++- src/engine/SCons/Tool/mingw.py | 31 +++++++------------------------ 4 files changed, 53 insertions(+), 25 deletions(-) diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py index 42f84e1..0b340c0 100644 --- a/src/engine/SCons/Tool/__init__.py +++ b/src/engine/SCons/Tool/__init__.py @@ -1247,6 +1247,35 @@ def tool_list(platform, env): return [x for x in tools if x] + +def find_program_path(env, key_program, default_paths=[]): + """ + Find the location of key_program and then return the path it was located at. + Checking the default install locations. + Mainly for windows where tools aren't all installed in /usr/bin,etc + :param env: Current Environment() + :param key_program: Program we're using to locate the directory to add to PATH. + """ + # First search in the SCons path + path=env.WhereIs(key_program) + if (path): + return path + # then the OS path: + path=SCons.Util.WhereIs(key_program) + if (path): + return path + + # If that doesn't work try default location for mingw + save_path = env['ENV']['PATH'] + for p in default_paths: + env.AppendENVPath('PATH',p) + path = env.WhereIs(key_program) + if not path: + env['ENV']['PATH']=save_path + return path + + + # Local Variables: # tab-width:4 # indent-tabs-mode:nil diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index 177e6b2..a6bae43 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -52,6 +52,13 @@ def generate(env): """Add Builders and construction variables for clang to an Environment.""" SCons.Tool.cc.generate(env) + if env['PLATFORM'] == 'win32': + # Ensure that we have a proper path for clang + clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + if clang: + clang_bin_dir = os.path.dirname(clang) + env.AppendENVPath('PATH', clang_bin_dir) + env['CC'] = env.Detect(compilers) or 'clang' if env['PLATFORM'] in ['cygwin', 'win32']: env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') diff --git a/src/engine/SCons/Tool/clangxx.py b/src/engine/SCons/Tool/clangxx.py index dd501af..63f1b0d 100644 --- a/src/engine/SCons/Tool/clangxx.py +++ b/src/engine/SCons/Tool/clangxx.py @@ -66,13 +66,22 @@ def generate(env): env['SHOBJSUFFIX'] = '.pic.o' elif env['PLATFORM'] == 'sunos': env['SHOBJSUFFIX'] = '.pic.o' + elif env['PLATFORM'] == 'win32': + # Ensure that we have a proper path for clang++ + clangxx = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + if clangxx: + clangxx_bin_dir = os.path.dirname(clangxx) + env.AppendENVPath('PATH', clangxx_bin_dir) + # determine compiler version if env['CXX']: pipe = SCons.Action._subproc(env, [env['CXX'], '--version'], stdin='devnull', stderr='devnull', stdout=subprocess.PIPE) - if pipe.wait() != 0: return + if pipe.wait() != 0: + return + # clang -dumpversion is of no use line = pipe.stdout.readline() if sys.version_info[0] > 2: diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index 778db3c..4121902 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -42,26 +42,6 @@ import SCons.Defaults import SCons.Tool import SCons.Util -# This is what we search for to find mingw: -key_program = 'mingw32-gcc' - -def find(env): - # First search in the SCons path - path=env.WhereIs(key_program) - if (path): - return path - # then the OS path: - path=SCons.Util.WhereIs(key_program) - if (path): - return path - - # If that doesn't work try default location for mingw - save_path=env['ENV']['PATH'] - env.AppendENVPath('PATH',r'c:\MinGW\bin') - path =env.WhereIs(key_program) - if not path: - env['ENV']['PATH']=save_path - return path def shlib_generator(target, source, env, for_signature): cmd = SCons.Util.CLVar(['$SHLINK', '$SHLINKFLAGS']) @@ -126,12 +106,15 @@ res_builder = SCons.Builder.Builder(action=res_action, suffix='.o', source_scanner=SCons.Tool.SourceFileScanner) SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan) +# This is what we search for to find mingw: +key_program = 'mingw32-gcc' + + def generate(env): - mingw = find(env) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) if mingw: - dir = os.path.dirname(mingw) - env.PrependENVPath('PATH', dir ) - + mingw_bin_dir = os.path.dirname(mingw) + env.AppendENVPath('PATH', mingw_bin_dir) # Most of mingw is the same as gcc and friends... gnu_tools = ['gcc', 'g++', 'gnulink', 'ar', 'gas', 'gfortran', 'm4'] -- cgit v0.12 From 00ade7bc85441688369efef881d915804191e0eb Mon Sep 17 00:00:00 2001 From: William Deegan Date: Wed, 14 Feb 2018 11:44:59 -0500 Subject: Update default paths for clang compilers. This should hopefully fix some appveyor failures. --- src/engine/SCons/Tool/clang.py | 5 ++++- src/engine/SCons/Tool/clang/__init__.py | 16 ++++++++++++++++ src/engine/SCons/Tool/clangxx.py | 4 +++- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/engine/SCons/Tool/clang/__init__.py diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index a6bae43..aba5598 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -45,6 +45,8 @@ import sys import SCons.Util import SCons.Tool.cc +from SCons.Tool.clang import get_clang_install_dirs + compilers = ['clang'] @@ -54,7 +56,7 @@ def generate(env): if env['PLATFORM'] == 'win32': # Ensure that we have a proper path for clang - clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=get_clang_install_dirs(env['PLATFORM'])) if clang: clang_bin_dir = os.path.dirname(clang) env.AppendENVPath('PATH', clang_bin_dir) @@ -64,6 +66,7 @@ def generate(env): env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') else: env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS -fPIC') + # determine compiler version if env['CC']: #pipe = SCons.Action._subproc(env, [env['CC'], '-dumpversion'], diff --git a/src/engine/SCons/Tool/clang/__init__.py b/src/engine/SCons/Tool/clang/__init__.py new file mode 100644 index 0000000..775ba80 --- /dev/null +++ b/src/engine/SCons/Tool/clang/__init__.py @@ -0,0 +1,16 @@ +""" +Common routines and data for clang tools +""" + +clang_win32_dirs = [ + r'C:\Program Files\LLVM\bin', + r'C:\cygwin64\bin', + r'C:\msys64', + r'C:\cygwin\bin', + r'C:\msys', +] + +def get_clang_install_dirs(platform): + if platform == 'win32': + return clang_win32_dirs + else return [] \ No newline at end of file diff --git a/src/engine/SCons/Tool/clangxx.py b/src/engine/SCons/Tool/clangxx.py index 63f1b0d..2bf4cf4 100644 --- a/src/engine/SCons/Tool/clangxx.py +++ b/src/engine/SCons/Tool/clangxx.py @@ -46,6 +46,8 @@ import sys import SCons.Tool import SCons.Util import SCons.Tool.cxx +from SCons.Tool.clang import get_clang_install_dirs + compilers = ['clang++'] @@ -68,7 +70,7 @@ def generate(env): env['SHOBJSUFFIX'] = '.pic.o' elif env['PLATFORM'] == 'win32': # Ensure that we have a proper path for clang++ - clangxx = SCons.Tool.find_program_path(env, compilers[0], default_paths=[r'C:\Program Files\LLVM\bin',]) + clangxx = SCons.Tool.find_program_path(env, compilers[0], default_paths=get_clang_install_dirs(env['PLATFORM'])) if clangxx: clangxx_bin_dir = os.path.dirname(clangxx) env.AppendENVPath('PATH', clangxx_bin_dir) -- cgit v0.12 From d4b41bbd10023f8c391b4bbd2928cc435e19eda3 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sun, 25 Mar 2018 12:53:56 -0400 Subject: rename clang command package to clangCommon as it was breaking imports test. --- src/engine/SCons/Tool/clang.py | 2 +- src/engine/SCons/Tool/clang/__init__.py | 16 ---------------- src/engine/SCons/Tool/clangCommon/__init__.py | 17 +++++++++++++++++ src/engine/SCons/Tool/clangxx.py | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) delete mode 100644 src/engine/SCons/Tool/clang/__init__.py create mode 100644 src/engine/SCons/Tool/clangCommon/__init__.py diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index aba5598..c51e753 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -45,7 +45,7 @@ import sys import SCons.Util import SCons.Tool.cc -from SCons.Tool.clang import get_clang_install_dirs +from SCons.Tool.clangCommon import get_clang_install_dirs compilers = ['clang'] diff --git a/src/engine/SCons/Tool/clang/__init__.py b/src/engine/SCons/Tool/clang/__init__.py deleted file mode 100644 index 775ba80..0000000 --- a/src/engine/SCons/Tool/clang/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -Common routines and data for clang tools -""" - -clang_win32_dirs = [ - r'C:\Program Files\LLVM\bin', - r'C:\cygwin64\bin', - r'C:\msys64', - r'C:\cygwin\bin', - r'C:\msys', -] - -def get_clang_install_dirs(platform): - if platform == 'win32': - return clang_win32_dirs - else return [] \ No newline at end of file diff --git a/src/engine/SCons/Tool/clangCommon/__init__.py b/src/engine/SCons/Tool/clangCommon/__init__.py new file mode 100644 index 0000000..37efbf6 --- /dev/null +++ b/src/engine/SCons/Tool/clangCommon/__init__.py @@ -0,0 +1,17 @@ +""" +Common routines and data for clang tools +""" + +clang_win32_dirs = [ + r'C:\Program Files\LLVM\bin', + r'C:\cygwin64\bin', + r'C:\msys64', + r'C:\cygwin\bin', + r'C:\msys', +] + +def get_clang_install_dirs(platform): + if platform == 'win32': + return clang_win32_dirs + else: + return [] \ No newline at end of file diff --git a/src/engine/SCons/Tool/clangxx.py b/src/engine/SCons/Tool/clangxx.py index 2bf4cf4..7194d9e 100644 --- a/src/engine/SCons/Tool/clangxx.py +++ b/src/engine/SCons/Tool/clangxx.py @@ -46,7 +46,7 @@ import sys import SCons.Tool import SCons.Util import SCons.Tool.cxx -from SCons.Tool.clang import get_clang_install_dirs +from SCons.Tool.clangCommon import get_clang_install_dirs compilers = ['clang++'] -- cgit v0.12 From 69a0d4b42ca97f034dd6a00fd72c41a6719e225c Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sun, 25 Mar 2018 13:41:06 -0400 Subject: Fix clang and mingw tests --- src/engine/SCons/Tool/mingw.py | 7 ++++++- test/import.py | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index 4121902..de493f0 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -156,7 +156,12 @@ def generate(env): env['PROGSUFFIX'] = '.exe' def exists(env): - return find(env) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) + if mingw: + mingw_bin_dir = os.path.dirname(mingw) + env.AppendENVPath('PATH', mingw_bin_dir) + + return mingw # Local Variables: # tab-width:4 diff --git a/test/import.py b/test/import.py index b6e5a8d..11fee9c 100644 --- a/test/import.py +++ b/test/import.py @@ -75,6 +75,8 @@ ignore = ('__init__.py', '386asm.py', 'linkloc.py', # Directory of common stuff for MSVC and MSVS 'MSCommon', + # clang common + "clangCommon", # Sun pkgchk and pkginfo common stuff 'sun_pkg.py', # RPM utilities -- cgit v0.12 From 7ad7a9bc0a802096e2a5beadcca8f6a10822ef95 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Sun, 25 Mar 2018 13:51:42 -0400 Subject: added more default mingw paths per comments on pull request --- src/engine/SCons/Tool/mingw.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index de493f0..f2e9442 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -43,6 +43,14 @@ import SCons.Tool import SCons.Util +mingw_paths = [ + r'c:\MinGW\bin', + r'C:\cygwin64\bin', + r'C:\msys64', + r'C:\cygwin\bin', + r'C:\msys', +] + def shlib_generator(target, source, env, for_signature): cmd = SCons.Util.CLVar(['$SHLINK', '$SHLINKFLAGS']) @@ -111,7 +119,7 @@ key_program = 'mingw32-gcc' def generate(env): - mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=mingw_paths) if mingw: mingw_bin_dir = os.path.dirname(mingw) env.AppendENVPath('PATH', mingw_bin_dir) @@ -156,7 +164,7 @@ def generate(env): env['PROGSUFFIX'] = '.exe' def exists(env): - mingw = SCons.Tool.find_program_path(env, key_program, default_paths=[r'c:\MinGW\bin',]) + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=mingw_paths) if mingw: mingw_bin_dir = os.path.dirname(mingw) env.AppendENVPath('PATH', mingw_bin_dir) -- cgit v0.12 From 35ac5267d91db9379129fc33d49d6699350347e5 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Mon, 9 Apr 2018 15:34:24 -0500 Subject: updated yacc tool to add default paths, updated to test to use the tool specifically and know when to skip on windows. --- src/engine/SCons/Tool/yacc.py | 9 +++++++++ test/YACC/YACC.py | 8 ++++---- test/YACC/live-check-output-cleaned.py | 2 +- test/YACC/live.py | 12 +++++++++--- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index 648433b..be65104 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/engine/SCons/Tool/yacc.py @@ -34,6 +34,7 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import os.path +import sys import SCons.Defaults import SCons.Tool @@ -113,6 +114,14 @@ def generate(env): cxx_file.add_action('.yy', YaccAction) cxx_file.add_emitter('.yy', yyEmitter) + if(sys.platform == 'win32'): + bison = SCons.Tool.find_program_path(env, 'bison', default_paths=['C:\\cygwin64\\bin', 'C:\\cygwin\\bin', 'C:\\msys', 'C:\\msys64' ]) + if bison: + bison_bin_dir = os.path.dirname(bison) + env.AppendENVPath('PATH', bison_bin_dir) + else: + SCons.Warnings.Warning('yacc tool requested, but bison binary not found in ENV PATH') + env['YACC'] = env.Detect('bison') or 'yacc' env['YACCFLAGS'] = SCons.Util.CLVar('') env['YACCCOM'] = '$YACC $YACCFLAGS -o $TARGET $SOURCES' diff --git a/test/YACC/YACC.py b/test/YACC/YACC.py index 3fc1f7c..b27c2a7 100644 --- a/test/YACC/YACC.py +++ b/test/YACC/YACC.py @@ -53,10 +53,10 @@ env.CFile(target = 'ddd', source = 'ddd.ym') test.run(arguments = '.', stderr = None) -test.must_match('aaa.c', "aaa.y\nmyyacc.py\n") -test.must_match('bbb.c', "bbb.yacc\nmyyacc.py\n") -test.must_match('ccc.cc', "ccc.yacc\nmyyacc.py\n") -test.must_match('ddd.m', "ddd.yacc\nmyyacc.py\n") +test.must_match('aaa.c', "aaa.y" + os.linesep + "myyacc.py" + os.linesep) +test.must_match('bbb.c', "bbb.yacc" + os.linesep + "myyacc.py" + os.linesep) +test.must_match('ccc.cc', "ccc.yacc" + os.linesep + "myyacc.py" + os.linesep) +test.must_match('ddd.m', "ddd.yacc" + os.linesep + "myyacc.py" + os.linesep) diff --git a/test/YACC/live-check-output-cleaned.py b/test/YACC/live-check-output-cleaned.py index a6240c9..8329b94 100644 --- a/test/YACC/live-check-output-cleaned.py +++ b/test/YACC/live-check-output-cleaned.py @@ -40,7 +40,7 @@ if not yacc: test.skip_test('No yacc or bison found; skipping test.\n') test.write('SConstruct', """ -foo = Environment(YACCFLAGS='-v -d') +foo = Environment(YACCFLAGS='-v -d', tools = ['default', 'yacc']) foo.CFile(source = 'foo.y') """ % locals()) diff --git a/test/YACC/live.py b/test/YACC/live.py index 6dd08f7..35f6c37 100644 --- a/test/YACC/live.py +++ b/test/YACC/live.py @@ -29,6 +29,8 @@ Test YACC and YACCFLAGS with a live yacc compiler. """ import TestSCons +import sys +import os _exe = TestSCons._exe _python_ = TestSCons._python_ @@ -40,12 +42,16 @@ yacc = test.where_is('yacc') or test.where_is('bison') if not yacc: test.skip_test('No yacc or bison found; skipping test.\n') +if sys.platform == 'win32': + if not test.where_is('gcc'): + test.skip_test('No gcc found on windows; skipping test.\n') + test.file_fixture('wrapper.py') test.write('SConstruct', """ -foo = Environment(YACCFLAGS='-d') +foo = Environment(YACCFLAGS='-d', tools = ['default', 'yacc']) yacc = foo.Dictionary('YACC') -bar = Environment(YACC = r'%(_python_)s wrapper.py ' + yacc) +bar = Environment(YACC = r'%(_python_)s wrapper.py ' + yacc, tools = ['default', 'yacc']) foo.Program(target = 'foo', source = 'foo.y') bar.Program(target = 'bar', source = 'bar.y') foo.Program(target = 'hello', source = ['hello.cpp']) @@ -152,7 +158,7 @@ test.run(arguments = 'bar' + _exe) test.up_to_date(arguments = 'bar' + _exe) -test.must_match(test.workpath('wrapper.out'), "wrapper.py\n") +test.must_match(test.workpath('wrapper.out'), "wrapper.py" + os.linesep) test.run(program = test.workpath('bar'), stdin = "b\n", stdout = "bar.y\n") -- cgit v0.12 From de0d6f38404c6880e4b401f7ea6fd629bcb765ea Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 08:03:43 -0500 Subject: removed binary read and write so newlines are crossplatform and updated path for appveyor script --- .appveyor.yml | 2 +- test/YACC/YACC-fixture/myyacc.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index a9d2dfc..a735070 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -2,7 +2,7 @@ image: Visual Studio 2017 shallow_clone: true install: - - "set PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" + - "set PATH=%PYTHON%;%PYTHON%\\Scripts;C:\\cygwin64\\bin;C:\\msys64;%PATH%" - python --version - pip install lxml - pip install pypiwin32 diff --git a/test/YACC/YACC-fixture/myyacc.py b/test/YACC/YACC-fixture/myyacc.py index c2e1abf..756c98f 100644 --- a/test/YACC/YACC-fixture/myyacc.py +++ b/test/YACC/YACC-fixture/myyacc.py @@ -4,10 +4,10 @@ cmd_opts, args = getopt.getopt(sys.argv[1:], 'o:', []) output = None opt_string = '' for opt, arg in cmd_opts: - if opt == '-o': output = open(arg, 'wb') + if opt == '-o': output = open(arg, 'w') else: opt_string = opt_string + ' ' + opt for a in args: - contents = open(a, 'rb').read() - output.write(contents.replace(b'YACC', b'myyacc.py')) + contents = open(a, 'r').read() + output.write(contents.replace('YACC', 'myyacc.py')) output.close() sys.exit(0) -- cgit v0.12 From 1912634e6d65133f8101043ae1e702a7407d60e3 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 11:17:40 -0500 Subject: removed unnecessary parans --- src/engine/SCons/Tool/yacc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index be65104..a43b3b3 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/engine/SCons/Tool/yacc.py @@ -114,7 +114,7 @@ def generate(env): cxx_file.add_action('.yy', YaccAction) cxx_file.add_emitter('.yy', yyEmitter) - if(sys.platform == 'win32'): + if sys.platform == 'win32': bison = SCons.Tool.find_program_path(env, 'bison', default_paths=['C:\\cygwin64\\bin', 'C:\\cygwin\\bin', 'C:\\msys', 'C:\\msys64' ]) if bison: bison_bin_dir = os.path.dirname(bison) -- cgit v0.12 From 3dc6c4e24ec1ed72a386aeb9a791cb67db46a7c2 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 12:40:36 -0500 Subject: moved default paths for cywing and mingw to their own platform modules. --- src/engine/SCons/Platform/cygwin.py | 9 +++++++++ src/engine/SCons/Platform/mingw.py | 39 +++++++++++++++++++++++++++++++++++++ src/engine/SCons/Tool/yacc.py | 4 +++- 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/engine/SCons/Platform/mingw.py diff --git a/src/engine/SCons/Platform/cygwin.py b/src/engine/SCons/Platform/cygwin.py index 8b4669c..f6c5086 100644 --- a/src/engine/SCons/Platform/cygwin.py +++ b/src/engine/SCons/Platform/cygwin.py @@ -32,9 +32,18 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" +import sys + from . import posix from SCons.Platform import TempFileMunge +CYGWIN_DEFAULT_PATHS = [] +if sys.platform == 'win32': + CYGWIN_DEFAULT_PATHS = [ + r'C:\cygwin64\bin', + r'C:\cygwin\bin' + ] + def generate(env): posix.generate(env) diff --git a/src/engine/SCons/Platform/mingw.py b/src/engine/SCons/Platform/mingw.py new file mode 100644 index 0000000..73633d7 --- /dev/null +++ b/src/engine/SCons/Platform/mingw.py @@ -0,0 +1,39 @@ +"""SCons.Platform.mingw + +Platform-specific initialization for the MinGW system. + +""" + +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + +import sys + +MINGW_DEFAULT_PATHS = [] +if sys.platform == 'win32': + MINGW_DEFAULT_PATHS = [ + r'C:\msys64', + r'C:\msys' + ] \ No newline at end of file diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py index a43b3b3..cd9b9a8 100644 --- a/src/engine/SCons/Tool/yacc.py +++ b/src/engine/SCons/Tool/yacc.py @@ -39,6 +39,8 @@ import sys import SCons.Defaults import SCons.Tool import SCons.Util +from SCons.Platform.mingw import MINGW_DEFAULT_PATHS +from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS YaccAction = SCons.Action.Action("$YACCCOM", "$YACCCOMSTR") @@ -115,7 +117,7 @@ def generate(env): cxx_file.add_emitter('.yy', yyEmitter) if sys.platform == 'win32': - bison = SCons.Tool.find_program_path(env, 'bison', default_paths=['C:\\cygwin64\\bin', 'C:\\cygwin\\bin', 'C:\\msys', 'C:\\msys64' ]) + bison = SCons.Tool.find_program_path(env, 'bison', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) if bison: bison_bin_dir = os.path.dirname(bison) env.AppendENVPath('PATH', bison_bin_dir) -- cgit v0.12 From 56471eea9278a5e1bfb92a5214e8c99d2c939a35 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Tue, 10 Apr 2018 16:08:32 -0500 Subject: updated CHANGES.txt --- src/CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index f9cb5c4..58dc6df 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -19,6 +19,8 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE - Fixed handling of side-effects in task master (fixes #3013). From Daniel Moody: + - Add common location for default paths for cygwin and mingw in Platform modules + - Updated YACC tool to work on windows with Cygwin/MinGW setups - Set the pickling protocal back to highest which was causing issues with variant dir tests. This will cause issues if reading sconsigns pickled with the previous lower protocal. -- cgit v0.12 From 85d080e18906fb52d425a84e5828189d8a532ce0 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Thu, 12 Apr 2018 15:06:44 -0500 Subject: updated gettext tools to work on windows cygwin and mingw environments. --- src/engine/SCons/Tool/GettextCommon.py | 2 +- src/engine/SCons/Tool/gettext_tool.py | 12 ++++++++++++ src/engine/SCons/Tool/msgfmt.py | 14 ++++++++++++++ src/engine/SCons/Tool/msginit.py | 14 ++++++++++++++ src/engine/SCons/Tool/msgmerge.py | 15 ++++++++++++++- src/engine/SCons/Tool/xgettext.py | 14 +++++++++++++- 6 files changed, 68 insertions(+), 3 deletions(-) diff --git a/src/engine/SCons/Tool/GettextCommon.py b/src/engine/SCons/Tool/GettextCommon.py index 3b840a6..2d37def 100644 --- a/src/engine/SCons/Tool/GettextCommon.py +++ b/src/engine/SCons/Tool/GettextCommon.py @@ -447,7 +447,7 @@ def _detect_msgfmt(env): """ Detects *msgmfmt(1)* program. """ if 'MSGFMT' in env: return env['MSGFMT'] - msgfmt = env.Detect('msgfmt'); + msgfmt = env.Detect('msgfmt') if msgfmt: return msgfmt raise SCons.Errors.StopError(MsgfmtNotFound, "Could not detect msgfmt") diff --git a/src/engine/SCons/Tool/gettext_tool.py b/src/engine/SCons/Tool/gettext_tool.py index 6031e49..41bd70b 100644 --- a/src/engine/SCons/Tool/gettext_tool.py +++ b/src/engine/SCons/Tool/gettext_tool.py @@ -27,10 +27,22 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" ############################################################################# def generate(env,**kw): + import sys + import os import SCons.Tool + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + from SCons.Tool.GettextCommon \ import _translate, tool_list for t in tool_list(env['PLATFORM'], env): + if sys.platform == 'win32': + tool = SCons.Tool.find_program_path(env, t, default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if tool: + tool_bin_dir = os.path.dirname(tool) + env.AppendENVPath('PATH', tool_bin_dir) + else: + SCons.Warnings.Warning(t + ' tool requested, but binary not found in ENV PATH') env.Tool(t) env.AddMethod(_translate, 'Translate') ############################################################################# diff --git a/src/engine/SCons/Tool/msgfmt.py b/src/engine/SCons/Tool/msgfmt.py index 4fe6afd..3c9dde7 100644 --- a/src/engine/SCons/Tool/msgfmt.py +++ b/src/engine/SCons/Tool/msgfmt.py @@ -75,8 +75,22 @@ def _create_mo_file_builder(env, **kw): ############################################################################# def generate(env,**kw): """ Generate `msgfmt` tool """ + import sys + import os import SCons.Util + import SCons.Tool from SCons.Tool.GettextCommon import _detect_msgfmt + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + msgfmt = SCons.Tool.find_program_path(env, 'msgfmt', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if msgfmt: + msgfmt_bin_dir = os.path.dirname(msgfmt) + env.AppendENVPath('PATH', msgfmt_bin_dir) + else: + SCons.Warnings.Warning('msgfmt tool requested, but binary not found in ENV PATH') + try: env['MSGFMT'] = _detect_msgfmt(env) except: diff --git a/src/engine/SCons/Tool/msginit.py b/src/engine/SCons/Tool/msginit.py index 39f460d..9e056e7 100644 --- a/src/engine/SCons/Tool/msginit.py +++ b/src/engine/SCons/Tool/msginit.py @@ -77,8 +77,22 @@ def _POInitBuilderWrapper(env, target=None, source=_null, **kw): ############################################################################# def generate(env,**kw): """ Generate the `msginit` tool """ + import sys + import os import SCons.Util + import SCons.Tool from SCons.Tool.GettextCommon import _detect_msginit + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + msginit = SCons.Tool.find_program_path(env, 'msginit', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if msginit: + msginit_bin_dir = os.path.dirname(msginit) + env.AppendENVPath('PATH', msginit_bin_dir) + else: + SCons.Warnings.Warning('msginit tool requested, but binary not found in ENV PATH') + try: env['MSGINIT'] = _detect_msginit(env) except: diff --git a/src/engine/SCons/Tool/msgmerge.py b/src/engine/SCons/Tool/msgmerge.py index 11d7b48..76661d2 100644 --- a/src/engine/SCons/Tool/msgmerge.py +++ b/src/engine/SCons/Tool/msgmerge.py @@ -68,8 +68,21 @@ def _POUpdateBuilderWrapper(env, target=None, source=_null, **kw): ############################################################################# def generate(env,**kw): - """ Generate the `xgettext` tool """ + """ Generate the `msgmerge` tool """ + import sys + import os + import SCons.Tool from SCons.Tool.GettextCommon import _detect_msgmerge + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + msgmerge = SCons.Tool.find_program_path(env, 'msgmerge', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if msgmerge: + msgmerge_bin_dir = os.path.dirname(msgmerge) + env.AppendENVPath('PATH', msgmerge_bin_dir) + else: + SCons.Warnings.Warning('msgmerge tool requested, but binary not found in ENV PATH') try: env['MSGMERGE'] = _detect_msgmerge(env) except: diff --git a/src/engine/SCons/Tool/xgettext.py b/src/engine/SCons/Tool/xgettext.py index 2c0ce40..e4a17ca 100644 --- a/src/engine/SCons/Tool/xgettext.py +++ b/src/engine/SCons/Tool/xgettext.py @@ -288,9 +288,21 @@ def _POTUpdateBuilder(env, **kw): ############################################################################# def generate(env, **kw): """ Generate `xgettext` tool """ + import sys + import os import SCons.Util + import SCons.Tool from SCons.Tool.GettextCommon import RPaths, _detect_xgettext - + from SCons.Platform.mingw import MINGW_DEFAULT_PATHS + from SCons.Platform.cygwin import CYGWIN_DEFAULT_PATHS + + if sys.platform == 'win32': + xgettext = SCons.Tool.find_program_path(env, 'xgettext', default_paths=MINGW_DEFAULT_PATHS + CYGWIN_DEFAULT_PATHS ) + if xgettext: + xgettext_bin_dir = os.path.dirname(xgettext) + env.AppendENVPath('PATH', xgettext_bin_dir) + else: + SCons.Warnings.Warning('xgettext tool requested, but binary not found in ENV PATH') try: env['XGETTEXT'] = _detect_xgettext(env) except: -- cgit v0.12 From f8422a59151aa744c025675a7c4bf3d5e3b8d7c0 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Fri, 13 Apr 2018 11:08:56 -0500 Subject: updated CHANGES.txt --- src/CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 58dc6df..43c1979 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -19,6 +19,7 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE - Fixed handling of side-effects in task master (fixes #3013). From Daniel Moody: + - Updated gettext tools to setup default paths for windows with Cygwin/MinGW setups - Add common location for default paths for cygwin and mingw in Platform modules - Updated YACC tool to work on windows with Cygwin/MinGW setups - Set the pickling protocal back to highest which was causing issues -- cgit v0.12 From 8d41ab0567e38e5d03138056560861343bd9a2a7 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Fri, 25 May 2018 11:26:02 -0700 Subject: Handful of changes to get clang tests passing on windows. Use glob to find other possible default mingw install paths. mingw is needed in many cases on windows to compile/archive. --- src/engine/SCons/Tool/clang.py | 3 ++- src/engine/SCons/Tool/mingw.py | 21 ++++++++++++++++++++- test/Clang/clang_default_environment.py | 5 ++--- test/Clang/clang_shared_library.py | 12 +++++++----- test/Clang/clang_specific_environment.py | 1 + test/Clang/clang_static_library.py | 3 ++- test/Clang/clangxx_default_environment.py | 5 ++--- test/Clang/clangxx_shared_library.py | 11 +++++++---- test/Clang/clangxx_specific_environment.py | 3 ++- test/Clang/clangxx_static_library.py | 3 ++- 10 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py index c51e753..cbb48cb 100644 --- a/src/engine/SCons/Tool/clang.py +++ b/src/engine/SCons/Tool/clang.py @@ -56,7 +56,8 @@ def generate(env): if env['PLATFORM'] == 'win32': # Ensure that we have a proper path for clang - clang = SCons.Tool.find_program_path(env, compilers[0], default_paths=get_clang_install_dirs(env['PLATFORM'])) + clang = SCons.Tool.find_program_path(env, compilers[0], + default_paths=get_clang_install_dirs(env['PLATFORM'])) if clang: clang_bin_dir = os.path.dirname(clang) env.AppendENVPath('PATH', clang_bin_dir) diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py index f2e9442..738460d 100644 --- a/src/engine/SCons/Tool/mingw.py +++ b/src/engine/SCons/Tool/mingw.py @@ -35,6 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import os import os.path +import glob import SCons.Action import SCons.Builder @@ -115,10 +116,28 @@ res_builder = SCons.Builder.Builder(action=res_action, suffix='.o', SCons.Tool.SourceFileScanner.add_scanner('.rc', SCons.Defaults.CScan) # This is what we search for to find mingw: -key_program = 'mingw32-gcc' +# key_program = 'mingw32-gcc' +key_program = 'mingw32-make' + + + +def find_version_specific_mingw_paths(): + """ + One example of default mingw install paths is: + C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev2\mingw64\bin + + Use glob'ing to find such and add to mingw_paths + """ + new_paths = glob.glob(r"C:\mingw-w64\*\mingw64\bin") + + return new_paths def generate(env): + global mingw_paths + # Check for reasoanble mingw default paths + mingw_paths +=find_version_specific_mingw_paths() + mingw = SCons.Tool.find_program_path(env, key_program, default_paths=mingw_paths) if mingw: mingw_bin_dir = os.path.dirname(mingw) diff --git a/test/Clang/clang_default_environment.py b/test/Clang/clang_default_environment.py index 4ac1c68..5ebd839 100644 --- a/test/Clang/clang_default_environment.py +++ b/test/Clang/clang_default_environment.py @@ -35,9 +35,8 @@ if not test.where_is('clang'): ## This will likely NOT use clang test.write('SConstruct', """ -env = Environment() -if env['CC'] != 'clang': - env['CC'] = 'clang' +DefaultEnvironment(tools=[]) +env = Environment(tools=['clang','link']) env.Program('foo.c') """) diff --git a/test/Clang/clang_shared_library.py b/test/Clang/clang_shared_library.py index 5e4d36f..9af3770 100644 --- a/test/Clang/clang_shared_library.py +++ b/test/Clang/clang_shared_library.py @@ -33,20 +33,22 @@ test = TestSCons.TestSCons() if not test.where_is('clang'): test.skip_test("Could not find 'clang', skipping test.\n") -platform = Base()['PLATFORM'] +base = Base() +platform = base['PLATFORM'] if platform == 'posix': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.so' elif platform == 'darwin': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.dylib' elif platform == 'win32': - filename = 'foo.obj' + filename_options = ['foo.obj','foo.os'] libraryname = 'foo.dll' else: test.fail_test() test.write('SConstruct', """\ +DefaultEnvironment(tools=[]) env = Environment(tools=['clang', 'link']) env.SharedLibrary('foo', 'foo.c') """) @@ -59,7 +61,7 @@ int bar() { test.run() -test.must_exist(test.workpath(filename)) +test.must_exist_one_of([test.workpath(f) for f in filename_options]) test.must_exist(test.workpath(libraryname)) test.pass_test() diff --git a/test/Clang/clang_specific_environment.py b/test/Clang/clang_specific_environment.py index 7266a9f..81991f0 100644 --- a/test/Clang/clang_specific_environment.py +++ b/test/Clang/clang_specific_environment.py @@ -33,6 +33,7 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang', skipping test.\n") test.write('SConstruct', """\ +DefaultEnvironment(tools=[]) env = Environment(tools=['clang', 'link']) env.Program('foo.c') """) diff --git a/test/Clang/clang_static_library.py b/test/Clang/clang_static_library.py index 39e9931..7dedc6f 100644 --- a/test/Clang/clang_static_library.py +++ b/test/Clang/clang_static_library.py @@ -33,7 +33,8 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang', skipping test.\n") test.write('SConstruct', """\ -env = Environment(tools=['clang', 'ar']) +DefaultEnvironment(tools=[]) +env = Environment(tools=['mingw','clang', 'ar']) env.StaticLibrary('foo', 'foo.c') """) diff --git a/test/Clang/clangxx_default_environment.py b/test/Clang/clangxx_default_environment.py index beef1e5..5e46404 100644 --- a/test/Clang/clangxx_default_environment.py +++ b/test/Clang/clangxx_default_environment.py @@ -35,9 +35,8 @@ if not test.where_is('clang'): ## This will likely NOT use clang++. test.write('SConstruct', """\ -env = Environment() -if env['CXX'] != 'clang++': - env['CXX'] = 'clang++' +DefaultEnvironment(tools=[]) +env = Environment(tools=['clangxx','link']) env.Program('foo.cpp') """) diff --git a/test/Clang/clangxx_shared_library.py b/test/Clang/clangxx_shared_library.py index d6337ba..6240299 100644 --- a/test/Clang/clangxx_shared_library.py +++ b/test/Clang/clangxx_shared_library.py @@ -36,18 +36,21 @@ if not test.where_is('clang'): platform = Base()['PLATFORM'] if platform == 'posix': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.so' elif platform == 'darwin': - filename = 'foo.os' + filename_options = ['foo.os'] libraryname = 'libfoo.dylib' elif platform == 'win32': - filename = 'foo.obj' + filename_options = ['foo.obj','foo.os'] libraryname = 'foo.dll' else: test.fail_test() + + test.write('SConstruct', """\ +DefaultEnvironment(tools=[]) env = Environment(tools=['clang++', 'link']) env.SharedLibrary('foo', 'foo.cpp') """) @@ -60,7 +63,7 @@ int bar() { test.run() -test.must_exist(test.workpath(filename)) +test.must_exist_one_of([test.workpath(f) for f in filename_options]) test.must_exist(test.workpath(libraryname)) test.pass_test() diff --git a/test/Clang/clangxx_specific_environment.py b/test/Clang/clangxx_specific_environment.py index 773fa94..35540bb 100644 --- a/test/Clang/clangxx_specific_environment.py +++ b/test/Clang/clangxx_specific_environment.py @@ -33,7 +33,8 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang++', skipping test.\n") test.write('SConstruct', """\ -env = Environment(tools=['clang++', 'link']) +DefaultEnvironment(tools=[]) +env = Environment(tools=['mingw','clang++', 'link']) env.Program('foo.cpp') """) diff --git a/test/Clang/clangxx_static_library.py b/test/Clang/clangxx_static_library.py index 77ea58e..c768deb 100644 --- a/test/Clang/clangxx_static_library.py +++ b/test/Clang/clangxx_static_library.py @@ -33,7 +33,8 @@ if not test.where_is('clang'): test.skip_test("Could not find 'clang++', skipping test.\n") test.write('SConstruct', """\ -env = Environment(tools=['clang++', 'ar']) +DefaultEnvironment(tools=[]) +env = Environment(tools=['mingw','clang++', 'ar']) env.StaticLibrary('foo', 'foo.cpp') """) -- cgit v0.12 From b86c5845efccdec97dd267efe6f61c23db92c5a9 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Fri, 25 May 2018 12:45:47 -0700 Subject: rebase to upstream/master --- src/CHANGES.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 43c1979..75133e8 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -44,6 +44,13 @@ RELEASE 3.1.0.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE - Re-Enable parallel SCons (-j) when running via Pypy - Move SCons test framework files to testing/framework and remove all references to QMtest. QMTest has not been used by SCons for some time now. + - Updated logic for mingw and clang on win32 to search default tool install paths if not + found in normal SCons PATH. If the user specifies PATH or tool specific paths they + will be used and the default paths below will be ignored. + - Default path for clang/clangxx : C:\Program Files\LLVM\bin + - Default path for mingw : C:\MinGW\bin and/or C:\mingw-w64\*\mingw64\bin + - Key program to locate mingw : mingw32-make (as the gcc with mingw prefix has no fixed name) + From Andrew Featherstone - Removed unused --warn options from the man page and source code. -- cgit v0.12 From cf74ad1fc7b745f8dfcf5886aa5e0326d104caa0 Mon Sep 17 00:00:00 2001 From: William Deegan Date: Fri, 25 May 2018 12:48:45 -0700 Subject: remove mingw tool as it's breaking non win tests --- test/Clang/clangxx_specific_environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Clang/clangxx_specific_environment.py b/test/Clang/clangxx_specific_environment.py index 35540bb..39eaab1 100644 --- a/test/Clang/clangxx_specific_environment.py +++ b/test/Clang/clangxx_specific_environment.py @@ -34,7 +34,7 @@ if not test.where_is('clang'): test.write('SConstruct', """\ DefaultEnvironment(tools=[]) -env = Environment(tools=['mingw','clang++', 'link']) +env = Environment(tools=['clang++', 'link']) env.Program('foo.cpp') """) -- cgit v0.12 From ea6fc1fcb2de8a99a7f8a68d51f5969cdc729d2c Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Fri, 25 May 2018 16:30:38 -0500 Subject: pr-3052: fixed some missing quotes for some tests that use the new default java tests for windows --- test/Repository/Java.py | 2 +- test/Repository/JavaH.py | 8 ++++---- test/Repository/RMIC.py | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/Repository/Java.py b/test/Repository/Java.py index fce85cd..290d742 100644 --- a/test/Repository/Java.py +++ b/test/Repository/Java.py @@ -59,7 +59,7 @@ opts = '-Y ' + test.workpath('rep1') # test.write(['rep1', 'SConstruct'], """ env = Environment(tools = ['javac'], - JAVAC = r'%s') + JAVAC = r'"%s"') env.Java(target = 'classes', source = 'src') """ % javac) diff --git a/test/Repository/JavaH.py b/test/Repository/JavaH.py index ee196cf..1cb5078 100644 --- a/test/Repository/JavaH.py +++ b/test/Repository/JavaH.py @@ -63,8 +63,8 @@ opts = '-Y ' + test.workpath('rep1') # test.write(['rep1', 'SConstruct'], """ env = Environment(tools = ['javac', 'javah'], - JAVAC = r'%s', - JAVAH = r'%s') + JAVAC = r'"%s"', + JAVAH = r'"%s"') classes = env.Java(target = 'classes', source = 'src') env.JavaH(target = 'outdir', source = classes) """ % (javac, javah)) @@ -207,8 +207,8 @@ test.up_to_date(chdir = 'work2', options = opts, arguments = ".") # test.write(['work3', 'SConstruct'], """ env = Environment(tools = ['javac', 'javah'], - JAVAC = r'%s', - JAVAH = r'%s') + JAVAC = r'"%s"', + JAVAH = r'"%s"') classes = env.Java(target = 'classes', source = 'src') hfiles = env.JavaH(target = 'outdir', source = classes) Local(hfiles) diff --git a/test/Repository/RMIC.py b/test/Repository/RMIC.py index 886ccdb..392e6ef 100644 --- a/test/Repository/RMIC.py +++ b/test/Repository/RMIC.py @@ -82,8 +82,8 @@ opts = '-Y ' + test.workpath('rep1') # test.write(['rep1', 'SConstruct'], """ env = Environment(tools = ['javac', 'rmic'], - JAVAC = r'%s', - RMIC = r'%s') + JAVAC = r'"%s"', + RMIC = r'"%s"') classes = env.Java(target = 'classes', source = 'src') # Brute-force removal of the "Hello" class. classes = [c for c in classes if str(c).find('Hello') == -1] @@ -350,8 +350,8 @@ test.up_to_date(chdir = 'work2', options = opts, arguments = ".") # test.write(['work3', 'SConstruct'], """ env = Environment(tools = ['javac', 'rmic'], - JAVAC = r'%s', - RMIC = r'%s') + JAVAC = r'"%s"', + RMIC = r'"%s"') classes = env.Java(target = 'classes', source = 'src') # Brute-force removal of the "Hello" class. classes = [c for c in classes if str(c).find('Hello') == -1] -- cgit v0.12 From 510f8bdfea8338856216e99329692d42fbdfc469 Mon Sep 17 00:00:00 2001 From: Daniel Moody Date: Fri, 25 May 2018 16:43:06 -0500 Subject: pr-3052: updated the expected result to work for windows --- test/Repository/RMIC.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/Repository/RMIC.py b/test/Repository/RMIC.py index 392e6ef..e08c716 100644 --- a/test/Repository/RMIC.py +++ b/test/Repository/RMIC.py @@ -29,6 +29,7 @@ Test building Java applications when using Repositories. """ import TestSCons +import os python = TestSCons.python @@ -302,7 +303,7 @@ public class Foo2 extends UnicastRemoteObject implements Hello { test.run(chdir = 'work1', options = opts, arguments = ".") expect = [ - ' src/Foo1.java src/Foo2.java', + ' src' + os.sep + 'Foo1.java src' + os.sep + 'Foo2.java', ' com.sub.foo.Foo1 com.sub.foo.Foo2', ] -- cgit v0.12