diff options
author | William Deegan <bill@baddogconsulting.com> | 2018-05-25 18:26:02 (GMT) |
---|---|---|
committer | William Deegan <bill@baddogconsulting.com> | 2018-05-25 18:26:02 (GMT) |
commit | 100f49aa06ff3e8ed09fb77edc787f35d2de10fc (patch) | |
tree | 9d25388167c92bd7abbbb0c28505557eb87ce911 | |
parent | 4714dd99eed58702e78ce14db958addd4101f96f (diff) | |
download | SCons-100f49aa06ff3e8ed09fb77edc787f35d2de10fc.zip SCons-100f49aa06ff3e8ed09fb77edc787f35d2de10fc.tar.gz SCons-100f49aa06ff3e8ed09fb77edc787f35d2de10fc.tar.bz2 |
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.
-rw-r--r-- | src/engine/SCons/Tool/clang.py | 3 | ||||
-rw-r--r-- | src/engine/SCons/Tool/mingw.py | 21 | ||||
-rw-r--r-- | test/Clang/clang_default_environment.py | 5 | ||||
-rw-r--r-- | test/Clang/clang_shared_library.py | 12 | ||||
-rw-r--r-- | test/Clang/clang_specific_environment.py | 1 | ||||
-rw-r--r-- | test/Clang/clang_static_library.py | 3 | ||||
-rw-r--r-- | test/Clang/clangxx_default_environment.py | 5 | ||||
-rw-r--r-- | test/Clang/clangxx_shared_library.py | 11 | ||||
-rw-r--r-- | test/Clang/clangxx_specific_environment.py | 3 | ||||
-rw-r--r-- | 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') """) |