summaryrefslogtreecommitdiff
path: root/methods.py
diff options
context:
space:
mode:
Diffstat (limited to 'methods.py')
-rw-r--r--methods.py187
1 files changed, 102 insertions, 85 deletions
diff --git a/methods.py b/methods.py
index 00c477635e..86ab7cd9af 100644
--- a/methods.py
+++ b/methods.py
@@ -4,19 +4,50 @@ import sys
import re
import glob
import string
-import datetime
import subprocess
-from compat import iteritems, isbasestring
-
-
-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))
+from compat import iteritems, isbasestring, decode_utf8
+
+
+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):
+ # 'self' is the environment
+ 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]
+ else:
+ self.Append(CCFLAGS=['-w'])
+ self.Append(CFLAGS=['-w'])
+ self.Append(CXXFLAGS=['-w'])
def add_module_version_string(self,s):
@@ -43,20 +74,29 @@ def update_version(module_version_string=""):
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(2018) + "\n")
+ f.write("#define VERSION_YEAR " + str(version.year) + "\n")
+ f.write("#define VERSION_WEBSITE \"" + str(version.website) + "\"\n")
f.close()
# NOTE: It is safe to generate this file here, since this is still executed serially
fhash = open("core/version_hash.gen.h", "w")
githash = ""
- if os.path.isfile(".git/HEAD"):
- head = open(".git/HEAD", "r").readline().strip()
+ gitfolder = ".git"
+
+ if os.path.isfile(".git"):
+ module_folder = open(".git", "r").readline().strip()
+ if module_folder.startswith("gitdir: "):
+ gitfolder = module_folder[8:]
+
+ if os.path.isfile(os.path.join(gitfolder, "HEAD")):
+ head = open(os.path.join(gitfolder, "HEAD"), "r").readline().strip()
if head.startswith("ref: "):
- head = ".git/" + head[5:]
+ head = os.path.join(gitfolder, head[5:])
if os.path.isfile(head):
githash = open(head, "r").readline().strip()
else:
githash = head
+
fhash.write("#define VERSION_HASH \"" + githash + "\"")
fhash.close()
@@ -155,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("=====")
@@ -192,70 +232,6 @@ def win32_spawn(sh, escape, cmd, args, spawnenv):
return exit_code
"""
-def android_add_flat_dir(self, dir):
- if (dir not in self.android_flat_dirs):
- self.android_flat_dirs.append(dir)
-
-def android_add_maven_repository(self, url):
- if (url not in self.android_maven_repos):
- self.android_maven_repos.append(url)
-
-def android_add_dependency(self, depline):
- if (depline not in self.android_dependencies):
- self.android_dependencies.append(depline)
-
-def android_add_java_dir(self, subpath):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + subpath
- if (base_path not in self.android_java_dirs):
- self.android_java_dirs.append(base_path)
-
-def android_add_res_dir(self, subpath):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + subpath
- if (base_path not in self.android_res_dirs):
- self.android_res_dirs.append(base_path)
-
-def android_add_asset_dir(self, subpath):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + subpath
- if (base_path not in self.android_asset_dirs):
- self.android_asset_dirs.append(base_path)
-
-def android_add_aidl_dir(self, subpath):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + subpath
- if (base_path not in self.android_aidl_dirs):
- self.android_aidl_dirs.append(base_path)
-
-def android_add_jni_dir(self, subpath):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + subpath
- if (base_path not in self.android_jni_dirs):
- self.android_jni_dirs.append(base_path)
-
-def android_add_gradle_plugin(self, plugin):
- if (plugin not in self.android_gradle_plugins):
- self.android_gradle_plugins.append(plugin)
-
-def android_add_gradle_classpath(self, classpath):
- if (classpath not in self.android_gradle_classpath):
- self.android_gradle_classpath.append(classpath)
-
-def android_add_default_config(self, config):
- if (config not in self.android_default_config):
- self.android_default_config.append(config)
-
-def android_add_to_manifest(self, file):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + file
- with open(base_path, "r") as f:
- self.android_manifest_chunk += f.read()
-
-def android_add_to_permissions(self, file):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + file
- with open(base_path, "r") as f:
- self.android_permission_chunk += f.read()
-
-def android_add_to_attributes(self, file):
- base_path = self.Dir(".").abspath + "/modules/" + self.current_module + "/" + file
- with open(base_path, "r") as f:
- self.android_appattributes_chunk += f.read()
-
def disable_module(self):
self.disabled_modules.append(self.current_module)
@@ -280,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("=====")
@@ -318,7 +294,7 @@ def split_lib(self, libname, src_list = None, env_lib = None):
list = []
lib_list = []
- if src_list == None:
+ if src_list is None:
src_list = getattr(env, libname + "_sources")
if type(env_lib) == type(None):
@@ -525,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):
@@ -579,7 +555,7 @@ def generate_vs_project(env, num_jobs):
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']['PROJECTSUFFIX'] = '.vcxproj'
env['MSVS']['SOLUTIONSUFFIX'] = '.sln'
env.MSVSProject(
target=['#godot' + env['MSVSPROJECTSUFFIX']],
@@ -616,3 +592,44 @@ 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'
+ else:
+ raise Exception("Invalid platform argument passed to detect_darwin_sdk_path")
+
+ if not env[var_name]:
+ try:
+ 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):
+ print("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name))
+ raise
+
+def get_compiler_version(env):
+ # 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('.')
+ else:
+ return None
+
+def using_gcc(env):
+ return 'gcc' in os.path.basename(env["CC"])
+
+def using_clang(env):
+ return 'clang' in os.path.basename(env["CC"])