diff --git a/AMBuildScript b/AMBuildScript index 38af5247..a39c9471 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -10,29 +10,41 @@ class SM: #Build SDK info self.possibleSdks = { } self.possibleSdks['ep1'] = {'sdk': 'HL2SDK', 'ext': '1.ep1', 'def': '1', - 'name': 'EPISODEONE', 'platform': ['windows', 'linux']} + 'name': 'EPISODEONE', 'platform': ['windows', 'linux'], + 'dir': 'hl2sdk'} self.possibleSdks['ep2'] = {'sdk': 'HL2SDKOB', 'ext': '2.ep2', 'def': '3', - 'name': 'ORANGEBOX', 'platform': ['windows', 'linux']} + 'name': 'ORANGEBOX', 'platform': ['windows', 'linux'], + 'dir': 'hl2sdk-ob'} self.possibleSdks['css'] = {'sdk': 'HL2SDKCSS', 'ext': '2.css', 'def': '6', - 'name': 'CSS', 'platform': ['windows', 'linux', 'darwin']} + 'name': 'CSS', 'platform': ['windows', 'linux', 'darwin'], + 'dir': 'hl2sdk-css'} self.possibleSdks['ep2v'] = {'sdk': 'HL2SDKOBVALVE', 'ext': '2.ep2v', 'def': '7', - 'name': 'ORANGEBOXVALVE', 'platform': ['windows', 'linux', 'darwin']} + 'name': 'ORANGEBOXVALVE', 'platform': ['windows', 'linux', 'darwin'], + 'dir': 'hl2sdk-ob-valve'} self.possibleSdks['l4d'] = {'sdk': 'HL2SDKL4D', 'ext': '2.l4d', 'def': '8', - 'name': 'LEFT4DEAD', 'platform': ['windows', 'linux', 'darwin']} + 'name': 'LEFT4DEAD', 'platform': ['windows', 'linux', 'darwin'], + 'dir': 'hl2sdk-l4d'} self.possibleSdks['l4d2'] = {'sdk': 'HL2SDKL4D2', 'ext': '2.l4d2', 'def': '9', - 'name': 'LEFT4DEAD2', 'platform': ['windows', 'linux', 'darwin']} + 'name': 'LEFT4DEAD2', 'platform': ['windows', 'linux', 'darwin'], + 'dir': 'hl2sdk-l4d2'} self.possibleSdks['darkm'] = {'sdk': 'HL2SDK-DARKM', 'ext': '2.darkm', 'def': '2', - 'name': 'DARKMESSIAH', 'platform': ['windows']} + 'name': 'DARKMESSIAH', 'platform': ['windows'], + 'dir': 'hl2sdk-darkm'} self.possibleSdks['swarm'] = {'sdk': 'HL2SDK-SWARM', 'ext': '2.swarm', 'def': '10', - 'name': 'ALIENSWARM', 'platform': ['windows']} + 'name': 'ALIENSWARM', 'platform': ['windows'], + 'dir': 'hl2sdk-swarm'} self.possibleSdks['bgt'] = {'sdk': 'HL2SDK-BGT', 'ext': '2.bgt', 'def': '4', - 'name': 'BLOODYGOODTIME', 'platform': ['windows']} + 'name': 'BLOODYGOODTIME', 'platform': ['windows'], + 'dir': 'hl2sdk-bgt'} self.possibleSdks['eye'] = {'sdk': 'HL2SDK-EYE', 'ext': '2.eye', 'def': '5', - 'name': 'EYE', 'platform': ['windows']} + 'name': 'EYE', 'platform': ['windows'], + 'dir': 'hl2sdk-eye'} self.possibleSdks['csgo'] = {'sdk': 'HL2SDKCSGO', 'ext': '2.csgo', 'def': '12', - 'name': 'CSGO', 'platform': ['windows', 'linux', 'darwin']} + 'name': 'CSGO', 'platform': ['windows', 'linux', 'darwin'], + 'dir': 'hl2sdk-csgo'} # self.possibleSdks['portal2'] = {'sdk': 'HL2SDK-PORTAL2', 'ext': '2.portal2', 'def': '11', - # 'name': 'PORTAL2', 'platform': ['windows']} + # 'name': 'PORTAL2', 'platform': ['windows'], + # 'dir': 'hl2sdk-portal2'} self.sdkInfo = { } @@ -40,59 +52,38 @@ class SM: #Detect compilers self.compiler.DetectAll(AMBuild) - #Detect variables - envvars = { 'MMSOURCE19': 'mmsource-1.9', - 'HL2SDKCSS': 'hl2sdk-css', - 'HL2SDKOBVALVE': 'hl2sdk-ob-valve', - 'HL2SDKL4D': 'hl2sdk-l4d', - 'HL2SDKL4D2': 'hl2sdk-l4d2', - 'HL2SDKCSGO': 'hl2sdk-csgo', - 'MYSQL5': 'mysql-5.0' - } + #Required paths + envvars = { 'MMSOURCE19': 'mmsource-1.9', 'MYSQL5': 'mysql-5.0' } + + #Look for Metamod:Source and MySQL directories + for env in envvars: + path = self.ResolveEnvPath(env, envvars[env]) + if path == None: + raise Exception('Could not find a valid path for {0}'.format(env)) + AMBuild.cache.CacheVariable(env, path) + + #Look for SDK directories + for sdk in self.possibleSdks: + #Get list of SDKs to build against or 'all' or 'present' + sdkList = AMBuild.options.sdks.split(',') + #Build against all supported SDKs? + useAll = sdkList[0] == 'all' + #Build against supported SDKs that exist? + usePresent = sdkList[0] == 'present' - if AMBuild.target['platform'] != 'darwin': - envvars['HL2SDK'] = 'hl2sdk' - envvars['HL2SDKOB'] = 'hl2sdk-ob' - - #Dark Messiah is Windows-only - if AMBuild.target['platform'] == 'windows': - envvars['HL2SDK-DARKM'] = 'hl2sdk-darkm' - envvars['HL2SDK-SWARM'] = 'hl2sdk-swarm' - envvars['HL2SDK-BGT'] = 'hl2sdk-bgt' - envvars['HL2SDK-EYE'] = 'hl2sdk-eye' - - # Finds if a dict with `key` set to `value` is present on the dict of dicts `dictionary` - def findDictByKey(dictionary, key, value): - for index in dictionary: - elem = dictionary[index] - if elem[key] == value: - return (elem, index) - return None - - for i in envvars: - if i in os.environ: - path = os.environ[i] - if not os.path.isdir(path): - raise Exception('Path for {0} was not found: {1}'.format(i, path)) - elif i.startswith('HL2SDK'): - (info, sdk) = findDictByKey(self.possibleSdks, 'sdk', i) + info = self.possibleSdks[sdk] + if AMBuild.target['platform'] in info['platform']: + env = info['sdk'] + dir = info['dir'] + sdkPath = self.ResolveEnvPath(env, dir) + if sdkPath == None: + if useAll or sdk in sdkList: + raise Exception('Could not find a valid path for {0}'.format(env)) + else: + continue + if useAll or usePresent or sdk in sdkList: self.sdkInfo[sdk] = info - else: - head = os.getcwd() - oldhead = None - while head != None and head != oldhead: - path = os.path.join(head, envvars[i]) - if os.path.isdir(path): - break - oldhead = head - head, tail = os.path.split(head) - if i.startswith('HL2SDK'): - if head != None and head != oldhead: - (info, sdk) = findDictByKey(self.possibleSdks, 'sdk', i) - self.sdkInfo[sdk] = info - elif head == None or head == oldhead: - raise Exception('Could not find a valid path for {0}'.format(i)) - AMBuild.cache.CacheVariable(i, path) + AMBuild.cache.CacheVariable(env, sdkPath) if len(self.sdkInfo) < 1: raise Exception('At least one SDK must be available.') @@ -402,6 +393,22 @@ class SM: compiler['POSTLINKFLAGS'][0:0] = ['libvstdlib.dylib'] return compiler + + def ResolveEnvPath(self, env, defaultDir): + if env in os.environ: + path = os.environ[env] + if os.path.isdir(path): + return path + else: + head = os.getcwd() + oldhead = None + while head != None and head != oldhead: + path = os.path.join(head, defaultDir) + if os.path.isdir(path): + return path + oldhead = head + head, tail = os.path.split(head) + return None sm = SM() globals = { diff --git a/configure.py b/configure.py index f0f2aa07..5ae950a7 100644 --- a/configure.py +++ b/configure.py @@ -7,4 +7,7 @@ run.options.add_option('--enable-debug', action='store_const', const='1', dest=' help='Enable debugging symbols') run.options.add_option('--enable-optimize', action='store_const', const='1', dest='opt', help='Enable optimization') +run.options.add_option('-s', '--sdks', default='all', dest='sdks', + help='Build against specified SDKs; valid args are "all", "present", or ' + 'comma-delimited list of engine names (default: %default)') run.Configure(sys.path[0])