1.1 --- a/AMBuildScript Fri Sep 09 15:29:17 2011 -0400
1.2 +++ b/AMBuildScript Fri Sep 09 18:37:09 2011 -0500
1.3 @@ -8,25 +8,27 @@
1.4 self.compiler = Cpp.Compiler()
1.5
1.6 #Build SDK info
1.7 - self.sdkInfo = { }
1.8 - self.sdkInfo['ep1'] = {'sdk': 'HL2SDK', 'ext': '1.ep1', 'def': '1',
1.9 + self.possibleSdks = { }
1.10 + self.possibleSdks['ep1'] = {'sdk': 'HL2SDK', 'ext': '1.ep1', 'def': '1',
1.11 'name': 'EPISODEONE', 'platform': ['windows', 'linux']}
1.12 - self.sdkInfo['ep2'] = {'sdk': 'HL2SDKOB', 'ext': '2.ep2', 'def': '3',
1.13 + self.possibleSdks['ep2'] = {'sdk': 'HL2SDKOB', 'ext': '2.ep2', 'def': '3',
1.14 'name': 'ORANGEBOX', 'platform': ['windows', 'linux']}
1.15 - self.sdkInfo['ep2v'] = {'sdk': 'HL2SDKOBVALVE', 'ext': '2.ep2v', 'def': '6',
1.16 + self.possibleSdks['ep2v'] = {'sdk': 'HL2SDKOBVALVE', 'ext': '2.ep2v', 'def': '6',
1.17 'name': 'ORANGEBOXVALVE', 'platform': ['windows', 'linux', 'darwin']}
1.18 - self.sdkInfo['l4d'] = {'sdk': 'HL2SDKL4D', 'ext': '2.l4d', 'def': '7',
1.19 + self.possibleSdks['l4d'] = {'sdk': 'HL2SDKL4D', 'ext': '2.l4d', 'def': '7',
1.20 'name': 'LEFT4DEAD', 'platform': ['windows', 'linux', 'darwin']}
1.21 - self.sdkInfo['l4d2'] = {'sdk': 'HL2SDKL4D2', 'ext': '2.l4d2', 'def': '8',
1.22 + self.possibleSdks['l4d2'] = {'sdk': 'HL2SDKL4D2', 'ext': '2.l4d2', 'def': '8',
1.23 'name': 'LEFT4DEAD2', 'platform': ['windows', 'linux', 'darwin']}
1.24 - self.sdkInfo['darkm'] = {'sdk': 'HL2SDK-DARKM', 'ext': '2.darkm', 'def': '2',
1.25 + self.possibleSdks['darkm'] = {'sdk': 'HL2SDK-DARKM', 'ext': '2.darkm', 'def': '2',
1.26 'name': 'DARKMESSIAH', 'platform': ['windows']}
1.27 - self.sdkInfo['swarm'] = {'sdk': 'HL2SDK-SWARM', 'ext': '2.swarm', 'def': '9',
1.28 + self.possibleSdks['swarm'] = {'sdk': 'HL2SDK-SWARM', 'ext': '2.swarm', 'def': '9',
1.29 'name': 'ALIENSWARM', 'platform': ['windows']}
1.30 - self.sdkInfo['bgt'] = {'sdk': 'HL2SDK-BGT', 'ext': '2.bgt', 'def': '4',
1.31 - 'name': 'BLOODYGOODTIME', 'platform': ['windows']}
1.32 - self.sdkInfo['eye'] = {'sdk': 'HL2SDK-EYE', 'ext': '2.eye', 'def': '5',
1.33 - 'name': 'EYE', 'platform': ['windows']}
1.34 + self.possibleSdks['bgt'] = {'sdk': 'HL2SDK-BGT', 'ext': '2.bgt', 'def': '4',
1.35 + 'name': 'BLOODYGOODTIME', 'platform': ['windows']}
1.36 + self.possibleSdks['eye'] = {'sdk': 'HL2SDK-EYE', 'ext': '2.eye', 'def': '5',
1.37 + 'name': 'EYE', 'platform': ['windows']}
1.38 +
1.39 + self.sdkInfo = { }
1.40
1.41 if AMBuild.mode == 'config':
1.42 #Detect compilers
1.43 @@ -51,12 +53,22 @@
1.44 envvars['HL2SDK-BGT'] = 'hl2sdk-bgt'
1.45 envvars['HL2SDK-EYE'] = 'hl2sdk-eye'
1.46
1.47 - #Must have a path for each envvar (file a bug if you don't like this)
1.48 + # Finds if a dict with `key` set to `value` is present on the dict of dicts `dictionary`
1.49 + def findDictByKey(dictionary, key, value):
1.50 + for index in dictionary:
1.51 + elem = dictionary[index]
1.52 + if elem[key] == value:
1.53 + return (elem, index)
1.54 + return None
1.55 +
1.56 for i in envvars:
1.57 if i in os.environ:
1.58 path = os.environ[i]
1.59 if not os.path.isdir(path):
1.60 raise Exception('Path for {0} was not found: {1}'.format(i, path))
1.61 + elif i.startswith('HL2SDK'):
1.62 + (info, sdk) = findDictByKey(self.possibleSdks, 'sdk', i)
1.63 + self.sdkInfo[sdk] = info
1.64 else:
1.65 head = os.getcwd()
1.66 oldhead = None
1.67 @@ -66,10 +78,18 @@
1.68 break
1.69 oldhead = head
1.70 head, tail = os.path.split(head)
1.71 - if head == None or head == oldhead:
1.72 + if i.startswith('HL2SDK'):
1.73 + (info, sdk) = findDictByKey(self.possibleSdks, 'sdk', i)
1.74 + self.sdkInfo[sdk] = info
1.75 + elif head == None or head == oldhead:
1.76 raise Exception('Could not find a valid path for {0}'.format(i))
1.77 AMBuild.cache.CacheVariable(i, path)
1.78
1.79 + if len(self.sdkInfo) < 1:
1.80 + raise Exception('At least one SDK must be available.')
1.81 +
1.82 + AMBuild.cache.CacheVariable('sdkInfo', self.sdkInfo)
1.83 +
1.84 #Set up defines
1.85 cxx = self.compiler.cxx
1.86 if isinstance(cxx, Cpp.CompatGCC):
1.87 @@ -195,6 +215,7 @@
1.88 self.targetMap = { }
1.89 AMBuild.cache.CacheVariable('targetMap', self.targetMap)
1.90 else:
1.91 + self.sdkInfo = AMBuild.cache['sdkInfo']
1.92 self.compiler.FromConfig(AMBuild, 'compiler')
1.93 self.targetMap = AMBuild.cache['targetMap']
1.94
1.95 @@ -294,7 +315,7 @@
1.96 compiler['CXXINCLUDES'].append(os.path.join(self.mmsPath, mms))
1.97 compiler['CXXINCLUDES'].append(os.path.join(self.mmsPath, mms, 'sourcehook'))
1.98
1.99 - info = self.sdkInfo
1.100 + info = self.possibleSdks
1.101 compiler['CDEFINES'].extend(['SE_' + info[i]['name'] + '=' + info[i]['def'] for i in info])
1.102
1.103 paths = [['public'], ['public', 'engine'], ['public', 'mathlib'], ['public', 'vstdlib'],