diff options
Diffstat (limited to 'methods.py')
-rw-r--r-- | methods.py | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/methods.py b/methods.py index af20619416..86ab7cd9af 100644 --- a/methods.py +++ b/methods.py @@ -8,14 +8,28 @@ import subprocess from compat import iteritems, isbasestring, decode_utf8 -def add_source_files(self, sources, filetype, lib_env=None, shared=False): - - if isbasestring(filetype): - dir_path = self.Dir('.').abspath - filetype = sorted(glob.glob(dir_path + "/" + filetype)) - - for path in filetype: - sources.append(self.Object(path)) +def add_source_files(self, sources, files, warn_duplicates=True): + # Convert string to list of absolute paths (including expanding wildcard) + if isbasestring(files): + # Keep SCons project-absolute path as they are (no wildcard support) + if files.startswith('#'): + if '*' in files: + print("ERROR: Wildcards can't be expanded in SCons project-absolute path: '{}'".format(files)) + return + files = [files] + else: + dir_path = self.Dir('.').abspath + files = sorted(glob.glob(dir_path + "/" + files)) + + # Add each path as compiled Object following environment (self) configuration + for path in files: + obj = self.Object(path) + if obj in sources: + if warn_duplicates: + print("WARNING: Object \"{}\" already included in environment sources.".format(obj)) + else: + continue + sources.append(obj) def disable_warnings(self): @@ -26,7 +40,7 @@ def disable_warnings(self): warn_flags = ['/Wall', '/W4', '/W3', '/W2', '/W1', '/WX'] self.Append(CCFLAGS=['/w']) self.Append(CFLAGS=['/w']) - self.Append(CPPFLAGS=['/w']) + self.Append(CXXFLAGS=['/w']) self['CCFLAGS'] = [x for x in self['CCFLAGS'] if not x in warn_flags] self['CFLAGS'] = [x for x in self['CFLAGS'] if not x in warn_flags] self['CXXFLAGS'] = [x for x in self['CXXFLAGS'] if not x in warn_flags] @@ -181,7 +195,7 @@ def win32_spawn(sh, escape, cmd, args, env): env[e] = str(env[e]) proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo, shell=False, env=env) - data, err = proc.communicate() + _, err = proc.communicate() rv = proc.wait() if rv: print("=====") @@ -242,7 +256,7 @@ def use_windows_spawn_fix(self, platform=None): startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo, shell=False, env=env) - data, err = proc.communicate() + _, err = proc.communicate() rv = proc.wait() if rv: print("=====") @@ -487,7 +501,7 @@ def find_visual_c_batch_file(env): from SCons.Tool.MSCommon.vc import get_default_version, get_host_target, find_batch_file version = get_default_version(env) - (host_platform, target_platform,req_target_platform) = get_host_target(env) + (host_platform, target_platform, _) = get_host_target(env) return find_batch_file(env, version, host_platform, target_platform)[0] def generate_cpp_hint_file(filename): @@ -598,12 +612,16 @@ def detect_darwin_sdk_path(platform, env): sdk_path = decode_utf8(subprocess.check_output(['xcrun', '--sdk', sdk_name, '--show-sdk-path']).strip()) if sdk_path: env[var_name] = sdk_path - except (subprocess.CalledProcessError, OSError) as e: + except (subprocess.CalledProcessError, OSError): print("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name)) raise def get_compiler_version(env): - version = decode_utf8(subprocess.check_output([env['CXX'], '--version']).strip()) + # Not using this method on clang because it returns 4.2.1 # https://reviews.llvm.org/D56803 + if using_gcc(env): + version = decode_utf8(subprocess.check_output([env['CXX'], '-dumpversion']).strip()) + else: + version = decode_utf8(subprocess.check_output([env['CXX'], '--version']).strip()) match = re.search('[0-9][0-9.]*', version) if match is not None: return match.group().split('.') |