diff options
Diffstat (limited to 'methods.py')
| -rw-r--r-- | methods.py | 325 | 
1 files changed, 195 insertions, 130 deletions
diff --git a/methods.py b/methods.py index dc82c97361..805ae256c3 100644 --- a/methods.py +++ b/methods.py @@ -8,13 +8,13 @@ def add_source_files(self, sources, files, warn_duplicates=True):      # Convert string to list of absolute paths (including expanding wildcard)      if isinstance(files, (str, bytes)):          # Keep SCons project-absolute path as they are (no wildcard support) -        if files.startswith('#'): -            if '*' in files: +        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 +            dir_path = self.Dir(".").abspath              files = sorted(glob.glob(dir_path + "/" + files))      # Add each path as compiled Object following environment (self) configuration @@ -22,7 +22,7 @@ def add_source_files(self, sources, files, warn_duplicates=True):          obj = self.Object(path)          if obj in sources:              if warn_duplicates: -                print("WARNING: Object \"{}\" already included in environment sources.".format(obj)) +                print('WARNING: Object "{}" already included in environment sources.'.format(obj))              else:                  continue          sources.append(obj) @@ -33,20 +33,20 @@ def disable_warnings(self):      if self.msvc:          # We have to remove existing warning level defines before appending /w,          # otherwise we get: "warning D9025 : overriding '/W3' with '/w'" -        warn_flags = ['/Wall', '/W4', '/W3', '/W2', '/W1', '/WX'] -        self.Append(CCFLAGS=['/w']) -        self.Append(CFLAGS=['/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] +        warn_flags = ["/Wall", "/W4", "/W3", "/W2", "/W1", "/WX"] +        self.Append(CCFLAGS=["/w"]) +        self.Append(CFLAGS=["/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]      else: -        self.Append(CCFLAGS=['-w']) -        self.Append(CFLAGS=['-w']) -        self.Append(CXXFLAGS=['-w']) +        self.Append(CCFLAGS=["-w"]) +        self.Append(CFLAGS=["-w"]) +        self.Append(CXXFLAGS=["-w"]) -def add_module_version_string(self,s): +def add_module_version_string(self, s):      self.module_version_string += "." + s @@ -64,16 +64,16 @@ def update_version(module_version_string=""):      f.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")      f.write("#ifndef VERSION_GENERATED_GEN_H\n")      f.write("#define VERSION_GENERATED_GEN_H\n") -    f.write("#define VERSION_SHORT_NAME \"" + str(version.short_name) + "\"\n") -    f.write("#define VERSION_NAME \"" + str(version.name) + "\"\n") +    f.write('#define VERSION_SHORT_NAME "' + str(version.short_name) + '"\n') +    f.write('#define VERSION_NAME "' + str(version.name) + '"\n')      f.write("#define VERSION_MAJOR " + str(version.major) + "\n")      f.write("#define VERSION_MINOR " + str(version.minor) + "\n")      f.write("#define VERSION_PATCH " + str(version.patch) + "\n") -    f.write("#define VERSION_STATUS \"" + str(version.status) + "\"\n") -    f.write("#define VERSION_BUILD \"" + str(build_name) + "\"\n") -    f.write("#define VERSION_MODULE_CONFIG \"" + str(version.module_config) + module_version_string + "\"\n") +    f.write('#define VERSION_STATUS "' + str(version.status) + '"\n') +    f.write('#define VERSION_BUILD "' + str(build_name) + '"\n') +    f.write('#define VERSION_MODULE_CONFIG "' + str(version.module_config) + module_version_string + '"\n')      f.write("#define VERSION_YEAR " + str(version.year) + "\n") -    f.write("#define VERSION_WEBSITE \"" + str(version.website) + "\"\n") +    f.write('#define VERSION_WEBSITE "' + str(version.website) + '"\n')      f.write("#endif // VERSION_GENERATED_GEN_H\n")      f.close() @@ -99,7 +99,7 @@ def update_version(module_version_string=""):          else:              githash = head -    fhash.write("#define VERSION_HASH \"" + githash + "\"\n") +    fhash.write('#define VERSION_HASH "' + githash + '"\n')      fhash.write("#endif // VERSION_HASH_GEN_H\n")      fhash.close() @@ -158,17 +158,17 @@ def detect_modules():          try:              with open("modules/" + x + "/register_types.h"):                  includes_cpp += '#include "modules/' + x + '/register_types.h"\n' -                register_cpp += '#ifdef MODULE_' + x.upper() + '_ENABLED\n' -                register_cpp += '\tregister_' + x + '_types();\n' -                register_cpp += '#endif\n' -                preregister_cpp += '#ifdef MODULE_' + x.upper() + '_ENABLED\n' -                preregister_cpp += '#ifdef MODULE_' + x.upper() + '_HAS_PREREGISTER\n' -                preregister_cpp += '\tpreregister_' + x + '_types();\n' -                preregister_cpp += '#endif\n' -                preregister_cpp += '#endif\n' -                unregister_cpp += '#ifdef MODULE_' + x.upper() + '_ENABLED\n' -                unregister_cpp += '\tunregister_' + x + '_types();\n' -                unregister_cpp += '#endif\n' +                register_cpp += "#ifdef MODULE_" + x.upper() + "_ENABLED\n" +                register_cpp += "\tregister_" + x + "_types();\n" +                register_cpp += "#endif\n" +                preregister_cpp += "#ifdef MODULE_" + x.upper() + "_ENABLED\n" +                preregister_cpp += "#ifdef MODULE_" + x.upper() + "_HAS_PREREGISTER\n" +                preregister_cpp += "\tpreregister_" + x + "_types();\n" +                preregister_cpp += "#endif\n" +                preregister_cpp += "#endif\n" +                unregister_cpp += "#ifdef MODULE_" + x.upper() + "_ENABLED\n" +                unregister_cpp += "\tunregister_" + x + "_types();\n" +                unregister_cpp += "#endif\n"          except IOError:              pass @@ -191,7 +191,12 @@ void register_module_types() {  void unregister_module_types() {  %s  } -""" % (includes_cpp, preregister_cpp, register_cpp, unregister_cpp) +""" % ( +        includes_cpp, +        preregister_cpp, +        register_cpp, +        unregister_cpp, +    )      # NOTE: It is safe to generate this file here, since this is still executed serially      with open("modules/register_module_types.gen.cpp", "w") as f: @@ -206,7 +211,7 @@ def disable_module(self):  def use_windows_spawn_fix(self, platform=None): -    if (os.name != "nt"): +    if os.name != "nt":          return  # not needed, only for windows      # On Windows, due to the limited command line length, when creating a static library @@ -217,14 +222,21 @@ def use_windows_spawn_fix(self, platform=None):      # got built correctly regardless the invocation strategy.      # Furthermore, since SCons will rebuild the library from scratch when an object file      # changes, no multiple versions of the same object file will be present. -    self.Replace(ARFLAGS='q') +    self.Replace(ARFLAGS="q")      def mySubProcess(cmdline, env):          startupinfo = subprocess.STARTUPINFO()          startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW -        proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE, -                                stderr=subprocess.PIPE, startupinfo=startupinfo, shell=False, env=env) +        proc = subprocess.Popen( +            cmdline, +            stdin=subprocess.PIPE, +            stdout=subprocess.PIPE, +            stderr=subprocess.PIPE, +            startupinfo=startupinfo, +            shell=False, +            env=env, +        )          _, err = proc.communicate()          rv = proc.wait()          if rv: @@ -235,7 +247,7 @@ def use_windows_spawn_fix(self, platform=None):      def mySpawn(sh, escape, cmd, args, env): -        newargs = ' '.join(args[1:]) +        newargs = " ".join(args[1:])          cmdline = cmd + " " + newargs          rv = 0 @@ -251,15 +263,15 @@ def use_windows_spawn_fix(self, platform=None):          return rv -    self['SPAWN'] = mySpawn +    self["SPAWN"] = mySpawn  def save_active_platforms(apnames, ap):      for x in ap: -        names = ['logo'] +        names = ["logo"]          if os.path.isfile(x + "/run_icon.png"): -            names.append('run_icon') +            names.append("run_icon")          for name in names:              pngf = open(x + "/" + name + ".png", "rb") @@ -269,7 +281,7 @@ def save_active_platforms(apnames, ap):              while len(b) == 1:                  str += hex(ord(b))                  b = pngf.read(1) -                if (len(b) == 1): +                if len(b) == 1:                      str += ","              str += "};\n" @@ -289,30 +301,46 @@ def no_verbose(sys, env):      # Colors are disabled in non-TTY environments such as pipes. This means      # that if output is redirected to a file, it will not contain color codes      if sys.stdout.isatty(): -        colors['cyan'] = '\033[96m' -        colors['purple'] = '\033[95m' -        colors['blue'] = '\033[94m' -        colors['green'] = '\033[92m' -        colors['yellow'] = '\033[93m' -        colors['red'] = '\033[91m' -        colors['end'] = '\033[0m' +        colors["cyan"] = "\033[96m" +        colors["purple"] = "\033[95m" +        colors["blue"] = "\033[94m" +        colors["green"] = "\033[92m" +        colors["yellow"] = "\033[93m" +        colors["red"] = "\033[91m" +        colors["end"] = "\033[0m"      else: -        colors['cyan'] = '' -        colors['purple'] = '' -        colors['blue'] = '' -        colors['green'] = '' -        colors['yellow'] = '' -        colors['red'] = '' -        colors['end'] = '' - -    compile_source_message = '%sCompiling %s==> %s$SOURCE%s' % (colors['blue'], colors['purple'], colors['yellow'], colors['end']) -    java_compile_source_message = '%sCompiling %s==> %s$SOURCE%s' % (colors['blue'], colors['purple'], colors['yellow'], colors['end']) -    compile_shared_source_message = '%sCompiling shared %s==> %s$SOURCE%s' % (colors['blue'], colors['purple'], colors['yellow'], colors['end']) -    link_program_message = '%sLinking Program        %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) -    link_library_message = '%sLinking Static Library %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) -    ranlib_library_message = '%sRanlib Library         %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) -    link_shared_library_message = '%sLinking Shared Library %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) -    java_library_message = '%sCreating Java Archive  %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) +        colors["cyan"] = "" +        colors["purple"] = "" +        colors["blue"] = "" +        colors["green"] = "" +        colors["yellow"] = "" +        colors["red"] = "" +        colors["end"] = "" + +    compile_source_message = "{}Compiling {}==> {}$SOURCE{}".format( +        colors["blue"], colors["purple"], colors["yellow"], colors["end"] +    ) +    java_compile_source_message = "{}Compiling {}==> {}$SOURCE{}".format( +        colors["blue"], colors["purple"], colors["yellow"], colors["end"] +    ) +    compile_shared_source_message = "{}Compiling shared {}==> {}$SOURCE{}".format( +        colors["blue"], colors["purple"], colors["yellow"], colors["end"] +    ) +    link_program_message = "{}Linking Program        {}==> {}$TARGET{}".format( +        colors["red"], colors["purple"], colors["yellow"], colors["end"] +    ) +    link_library_message = "{}Linking Static Library {}==> {}$TARGET{}".format( +        colors["red"], colors["purple"], colors["yellow"], colors["end"] +    ) +    ranlib_library_message = "{}Ranlib Library         {}==> {}$TARGET{}".format( +        colors["red"], colors["purple"], colors["yellow"], colors["end"] +    ) +    link_shared_library_message = "{}Linking Shared Library {}==> {}$TARGET{}".format( +        colors["red"], colors["purple"], colors["yellow"], colors["end"] +    ) +    java_library_message = "{}Creating Java Archive  {}==> {}$TARGET{}".format( +        colors["red"], colors["purple"], colors["yellow"], colors["end"] +    )      env.Append(CXXCOMSTR=[compile_source_message])      env.Append(CCCOMSTR=[compile_source_message]) @@ -353,70 +381,79 @@ def detect_visual_c_compiler_version(tools_env):      vc_chosen_compiler_str = ""      # Start with Pre VS 2017 checks which uses VCINSTALLDIR: -    if 'VCINSTALLDIR' in tools_env: +    if "VCINSTALLDIR" in tools_env:          # print("Checking VCINSTALLDIR")          # find() works with -1 so big ifs below are needed... the simplest solution, in fact          # First test if amd64 and amd64_x86 compilers are present in the path          vc_amd64_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"] + "BIN\\amd64;") -        if(vc_amd64_compiler_detection_index > -1): +        if vc_amd64_compiler_detection_index > -1:              vc_chosen_compiler_index = vc_amd64_compiler_detection_index              vc_chosen_compiler_str = "amd64"          vc_amd64_x86_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"] + "BIN\\amd64_x86;") -        if(vc_amd64_x86_compiler_detection_index > -1 -           and (vc_chosen_compiler_index == -1 -                or vc_chosen_compiler_index > vc_amd64_x86_compiler_detection_index)): +        if vc_amd64_x86_compiler_detection_index > -1 and ( +            vc_chosen_compiler_index == -1 or vc_chosen_compiler_index > vc_amd64_x86_compiler_detection_index +        ):              vc_chosen_compiler_index = vc_amd64_x86_compiler_detection_index              vc_chosen_compiler_str = "amd64_x86"          # Now check the 32 bit compilers          vc_x86_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"] + "BIN;") -        if(vc_x86_compiler_detection_index > -1 -           and (vc_chosen_compiler_index == -1 -                or vc_chosen_compiler_index > vc_x86_compiler_detection_index)): +        if vc_x86_compiler_detection_index > -1 and ( +            vc_chosen_compiler_index == -1 or vc_chosen_compiler_index > vc_x86_compiler_detection_index +        ):              vc_chosen_compiler_index = vc_x86_compiler_detection_index              vc_chosen_compiler_str = "x86" -        vc_x86_amd64_compiler_detection_index = tools_env["PATH"].find(tools_env['VCINSTALLDIR'] + "BIN\\x86_amd64;") -        if(vc_x86_amd64_compiler_detection_index > -1 -           and (vc_chosen_compiler_index == -1 -                or vc_chosen_compiler_index > vc_x86_amd64_compiler_detection_index)): +        vc_x86_amd64_compiler_detection_index = tools_env["PATH"].find(tools_env["VCINSTALLDIR"] + "BIN\\x86_amd64;") +        if vc_x86_amd64_compiler_detection_index > -1 and ( +            vc_chosen_compiler_index == -1 or vc_chosen_compiler_index > vc_x86_amd64_compiler_detection_index +        ):              vc_chosen_compiler_index = vc_x86_amd64_compiler_detection_index              vc_chosen_compiler_str = "x86_amd64"      # and for VS 2017 and newer we check VCTOOLSINSTALLDIR: -    if 'VCTOOLSINSTALLDIR' in tools_env: +    if "VCTOOLSINSTALLDIR" in tools_env:          # Newer versions have a different path available -        vc_amd64_compiler_detection_index = tools_env["PATH"].upper().find(tools_env['VCTOOLSINSTALLDIR'].upper() + "BIN\\HOSTX64\\X64;") -        if(vc_amd64_compiler_detection_index > -1): +        vc_amd64_compiler_detection_index = ( +            tools_env["PATH"].upper().find(tools_env["VCTOOLSINSTALLDIR"].upper() + "BIN\\HOSTX64\\X64;") +        ) +        if vc_amd64_compiler_detection_index > -1:              vc_chosen_compiler_index = vc_amd64_compiler_detection_index              vc_chosen_compiler_str = "amd64" -        vc_amd64_x86_compiler_detection_index = tools_env["PATH"].upper().find(tools_env['VCTOOLSINSTALLDIR'].upper() + "BIN\\HOSTX64\\X86;") -        if(vc_amd64_x86_compiler_detection_index > -1 -           and (vc_chosen_compiler_index == -1 -                or vc_chosen_compiler_index > vc_amd64_x86_compiler_detection_index)): +        vc_amd64_x86_compiler_detection_index = ( +            tools_env["PATH"].upper().find(tools_env["VCTOOLSINSTALLDIR"].upper() + "BIN\\HOSTX64\\X86;") +        ) +        if vc_amd64_x86_compiler_detection_index > -1 and ( +            vc_chosen_compiler_index == -1 or vc_chosen_compiler_index > vc_amd64_x86_compiler_detection_index +        ):              vc_chosen_compiler_index = vc_amd64_x86_compiler_detection_index              vc_chosen_compiler_str = "amd64_x86" -        vc_x86_compiler_detection_index = tools_env["PATH"].upper().find(tools_env['VCTOOLSINSTALLDIR'].upper() + "BIN\\HOSTX86\\X86;") -        if(vc_x86_compiler_detection_index > -1 -           and (vc_chosen_compiler_index == -1 -                or vc_chosen_compiler_index > vc_x86_compiler_detection_index)): +        vc_x86_compiler_detection_index = ( +            tools_env["PATH"].upper().find(tools_env["VCTOOLSINSTALLDIR"].upper() + "BIN\\HOSTX86\\X86;") +        ) +        if vc_x86_compiler_detection_index > -1 and ( +            vc_chosen_compiler_index == -1 or vc_chosen_compiler_index > vc_x86_compiler_detection_index +        ):              vc_chosen_compiler_index = vc_x86_compiler_detection_index              vc_chosen_compiler_str = "x86" -        vc_x86_amd64_compiler_detection_index = tools_env["PATH"].upper().find(tools_env['VCTOOLSINSTALLDIR'].upper() + "BIN\\HOSTX86\\X64;") -        if(vc_x86_amd64_compiler_detection_index > -1 -           and (vc_chosen_compiler_index == -1 -                or vc_chosen_compiler_index > vc_x86_amd64_compiler_detection_index)): +        vc_x86_amd64_compiler_detection_index = ( +            tools_env["PATH"].upper().find(tools_env["VCTOOLSINSTALLDIR"].upper() + "BIN\\HOSTX86\\X64;") +        ) +        if vc_x86_amd64_compiler_detection_index > -1 and ( +            vc_chosen_compiler_index == -1 or vc_chosen_compiler_index > vc_x86_amd64_compiler_detection_index +        ):              vc_chosen_compiler_index = vc_x86_amd64_compiler_detection_index              vc_chosen_compiler_str = "x86_amd64"      return vc_chosen_compiler_str +  def find_visual_c_batch_file(env):      from SCons.Tool.MSCommon.vc import get_default_version, get_host_target, find_batch_file @@ -424,6 +461,7 @@ def find_visual_c_batch_file(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):      if os.path.isfile(filename):          # Don't overwrite an existing hint file since the user may have customized it. @@ -435,15 +473,19 @@ def generate_cpp_hint_file(filename):          except IOError:              print("Could not write cpp.hint file.") +  def generate_vs_project(env, num_jobs):      batch_file = find_visual_c_batch_file(env)      if batch_file: +          def build_commandline(commands): -            common_build_prefix = ['cmd /V /C set "plat=$(PlatformTarget)"', -                                    '(if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64"))', -                                    'set "tools=yes"', -                                    '(if "$(Configuration)"=="release" (set "tools=no"))', -                                    'call "' + batch_file + '" !plat!'] +            common_build_prefix = [ +                'cmd /V /C set "plat=$(PlatformTarget)"', +                '(if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64"))', +                'set "tools=yes"', +                '(if "$(Configuration)"=="release" (set "tools=no"))', +                'call "' + batch_file + '" !plat!', +            ]              result = " ^& ".join(common_build_prefix + [commands])              return result @@ -459,87 +501,108 @@ def generate_vs_project(env, num_jobs):          # to double quote off the directory. However, the path ends          # in a backslash, so we need to remove this, lest it escape the          # last double quote off, confusing MSBuild -        env['MSVSBUILDCOM'] = build_commandline('scons --directory="$(ProjectDir.TrimEnd(\'\\\'))" platform=windows progress=no target=$(Configuration) tools=!tools! -j' + str(num_jobs)) -        env['MSVSREBUILDCOM'] = build_commandline('scons --directory="$(ProjectDir.TrimEnd(\'\\\'))" platform=windows progress=no target=$(Configuration) tools=!tools! vsproj=yes -j' + str(num_jobs)) -        env['MSVSCLEANCOM'] = build_commandline('scons --directory="$(ProjectDir.TrimEnd(\'\\\'))" --clean platform=windows progress=no target=$(Configuration) tools=!tools! -j' + str(num_jobs)) +        env["MSVSBUILDCOM"] = build_commandline( +            "scons --directory=\"$(ProjectDir.TrimEnd('\\'))\" platform=windows progress=no target=$(Configuration) tools=!tools! -j" +            + str(num_jobs) +        ) +        env["MSVSREBUILDCOM"] = build_commandline( +            "scons --directory=\"$(ProjectDir.TrimEnd('\\'))\" platform=windows progress=no target=$(Configuration) tools=!tools! vsproj=yes -j" +            + str(num_jobs) +        ) +        env["MSVSCLEANCOM"] = build_commandline( +            "scons --directory=\"$(ProjectDir.TrimEnd('\\'))\" --clean platform=windows progress=no target=$(Configuration) tools=!tools! -j" +            + str(num_jobs) +        )          # This version information (Win32, x64, Debug, Release, Release_Debug seems to be          # required for Visual Studio to understand that it needs to generate an NMAKE          # project. Do not modify without knowing what you are doing. -        debug_variants = ['debug|Win32'] + ['debug|x64'] -        release_variants = ['release|Win32'] + ['release|x64'] -        release_debug_variants = ['release_debug|Win32'] + ['release_debug|x64'] +        debug_variants = ["debug|Win32"] + ["debug|x64"] +        release_variants = ["release|Win32"] + ["release|x64"] +        release_debug_variants = ["release_debug|Win32"] + ["release_debug|x64"]          variants = debug_variants + release_variants + release_debug_variants -        debug_targets = ['bin\\godot.windows.tools.32.exe'] + ['bin\\godot.windows.tools.64.exe'] -        release_targets = ['bin\\godot.windows.opt.32.exe'] + ['bin\\godot.windows.opt.64.exe'] -        release_debug_targets = ['bin\\godot.windows.opt.tools.32.exe'] + ['bin\\godot.windows.opt.tools.64.exe'] +        debug_targets = ["bin\\godot.windows.tools.32.exe"] + ["bin\\godot.windows.tools.64.exe"] +        release_targets = ["bin\\godot.windows.opt.32.exe"] + ["bin\\godot.windows.opt.64.exe"] +        release_debug_targets = ["bin\\godot.windows.opt.tools.32.exe"] + ["bin\\godot.windows.opt.tools.64.exe"]          targets = debug_targets + release_targets + release_debug_targets -        if not env.get('MSVS'): -            env['MSVS']['PROJECTSUFFIX'] = '.vcxproj' -            env['MSVS']['SOLUTIONSUFFIX'] = '.sln' +        if not env.get("MSVS"): +            env["MSVS"]["PROJECTSUFFIX"] = ".vcxproj" +            env["MSVS"]["SOLUTIONSUFFIX"] = ".sln"          env.MSVSProject( -            target=['#godot' + env['MSVSPROJECTSUFFIX']], +            target=["#godot" + env["MSVSPROJECTSUFFIX"]],              incs=env.vs_incs,              srcs=env.vs_srcs,              runfile=targets,              buildtarget=targets,              auto_build_solution=1, -            variant=variants) +            variant=variants, +        )      else: -        print("Could not locate Visual Studio batch file for setting up the build environment. Not generating VS project.") +        print("Could not locate Visual Studio batch file to set up the build environment. Not generating VS project.") +  def precious_program(env, program, sources, **args):      program = env.ProgramOriginal(program, sources, **args)      env.Precious(program)      return program +  def add_shared_library(env, name, sources, **args):      library = env.SharedLibrary(name, sources, **args)      env.NoCache(library)      return library +  def add_library(env, name, sources, **args):      library = env.Library(name, sources, **args)      env.NoCache(library)      return library +  def add_program(env, name, sources, **args):      program = env.Program(name, sources, **args)      env.NoCache(program)      return program +  def CommandNoCache(env, target, sources, command, **args):      result = env.Command(target, sources, command, **args)      env.NoCache(result)      return result +  def detect_darwin_sdk_path(platform, env): -    sdk_name = '' -    if platform == 'osx': -        sdk_name = 'macosx' -        var_name = 'MACOS_SDK_PATH' -    elif platform == 'iphone': -        sdk_name = 'iphoneos' -        var_name = 'IPHONESDK' -    elif platform == 'iphonesimulator': -        sdk_name = 'iphonesimulator' -        var_name = 'IPHONESDK' +    sdk_name = "" +    if platform == "osx": +        sdk_name = "macosx" +        var_name = "MACOS_SDK_PATH" +    elif platform == "iphone": +        sdk_name = "iphoneos" +        var_name = "IPHONESDK" +    elif platform == "iphonesimulator": +        sdk_name = "iphonesimulator" +        var_name = "IPHONESDK"      else:          raise Exception("Invalid platform argument passed to detect_darwin_sdk_path")      if not env[var_name]:          try: -            sdk_path = subprocess.check_output(['xcrun', '--sdk', sdk_name, '--show-sdk-path']).strip().decode("utf-8") +            sdk_path = subprocess.check_output(["xcrun", "--sdk", sdk_name, "--show-sdk-path"]).strip().decode("utf-8")              if sdk_path:                  env[var_name] = sdk_path          except (subprocess.CalledProcessError, OSError):              print("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name))              raise +  def is_vanilla_clang(env):      if not using_clang(env):          return False -    version = subprocess.check_output([env['CXX'], '--version']).strip().decode("utf-8") +    try: +        version = subprocess.check_output([env.subst(env["CXX"]), "--version"]).strip().decode("utf-8") +    except (subprocess.CalledProcessError, OSError): +        print("Couldn't parse CXX environment variable to infer compiler version.") +        return False      return not version.startswith("Apple") @@ -552,20 +615,22 @@ def get_compiler_version(env):          # Not using -dumpversion as some GCC distros only return major, and          # Clang used to return hardcoded 4.2.1: # https://reviews.llvm.org/D56803          try: -            version = subprocess.check_output([env.subst(env['CXX']), '--version']).strip().decode("utf-8") +            version = subprocess.check_output([env.subst(env["CXX"]), "--version"]).strip().decode("utf-8")          except (subprocess.CalledProcessError, OSError):              print("Couldn't parse CXX environment variable to infer compiler version.")              return None      else:  # TODO: Implement for MSVC          return None -    match = re.search('[0-9]+\.[0-9.]+', version) +    match = re.search("[0-9]+\.[0-9.]+", version)      if match is not None: -        return list(map(int, match.group().split('.'))) +        return list(map(int, match.group().split(".")))      else:          return None +  def using_gcc(env): -    return 'gcc' in os.path.basename(env["CC"]) +    return "gcc" in os.path.basename(env["CC"]) +  def using_clang(env): -    return 'clang' in os.path.basename(env["CC"]) +    return "clang" in os.path.basename(env["CC"])  |