tools/buildbot/PackageScript
author David Anderson <dvander@alliedmods.net>
Sun Aug 30 00:46:56 2009 -0700 (2009-08-30)
changeset 2784 8903397125e6
child 2791 432647ef3529
permissions -rw-r--r--
More changes for new build system.
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'],
dvander@2784
    75
           ['addons', 'sourcemod', 'configs', 'geoip'],
dvander@2784
    76
           ['addons', 'sourcemod', 'translations'],
dvander@2784
    77
           ['addons', 'sourcemod', 'logs'],
dvander@2784
    78
           ['addons', 'sourcemod', 'extensions'],
dvander@2784
    79
           ['addons', 'sourcemod', 'data'],
dvander@2784
    80
           ['addons', 'sourcemod', 'scripting', 'include'],
dvander@2784
    81
           ['addons', 'sourcemod', 'scripting', 'admin-flatfile'],
dvander@2784
    82
           ['addons', 'sourcemod', 'scripting', 'adminmenu'],
dvander@2784
    83
           ['addons', 'sourcemod', 'scripting', 'testsuite'],
dvander@2784
    84
           ['cfg', 'sourcemod'],
dvander@2784
    85
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts'],
dvander@2784
    86
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'mysql'],
dvander@2784
    87
           ['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'sqlite'],
dvander@2784
    88
           ['addons', 'sourcemod', 'scripting', 'basecommands'],
dvander@2784
    89
           ['addons', 'sourcemod', 'scripting', 'basecomm'],
dvander@2784
    90
           ['addons', 'sourcemod', 'scripting', 'funvotes'],
dvander@2784
    91
           ['addons', 'sourcemod', 'scripting', 'basevotes'],
dvander@2784
    92
           ['addons', 'sourcemod', 'scripting', 'basebans'],
dvander@2784
    93
           ['addons', 'sourcemod', 'scripting', 'funcommands'],
dvander@2784
    94
           ['addons', 'sourcemod', 'scripting', 'playercommands'],
dvander@2784
    95
           ['addons', 'metamod'],
dvander@2784
    96
          ]
dvander@2784
    97
dvander@2784
    98
#Setup
dvander@2784
    99
job.AddCommand(DestroyPath(os.path.join(AMBuild.outputFolder, 'package')))
dvander@2784
   100
job.AddCommand(CreateFolders(folders))
dvander@2784
   101
dvander@2784
   102
#Copy Folders
dvander@2784
   103
job.AddCommand(CopyFolder(['configs'], ['addons', 'sourcemod', 'configs']))
dvander@2784
   104
job.AddCommand(CopyFolder(['configs', 'geoip'], ['addons', 'sourcemod', 'configs', 'geoip']))
dvander@2784
   105
job.AddCommand(CopyFolder(['configs', 'cfg'], ['cfg', 'sourcemod']))
dvander@2784
   106
job.AddCommand(CopyFolder(['configs', 'metamod'], ['addons', 'metamod']))
dvander@2784
   107
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts'],
dvander@2784
   108
	['addons', 'sourcemod', 'configs', 'sql-init-scripts']))
dvander@2784
   109
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts', 'mysql'],
dvander@2784
   110
	['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'mysql']))
dvander@2784
   111
job.AddCommand(CopyFolder(['configs', 'sql-init-scripts', 'sqlite'],
dvander@2784
   112
	['addons', 'sourcemod', 'configs', 'sql-init-scripts', 'sqlite']))
dvander@2784
   113
job.AddCommand(CopyFolder(['gamedata'], ['addons', 'sourcemod', 'gamedata']))
dvander@2784
   114
job.AddCommand(CopyFolder(['gamedata', 'sdktools.games'],
dvander@2784
   115
	['addons', 'sourcemod', 'gamedata', 'sdktools.games']))
dvander@2784
   116
job.AddCommand(CopyFolder(['gamedata', 'core.games'],
dvander@2784
   117
	['addons', 'sourcemod', 'gamedata', 'core.games']))
dvander@2784
   118
job.AddCommand(CopyFolder(['plugins'], ['addons', 'sourcemod', 'scripting'], ['AMBuilder']))
dvander@2784
   119
job.AddCommand(CopyFolder(['plugins', 'include'],
dvander@2784
   120
	['addons', 'sourcemod', 'scripting', 'include']))
dvander@2784
   121
job.AddCommand(CopyFolder(['translations'], ['addons', 'sourcemod', 'translations']))
dvander@2784
   122
job.AddCommand(CopyFolder(['public', 'licenses'], ['addons', 'sourcemod']))
dvander@2784
   123
job.AddCommand(CopyFolder(['plugins', 'admin-flatfile'],
dvander@2784
   124
	['addons', 'sourcemod', 'scripting', 'admin-flatfile']))
dvander@2784
   125
job.AddCommand(CopyFolder(['plugins', 'adminmenu'],
dvander@2784
   126
	['addons', 'sourcemod', 'scripting', 'adminmenu']))
dvander@2784
   127
job.AddCommand(CopyFolder(['plugins', 'testsuite'],
dvander@2784
   128
	['addons', 'sourcemod', 'scripting', 'testsuite']))
dvander@2784
   129
job.AddCommand(CopyFolder(['plugins', 'basecommands'],
dvander@2784
   130
	['addons', 'sourcemod', 'scripting', 'basecommands']))
dvander@2784
   131
job.AddCommand(CopyFolder(['plugins', 'basecomm'],
dvander@2784
   132
	['addons', 'sourcemod', 'scripting', 'basecomm']))
dvander@2784
   133
job.AddCommand(CopyFolder(['plugins', 'funvotes'],
dvander@2784
   134
	['addons', 'sourcemod', 'scripting', 'funvotes']))
dvander@2784
   135
job.AddCommand(CopyFolder(['plugins', 'basevotes'],
dvander@2784
   136
	['addons', 'sourcemod', 'scripting', 'basevotes']))
dvander@2784
   137
job.AddCommand(CopyFolder(['plugins', 'basebans'],
dvander@2784
   138
	['addons', 'sourcemod', 'scripting', 'basebans']))
dvander@2784
   139
job.AddCommand(CopyFolder(['plugins', 'funcommands'],
dvander@2784
   140
	['addons', 'sourcemod', 'scripting', 'funcommands']))
dvander@2784
   141
job.AddCommand(CopyFolder(['plugins', 'playercommands'],
dvander@2784
   142
	['addons', 'sourcemod', 'scripting', 'playercommands']))
dvander@2784
   143
dvander@2784
   144
defPlugins = [
dvander@2784
   145
	'admin-flatfile',
dvander@2784
   146
	'adminhelp',
dvander@2784
   147
	'antiflood',
dvander@2784
   148
	'basecommands',
dvander@2784
   149
	'reservedslots',
dvander@2784
   150
	'basetriggers',
dvander@2784
   151
	'nextmap',
dvander@2784
   152
	'basechat',
dvander@2784
   153
	'funcommands',
dvander@2784
   154
	'basevotes',
dvander@2784
   155
	'funvotes',
dvander@2784
   156
	'basebans',
dvander@2784
   157
	'basecomm',
dvander@2784
   158
	'adminmenu',
dvander@2784
   159
	'playercommands',
dvander@2784
   160
	'clientprefs',
dvander@2784
   161
	'sounds'
dvander@2784
   162
]
dvander@2784
   163
dvander@2784
   164
disPlugins = [
dvander@2784
   165
	'admin-sql-prefetch',
dvander@2784
   166
	'admin-sql-threaded',
dvander@2784
   167
	'sql-admin-manager',
dvander@2784
   168
	'mapchooser',
dvander@2784
   169
	'randomcycle',
dvander@2784
   170
	'rockthevote',
dvander@2784
   171
	'nominations'
dvander@2784
   172
]
dvander@2784
   173
dvander@2784
   174
commands = []
dvander@2784
   175
for plugin in defPlugins:
dvander@2784
   176
	commands.append(CopyFile(os.path.join('..', 'plugins', plugin + '.smx'),
dvander@2784
   177
	                         os.path.join('addons', 'sourcemod', 'plugins')))
dvander@2784
   178
dvander@2784
   179
for plugin in disPlugins:
dvander@2784
   180
	commands.append(CopyFile(os.path.join('..', 'plugins', plugin + '.smx'),
dvander@2784
   181
	                         os.path.join('addons', 'sourcemod', 'plugins', 'disabled')))
dvander@2784
   182
job.AddCommandGroup(commands)
dvander@2784
   183
dvander@2784
   184
bincopies = []
dvander@2784
   185
dvander@2784
   186
def AddNormalLibrary(name, dest):
dvander@2784
   187
	dest = os.path.join('addons', 'sourcemod', dest)
dvander@2784
   188
	bincopies.append(CopyFile(os.path.join('..', name, name + osutil.SharedLibSuffix()), dest))
dvander@2784
   189
	pdb_list.append(name + '\\' + name + '.pdb')
dvander@2784
   190
dvander@2784
   191
def AddHL2Library(name, dest):
dvander@2784
   192
	for i in SM.sdkInfo:
dvander@2784
   193
		sdk = SM.sdkInfo[i]
dvander@2784
   194
		AddNormalLibrary(name + '.' + sdk['ext'], dest)
dvander@2784
   195
dvander@2784
   196
pdb_list = []
dvander@2784
   197
dvander@2784
   198
if AMBuild.target['platform'] == 'linux':
dvander@2784
   199
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm_i486.so'),
dvander@2784
   200
	                 os.path.join('addons', 'sourcemod', 'bin')))
dvander@2784
   201
elif AMBuild.target['platform'] == 'windows':
dvander@2784
   202
	bincopies.append(CopyFile(os.path.join('..', 'loader', 'sourcemod_mm.dll'),
dvander@2784
   203
	                 os.path.join('addons', 'sourcemod', 'bin')))
dvander@2784
   204
	pdb_list.append('loader\\sourcemod_mm.pdb')
dvander@2784
   205
dvander@2784
   206
AddHL2Library('sourcemod', 'bin')
dvander@2784
   207
AddNormalLibrary('sourcepawn.jit.x86', 'bin')
dvander@2784
   208
AddNormalLibrary('geoip.ext', 'extensions')
dvander@2784
   209
AddNormalLibrary('dbi.mysql.ext', 'extensions')
dvander@2784
   210
AddNormalLibrary('dbi.sqlite.ext', 'extensions')
dvander@2784
   211
AddNormalLibrary('game.cstrike.ext.1.ep1', 'extensions')
dvander@2784
   212
AddNormalLibrary('game.tf2.ext.2.ep2v', 'extensions')
dvander@2784
   213
AddNormalLibrary('topmenus.ext', 'extensions')
dvander@2784
   214
AddNormalLibrary('regex.ext', 'extensions')
dvander@2784
   215
AddNormalLibrary('webternet.ext', 'extensions')
dvander@2784
   216
AddNormalLibrary('clientprefs.ext', 'extensions')
dvander@2784
   217
AddNormalLibrary('updater.ext', 'extensions')
dvander@2784
   218
AddHL2Library('bintools.ext', 'extensions')
dvander@2784
   219
AddHL2Library('sdktools.ext', 'extensions')
dvander@2784
   220
dvander@2784
   221
bincopies.append(CopyFile(os.path.join('..', 'spcomp', 'spcomp' + osutil.ExecutableSuffix()),
dvander@2784
   222
                          os.path.join('addons', 'sourcemod', 'scripting')))
dvander@2784
   223
dvander@2784
   224
job.AddCommandGroup(bincopies)
dvander@2784
   225
dvander@2784
   226
if AMBuild.target['platform'] == 'windows':
dvander@2784
   227
	job.AddCommand(CopyFile(
dvander@2784
   228
		os.path.join(AMBuild.sourceFolder, 'sourcepawn', 'batchtool', 'compile.exe'),
dvander@2784
   229
		os.path.join('addons', 'sourcemod', 'scripting')))
dvander@2784
   230
	pdblog = open(os.path.join(AMBuild.outputFolder, 'pdblog.txt'), 'wt')
dvander@2784
   231
	for pdb in pdb_list:
dvander@2784
   232
		pdblog.write(pdb + '\n')
dvander@2784
   233
	pdblog.close()
dvander@2784
   234