Changed build system so that it no longer requires all SDKs to be available (bug 5023, r=ds).
authorReuben Morais <reuben.morais@gmail.com>
Fri Sep 09 18:37:09 2011 -0500 (2011-09-09)
changeset 3388cbee39527756
parent 3387 2e920b7fa23f
child 3390 efcaf5280593
Changed build system so that it no longer requires all SDKs to be available (bug 5023, r=ds).
AMBuildScript
     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'],