summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2018-05-25 18:26:02 (GMT)
committerWilliam Deegan <bill@baddogconsulting.com>2018-05-25 18:26:02 (GMT)
commit100f49aa06ff3e8ed09fb77edc787f35d2de10fc (patch)
tree9d25388167c92bd7abbbb0c28505557eb87ce911
parent4714dd99eed58702e78ce14db958addd4101f96f (diff)
downloadSCons-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.py3
-rw-r--r--src/engine/SCons/Tool/mingw.py21
-rw-r--r--test/Clang/clang_default_environment.py5
-rw-r--r--test/Clang/clang_shared_library.py12
-rw-r--r--test/Clang/clang_specific_environment.py1
-rw-r--r--test/Clang/clang_static_library.py3
-rw-r--r--test/Clang/clangxx_default_environment.py5
-rw-r--r--test/Clang/clangxx_shared_library.py11
-rw-r--r--test/Clang/clangxx_specific_environment.py3
-rw-r--r--test/Clang/clangxx_static_library.py3
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')
""")