0cf5a2e12f
Some minor changes have been made in parser: - Added ReadINI_ParseStart and ReadINI_ParseEnd call. - Function returns SMCResult instead of bool. To avoid unecessary complexity and duplicating natives, this feels more appropriate to let these functions to share some SMCResult and SMCParse constants. Since properly documented, this should be ok. - Made sure curtok is set to 0 when ptr_val is null, otherwise unexpected value would be passed into the forward.
378 lines
9.4 KiB
Python
378 lines
9.4 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/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/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/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 = [
|
|
('dlls/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']
|
|
)
|