|  | import os | 
|  | import subprocess | 
|  | import sys | 
|  |  | 
|  | #### UTILITIES #### | 
|  |  | 
|  |  | 
|  | def enum(*sequential, **named): | 
|  | enums = dict(zip(sequential, range(len(sequential))), **named) | 
|  | return type('Enum', (), enums) | 
|  |  | 
|  | #### SETTINGS #### | 
|  |  | 
|  | #### INTERFACE TO THE XCODEPROJ #### | 
|  |  | 
|  |  | 
|  | def lldb_source_path(): | 
|  | path = os.environ.get('SRCROOT') | 
|  | if path: | 
|  | return path | 
|  | else: | 
|  | return "./" | 
|  |  | 
|  |  | 
|  | def expected_llvm_build_path(): | 
|  | if build_type() == BuildType.Xcode: | 
|  | return package_build_path() | 
|  | else: | 
|  | return os.path.join( | 
|  | os.environ.get('LLDB_PATH_TO_LLVM_BUILD'), | 
|  | package_build_dir_name("llvm")) | 
|  |  | 
|  |  | 
|  | def archives_txt(): | 
|  | return os.path.join(expected_package_build_path(), "archives.txt") | 
|  |  | 
|  |  | 
|  | def expected_package_build_path(): | 
|  | return os.path.abspath(os.path.join(expected_llvm_build_path(), "..")) | 
|  |  | 
|  | def is_host_build(): | 
|  | rc_project_name = os.environ.get('RC_ProjectName') | 
|  | if rc_project_name: | 
|  | if rc_project_name == 'lldb_host': return True | 
|  | return False | 
|  |  | 
|  | def rc_release_target(): | 
|  | return os.environ.get('RC_RELEASE', '') | 
|  |  | 
|  | def rc_platform_name(): | 
|  | return os.environ.get('RC_PLATFORM_NAME', 'macOS') | 
|  |  | 
|  | def architecture(): | 
|  | if is_host_build(): return 'macosx' | 
|  | platform_name = os.environ.get('RC_PLATFORM_NAME') | 
|  | if not platform_name: | 
|  | platform_name = os.environ.get('PLATFORM_NAME') | 
|  | platform_arch = os.environ.get('ARCHS').split()[-1] | 
|  | return platform_name + "-" + platform_arch | 
|  |  | 
|  |  | 
|  | def lldb_configuration(): | 
|  | return os.environ.get('CONFIGURATION') | 
|  |  | 
|  |  | 
|  | def llvm_configuration(): | 
|  | return os.environ.get('LLVM_CONFIGURATION') | 
|  |  | 
|  |  | 
|  | def llvm_build_dirtree(): | 
|  | return os.environ.get('LLVM_BUILD_DIRTREE') | 
|  |  | 
|  | # Edit the code below when adding build styles. | 
|  |  | 
|  | BuildType = enum('Xcode')                # (Debug,DebugClang,Release) | 
|  |  | 
|  |  | 
|  | def build_type(): | 
|  | return BuildType.Xcode | 
|  |  | 
|  | #### VCS UTILITIES #### | 
|  |  | 
|  | VCS = enum('git', | 
|  | 'svn') | 
|  |  | 
|  |  | 
|  | def run_in_directory(args, path): | 
|  | return subprocess.check_output([str(arg) for arg in args], cwd=path) | 
|  |  | 
|  |  | 
|  | class Git: | 
|  |  | 
|  | def __init__(self, spec): | 
|  | self.spec = spec | 
|  |  | 
|  | def status(self): | 
|  | return run_in_directory(["git", "branch", "-v"], self.spec['root']) | 
|  |  | 
|  | def diff(self): | 
|  | return run_in_directory(["git", "diff"], self.spec['root']) | 
|  |  | 
|  | def check_out(self): | 
|  | run_in_directory(["git", | 
|  | "clone", | 
|  | "--depth=1", | 
|  | self.spec['url'], | 
|  | self.spec['root']], | 
|  | lldb_source_path()) | 
|  | run_in_directory(["git", "fetch", "--all"], self.spec['root']) | 
|  | run_in_directory(["git", "checkout", self.spec[ | 
|  | 'ref']], self.spec['root']) | 
|  |  | 
|  |  | 
|  | class SVN: | 
|  |  | 
|  | def __init__(self, spec): | 
|  | self.spec = spec | 
|  |  | 
|  | def status(self): | 
|  | return run_in_directory(["svn", "info"], self.spec['root']) | 
|  |  | 
|  | def diff(self): | 
|  | return run_in_directory(["svn", "diff"], self.spec['root']) | 
|  | # TODO implement check_out | 
|  |  | 
|  |  | 
|  | def vcs(spec): | 
|  | if spec['vcs'] == VCS.git: | 
|  | return Git(spec) | 
|  | elif spec['vcs'] == VCS.svn: | 
|  | return SVN(spec) | 
|  | else: | 
|  | return None | 
|  |  | 
|  | #### SOURCE PATHS #### | 
|  |  | 
|  |  | 
|  | def llvm_source_path(): | 
|  | if build_type() == BuildType.Xcode: | 
|  | return os.path.join(lldb_source_path(), "llvm") | 
|  |  | 
|  |  | 
|  | def clang_source_path(): | 
|  | if build_type() == BuildType.Xcode: | 
|  | return os.path.join(llvm_source_path(), "tools", "clang") | 
|  |  | 
|  |  | 
|  | def ninja_source_path(): | 
|  | if build_type() == BuildType.Xcode: | 
|  | return os.path.join(lldb_source_path(), "ninja") | 
|  |  | 
|  | #### BUILD PATHS #### | 
|  |  | 
|  |  | 
|  | def packages(): | 
|  | return ["llvm"] | 
|  |  | 
|  |  | 
|  | def package_build_dir_name(package): | 
|  | return package + "-" + architecture() | 
|  |  | 
|  |  | 
|  | def expected_package_build_path_for(package): | 
|  | if build_type() == BuildType.Xcode: | 
|  | if package != "llvm": | 
|  | raise "On Xcode build, we only support the llvm package: requested {}" | 
|  | return package_build_path() | 
|  | return os.path.join( | 
|  | expected_package_build_path(), | 
|  | package_build_dir_name(package)) | 
|  |  | 
|  |  | 
|  | def expected_package_build_paths(): | 
|  | return [expected_package_build_path_for(package) for package in packages()] | 
|  |  | 
|  |  | 
|  | def library_path(build_path): | 
|  | return build_path + "/lib" | 
|  |  | 
|  |  | 
|  | def library_paths(): | 
|  | if build_type() == BuildType.Xcode: | 
|  | package_build_paths = [package_build_path()] | 
|  | else: | 
|  | package_build_paths = expected_package_build_paths() | 
|  | return [library_path(build_path) for build_path in package_build_paths] | 
|  |  | 
|  |  | 
|  | def package_build_path(): | 
|  | return os.path.join( | 
|  | llvm_build_dirtree(), | 
|  | os.environ["LLVM_CONFIGURATION"], | 
|  | os.environ["CURRENT_ARCH"]) |