382 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			382 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # vim: set ts=8 sts=2 sw=2 tw=99 et ft=python: 
 | |
| import os
 | |
| 
 | |
| builder.SetBuildFolder('packages')
 | |
| 
 | |
| ModPackages = {
 | |
|   'cstrike': 'cstrike',
 | |
|   'dod': 'dod',
 | |
|   'esf': 'esf',
 | |
|   'ns': 'ns',
 | |
|   'tfc': 'tfc',
 | |
|   'tfcx': 'tfc',
 | |
|   'ts': 'ts',
 | |
| }
 | |
| 
 | |
| folder_list = [
 | |
|     'base/addons/amxmodx',
 | |
|     'base/addons/amxmodx/configs',
 | |
|     'base/addons/amxmodx/data',
 | |
|     'base/addons/amxmodx/data/lang',
 | |
|     'base/addons/amxmodx/dlls',
 | |
|     'base/addons/amxmodx/logs',
 | |
|     'base/addons/amxmodx/modules',
 | |
|     'base/addons/amxmodx/plugins',
 | |
|     'base/addons/amxmodx/scripting',
 | |
|     'base/addons/amxmodx/scripting/include',
 | |
|     'base/addons/amxmodx/scripting/testsuite',
 | |
|     'cstrike/addons/amxmodx/configs',
 | |
|     'cstrike/addons/amxmodx/data',
 | |
|     'cstrike/addons/amxmodx/plugins',
 | |
|     'cstrike/addons/amxmodx/modules',
 | |
|     'cstrike/addons/amxmodx/scripting',
 | |
|     'dod/addons/amxmodx/configs',
 | |
|     'dod/addons/amxmodx/data',
 | |
|     'dod/addons/amxmodx/plugins',
 | |
|     'dod/addons/amxmodx/modules',
 | |
|     'dod/addons/amxmodx/scripting',
 | |
|     'esf/addons/amxmodx/configs',
 | |
|     'esf/addons/amxmodx/plugins',
 | |
|     'esf/addons/amxmodx/scripting',
 | |
|     'ns/addons/amxmodx/configs',
 | |
|     'ns/addons/amxmodx/plugins',
 | |
|     'ns/addons/amxmodx/modules',
 | |
|     'ns/addons/amxmodx/scripting',
 | |
|     'tfc/addons/amxmodx/configs',
 | |
|     'tfc/addons/amxmodx/data',
 | |
|     'tfc/addons/amxmodx/plugins',
 | |
|     'tfc/addons/amxmodx/modules',
 | |
|     'tfc/addons/amxmodx/scripting',
 | |
|     'ts/addons/amxmodx/configs',
 | |
|     'ts/addons/amxmodx/data',
 | |
|     'ts/addons/amxmodx/plugins',
 | |
|     'ts/addons/amxmodx/modules',
 | |
|     'ts/addons/amxmodx/scripting',
 | |
| ]
 | |
| 
 | |
| def split_all(path):
 | |
|   parts = []
 | |
|   while True:
 | |
|     head, tail = os.path.split(path)
 | |
|     if head == path or tail == path:
 | |
|       parts.insert(0, path)
 | |
|       break
 | |
|     path = head
 | |
|     parts.insert(0, tail)
 | |
|   return parts
 | |
| 
 | |
| def copy_binary(source, dest):
 | |
|   builder.AddCopy(source.binary, dest)
 | |
| 
 | |
| # Create the distribution folder hierarchy.
 | |
| folder_map = {}
 | |
| for folder in folder_list:
 | |
|   norm_folder = os.path.normpath(folder)
 | |
|   folder_map[folder] = builder.AddFolder(norm_folder)
 | |
| 
 | |
| # Copy core dlls.
 | |
| for dll in AMXX.binaries:
 | |
|   copy_binary(dll, folder_map['base/addons/amxmodx/dlls'])
 | |
| 
 | |
| # Copy modules.
 | |
| for module in AMXX.modules:
 | |
|   parts = split_all(module.binary.path)
 | |
|   if parts[1] in ModPackages:
 | |
|     package = ModPackages[parts[1]]
 | |
|   else:
 | |
|     package = 'base'
 | |
|   copy_binary(module, folder_map[package + '/addons/amxmodx/modules'])
 | |
| 
 | |
| # Copy the compiler.
 | |
| builder.AddCopy(AMXX.amxxpc.binary, folder_map['base/addons/amxmodx/scripting'])
 | |
| builder.AddCopy(AMXX.libpc300.binary, folder_map['base/addons/amxmodx/scripting'])
 | |
| 
 | |
| # Copy plugins.
 | |
| StatsPlugins = ['csstats.amxx']
 | |
| for amxx_file in AMXX.plugins:
 | |
|   amxx_entry = AMXX.plugins[amxx_file]
 | |
|   package = os.path.dirname(amxx_file)
 | |
|   output_folder = '/addons/amxmodx/plugins'
 | |
|   if not len(package):
 | |
|     package = 'base'
 | |
|   else:
 | |
|     # Ugh - statsx plugins go into a random folder.
 | |
|     name = os.path.basename(amxx_file)
 | |
|     if name == package + 'stats.amxx' or name in StatsPlugins:
 | |
|       output_folder = '/addons/amxmodx/data'
 | |
| 
 | |
|   builder.AddCopy(amxx_entry, folder_map[package + output_folder])
 | |
| 
 | |
|   # If it was in a mod package, we can cheat and copy it to scripting since
 | |
|   # none of them are multi-file.
 | |
|   if package != 'base':
 | |
|     base_file, _ = os.path.splitext(os.path.basename(amxx_file))
 | |
|     source_file = os.path.join(
 | |
|       builder.sourcePath,
 | |
|       'plugins',
 | |
|       package,
 | |
|       base_file + '.sma'
 | |
|     )
 | |
|     builder.AddCopy(source_file, folder_map[package + '/addons/amxmodx/scripting'])
 | |
| 
 | |
| # Copy the generated version .inc.
 | |
| for generated_header in AMXX.generated_headers:
 | |
|   if 'amxmodx_version.inc' in generated_header.path:
 | |
|     builder.AddCopy(generated_header, folder_map['base/addons/amxmodx/scripting/include'])
 | |
|     break
 | |
| 
 | |
| # Copy WinCSX.
 | |
| if builder.target_platform == 'windows':
 | |
|   builder.AddCopy(AMXX.csx_app.binary, folder_map['cstrike/addons/amxmodx/data'])
 | |
| 
 | |
| # Copy configuration files for each mod.
 | |
| configs = [
 | |
|   'amxx.cfg',
 | |
|   'clcmds.ini',
 | |
|   'cmds.ini',
 | |
|   'configs.ini',
 | |
|   'core.ini',
 | |
|   'custommenuitems.cfg',
 | |
|   'cvars.ini',
 | |
|   'hamdata.ini',
 | |
|   'maps.ini',
 | |
|   'miscstats.ini',
 | |
|   'modules.ini',
 | |
|   'plugins.ini',
 | |
|   'speech.ini',
 | |
|   'sql.cfg',
 | |
|   'users.ini',
 | |
|   'cstrike/amxx.cfg',
 | |
|   'cstrike/cmds.ini',
 | |
|   'cstrike/core.ini',
 | |
|   'cstrike/cvars.ini',
 | |
|   'cstrike/maps.ini',
 | |
|   'cstrike/modules.ini',
 | |
|   'cstrike/plugins.ini',
 | |
|   'cstrike/stats.ini',
 | |
|   'dod/core.ini',
 | |
|   'dod/cvars.ini',
 | |
|   'dod/maps.ini',
 | |
|   'dod/modules.ini',
 | |
|   'dod/plugins.ini',
 | |
|   'esf/modules.ini',
 | |
|   'esf/plugins.ini',
 | |
|   'ns/amxx.cfg',
 | |
|   'ns/clcmds.ini',
 | |
|   'ns/cmds.ini',
 | |
|   'ns/cvars.ini',
 | |
|   'ns/maps.ini',
 | |
|   'ns/modules.ini',
 | |
|   'ns/plugins.ini',
 | |
|   'ns/speech.ini',
 | |
|   'ns/users.ini',
 | |
|   'tfc/core.ini',
 | |
|   'tfc/cvars.ini',
 | |
|   'tfc/maps.ini',
 | |
|   'tfc/modules.ini',
 | |
|   'tfc/plugins.ini',
 | |
|   'ts/core.ini',
 | |
|   'ts/maps.ini',
 | |
|   'ts/modules.ini',
 | |
|   'ts/plugins.ini',
 | |
| ]
 | |
| for config in configs:
 | |
|   cfg_folder, cfg_file = os.path.split(config)
 | |
|   if len(cfg_folder):
 | |
|     out_folder = cfg_folder + '/addons/amxmodx/configs'
 | |
|   else:
 | |
|     out_folder = 'base/addons/amxmodx/configs'
 | |
|   builder.AddCopy(
 | |
|     source = os.path.join(builder.sourcePath, 'configs', config),
 | |
|     output_path = folder_map[out_folder]
 | |
|   )
 | |
| 
 | |
| # Copy core scripting files.
 | |
| scripting_files = [
 | |
|   'admin.sma',
 | |
|   'adminchat.sma',
 | |
|   'admincmd.sma',
 | |
|   'adminhelp.sma',
 | |
|   'adminslots.sma',
 | |
|   'adminvote.sma',
 | |
|   'antiflood.sma',
 | |
|   'cmdmenu.sma',
 | |
|   'imessage.sma',
 | |
|   'mapchooser.sma',
 | |
|   'mapsmenu.sma',
 | |
|   'menufront.sma',
 | |
|   'multilingual.sma',
 | |
|   'nextmap.sma',
 | |
|   'pausecfg.sma',
 | |
|   'plmenu.sma',
 | |
|   'scrollmsg.sma',
 | |
|   'statscfg.sma',
 | |
|   'telemenu.sma',
 | |
|   'timeleft.sma',
 | |
|   'pluginmenu.sma',
 | |
|   'testsuite/admins_test.sma',
 | |
|   'testsuite/arraytest.sma',
 | |
|   'testsuite/callfunc_test.sma',
 | |
|   'testsuite/datapack_test.sma',
 | |
|   'testsuite/fakemeta_tests.sma',
 | |
|   'testsuite/fmttest.sma',
 | |
|   'testsuite/fwdtest1.sma',
 | |
|   'testsuite/fwdtest2.sma',
 | |
|   'testsuite/hashing_test.sma',
 | |
|   'testsuite/logtest.sma',
 | |
|   'testsuite/menutest.sma',
 | |
|   'testsuite/native_test.sma',
 | |
|   'testsuite/nvault_test.sma',
 | |
|   'testsuite/regex_test.sma',
 | |
|   'testsuite/sorttest.sma',
 | |
|   'testsuite/strbreak.sma',
 | |
|   'testsuite/sqlxtest.sma',
 | |
|   'testsuite/sqlxtest.sq3',
 | |
|   'testsuite/sqlxtest.sql',
 | |
|   'testsuite/trietest.sma',
 | |
|   'testsuite/utf8test.sma',
 | |
|   'testsuite/stacktest.sma',
 | |
|   'testsuite/textparse_test.sma',
 | |
|   'testsuite/textparse_test.cfg',
 | |
|   'testsuite/textparse_test.ini',
 | |
|   'include/amxconst.inc',
 | |
|   'include/amxmisc.inc',
 | |
|   'include/amxmodx.inc',
 | |
|   'include/core.inc',
 | |
|   'include/csstats.inc',
 | |
|   'include/cstrike.inc',
 | |
|   'include/csx.inc',
 | |
|   'include/cvars.inc',
 | |
|   'include/datapack.inc',
 | |
|   'include/dbi.inc',
 | |
|   'include/dodconst.inc',
 | |
|   'include/dodfun.inc',
 | |
|   'include/dodstats.inc',
 | |
|   'include/dodx.inc',
 | |
|   'include/engine.inc',
 | |
|   'include/engine_const.inc',
 | |
|   'include/engine_stocks.inc',
 | |
|   'include/esf.inc',
 | |
|   'include/esf_const.inc',
 | |
|   'include/fakemeta.inc',
 | |
|   'include/fakemeta_const.inc',
 | |
|   'include/fakemeta_stocks.inc',
 | |
|   'include/file.inc',
 | |
|   'include/float.inc',
 | |
|   'include/fun.inc',
 | |
|   'include/geoip.inc',
 | |
|   'include/lang.inc',
 | |
|   'include/ns.inc',
 | |
|   'include/ns_const.inc',
 | |
|   'include/nvault.inc',
 | |
|   'include/regex.inc',
 | |
|   'include/sockets.inc',
 | |
|   'include/string.inc',
 | |
|   'include/tfcconst.inc',
 | |
|   'include/tfcstats.inc',
 | |
|   'include/tfcx.inc',
 | |
|   'include/tsconst.inc',
 | |
|   'include/tsfun.inc',
 | |
|   'include/tsstats.inc',
 | |
|   'include/tsx.inc',
 | |
|   'include/vault.inc',
 | |
|   'include/xs.inc',
 | |
|   'include/cellarray.inc',
 | |
|   'include/cellstack.inc',
 | |
|   'include/celltrie.inc',
 | |
|   'include/fakemeta_util.inc',
 | |
|   'include/ham_const.inc',
 | |
|   'include/hamsandwich.inc',
 | |
|   'include/hlsdk_const.inc',
 | |
|   'include/message_const.inc',
 | |
|   'include/message_stocks.inc',
 | |
|   'include/messages.inc',
 | |
|   'include/newmenus.inc',
 | |
|   'include/sorting.inc',
 | |
|   'include/sqlx.inc',
 | |
|   'include/textparse_ini.inc',
 | |
|   'include/textparse_smc.inc',
 | |
|   'include/time.inc',
 | |
|   'include/vector.inc',
 | |
| ]
 | |
| for filename in scripting_files:
 | |
|   output_folder = 'base/addons/amxmodx/scripting'
 | |
|   inner_folder = os.path.dirname(filename)
 | |
|   if len(inner_folder):
 | |
|     output_folder += '/' + inner_folder
 | |
|   builder.AddCopy(
 | |
|     source = os.path.join(builder.sourcePath, 'plugins', filename),
 | |
|     output_path = folder_map[output_folder]
 | |
|   )
 | |
| 
 | |
| # Copy weird things.
 | |
| weirdfiles = [
 | |
|   ('modules/geoip/GeoLite2-Country.mmdb', 'base/addons/amxmodx/data'),
 | |
|   ('plugins/esf/ESF_mod_tutorial.txt', 'esf/addons/amxmodx/scripting'),
 | |
| ]
 | |
| 
 | |
| if builder.target_platform == 'windows':
 | |
|   weirdfiles += [
 | |
|     ('plugins/compile.exe', 'base/addons/amxmodx/scripting'),
 | |
|   ]
 | |
| else:
 | |
|   weirdfiles += [
 | |
|     ('plugins/compile.sh', 'base/addons/amxmodx/scripting'),
 | |
|   ]
 | |
| 
 | |
| for source, dest in weirdfiles:
 | |
|   builder.AddCopy(
 | |
|     source = os.path.join(builder.sourcePath, source),
 | |
|     output_path = folder_map[dest]
 | |
|   )
 | |
| 
 | |
| # Copy language data.
 | |
| datafiles = [
 | |
|   'admin.txt',
 | |
|   'adminchat.txt',
 | |
|   'admincmd.txt',
 | |
|   'adminhelp.txt',
 | |
|   'adminslots.txt',
 | |
|   'adminvote.txt',
 | |
|   'antiflood.txt',
 | |
|   'cmdmenu.txt',
 | |
|   'common.txt',
 | |
|   'imessage.txt',
 | |
|   'languages.txt',
 | |
|   'mapchooser.txt',
 | |
|   'mapsmenu.txt',
 | |
|   'menufront.txt',
 | |
|   'miscstats.txt',
 | |
|   'multilingual.txt',
 | |
|   'nextmap.txt',
 | |
|   'pausecfg.txt',
 | |
|   'plmenu.txt',
 | |
|   'restmenu.txt',
 | |
|   'scrollmsg.txt',
 | |
|   'stats_dod.txt',
 | |
|   'statscfg.txt',
 | |
|   'statsx.txt',
 | |
|   'telemenu.txt',
 | |
|   'timeleft.txt',
 | |
|   'time.txt',
 | |
| ]
 | |
| for datafile in datafiles:
 | |
|   builder.AddCopy(
 | |
|     source = os.path.join(builder.sourcePath, 'plugins', 'lang', datafile),
 | |
|     output_path = folder_map['base/addons/amxmodx/data/lang']
 | |
|   )
 | |
| 
 | |
| # Copy license files
 | |
| licenses = [
 | |
|   'ACKNOWLEDGEMENTS.txt',
 | |
|   'GPLv2.txt',
 | |
|   'GPLv3.txt',
 | |
|   'LICENSE.txt',
 | |
| ]
 | |
| 
 | |
| for license in licenses:
 | |
|   builder.AddCopy(
 | |
|     source = os.path.join(builder.sourcePath, 'public', 'licenses', license),
 | |
|     output_path = folder_map['base/addons/amxmodx']
 | |
|   )
 |