tools/buildbot/PackageScript
author Nicholas Hastings <skamonkey@gmail.com>
Mon Jul 29 10:03:18 2013 -0400 (2013-07-29)
changeset 3960 d50b36dc6821
parent 3836 fedfe0c3165e
child 3961 0dc477c29792
permissions -rw-r--r--
Updated for latest hl2sdk-dota changes.
dvander@2784
     1
# vim: set ts=2 sw=2 tw=99 noet ft=python: 
dvander@2784
     2
import os
dvander@2784
     3
import shutil
dvander@2784
     4
import ambuild.osutil as osutil
dvander@2784
     5
from ambuild.command import Command
dvander@2784
     6
dvander@2784
     7
job = AMBuild.AddJob('package')
dvander@2784
     8
dvander@2784
     9
class DestroyPath(Command):
dvander@2784
    10
	def __init__(self, folder):
dvander@2784
    11
		Command.__init__(self)
dvander@2784
    12
		self.folder = folder
dvander@2784
    13
dvander@2784
    14
	def destroy(self, path):
dvander@2784
    15
		entries = os.listdir(path)
dvander@2784
    16
		for entry in entries:
dvander@2784
    17
			newpath = os.path.join(path, entry)
dvander@2784
    18
			if os.path.isdir(newpath):
dvander@2784
    19
				self.destroy(newpath)
dvander@2784
    20
				os.rmdir(newpath)
dvander@2784
    21
			elif os.path.isfile(newpath):
dvander@2784
    22
				os.remove(newpath)
dvander@2784
    23
dvander@2784
    24
	def run(self, runner, job):
dvander@2784
    25
		runner.PrintOut('rm -rf {0}/*'.format(self.folder))
dvander@2784
    26
		self.destroy(self.folder)
dvander@2784
    27
dvander@2784
    28
class CreateFolders(Command):
dvander@2784
    29
	def __init__(self, folders):
dvander@2784
    30
		Command.__init__(self)
dvander@2784
    31
		self.folders = folders
dvander@2784
    32
	
dvander@2784
    33
	def run(self, runner, job):
dvander@2784
    34
		for folder in self.folders:
dvander@2784
    35
			path = os.path.join(*folder)
dvander@2784
    36
			runner.PrintOut('mkdir {0}'.format(path))
dvander@2784
    37
			os.makedirs(path)
dvander@2784
    38
dvander@2784
    39
#Shallow folder copy
dvander@2784
    40
class CopyFolder(Command):
dvander@2784
    41
	def __init__(self, fromList, toList, excludes = []):
dvander@2784
    42
		Command.__init__(self)
dvander@2784
    43
		self.fromPath = os.path.join(AMBuild.sourceFolder, *fromList)
dvander@2784
    44
		self.toPath = os.path.join(*toList) 
dvander@2784
    45
		self.excludes = excludes
dvander@2784
    46
	
dvander@2784
    47
	def run(self, runner, job):
dvander@2784
    48
		entries = os.listdir(self.fromPath)
dvander@2784
    49
		for entry in entries:
dvander@2784
    50
			if entry in self.excludes:
dvander@2784
    51
				continue
dvander@2784
    52
			path = os.path.join(self.fromPath, entry)
dvander@2784
    53
			if not os.path.isfile(path):
dvander@2784
    54
				continue
dvander@2784
    55
			runner.PrintOut('copy {0} to {1}'.format(path, self.toPath))
dvander@2784
    56
			shutil.copy(path, self.toPath)
dvander@2784
    57
dvander@2784
    58
#Single file copy
dvander@2784
    59
class CopyFile(Command):
dvander@2784
    60
	def __init__(self, fromFile, toPath):
dvander@2784
    61
		Command.__init__(self)
dvander@2784
    62
		self.fromFile = fromFile
dvander@2784
    63
		self.toPath = toPath
dvander@2784
    64
dvander@2784
    65
	def run(self, runner, job):
dvander@2784
    66
		runner.PrintOut('copy {0} to {1}'.format(self.fromFile, self.toPath))
dvander@2784
    67
		shutil.copy(self.fromFile, self.toPath)
dvander@2784
    68
dvander@2784
    69
dvander@2784
    70
folders = [['addons', 'sourcemod', 'bin'],
dvander@2784
    71
           ['addons', 'sourcemod', 'plugins', 'disabled'],
dvander@2784
    72
           ['addons', 'sourcemod', 'gamedata'],
dvander@2784
    73
           ['addons', 'sourcemod', 'gamedata', 'core.games'],
skamonkey@3767
    74
		   ['addons', 'sourcemod', 'gamedata', 'sdkhooks.games'],
dvander@2784
    75
           ['addons', 'sourcemod', 'gamedata', 'sdktools.games'],
skamonkey@3525
    76
		   ['addons', 'sourcemod', 'gamedata', 'sm-cstrike.games'],
dvander@2784
    77
           ['addons', 'sourcemod', 'configs', 'geoip'],
dvander@2784
    78
           ['addons', 'sourcemod', 'translations'],
dvander@2784
    79
           ['addons', 'sourcemod', 'logs'],
dvander@2784
    80
           ['addons', 'sourcemod', 'extensions'],
dvander@2784
    81
           ['addons', 'sourcemod', 'data'],
dvander@2784
    82
           ['addons', 'sourcemod', 'scripting', 'include'],
dvander@2784
    83
           ['addons', 'sourcemod', 'scripting', 'admin-flatfile'],
dvander@2784
    84
           ['addons', 'sourcemod', 'scripting', 'adminmenu'],
dvander@2784
    85
           ['addons', 'sourcemod', 'scripting', 'testsuite'],
dvander@2784
    86
           ['cfg', 'sourcemod'],
dvander@2784
    87
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts'],
dvander@2784
    88
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'mysql'],
dvander@2784
    89
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'sqlite'],
dvander@2784
    90
           ['addons', 'sourcemod', 'scripting', 'basecommands'],
dvander@2784
    91
           ['addons', 'sourcemod', 'scripting', 'basecomm'],
dvander@2784
    92
           ['addons', 'sourcemod', 'scripting', 'funvotes'],
dvander@2784
    93
           ['addons', 'sourcemod', 'scripting', 'basevotes'],
dvander@2784
    94
           ['addons', 'sourcemod', 'scripting', 'basebans'],
dvander@2784
    95
           ['addons', 'sourcemod', 'scripting', 'funcommands'],
dvander@2784
    96
           ['addons', 'sourcemod', 'scripting', 'playercommands'],
dvander@2784
    97
           ['addons', 'metamod'],
dvander@2784
    98
          ]
dvander@2784
    99
dvander@2784
   100
#Setup
dvander@2784
   101
job.AddCommand(DestroyPath(os.path.join(AMBuild.outputFolder, 'package')))
dvander@2784
   102
job.AddCommand(CreateFolders(folders))
dvander@2784
   103
dvander@2784
   104
#Copy Folders
dvander@2784
   105
job.AddCommand(CopyFolder(['configs'], ['addons', 'sourcemod', 'configs']))
dvander@2784
   106
job.AddCommand(CopyFolder(['configs', 'geoip'], ['addons', 'sourcemod', 'configs', 'geoip']))
dvander@2784
   107
job.AddCommand(CopyFolder(['configs', 'cfg'], ['cfg', 'sourcemod']))
dvander@2784
   108
job.AddCommand(CopyFolder(['configs', 'metamod'], ['addons', 'metamod']))
dvander@2784
   109
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts'],
dvander@2784
   110
	['addons', 'sourcemod', 'configs', 'sql-init-scripts']))
dvander@2784
   111
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts', 'mysql'],
dvander@2784
   112
	['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'mysql']))
dvander@2784
   113
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts', 'sqlite'],
dvander@2784
   114
	['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'sqlite']))
dvander@2784
   115
job.AddCommand(CopyFolder(['gamedata'], ['addons', 'sourcemod', 'gamedata']))
skamonkey@3767
   116
job.AddCommand(CopyFolder(['gamedata', 'sdkhooks.games'],
skamonkey@3767
   117
	['addons', 'sourcemod', 'gamedata', 'sdkhooks.games']))
dvander@2784
   118
job.AddCommand(CopyFolder(['gamedata', 'sdktools.games'],
dvander@2784
   119
	['addons', 'sourcemod', 'gamedata', 'sdktools.games']))
dvander@2784
   120
job.AddCommand(CopyFolder(['gamedata', 'core.games'],
dvander@2784
   121
	['addons', 'sourcemod', 'gamedata', 'core.games']))
skamonkey@3525
   122
job.AddCommand(CopyFolder(['gamedata', 'sm-cstrike.games'],
skamonkey@3525
   123
	['addons', 'sourcemod', 'gamedata', 'sm-cstrike.games']))
dvander@2784
   124
job.AddCommand(CopyFolder(['plugins'], ['addons', 'sourcemod', 'scripting'], ['AMBuilder']))
dvander@2784
   125
job.AddCommand(CopyFolder(['plugins', 'include'],
dvander@2784
   126
	['addons', 'sourcemod', 'scripting', 'include']))
dvander@2784
   127
job.AddCommand(CopyFolder(['translations'], ['addons', 'sourcemod', 'translations']))
dvander@2784
   128
job.AddCommand(CopyFolder(['public', 'licenses'], ['addons', 'sourcemod']))
dvander@2784
   129
job.AddCommand(CopyFolder(['plugins', 'admin-flatfile'],
dvander@2784
   130
	['addons', 'sourcemod', 'scripting', 'admin-flatfile']))
dvander@2784
   131
job.AddCommand(CopyFolder(['plugins', 'adminmenu'],
dvander@2784
   132
	['addons', 'sourcemod', 'scripting', 'adminmenu']))
dvander@2784
   133
job.AddCommand(CopyFolder(['plugins', 'testsuite'],
dvander@2784
   134
	['addons', 'sourcemod', 'scripting', 'testsuite']))
dvander@2784
   135
job.AddCommand(CopyFolder(['plugins', 'basecommands'],
dvander@2784
   136
	['addons', 'sourcemod', 'scripting', 'basecommands']))
dvander@2784
   137
job.AddCommand(CopyFolder(['plugins', 'basecomm'],
dvander@2784
   138
	['addons', 'sourcemod', 'scripting', 'basecomm']))
dvander@2784
   139
job.AddCommand(CopyFolder(['plugins', 'funvotes'],
dvander@2784
   140
	['addons', 'sourcemod', 'scripting', 'funvotes']))
dvander@2784
   141
job.AddCommand(CopyFolder(['plugins', 'basevotes'],
dvander@2784
   142
	['addons', 'sourcemod', 'scripting', 'basevotes']))
dvander@2784
   143
job.AddCommand(CopyFolder(['plugins', 'basebans'],
dvander@2784
   144
	['addons', 'sourcemod', 'scripting', 'basebans']))
dvander@2784
   145
job.AddCommand(CopyFolder(['plugins', 'funcommands'],
dvander@2784
   146
	['addons', 'sourcemod', 'scripting', 'funcommands']))
dvander@2784
   147
job.AddCommand(CopyFolder(['plugins', 'playercommands'],
dvander@2784
   148
	['addons', 'sourcemod', 'scripting', 'playercommands']))
dvander@2784
   149
dvander@2784
   150
defPlugins = [
dvander@2784
   151
	'admin-flatfile',
dvander@2784
   152
	'adminhelp',
dvander@2784
   153
	'antiflood',
dvander@2784
   154
	'basecommands',
dvander@2784
   155
	'reservedslots',
dvander@2784
   156
	'basetriggers',
dvander@2784
   157
	'nextmap',
dvander@2784
   158
	'basechat',
dvander@2784
   159
	'funcommands',
dvander@2784
   160
	'basevotes',
dvander@2784
   161
	'funvotes',
dvander@2784
   162
	'basebans',
dvander@2784
   163
	'basecomm',
dvander@2784
   164
	'adminmenu',
dvander@2784
   165
	'playercommands',
dvander@2784
   166
	'clientprefs',
dvander@2784
   167
	'sounds'
dvander@2784
   168
]
dvander@2784
   169
dvander@2784
   170
disPlugins = [
dvander@2784
   171
	'admin-sql-prefetch',
dvander@2784
   172
	'admin-sql-threaded',
dvander@2784
   173
	'sql-admin-manager',
dvander@2784
   174
	'mapchooser',
dvander@2784
   175
	'randomcycle',
dvander@2784
   176
	'rockthevote',
dvander@2784
   177
	'nominations'
dvander@2784
   178
]
dvander@2784
   179
dvander@2784
   180
commands = []
dvander@2784
   181
for plugin in defPlugins:
dvander@2784
   182
	commands.append(CopyFile(os.path.join('..', 'plugins', plugin + '.smx'),
dvander@2784
   183
	                         os.path.join('addons', 'sourcemod', 'plugins')))
dvander@2784
   184
dvander@2784
   185
for plugin in disPlugins:
dvander@2784
   186
	commands.append(CopyFile(os.path.join('..', 'plugins', plugin + '.smx'),
dvander@2784
   187
	                         os.path.join('addons', 'sourcemod', 'plugins', 'disabled')))
dvander@2784
   188
job.AddCommandGroup(commands)
dvander@2784
   189
asherkin@3652
   190
job.AddCommand(CopyFile(os.path.join('..', 'includes', 'version_auto.inc'),
asherkin@3652
   191
	os.path.join('addons', 'sourcemod', 'scripting', 'include')))
asherkin@3652
   192
dvander@2784
   193
bincopies = []
dvander@2784
   194
dvander@2784
   195
def AddNormalLibrary(name, dest):
dvander@2784
   196
	dest = os.path.join('addons', 'sourcemod', dest)
dvander@2784
   197
	bincopies.append(CopyFile(os.path.join('..', name, name + osutil.SharedLibSuffix()), dest))
asherkin@3458
   198
	
asherkin@3458
   199
	# Each platform's version of dump_syms needs the path in a different format.
asherkin@3458
   200
	if AMBuild.target['platform'] == 'linux':
asherkin@3458
   201
		debug_info.append(name + '/' + name + '.so')
asherkin@3458
   202
	elif AMBuild.target['platform'] == 'darwin':
asherkin@3458
   203
		debug_info.append(name + '/' + name + '.dylib.dSYM')
asherkin@3458
   204
	elif AMBuild.target['platform'] == 'windows':
asherkin@3458
   205
		debug_info.append(name + '\\' + name + '.pdb')
dvander@2784
   206
dvander@2784
   207
def AddHL2Library(name, dest):
dvander@2784
   208
	for i in SM.sdkInfo:
dvander@2784
   209
		sdk = SM.sdkInfo[i]
ds@2993
   210
		if AMBuild.target['platform'] not in sdk['platform']:
ds@2993
   211
			continue
dvander@2784
   212
		AddNormalLibrary(name + '.' + sdk['ext'], dest)
dvander@2784
   213
asherkin@3458
   214
debug_info = []
dvander@2784
   215
dvander@2784
   216
if AMBuild.target['platform'] == 'linux':
dvander@2784
   217
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm_i486.so'),
dvander@2784
   218
	                 os.path.join('addons', 'sourcemod', 'bin')))
asherkin@3458
   219
	debug_info.append('loader/sourcemod_mm_i486.so')
ds@2993
   220
elif AMBuild.target['platform'] == 'darwin':
ds@2993
   221
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm.dylib'),
ds@2993
   222
	                 os.path.join('addons', 'sourcemod', 'bin')))
asherkin@3458
   223
	debug_info.append('loader/sourcemod_mm.dylib.dSYM')
dvander@2784
   224
elif AMBuild.target['platform'] == 'windows':
dvander@2784
   225
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm.dll'),
dvander@2784
   226
	                 os.path.join('addons', 'sourcemod', 'bin')))
asherkin@3458
   227
	debug_info.append('loader\\sourcemod_mm.pdb')
dvander@2784
   228
skamonkey@3059
   229
AddHL2Library('sourcemod', 'bin')
skamonkey@3058
   230
AddNormalLibrary('sourcemod.logic', 'bin')
dvander@2784
   231
AddNormalLibrary('sourcepawn.jit.x86', 'bin')
dvander@2784
   232
AddNormalLibrary('geoip.ext', 'extensions')
ds@3828
   233
if SM.hasMySql:
ds@3828
   234
	AddNormalLibrary('dbi.mysql.ext', 'extensions')
dvander@2784
   235
AddNormalLibrary('dbi.sqlite.ext', 'extensions')
skamonkey@3526
   236
asherkin@3725
   237
if 'css' in SM.sdkInfo:
asherkin@3725
   238
	AddNormalLibrary('game.cstrike.ext.2.css', 'extensions')
asherkin@3725
   239
asherkin@3725
   240
if 'csgo' in SM.sdkInfo:
asherkin@3725
   241
	AddNormalLibrary('game.cstrike.ext.2.csgo', 'extensions')
asherkin@3725
   242
asherkin@3725
   243
if 'ep2v' in SM.sdkInfo:
asherkin@3725
   244
	AddNormalLibrary('game.tf2.ext.2.ep2v', 'extensions')
asherkin@3725
   245
dvander@2784
   246
AddNormalLibrary('topmenus.ext', 'extensions')
dvander@2784
   247
AddNormalLibrary('regex.ext', 'extensions')
dvander@2784
   248
AddNormalLibrary('webternet.ext', 'extensions')
dvander@2784
   249
AddNormalLibrary('clientprefs.ext', 'extensions')
dvander@2784
   250
AddNormalLibrary('updater.ext', 'extensions')
ds@3105
   251
AddNormalLibrary('bintools.ext', 'extensions')
skamonkey@3767
   252
AddHL2Library('sdkhooks.ext', 'extensions')
dvander@2784
   253
AddHL2Library('sdktools.ext', 'extensions')
dvander@2784
   254
dvander@2784
   255
bincopies.append(CopyFile(os.path.join('..', 'spcomp', 'spcomp' + osutil.ExecutableSuffix()),
dvander@2784
   256
                          os.path.join('addons', 'sourcemod', 'scripting')))
dvander@2784
   257
asherkin@3835
   258
# Each platform's version of dump_syms needs the path in a different format.
asherkin@3835
   259
if AMBuild.target['platform'] == 'linux':
asherkin@3835
   260
	debug_info.append('spcomp' + '/' + 'spcomp')
asherkin@3835
   261
elif AMBuild.target['platform'] == 'darwin':
asherkin@3835
   262
	debug_info.append('spcomp' + '/' + 'spcomp' + '.dSYM')
asherkin@3835
   263
elif AMBuild.target['platform'] == 'windows':
asherkin@3836
   264
	debug_info.append('spcomp' + '\\' + 'spcomp' + '.pdb')
asherkin@3835
   265
dvander@2784
   266
job.AddCommandGroup(bincopies)
dvander@2784
   267
dvander@2784
   268
if AMBuild.target['platform'] == 'windows':
dvander@2784
   269
	job.AddCommand(CopyFile(
dvander@2784
   270
		os.path.join(AMBuild.sourceFolder, 'sourcepawn', 'batchtool', 'compile.exe'),
dvander@2784
   271
		os.path.join('addons', 'sourcemod', 'scripting')))
asherkin@3458
   272
	
asherkin@3458
   273
pdblog = open(os.path.join(AMBuild.outputFolder, 'pdblog.txt'), 'wt')
asherkin@3458
   274
for pdb in debug_info:
asherkin@3458
   275
	pdblog.write(pdb + '\n')
asherkin@3458
   276
pdblog.close()
dvander@2784
   277