tools/buildbot/PackageScript
author Asher Baker <asherkin@gmail.com>
Wed May 30 14:20:18 2012 +0100 (2012-05-30)
changeset 3541 d4fb2ac6710b
parent 3540 33b39cd05faf
child 3613 b0740093756d
permissions -rw-r--r--
Removed files accidentally commited in 33b39cd05faf.
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'],
dvander@2784
    74
           ['addons', 'sourcemod', 'gamedata', 'sdktools.games'],
skamonkey@3525
    75
		   ['addons', 'sourcemod', 'gamedata', 'sm-cstrike.games'],
dvander@2784
    76
           ['addons', 'sourcemod', 'configs', 'geoip'],
dvander@2784
    77
           ['addons', 'sourcemod', 'translations'],
dvander@2784
    78
           ['addons', 'sourcemod', 'logs'],
dvander@2784
    79
           ['addons', 'sourcemod', 'extensions'],
dvander@2784
    80
           ['addons', 'sourcemod', 'data'],
dvander@2784
    81
           ['addons', 'sourcemod', 'scripting', 'include'],
dvander@2784
    82
           ['addons', 'sourcemod', 'scripting', 'admin-flatfile'],
dvander@2784
    83
           ['addons', 'sourcemod', 'scripting', 'adminmenu'],
dvander@2784
    84
           ['addons', 'sourcemod', 'scripting', 'testsuite'],
dvander@2784
    85
           ['cfg', 'sourcemod'],
dvander@2784
    86
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts'],
dvander@2784
    87
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'mysql'],
dvander@2784
    88
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'sqlite'],
dvander@2784
    89
           ['addons', 'sourcemod', 'scripting', 'basecommands'],
dvander@2784
    90
           ['addons', 'sourcemod', 'scripting', 'basecomm'],
dvander@2784
    91
           ['addons', 'sourcemod', 'scripting', 'funvotes'],
dvander@2784
    92
           ['addons', 'sourcemod', 'scripting', 'basevotes'],
dvander@2784
    93
           ['addons', 'sourcemod', 'scripting', 'basebans'],
dvander@2784
    94
           ['addons', 'sourcemod', 'scripting', 'funcommands'],
dvander@2784
    95
           ['addons', 'sourcemod', 'scripting', 'playercommands'],
dvander@2784
    96
           ['addons', 'metamod'],
dvander@2784
    97
          ]
dvander@2784
    98
dvander@2784
    99
#Setup
dvander@2784
   100
job.AddCommand(DestroyPath(os.path.join(AMBuild.outputFolder, 'package')))
dvander@2784
   101
job.AddCommand(CreateFolders(folders))
dvander@2784
   102
dvander@2784
   103
#Copy Folders
dvander@2784
   104
job.AddCommand(CopyFolder(['configs'], ['addons', 'sourcemod', 'configs']))
dvander@2784
   105
job.AddCommand(CopyFolder(['configs', 'geoip'], ['addons', 'sourcemod', 'configs', 'geoip']))
dvander@2784
   106
job.AddCommand(CopyFolder(['configs', 'cfg'], ['cfg', 'sourcemod']))
dvander@2784
   107
job.AddCommand(CopyFolder(['configs', 'metamod'], ['addons', 'metamod']))
dvander@2784
   108
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts'],
dvander@2784
   109
	['addons', 'sourcemod', 'configs', 'sql-init-scripts']))
dvander@2784
   110
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts', 'mysql'],
dvander@2784
   111
	['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'mysql']))
dvander@2784
   112
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts', 'sqlite'],
dvander@2784
   113
	['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'sqlite']))
dvander@2784
   114
job.AddCommand(CopyFolder(['gamedata'], ['addons', 'sourcemod', 'gamedata']))
dvander@2784
   115
job.AddCommand(CopyFolder(['gamedata', 'sdktools.games'],
dvander@2784
   116
	['addons', 'sourcemod', 'gamedata', 'sdktools.games']))
dvander@2784
   117
job.AddCommand(CopyFolder(['gamedata', 'core.games'],
dvander@2784
   118
	['addons', 'sourcemod', 'gamedata', 'core.games']))
skamonkey@3525
   119
job.AddCommand(CopyFolder(['gamedata', 'sm-cstrike.games'],
skamonkey@3525
   120
	['addons', 'sourcemod', 'gamedata', 'sm-cstrike.games']))
dvander@2784
   121
job.AddCommand(CopyFolder(['plugins'], ['addons', 'sourcemod', 'scripting'], ['AMBuilder']))
dvander@2784
   122
job.AddCommand(CopyFolder(['plugins', 'include'],
dvander@2784
   123
	['addons', 'sourcemod', 'scripting', 'include']))
dvander@2784
   124
job.AddCommand(CopyFolder(['translations'], ['addons', 'sourcemod', 'translations']))
dvander@2784
   125
job.AddCommand(CopyFolder(['public', 'licenses'], ['addons', 'sourcemod']))
dvander@2784
   126
job.AddCommand(CopyFolder(['plugins', 'admin-flatfile'],
dvander@2784
   127
	['addons', 'sourcemod', 'scripting', 'admin-flatfile']))
dvander@2784
   128
job.AddCommand(CopyFolder(['plugins', 'adminmenu'],
dvander@2784
   129
	['addons', 'sourcemod', 'scripting', 'adminmenu']))
dvander@2784
   130
job.AddCommand(CopyFolder(['plugins', 'testsuite'],
dvander@2784
   131
	['addons', 'sourcemod', 'scripting', 'testsuite']))
dvander@2784
   132
job.AddCommand(CopyFolder(['plugins', 'basecommands'],
dvander@2784
   133
	['addons', 'sourcemod', 'scripting', 'basecommands']))
dvander@2784
   134
job.AddCommand(CopyFolder(['plugins', 'basecomm'],
dvander@2784
   135
	['addons', 'sourcemod', 'scripting', 'basecomm']))
dvander@2784
   136
job.AddCommand(CopyFolder(['plugins', 'funvotes'],
dvander@2784
   137
	['addons', 'sourcemod', 'scripting', 'funvotes']))
dvander@2784
   138
job.AddCommand(CopyFolder(['plugins', 'basevotes'],
dvander@2784
   139
	['addons', 'sourcemod', 'scripting', 'basevotes']))
dvander@2784
   140
job.AddCommand(CopyFolder(['plugins', 'basebans'],
dvander@2784
   141
	['addons', 'sourcemod', 'scripting', 'basebans']))
dvander@2784
   142
job.AddCommand(CopyFolder(['plugins', 'funcommands'],
dvander@2784
   143
	['addons', 'sourcemod', 'scripting', 'funcommands']))
dvander@2784
   144
job.AddCommand(CopyFolder(['plugins', 'playercommands'],
dvander@2784
   145
	['addons', 'sourcemod', 'scripting', 'playercommands']))
dvander@2784
   146
dvander@2784
   147
defPlugins = [
dvander@2784
   148
	'admin-flatfile',
dvander@2784
   149
	'adminhelp',
dvander@2784
   150
	'antiflood',
dvander@2784
   151
	'basecommands',
dvander@2784
   152
	'reservedslots',
dvander@2784
   153
	'basetriggers',
dvander@2784
   154
	'nextmap',
dvander@2784
   155
	'basechat',
dvander@2784
   156
	'funcommands',
dvander@2784
   157
	'basevotes',
dvander@2784
   158
	'funvotes',
dvander@2784
   159
	'basebans',
dvander@2784
   160
	'basecomm',
dvander@2784
   161
	'adminmenu',
dvander@2784
   162
	'playercommands',
dvander@2784
   163
	'clientprefs',
dvander@2784
   164
	'sounds'
dvander@2784
   165
]
dvander@2784
   166
dvander@2784
   167
disPlugins = [
dvander@2784
   168
	'admin-sql-prefetch',
dvander@2784
   169
	'admin-sql-threaded',
dvander@2784
   170
	'sql-admin-manager',
dvander@2784
   171
	'mapchooser',
dvander@2784
   172
	'randomcycle',
dvander@2784
   173
	'rockthevote',
dvander@2784
   174
	'nominations'
dvander@2784
   175
]
dvander@2784
   176
dvander@2784
   177
commands = []
dvander@2784
   178
for plugin in defPlugins:
dvander@2784
   179
	commands.append(CopyFile(os.path.join('..', 'plugins', plugin + '.smx'),
dvander@2784
   180
	                         os.path.join('addons', 'sourcemod', 'plugins')))
dvander@2784
   181
dvander@2784
   182
for plugin in disPlugins:
dvander@2784
   183
	commands.append(CopyFile(os.path.join('..', 'plugins', plugin + '.smx'),
dvander@2784
   184
	                         os.path.join('addons', 'sourcemod', 'plugins', 'disabled')))
dvander@2784
   185
job.AddCommandGroup(commands)
dvander@2784
   186
dvander@2784
   187
bincopies = []
dvander@2784
   188
dvander@2784
   189
def AddNormalLibrary(name, dest):
dvander@2784
   190
	dest = os.path.join('addons', 'sourcemod', dest)
dvander@2784
   191
	bincopies.append(CopyFile(os.path.join('..', name, name + osutil.SharedLibSuffix()), dest))
asherkin@3458
   192
	
asherkin@3458
   193
	# Each platform's version of dump_syms needs the path in a different format.
asherkin@3458
   194
	if AMBuild.target['platform'] == 'linux':
asherkin@3458
   195
		debug_info.append(name + '/' + name + '.so')
asherkin@3458
   196
	elif AMBuild.target['platform'] == 'darwin':
asherkin@3458
   197
		debug_info.append(name + '/' + name + '.dylib.dSYM')
asherkin@3458
   198
	elif AMBuild.target['platform'] == 'windows':
asherkin@3458
   199
		debug_info.append(name + '\\' + name + '.pdb')
dvander@2784
   200
dvander@2784
   201
def AddHL2Library(name, dest):
dvander@2784
   202
	for i in SM.sdkInfo:
dvander@2784
   203
		sdk = SM.sdkInfo[i]
ds@2993
   204
		if AMBuild.target['platform'] not in sdk['platform']:
ds@2993
   205
			continue
dvander@2784
   206
		AddNormalLibrary(name + '.' + sdk['ext'], dest)
dvander@2784
   207
asherkin@3458
   208
debug_info = []
dvander@2784
   209
dvander@2784
   210
if AMBuild.target['platform'] == 'linux':
dvander@2784
   211
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm_i486.so'),
dvander@2784
   212
	                 os.path.join('addons', 'sourcemod', 'bin')))
asherkin@3458
   213
	debug_info.append('loader/sourcemod_mm_i486.so')
ds@2993
   214
elif AMBuild.target['platform'] == 'darwin':
ds@2993
   215
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm.dylib'),
ds@2993
   216
	                 os.path.join('addons', 'sourcemod', 'bin')))
asherkin@3458
   217
	debug_info.append('loader/sourcemod_mm.dylib.dSYM')
dvander@2784
   218
elif AMBuild.target['platform'] == 'windows':
dvander@2784
   219
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm.dll'),
dvander@2784
   220
	                 os.path.join('addons', 'sourcemod', 'bin')))
asherkin@3458
   221
	debug_info.append('loader\\sourcemod_mm.pdb')
dvander@2784
   222
skamonkey@3059
   223
AddHL2Library('sourcemod', 'bin')
skamonkey@3058
   224
AddNormalLibrary('sourcemod.logic', 'bin')
dvander@2784
   225
AddNormalLibrary('sourcepawn.jit.x86', 'bin')
dvander@2784
   226
AddNormalLibrary('geoip.ext', 'extensions')
asherkin@3541
   227
AddNormalLibrary('dbi.mysql.ext', 'extensions')
dvander@2784
   228
AddNormalLibrary('dbi.sqlite.ext', 'extensions')
skamonkey@3526
   229
skamonkey@3046
   230
AddNormalLibrary('game.cstrike.ext.2.ep2v', 'extensions')
skamonkey@3527
   231
if AMBuild.target['platform'] != 'darwin':
skamonkey@3526
   232
	AddNormalLibrary('game.cstrike.ext.2.csgo', 'extensions')
skamonkey@3526
   233
	
dvander@2784
   234
AddNormalLibrary('game.tf2.ext.2.ep2v', 'extensions')
dvander@2784
   235
AddNormalLibrary('topmenus.ext', 'extensions')
dvander@2784
   236
AddNormalLibrary('regex.ext', 'extensions')
dvander@2784
   237
AddNormalLibrary('webternet.ext', 'extensions')
dvander@2784
   238
AddNormalLibrary('clientprefs.ext', 'extensions')
dvander@2784
   239
AddNormalLibrary('updater.ext', 'extensions')
ds@3105
   240
AddNormalLibrary('bintools.ext', 'extensions')
dvander@2784
   241
AddHL2Library('sdktools.ext', 'extensions')
dvander@2784
   242
dvander@2784
   243
bincopies.append(CopyFile(os.path.join('..', 'spcomp', 'spcomp' + osutil.ExecutableSuffix()),
dvander@2784
   244
                          os.path.join('addons', 'sourcemod', 'scripting')))
dvander@2784
   245
dvander@2784
   246
job.AddCommandGroup(bincopies)
dvander@2784
   247
dvander@2784
   248
if AMBuild.target['platform'] == 'windows':
dvander@2784
   249
	job.AddCommand(CopyFile(
dvander@2784
   250
		os.path.join(AMBuild.sourceFolder, 'sourcepawn', 'batchtool', 'compile.exe'),
dvander@2784
   251
		os.path.join('addons', 'sourcemod', 'scripting')))
asherkin@3458
   252
	
asherkin@3458
   253
pdblog = open(os.path.join(AMBuild.outputFolder, 'pdblog.txt'), 'wt')
asherkin@3458
   254
for pdb in debug_info:
asherkin@3458
   255
	pdblog.write(pdb + '\n')
asherkin@3458
   256
pdblog.close()
dvander@2784
   257