Merge branch 'atys' into fixes
commit
1a49c4cd0b
@ -0,0 +1,594 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief Run all setup processes
|
||||||
|
# \date 2009-02-18 15:28GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Run all setup processes
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Setup')
|
||||||
|
parser.add_argument('--noconf', '-nc', action='store_true')
|
||||||
|
parser.add_argument('--noverify', '-nv', action='store_true')
|
||||||
|
parser.add_argument('--preset', '-p', action='store_true')
|
||||||
|
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||||
|
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||||
|
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||||
|
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||||
|
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not args.includeproject == None and not args.excludeproject == None:
|
||||||
|
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||||
|
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||||
|
exit()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
try:
|
||||||
|
from buildsite import *
|
||||||
|
except ImportError:
|
||||||
|
printLog(log, "*** FIRST RUN ***")
|
||||||
|
if args.noconf:
|
||||||
|
printLog(log, "ERROR --noconf is invalid on first run, exit.")
|
||||||
|
exit()
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
if not args.noconf:
|
||||||
|
try:
|
||||||
|
BuildQuality
|
||||||
|
except NameError:
|
||||||
|
BuildQuality = 1
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
RemapLocalFrom
|
||||||
|
except NameError:
|
||||||
|
RemapLocalFrom = 'R:'
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
RemapLocalTo
|
||||||
|
except NameError:
|
||||||
|
RemapLocalTo = os.getenv('RC_ROOT').replace('\\', '/')
|
||||||
|
if (not RemapLocalTo) or (not ':' in RemapLocalTo):
|
||||||
|
RemapLocalTo = 'R:'
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ToolDirectories
|
||||||
|
except NameError:
|
||||||
|
ToolDirectories = [ 'R:/distribution/nel_tools_win_x64', 'R:/distribution/ryzom_tools_win_x64' ]
|
||||||
|
try:
|
||||||
|
ToolSuffix
|
||||||
|
except NameError:
|
||||||
|
ToolSuffix = ".exe"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ScriptDirectory
|
||||||
|
except NameError:
|
||||||
|
ScriptDirectory = "R:/code/nel/tools/build_gamedata"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
WorkspaceDirectory
|
||||||
|
except NameError:
|
||||||
|
WorkspaceDirectory = "R:/leveldesign/workspace"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
DatabaseDirectory
|
||||||
|
except NameError:
|
||||||
|
DatabaseDirectory = "R:/graphics"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
SoundDirectory
|
||||||
|
except NameError:
|
||||||
|
SoundDirectory = "R:/sound"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
SoundDfnDirectory
|
||||||
|
except NameError:
|
||||||
|
SoundDfnDirectory = "R:/sound/DFN"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ExportBuildDirectory
|
||||||
|
except NameError:
|
||||||
|
ExportBuildDirectory = "R:/pipeline/export"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
InstallDirectory
|
||||||
|
except NameError:
|
||||||
|
InstallDirectory = "R:/pipeline/install"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ClientDevDirectory
|
||||||
|
except NameError:
|
||||||
|
ClientDevDirectory = "R:/pipeline/client_dev"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ClientDevLiveDirectory
|
||||||
|
except NameError:
|
||||||
|
ClientDevLiveDirectory = "R:/pipeline/client_dev_live"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ClientPatchDirectory
|
||||||
|
except NameError:
|
||||||
|
ClientPatchDirectory = "R:/pipeline/client_patch"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ClientInstallDirectory
|
||||||
|
except NameError:
|
||||||
|
ClientInstallDirectory = "R:/pipeline/client_install"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ShardInstallDirectory
|
||||||
|
except NameError:
|
||||||
|
ShardInstallDirectory = "R:/pipeline/shard"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
ShardDevDirectory
|
||||||
|
except NameError:
|
||||||
|
ShardDevDirectory = "R:/pipeline/shard_dev"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
WorldEditInstallDirectory
|
||||||
|
except NameError:
|
||||||
|
WorldEditInstallDirectory = "R:/pipeline/worldedit"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
WorldEditorFilesDirectory
|
||||||
|
except NameError:
|
||||||
|
WorldEditorFilesDirectory = "R:/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
LeveldesignDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDirectory = "R:/leveldesign"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
LeveldesignDfnDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDfnDirectory = "R:/leveldesign/DFN"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
LeveldesignWorldDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignWorldDirectory = "R:/leveldesign/world"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
PrimitivesDirectory
|
||||||
|
except NameError:
|
||||||
|
PrimitivesDirectory = "R:/leveldesign/primitives"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
LeveldesignDataCommonDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDataCommonDirectory = "R:/leveldesign/common"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
LeveldesignDataShardDirectory
|
||||||
|
except NameError:
|
||||||
|
LeveldesignDataShardDirectory = "R:/leveldesign/shard"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
TranslationDirectory
|
||||||
|
except NameError:
|
||||||
|
TranslationDirectory = "R:/leveldesign/translation"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
GamedevDirectory
|
||||||
|
except NameError:
|
||||||
|
GamedevDirectory = "R:/code/ryzom/client/data/gamedev"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
DataCommonDirectory
|
||||||
|
except NameError:
|
||||||
|
DataCommonDirectory = "R:/code/ryzom/common/data_common"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
DataShardDirectory
|
||||||
|
except NameError:
|
||||||
|
DataShardDirectory = "R:/code/ryzom/server/data_shard"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
WindowsExeDllCfgDirectories
|
||||||
|
except NameError:
|
||||||
|
# TODO: Separate 64bit and 32bit
|
||||||
|
WindowsExeDllCfgDirectories = [ '', 'R:/build/fv_x64/bin/Release', 'R:/distribution/external_x64', 'R:/code/ryzom/client', '', '', '' ]
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
LinuxServiceExecutableDirectory
|
||||||
|
except NameError:
|
||||||
|
LinuxServiceExecutableDirectory = "R:/build/server_gcc/bin"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
LinuxClientExecutableDirectory
|
||||||
|
except NameError:
|
||||||
|
LinuxClientExecutableDirectory = "R:/build/client_gcc/bin"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
PatchmanDevDirectory
|
||||||
|
except NameError:
|
||||||
|
PatchmanDevDirectory = "R:/patchman/terminal_dev"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
PatchmanCfgAdminDirectory
|
||||||
|
except NameError:
|
||||||
|
PatchmanCfgAdminDirectory = "R:/patchman/admin_install"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
PatchmanCfgDefaultDirectory
|
||||||
|
except NameError:
|
||||||
|
PatchmanCfgDefaultDirectory = "R:/patchman/default"
|
||||||
|
try:
|
||||||
|
if args.preset:
|
||||||
|
DummyUnknownName
|
||||||
|
PatchmanBridgeServerDirectory
|
||||||
|
except NameError:
|
||||||
|
PatchmanBridgeServerDirectory = "R:/pipeline/bridge_server"
|
||||||
|
try:
|
||||||
|
SignToolExecutable
|
||||||
|
except NameError:
|
||||||
|
SignToolExecutable = "C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bin/signtool.exe"
|
||||||
|
try:
|
||||||
|
SignToolSha1
|
||||||
|
except NameError:
|
||||||
|
SignToolSha1 = ""
|
||||||
|
try:
|
||||||
|
SignToolTimestamp
|
||||||
|
except NameError:
|
||||||
|
SignToolTimestamp = "http://timestamp.comodoca.com/authenticode"
|
||||||
|
try:
|
||||||
|
MaxAvailable
|
||||||
|
except NameError:
|
||||||
|
MaxAvailable = 1
|
||||||
|
try:
|
||||||
|
MaxDirectory
|
||||||
|
except NameError:
|
||||||
|
MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010"
|
||||||
|
try:
|
||||||
|
MaxUserDirectory
|
||||||
|
except NameError:
|
||||||
|
import os
|
||||||
|
try:
|
||||||
|
MaxUserDirectory = os.path.normpath(os.environ["LOCALAPPDATA"] + "/Autodesk/3dsMax/2010 - 32bit/enu")
|
||||||
|
except KeyError:
|
||||||
|
MaxAvailable = 0
|
||||||
|
MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
|
||||||
|
try:
|
||||||
|
MaxExecutable
|
||||||
|
except NameError:
|
||||||
|
MaxExecutable = "3dsmax.exe"
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup build site")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "This script will set up the buildsite configuration, and create needed directories.")
|
||||||
|
printLog(log, "To use the defaults, simply hit ENTER, else type in the new value.")
|
||||||
|
printLog(log, "Use -- if you need to insert an empty value.")
|
||||||
|
printLog(log, "")
|
||||||
|
BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality)))
|
||||||
|
if not args.preset:
|
||||||
|
ToolDirectories[0] = askVar(log, "[IN] Primary Tool Directory", ToolDirectories[0]).replace("\\", "/")
|
||||||
|
ToolDirectories[1] = askVar(log, "[IN] Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/")
|
||||||
|
ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix)
|
||||||
|
ScriptDirectory = askVar(log, "[IN] Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/")
|
||||||
|
WorkspaceDirectory = askVar(log, "[IN] Workspace Directory", WorkspaceDirectory).replace("\\", "/")
|
||||||
|
DatabaseDirectory = askVar(log, "[IN] Database Directory", DatabaseDirectory).replace("\\", "/")
|
||||||
|
SoundDirectory = askVar(log, "[IN] Sound Directory", SoundDirectory).replace("\\", "/")
|
||||||
|
SoundDfnDirectory = askVar(log, "[IN] Sound DFN Directory", SoundDfnDirectory).replace("\\", "/")
|
||||||
|
ExportBuildDirectory = askVar(log, "[OUT] Export Build Directory", ExportBuildDirectory).replace("\\", "/")
|
||||||
|
InstallDirectory = askVar(log, "[OUT] Install Directory", InstallDirectory).replace("\\", "/")
|
||||||
|
ClientDevDirectory = askVar(log, "[OUT] Client Dev Directory", ClientDevDirectory).replace("\\", "/")
|
||||||
|
ClientDevLiveDirectory = askVar(log, "[OUT] Client Dev Live Directory", ClientDevLiveDirectory).replace("\\", "/")
|
||||||
|
ClientPatchDirectory = askVar(log, "[OUT] Client Patch Directory", ClientPatchDirectory).replace("\\", "/")
|
||||||
|
ClientInstallDirectory = askVar(log, "[OUT] Client Install Directory", ClientInstallDirectory).replace("\\", "/")
|
||||||
|
ShardInstallDirectory = askVar(log, "[OUT] Shard Data Install Directory", ShardInstallDirectory).replace("\\", "/")
|
||||||
|
ShardDevDirectory = askVar(log, "[OUT] Shard Dev Directory", ShardDevDirectory).replace("\\", "/")
|
||||||
|
WorldEditInstallDirectory = askVar(log, "[OUT] World Edit Data Install Directory", WorldEditInstallDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDirectory = askVar(log, "[IN] Leveldesign Directory", LeveldesignDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDfnDirectory = askVar(log, "[IN] Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/")
|
||||||
|
LeveldesignWorldDirectory = askVar(log, "[IN] Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/")
|
||||||
|
PrimitivesDirectory = askVar(log, "[IN] Primitives Directory", PrimitivesDirectory).replace("\\", "/")
|
||||||
|
GamedevDirectory = askVar(log, "[IN] Gamedev Directory", GamedevDirectory).replace("\\", "/")
|
||||||
|
DataShardDirectory = askVar(log, "[IN] Data Shard Directory", DataShardDirectory).replace("\\", "/")
|
||||||
|
DataCommonDirectory = askVar(log, "[IN] Data Common Directory", DataCommonDirectory).replace("\\", "/")
|
||||||
|
TranslationDirectory = askVar(log, "[IN] Translation Directory", TranslationDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDataShardDirectory = askVar(log, "[IN] Leveldesign Data Shard Directory", LeveldesignDataShardDirectory).replace("\\", "/")
|
||||||
|
LeveldesignDataCommonDirectory = askVar(log, "[IN] Leveldesign Data Common Directory", LeveldesignDataCommonDirectory).replace("\\", "/")
|
||||||
|
WorldEditorFilesDirectory = askVar(log, "[IN] World Editor Files Directory", WorldEditorFilesDirectory).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[0] = askVar(log, "[IN] Primary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[0]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[1] = askVar(log, "[IN] Secondary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[1]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[2] = askVar(log, "[IN] Tertiary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[2]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[3] = askVar(log, "[IN] Quaternary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[3]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[4] = askVar(log, "[IN] Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[5] = askVar(log, "[IN] Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/")
|
||||||
|
WindowsExeDllCfgDirectories[6] = askVar(log, "[IN] Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/")
|
||||||
|
LinuxServiceExecutableDirectory = askVar(log, "[IN] Linux Service Executable Directory", LinuxServiceExecutableDirectory).replace("\\", "/")
|
||||||
|
LinuxClientExecutableDirectory = askVar(log, "[IN] Linux Client Executable Directory", LinuxClientExecutableDirectory).replace("\\", "/")
|
||||||
|
PatchmanDevDirectory = askVar(log, "[IN] Patchman Directory", PatchmanDevDirectory).replace("\\", "/")
|
||||||
|
PatchmanCfgAdminDirectory = askVar(log, "[IN] Patchman Cfg Admin Directory", PatchmanCfgAdminDirectory).replace("\\", "/")
|
||||||
|
PatchmanCfgDefaultDirectory = askVar(log, "[IN] Patchman Cfg Default Directory", PatchmanCfgDefaultDirectory).replace("\\", "/")
|
||||||
|
PatchmanBridgeServerDirectory = askVar(log, "[OUT] Patchman Bridge Server Patch Directory", PatchmanBridgeServerDirectory).replace("\\", "/")
|
||||||
|
SignToolExecutable = askVar(log, "Sign Tool Executable", SignToolExecutable).replace("\\", "/")
|
||||||
|
SignToolSha1 = askVar(log, "Sign Tool Signature SHA1", SignToolSha1)
|
||||||
|
SignToolTimestamp = askVar(log, "Sign Tool Timestamp Authority", SignToolTimestamp)
|
||||||
|
MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable)))
|
||||||
|
if MaxAvailable:
|
||||||
|
MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/")
|
||||||
|
MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/")
|
||||||
|
MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable)
|
||||||
|
if os.path.isfile("configuration/buildsite.py"):
|
||||||
|
os.remove("configuration/buildsite.py")
|
||||||
|
sf = open("configuration/buildsite.py", "w")
|
||||||
|
sf.write("#!/usr/bin/python\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# \\file site.py\n")
|
||||||
|
sf.write("# \\brief Site configuration\n")
|
||||||
|
sf.write("# \\date " + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "\n")
|
||||||
|
sf.write("# \\author Jan Boon (Kaetemi)\n")
|
||||||
|
sf.write("# Python port of game data build pipeline.\n")
|
||||||
|
sf.write("# Site configuration.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>\n")
|
||||||
|
sf.write("# Copyright (C) 2009-2014 by authors\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# This program is free software: you can redistribute it and/or modify\n")
|
||||||
|
sf.write("# it under the terms of the GNU Affero General Public License as\n")
|
||||||
|
sf.write("# published by the Free Software Foundation, either version 3 of the\n")
|
||||||
|
sf.write("# License, or (at your option) any later version.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# This program is distributed in the hope that it will be useful,\n")
|
||||||
|
sf.write("# but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
|
||||||
|
sf.write("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
|
||||||
|
sf.write("# GNU Affero General Public License for more details.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("# You should have received a copy of the GNU Affero General Public License\n")
|
||||||
|
sf.write("# along with this program. If not, see <http://www.gnu.org/licenses/>.\n")
|
||||||
|
sf.write("# \n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# *** SITE INSTALLATION ***\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Use '/' in path name, not '\'\n")
|
||||||
|
sf.write("# Don't put '/' at the end of a directory name\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n")
|
||||||
|
sf.write("BuildQuality = " + str(BuildQuality) + "\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("RemapLocalFrom = \"" + str(RemapLocalFrom) + "\"\n")
|
||||||
|
sf.write("RemapLocalTo = \"" + str(RemapLocalTo) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("ToolDirectories = " + str(ToolDirectories) + "\n")
|
||||||
|
sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Build script directory\n")
|
||||||
|
sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n")
|
||||||
|
sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Data build directories\n")
|
||||||
|
sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n")
|
||||||
|
sf.write("SoundDirectory = \"" + str(SoundDirectory) + "\"\n")
|
||||||
|
sf.write("SoundDfnDirectory = \"" + str(SoundDfnDirectory) + "\"\n")
|
||||||
|
sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Install directories\n")
|
||||||
|
sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n")
|
||||||
|
sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n")
|
||||||
|
sf.write("ClientDevLiveDirectory = \"" + str(ClientDevLiveDirectory) + "\"\n")
|
||||||
|
sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n")
|
||||||
|
sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n")
|
||||||
|
sf.write("ShardInstallDirectory = \"" + str(ShardInstallDirectory) + "\"\n")
|
||||||
|
sf.write("ShardDevDirectory = \"" + str(ShardDevDirectory) + "\"\n")
|
||||||
|
sf.write("WorldEditInstallDirectory = \"" + str(WorldEditInstallDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Utility directories\n")
|
||||||
|
sf.write("WorldEditorFilesDirectory = \"" + str(WorldEditorFilesDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Leveldesign directories\n")
|
||||||
|
sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n")
|
||||||
|
sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignDataCommonDirectory = \"" + str(LeveldesignDataCommonDirectory) + "\"\n")
|
||||||
|
sf.write("LeveldesignDataShardDirectory = \"" + str(LeveldesignDataShardDirectory) + "\"\n")
|
||||||
|
sf.write("TranslationDirectory = \"" + str(TranslationDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Misc data directories\n")
|
||||||
|
sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n")
|
||||||
|
sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n")
|
||||||
|
sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n")
|
||||||
|
sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n")
|
||||||
|
sf.write("LinuxServiceExecutableDirectory = \"" + str(LinuxServiceExecutableDirectory) + "\"\n")
|
||||||
|
sf.write("LinuxClientExecutableDirectory = \"" + str(LinuxClientExecutableDirectory) + "\"\n")
|
||||||
|
sf.write("PatchmanDevDirectory = \"" + str(PatchmanDevDirectory) + "\"\n")
|
||||||
|
sf.write("PatchmanCfgAdminDirectory = \"" + str(PatchmanCfgAdminDirectory) + "\"\n")
|
||||||
|
sf.write("PatchmanCfgDefaultDirectory = \"" + str(PatchmanCfgDefaultDirectory) + "\"\n")
|
||||||
|
sf.write("PatchmanBridgeServerDirectory = \"" + str(PatchmanBridgeServerDirectory) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# Sign tool\n")
|
||||||
|
sf.write("SignToolExecutable = \"" + str(SignToolExecutable) + "\"\n")
|
||||||
|
sf.write("SignToolSha1 = \"" + str(SignToolSha1) + "\"\n")
|
||||||
|
sf.write("SignToolTimestamp = \"" + str(SignToolTimestamp) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# 3dsMax directives\n")
|
||||||
|
sf.write("MaxAvailable = " + str(MaxAvailable) + "\n")
|
||||||
|
sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n")
|
||||||
|
sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n")
|
||||||
|
sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("\n")
|
||||||
|
sf.write("# end of file\n")
|
||||||
|
sf.flush()
|
||||||
|
sf.close()
|
||||||
|
sf = open("configuration/buildsite_local.py", "w")
|
||||||
|
sfr = open("configuration/buildsite.py", "r")
|
||||||
|
for l in sfr:
|
||||||
|
sf.write(l.replace(RemapLocalFrom + '/', RemapLocalTo + '/'))
|
||||||
|
sf.flush()
|
||||||
|
sfr.close()
|
||||||
|
sf.close()
|
||||||
|
|
||||||
|
from buildsite_local import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Run the setup projects")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
# For each project
|
||||||
|
for projectName in ProjectsToProcess:
|
||||||
|
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||||
|
printLog(log, "PROJECT " + projectName)
|
||||||
|
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||||
|
os.chdir("processes")
|
||||||
|
try:
|
||||||
|
if not args.includeprocess == None:
|
||||||
|
subprocess.call([ "python", "0_setup.py", "--includeprocess" ] + args.includeprocess)
|
||||||
|
elif not args.excludeprocess == None:
|
||||||
|
subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess)
|
||||||
|
else:
|
||||||
|
subprocess.call([ "python", "0_setup.py" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
os.chdir("..")
|
||||||
|
try:
|
||||||
|
projectLog = open("processes/log.log", "r")
|
||||||
|
projectLogData = projectLog.read()
|
||||||
|
projectLog.close()
|
||||||
|
log.write(projectLogData)
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + projectName + "> " + str(e))
|
||||||
|
else:
|
||||||
|
printLog(log, "IGNORE PROJECT " + projectName)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Additional directories
|
||||||
|
printLog(log, ">>> Setup additional directories <<<")
|
||||||
|
mkPath(log, ClientDevDirectory)
|
||||||
|
mkPath(log, ClientDevLiveDirectory)
|
||||||
|
mkPath(log, ClientPatchDirectory)
|
||||||
|
mkPath(log, ClientInstallDirectory)
|
||||||
|
|
||||||
|
if not args.noverify:
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Verify tool paths")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
if MaxAvailable:
|
||||||
|
findMax(log, MaxDirectory, MaxExecutable)
|
||||||
|
findTool(log, ToolDirectories, TgaToDdsTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildInterfaceTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildSmallbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildFarbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneDependenciesTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneWelderTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneElevationTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildRbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildIndoorRbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildIgBoxesTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, GetNeighborsTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneLighterTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, ZoneIgLighterTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, IgLighterTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, AnimBuilderTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, TileEditTool, ToolSuffix)
|
||||||
|
# findTool(log, ToolDirectories, BuildImagesetTool, ToolSuffix) # kaetemi stuff, ignore this
|
||||||
|
findTool(log, ToolDirectories, MakeSheetIdTool, ToolSuffix)
|
||||||
|
# findTool(log, ToolDirectories, BuildSheetsTool, ToolSuffix) # kaetemi stuff, ignore this
|
||||||
|
# findTool(log, ToolDirectories, BuildSoundTool, ToolSuffix) # kaetemi stuff, ignore this
|
||||||
|
# findTool(log, ToolDirectories, BuildSoundTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildSoundbankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildSamplebankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildCoarseMeshTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, LightmapOptimizerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildClodtexTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildShadowSkinTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, PanoplyMakerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, HlsBankMakerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, LandExportTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, PrimExportTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, IgElevationTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, IgAddTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildClodBankTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, SheetsPackerTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, TgaCutTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, PatchGenTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, TranslationToolsTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, BuildWorldPackedColTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, R2IslandsTexturesTool, ToolSuffix)
|
||||||
|
findTool(log, ToolDirectories, PatchmanServiceTool, ToolSuffix)
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("0_setup.log"):
|
||||||
|
os.remove("0_setup.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_setup.log")
|
||||||
|
shutil.move("log.log", "0_setup.log")
|
@ -0,0 +1,108 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file b1_client_dev.py
|
||||||
|
# \brief Install to client dev
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install to client dev
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, socket
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite_local import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install to client dev")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
mkPath(log, ClientDevLiveDirectory)
|
||||||
|
if not os.path.isfile(ClientDevLiveDirectory + "/client.cfg"):
|
||||||
|
printLog(log, ">>> Generate live dev client.cfg <<<")
|
||||||
|
cfg = open(ClientDevLiveDirectory + "/client.cfg", "w")
|
||||||
|
cfg.write("RootConfigFilename = \"client_default.cfg\";\n")
|
||||||
|
cfg.write("PreDataPath = {\n")
|
||||||
|
cfg.write("\t\"user\", \"patch\", \"" + DataCommonDirectory + "\", \"" + GamedevDirectory + "\", \"" + LeveldesignDirectory + "/translation/translated\", \"" + InstallDirectory + "\", \"data\", \"examples\" \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("PreLoadPath = \"" + InstallDirectory + "\";\n")
|
||||||
|
cfg.write("PatchWanted = 0;\n")
|
||||||
|
cfg.write("DisplayLuaDebugInfo = 1;\n")
|
||||||
|
cfg.write("AllowDebugLua = 1;\n")
|
||||||
|
cfg.write("FullScreen = 0;\n")
|
||||||
|
cfg.flush()
|
||||||
|
cfg.close()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
mkPath(log, ClientDevDirectory)
|
||||||
|
if not os.path.isfile(ClientDevDirectory + "/client.cfg"):
|
||||||
|
printLog(log, ">>> Generate local dev client.cfg <<<")
|
||||||
|
cfg = open(ClientDevDirectory + "/client.cfg", "w")
|
||||||
|
cfgr = open(ClientDevLiveDirectory + "/client.cfg", "r")
|
||||||
|
for l in cfgr:
|
||||||
|
cfg.write(l)
|
||||||
|
cfgr.close()
|
||||||
|
cfg.write("StartupHost = \"http://" + socket.gethostname() + ":9042\";\n")
|
||||||
|
cfg.write("Application = {\n")
|
||||||
|
cfg.write(" \"dev\", \"./client_ryzom_r.exe\", \"./\" \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.flush()
|
||||||
|
cfg.close()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Install data <<<")
|
||||||
|
for category in InstallClientData:
|
||||||
|
if (category["UnpackTo"] != None):
|
||||||
|
printLog(log, "CATEGORY " + category["Name"])
|
||||||
|
targetPath = ClientDevDirectory
|
||||||
|
targetPathLive = ClientDevLiveDirectory
|
||||||
|
if (category["UnpackTo"] != ""):
|
||||||
|
targetPath += "/" + category["UnpackTo"]
|
||||||
|
targetPathLive += "/" + category["UnpackTo"]
|
||||||
|
mkPath(log, targetPath)
|
||||||
|
mkPath(log, targetPathLive)
|
||||||
|
for package in category["Packages"]:
|
||||||
|
printLog(log, "PACKAGE " + package[0])
|
||||||
|
mkPath(log, InstallDirectory + "/" + package[0])
|
||||||
|
if "exedll" in package[0]:
|
||||||
|
if package[0] == "exedll": # or package[0] == platformExeDll # TODO: 64-bit and Linux separation of exedll, only include one
|
||||||
|
copyFileIfNeeded(log, InstallDirectory + "/" + package[0] + "/client_default.cfg", targetPath)
|
||||||
|
copyFileIfNeeded(log, InstallDirectory + "/" + package[0] + "/client_default.cfg", targetPathLive)
|
||||||
|
else:
|
||||||
|
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath)
|
||||||
|
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPathLive)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("b1_client_dev.log"):
|
||||||
|
os.remove("b1_client_dev.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_client_dev.log")
|
||||||
|
shutil.move("log.log", "b1_client_dev.log")
|
@ -0,0 +1,123 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file c1_shard_patch.py
|
||||||
|
# \brief Create a new patch for the patchman bridge
|
||||||
|
# \date 2014-02-20 00:27GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Create a new patch for the patchman bridge
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://www.ryzomcore.org/>
|
||||||
|
# Copyright (C) 2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, tarfile, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Shard Patch')
|
||||||
|
parser.add_argument('--admininstall', '-ai', action='store_true')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite_local import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Create a new patch for the patchman bridge")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
SevenZip = findTool(log, ToolDirectories, SevenZipTool, ToolSuffix)
|
||||||
|
|
||||||
|
# List the directories that will be used
|
||||||
|
archiveDirectories = [ ]
|
||||||
|
for dir in InstallShardDataDirectories:
|
||||||
|
if not dir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dir ]
|
||||||
|
for package in InstallShardDataFiles:
|
||||||
|
dstDir = package[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
for multiDir in InstallShardDataMultiDirectories:
|
||||||
|
dstDir = multiDir[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
for multiDir in InstallShardDataPrimitivesDirectories:
|
||||||
|
dstDir = multiDir[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
for execDir in InstallShardDataExecutables:
|
||||||
|
dstDir = execDir[0]
|
||||||
|
if not dstDir in archiveDirectories:
|
||||||
|
archiveDirectories += [ dstDir ]
|
||||||
|
|
||||||
|
printLog(log, ">>> Archive new admin_install.tgz <<<")
|
||||||
|
mkPath(log, PatchmanBridgeServerDirectory)
|
||||||
|
adminInstallTgz = PatchmanBridgeServerDirectory + "/admin_install.tgz"
|
||||||
|
patchmanExecutable = LinuxServiceExecutableDirectory + "/ryzom_patchman_service"
|
||||||
|
if needUpdateDirNoSubdirFile(log, PatchmanCfgAdminDirectory + "/bin", adminInstallTgz) or needUpdateDirNoSubdirFile(log, PatchmanCfgAdminDirectory + "/patchman", adminInstallTgz) or needUpdate(log, patchmanExecutable, adminInstallTgz):
|
||||||
|
printLog(log, "WRITE " + adminInstallTgz)
|
||||||
|
if os.path.isfile(adminInstallTgz):
|
||||||
|
os.remove(adminInstallTgz)
|
||||||
|
tar = tarfile.open(adminInstallTgz, "w:gz")
|
||||||
|
tar.add(PatchmanCfgAdminDirectory + "/bin", arcname = "bin")
|
||||||
|
tar.add(PatchmanCfgAdminDirectory + "/patchman", arcname = "patchman")
|
||||||
|
tar.add(patchmanExecutable, arcname = "patchman/ryzom_patchman_service")
|
||||||
|
tar.close()
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + adminInstallTgz)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
if not args.admininstall:
|
||||||
|
if SevenZip == "":
|
||||||
|
toolLogFail(log, SevenZipTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
printLog(log, ">>> Create new version <<<")
|
||||||
|
newVersion = 1
|
||||||
|
vstr = str(newVersion).zfill(6)
|
||||||
|
vpath = PatchmanBridgeServerDirectory + "/" + vstr
|
||||||
|
while os.path.exists(vpath):
|
||||||
|
newVersion = newVersion + 1
|
||||||
|
vstr = str(newVersion).zfill(6)
|
||||||
|
vpath = PatchmanBridgeServerDirectory + "/" + vstr
|
||||||
|
mkPath(log, vpath)
|
||||||
|
for dir in archiveDirectories:
|
||||||
|
mkPath(log, ShardInstallDirectory + "/" + dir)
|
||||||
|
# tgzPath = vpath + "/" + dir + ".tgz"
|
||||||
|
# printLog(log, "WRITE " + tgzPath)
|
||||||
|
# tar = tarfile.open(tgzPath, "w:gz")
|
||||||
|
# tar.add(ShardInstallDirectory + "/" + dir, arcname = dir)
|
||||||
|
# tar.close()
|
||||||
|
sevenZipPath = vpath + "/" + dir + ".7z"
|
||||||
|
printLog(log, "WRITE " + sevenZipPath)
|
||||||
|
subprocess.call([ SevenZip, "a", sevenZipPath, ShardInstallDirectory + "/" + dir ])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("c1_shard_patch.log"):
|
||||||
|
os.remove("c1_shard_patch.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_shard_patch.log")
|
||||||
|
shutil.move("log.log", "c1_shard_patch.log")
|
@ -0,0 +1,610 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file export.py
|
||||||
|
# \brief Useful scripts
|
||||||
|
# \date 2009-02-18 09:22GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Useful scripts
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, multiprocessing, math
|
||||||
|
|
||||||
|
ActiveProjectDirectory = os.getenv("NELBUILDACTIVEPROJECT", "configuration/project")
|
||||||
|
sys.path.append(ActiveProjectDirectory)
|
||||||
|
|
||||||
|
def printLog(log, text):
|
||||||
|
log.write(text + "\n")
|
||||||
|
print text
|
||||||
|
|
||||||
|
pendingProcesses = []
|
||||||
|
processLimit = math.ceil(multiprocessing.cpu_count() * 0.75)
|
||||||
|
|
||||||
|
def callParallelProcess(command):
|
||||||
|
res = 0
|
||||||
|
if len(pendingProcesses) >= processLimit:
|
||||||
|
waitingProc = pendingProcesses.pop(0)
|
||||||
|
res = waitingProc.wait()
|
||||||
|
proc = subprocess.Popen(command)
|
||||||
|
pendingProcesses.append(proc)
|
||||||
|
return res
|
||||||
|
|
||||||
|
def flushParallelProcesses():
|
||||||
|
res = 0
|
||||||
|
while (len(pendingProcesses) > 0):
|
||||||
|
waitingProc = pendingProcesses.pop(0)
|
||||||
|
procRes = waitingProc.wait()
|
||||||
|
if procRes != 0:
|
||||||
|
res = procRes
|
||||||
|
return res
|
||||||
|
|
||||||
|
def mkPath(log, path):
|
||||||
|
printLog(log, "DIR " + path)
|
||||||
|
distutils.dir_util.mkpath(path)
|
||||||
|
|
||||||
|
def needUpdate(log, source, dest):
|
||||||
|
if (os.path.isfile(source)):
|
||||||
|
if (os.path.isfile(dest)):
|
||||||
|
if (os.stat(source).st_mtime > os.stat(dest).st_mtime):
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
printLog(log, "MISSING " + source)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateRemoveDest(log, source, dest):
|
||||||
|
if (os.path.isfile(source)):
|
||||||
|
if (os.path.isfile(dest)):
|
||||||
|
if (os.stat(source).st_mtime > os.stat(dest).st_mtime):
|
||||||
|
os.remove(dest)
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
printLog(log, "MISSING " + source)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateLogRemoveDest(log, source, dest):
|
||||||
|
if (os.path.isfile(source)):
|
||||||
|
if (os.path.isfile(dest)):
|
||||||
|
if (os.stat(source).st_mtime > os.stat(dest).st_mtime):
|
||||||
|
os.remove(dest)
|
||||||
|
printLog(log, source + " -> " + dest)
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + dest)
|
||||||
|
return 0
|
||||||
|
printLog(log, source + " -> " + dest)
|
||||||
|
return 1
|
||||||
|
printLog(log, "MISSING " + source)
|
||||||
|
printLog(log, "SKIP " + dest)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def copyFileList(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
if needUpdateLogRemoveDest(log, dir_source + "/" + fileName, dir_target + "/" + fileName):
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFileListLogless(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
if needUpdateRemoveDest(log, dir_source + "/" + fileName, dir_target + "/" + fileName):
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFileListNoTree(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + os.path.basename(fileName))
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + os.path.basename(fileName))
|
||||||
|
|
||||||
|
def copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
srcFile = dir_source + "/" + fileName
|
||||||
|
destFile = dir_target + "/" + os.path.basename(fileName)
|
||||||
|
if needUpdateLogRemoveDest(log, srcFile, destFile):
|
||||||
|
shutil.copy(srcFile, destFile)
|
||||||
|
|
||||||
|
def removeFilesRecursive(log, dir_files):
|
||||||
|
files = os.listdir(dir_files)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_files + "/" + fileName):
|
||||||
|
removeFilesRecursive(log, dir_files + "/" + fileName)
|
||||||
|
else:
|
||||||
|
printLog(log, "RM " + dir_files + "/" + fileName)
|
||||||
|
os.remove(dir_files + "/" + fileName)
|
||||||
|
|
||||||
|
def removeFilesDirsRecursive(log, dir_files):
|
||||||
|
files = os.listdir(dir_files)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_files + "/" + fileName):
|
||||||
|
removeFilesRecursive(log, dir_files + "/" + fileName)
|
||||||
|
else:
|
||||||
|
printLog(log, "RM " + dir_files + "/" + fileName)
|
||||||
|
os.remove(dir_files + "/" + fileName)
|
||||||
|
printLog(log, "RMDIR " + dir_files)
|
||||||
|
os.rmdir(dir_files)
|
||||||
|
|
||||||
|
def removeFilesRecursiveExt(log, dir_files, file_ext):
|
||||||
|
files = os.listdir(dir_files)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_files + "/" + fileName):
|
||||||
|
removeFilesRecursiveExt(log, dir_files + "/" + fileName, file_ext)
|
||||||
|
elif (fileName[-len_file_ext:].lower() == file_ext.lower()):
|
||||||
|
printLog(log, "RM " + dir_files + "/" + fileName)
|
||||||
|
os.remove(dir_files + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFilesRecursive(log, dir_source, dir_target):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
mkPath(log, dir_target)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
|
||||||
|
if os.path.isdir(dir_source + "/" + fileName):
|
||||||
|
copyFilesRecursive(log, dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
else:
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + fileName)
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFiles(log, dir_source, dir_target):
|
||||||
|
copyFileList(log, dir_source, dir_target, os.listdir(dir_source))
|
||||||
|
|
||||||
|
def copyFilesLogless(log, dir_source, dir_target):
|
||||||
|
copyFileListLogless(log, dir_source, dir_target, os.listdir(dir_source))
|
||||||
|
|
||||||
|
def copyFilesExt(log, dir_source, dir_target, file_ext):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*") and (fileName[-len_file_ext:].lower() == file_ext.lower()):
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + fileName)
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + fileName)
|
||||||
|
|
||||||
|
def copyFilesRenamePrefixExt(log, dir_source, dir_target, old_prefix, new_prefix, file_ext):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
len_prefix = len(old_prefix)
|
||||||
|
for fileName in files:
|
||||||
|
if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*") and (fileName[-len_file_ext:].lower() == file_ext.lower()) and ((fileName[:len_prefix].lower() == old_prefix.lower())):
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, dir_source + "/" + fileName + " -> " + dir_target + "/" + new_prefix + fileName[-(len(fileName) - len_prefix):])
|
||||||
|
shutil.copy(dir_source + "/" + fileName, dir_target + "/" + new_prefix + fileName[-(len(fileName) - len_prefix):])
|
||||||
|
|
||||||
|
def copyFilesExtNoSubdir(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFilesNoSubdir(log, dir_source, file_ext)
|
||||||
|
copyFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesExtNoTree(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
copyFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesExtNoTreeIfNeeded(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesExtNoSubdirIfNeeded(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFilesNoSubdir(log, dir_source, file_ext)
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFilesNoTreeIfNeeded(log, dir_source, dir_target):
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, os.listdir(dir_source))
|
||||||
|
|
||||||
|
def copyFilesRecursiveNoTreeIfNeeded(log, dir_source, dir_target):
|
||||||
|
files = findFilesRecursive(log, dir_source, "")
|
||||||
|
copyFileListNoTreeIfNeeded(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def copyFileListExtReplaceNoTreeIfNeeded(log, dir_source, dir_target, files, file_ext, target_ext):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
srcFile = dir_source + "/" + fileName
|
||||||
|
destFile = dir_target + "/" + os.path.basename(fileName)[0:-len(file_ext)] + target_ext
|
||||||
|
if needUpdateLogRemoveDest(log, srcFile, destFile):
|
||||||
|
shutil.copy(srcFile, destFile)
|
||||||
|
|
||||||
|
def copyFilesExtReplaceNoTreeIfNeeded(log, dir_source, dir_target, file_ext, target_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
copyFileListExtReplaceNoTreeIfNeeded(log, dir_source, dir_target, files, file_ext, target_ext)
|
||||||
|
|
||||||
|
def copyFileIfNeeded(log, srcFile, destFile):
|
||||||
|
if needUpdateLogRemoveDest(log, srcFile, destFile):
|
||||||
|
shutil.copy(srcFile, destFile)
|
||||||
|
|
||||||
|
def moveFileListNoTree(log, dir_source, dir_target, files):
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
if (os.path.isfile(dir_source + "/" + fileName)):
|
||||||
|
printLog(log, "MOVE " + dir_source + "/" + fileName + " -> " + dir_target + "/" + os.path.basename(fileName))
|
||||||
|
shutil.move(dir_source + "/" + fileName, dir_target + "/" + os.path.basename(fileName))
|
||||||
|
|
||||||
|
def moveFilesExtNoTree(log, dir_source, dir_target, file_ext):
|
||||||
|
files = findFiles(log, dir_source, "", file_ext)
|
||||||
|
moveFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def moveFilesNoSubdir(log, dir_source, dir_target):
|
||||||
|
files = os.listdir(dir_source)
|
||||||
|
moveFileListNoTree(log, dir_source, dir_target, files)
|
||||||
|
|
||||||
|
def moveDir(log, dir_source, dir_target):
|
||||||
|
printLog(log, "MOVE " + dir_source + " -> " + dir_target)
|
||||||
|
shutil.move(dir_source, dir_target)
|
||||||
|
|
||||||
|
def findFilesRecursive(log, dir_where, dir_sub):
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where + "/" + dir_sub)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
filePath = dir_sub + fileName
|
||||||
|
fileFull = dir_where + "/" + dir_sub + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
result += [ filePath ]
|
||||||
|
elif os.path.isdir(fileFull):
|
||||||
|
result += findFilesRecursive(log, dir_where, filePath + "/")
|
||||||
|
else:
|
||||||
|
printLog(log, "findFilesRecursive: file not dir or file?!" + filePath)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def findFiles(log, dir_where, dir_sub, file_ext):
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where + "/" + dir_sub)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
filePath = dir_sub + fileName
|
||||||
|
fileFull = dir_where + "/" + dir_sub + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
if fileName[-len_file_ext:].lower() == file_ext.lower():
|
||||||
|
result += [ filePath ]
|
||||||
|
elif os.path.isdir(fileFull):
|
||||||
|
result += findFiles(log, dir_where, filePath + "/", file_ext)
|
||||||
|
else:
|
||||||
|
printLog(log, "findFiles: file not dir or file?!" + filePath)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def isLegalFileName(fileName):
|
||||||
|
return fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"
|
||||||
|
|
||||||
|
def findFilesNoSubdir(log, dir_where, file_ext):
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
fileFull = dir_where + "/" + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
if fileName[-len_file_ext:].lower() == file_ext.lower():
|
||||||
|
result += [ fileName ]
|
||||||
|
elif not os.path.isdir(fileFull):
|
||||||
|
printLog(log, "findFilesNoSubdir: file not dir or file?!" + fileFull)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def findFilesNoSubdirFiltered(log, dir_where, file_ext, filter):
|
||||||
|
if len(filter) == 0:
|
||||||
|
return findFilesNoSubdir(log, dir_where, file_ext)
|
||||||
|
result = [ ]
|
||||||
|
files = os.listdir(dir_where)
|
||||||
|
len_file_ext = len(file_ext)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
fileFull = dir_where + "/" + fileName
|
||||||
|
if os.path.isfile(fileFull):
|
||||||
|
if fileName[-len_file_ext:].lower() == file_ext.lower():
|
||||||
|
fileNameLower = fileName.lower()
|
||||||
|
for filterWord in filter:
|
||||||
|
if filterWord in fileNameLower:
|
||||||
|
result += [ fileName ]
|
||||||
|
break
|
||||||
|
elif not os.path.isdir(fileFull):
|
||||||
|
printLog(log, "findFilesNoSubdir: file not dir or file?!" + fileFull)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def findFile(log, dir_where, file_name):
|
||||||
|
files = os.listdir(dir_where)
|
||||||
|
for fileName in files:
|
||||||
|
if fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*":
|
||||||
|
filePath = dir_where + "/" + fileName
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
if fileName == file_name:
|
||||||
|
return filePath
|
||||||
|
elif os.path.isdir(filePath):
|
||||||
|
result = findFile(log, filePath, file_name)
|
||||||
|
if result != "":
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
printLog(log, "findFile: file not dir or file?! " + filePath)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def needUpdateDirByLowercaseTagLog(log, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
updateCount = 0
|
||||||
|
skipCount = 0
|
||||||
|
lenSrcExt = len(ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
sourceFile = dir_source + "/" + file
|
||||||
|
tagFile = dir_dest + "/" + file[0:-lenSrcExt].lower() + ext_dest
|
||||||
|
if os.path.isfile(tagFile):
|
||||||
|
sourceTime = os.stat(sourceFile).st_mtime
|
||||||
|
tagTime = os.stat(tagFile).st_mtime
|
||||||
|
if (sourceTime > tagTime):
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
else:
|
||||||
|
skipCount = skipCount + 1
|
||||||
|
else:
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
if updateCount > 0:
|
||||||
|
printLog(log, "UPDATE " + str(updateCount) + " / " + str(len(sourceFiles)) + "; SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirByTagLogFiltered(log, dir_source, ext_source, dir_dest, ext_dest, filter):
|
||||||
|
updateCount = 0
|
||||||
|
skipCount = 0
|
||||||
|
lenSrcExt = len(ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdirFiltered(log, dir_source, ext_source, filter)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
sourceFile = dir_source + "/" + file
|
||||||
|
tagFile = dir_dest + "/" + file[0:-lenSrcExt] + ext_dest
|
||||||
|
if os.path.isfile(tagFile):
|
||||||
|
sourceTime = os.stat(sourceFile).st_mtime
|
||||||
|
tagTime = os.stat(tagFile).st_mtime
|
||||||
|
if (sourceTime > tagTime):
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
else:
|
||||||
|
skipCount = skipCount + 1
|
||||||
|
else:
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
if updateCount > 0:
|
||||||
|
printLog(log, "UPDATE " + str(updateCount) + " / " + str(len(sourceFiles)) + "; SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirByTagLog(log, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
updateCount = 0
|
||||||
|
skipCount = 0
|
||||||
|
lenSrcExt = len(ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
sourceFile = dir_source + "/" + file
|
||||||
|
tagFile = dir_dest + "/" + file[0:-lenSrcExt] + ext_dest
|
||||||
|
if os.path.isfile(tagFile):
|
||||||
|
sourceTime = os.stat(sourceFile).st_mtime
|
||||||
|
tagTime = os.stat(tagFile).st_mtime
|
||||||
|
if (sourceTime > tagTime):
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
else:
|
||||||
|
skipCount = skipCount + 1
|
||||||
|
else:
|
||||||
|
updateCount = updateCount + 1
|
||||||
|
if updateCount > 0:
|
||||||
|
printLog(log, "UPDATE " + str(updateCount) + " / " + str(len(sourceFiles)) + "; SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + str(skipCount) + " / " + str(len(sourceFiles)) + "; DEST " + str(len(destFiles)))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirFile(log, dir_source, file_dest):
|
||||||
|
if not os.path.isfile(file_dest):
|
||||||
|
return 1
|
||||||
|
destTime = os.stat(file_dest).st_mtime
|
||||||
|
sourceFiles = os.listdir(dir_source)
|
||||||
|
for file in sourceFiles:
|
||||||
|
filePath = dir_source + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if fileTime > destTime:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateFileDirNoSubdir(log, file_source, dir_dest):
|
||||||
|
if not os.path.isfile(file_source):
|
||||||
|
printLog(log, "WARNING MISSING " + file_source)
|
||||||
|
return 0
|
||||||
|
sourceTime = os.stat(file_source).st_mtime
|
||||||
|
destFiles = os.listdir(dir_dest)
|
||||||
|
for file in destFiles:
|
||||||
|
filePath = dir_dest + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if sourceTime > fileTime:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirMultiFile(log, dir_source, root_file, files_dest):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateDirNoSubdirFile(log, dir_source, root_file + "/" + file_dest):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirMultiFileExt(log, dir_source, root_file, files_dest, file_ext):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateDirNoSubdirFile(log, dir_source, root_file + "/" + file_dest + file_ext):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateMultiDirNoSubdirFile(log, root_dir, dirs_source, file_dest):
|
||||||
|
for dir_source in dirs_source:
|
||||||
|
if needUpdateDirNoSubdirFile(log, root_dir + "/" + dir_source, file_dest):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateMultiDirNoSubdirMultiFileExt(log, root_dir, dirs_source, root_file, files_dest, file_ext):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateMultiDirNoSubdirFile(log, root_dir, dirs_source, root_file + "/" + file_dest + file_ext):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateMultiDirNoSubdir(log, root_dir, dirs_source, dir_dest):
|
||||||
|
for dir_source in dirs_source:
|
||||||
|
if needUpdateDirNoSubdir(log, root_dir + "/" + dir_source, dir_dest):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirExtFile(log, dir_source, dir_ext, file_dest):
|
||||||
|
if not os.path.isfile(file_dest):
|
||||||
|
return 1
|
||||||
|
destTime = os.stat(file_dest).st_mtime
|
||||||
|
sourceFiles = os.listdir(dir_source)
|
||||||
|
for file in sourceFiles:
|
||||||
|
if file.endswith(dir_ext):
|
||||||
|
filePath = dir_source + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if fileTime > destTime:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirExtMultiFileExt(log, dir_source, dir_ext, root_file, files_dest, file_ext):
|
||||||
|
for file_dest in files_dest:
|
||||||
|
if needUpdateDirNoSubdirExtFile(log, dir_source, dir_ext, root_file + "/" + file_dest + file_ext):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdir(log, dir_source, dir_dest):
|
||||||
|
latestSourceFile = 0
|
||||||
|
oldestDestFile = 0
|
||||||
|
sourceFiles = os.listdir(dir_source)
|
||||||
|
destFiles = os.listdir(dir_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
filePath = dir_source + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if fileTime > latestSourceFile:
|
||||||
|
latestSourceFile = fileTime
|
||||||
|
for file in destFiles:
|
||||||
|
filePath = dir_dest + "/" + file
|
||||||
|
if os.path.isfile(filePath):
|
||||||
|
fileTime = os.stat(filePath).st_mtime
|
||||||
|
if oldestDestFile == 0 or fileTime < oldestDestFile:
|
||||||
|
oldestDestFile = fileTime
|
||||||
|
if latestSourceFile > oldestDestFile:
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirLogExt(log, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
latestSourceFile = 0
|
||||||
|
latestDestFile = 0
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
fileTime = os.stat(dir_source + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestSourceFile):
|
||||||
|
latestSourceFile = fileTime
|
||||||
|
for file in destFiles:
|
||||||
|
fileTime = os.stat(dir_dest + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestDestFile):
|
||||||
|
latestDestFile = fileTime
|
||||||
|
if latestSourceFile > latestDestFile or len(sourceFiles) > len(destFiles):
|
||||||
|
printLog(log, "UPDATE; Source: " + str(latestSourceFile) + ", " + str(len(sourceFiles)) + " files; Dest: " + str(latestDestFile) + ", " + str(len(destFiles)) + " files")
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def needUpdateDirNoSubdirLogExtMultidir(log, all_dir_base, all_dir_source, dir_source, ext_source, dir_dest, ext_dest):
|
||||||
|
latestSourceFile = 0
|
||||||
|
latestDestFile = 0
|
||||||
|
sourceFilesAll = [ ]
|
||||||
|
for dir in all_dir_source:
|
||||||
|
sourceFilesAll += findFilesNoSubdir(log, all_dir_base + "/" + dir, ext_source)
|
||||||
|
sourceFiles = findFilesNoSubdir(log, dir_source, ext_source)
|
||||||
|
destFiles = findFilesNoSubdir(log, dir_dest, ext_dest)
|
||||||
|
for file in sourceFiles:
|
||||||
|
fileTime = os.stat(dir_source + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestSourceFile):
|
||||||
|
latestSourceFile = fileTime
|
||||||
|
for file in destFiles:
|
||||||
|
fileTime = os.stat(dir_dest + "/" + file).st_mtime
|
||||||
|
if (fileTime > latestDestFile):
|
||||||
|
latestDestFile = fileTime
|
||||||
|
if latestSourceFile > latestDestFile or len(sourceFilesAll) > len(destFiles):
|
||||||
|
printLog(log, "UPDATE; Source: " + str(latestSourceFile) + ", " + str(len(sourceFilesAll)) + " files; Dest: " + str(latestDestFile) + ", " + str(len(destFiles)) + " files")
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def findFileMultiDir(log, dirs_where, file_name):
|
||||||
|
try:
|
||||||
|
for dir in dirs_where:
|
||||||
|
if dir != "":
|
||||||
|
file = findFile(log, dir, file_name)
|
||||||
|
if file != "":
|
||||||
|
return file
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "EXCEPTION " + str(e))
|
||||||
|
printLog(log, "FILE NOT FOUND " + file_name)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def findTool(log, dirs_where, file_name, suffix):
|
||||||
|
try:
|
||||||
|
for dir in dirs_where:
|
||||||
|
if dir != "":
|
||||||
|
tool = findFile(log, dir, file_name + suffix)
|
||||||
|
if tool != "":
|
||||||
|
printLog(log, "TOOL " + tool)
|
||||||
|
return tool
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "EXCEPTION " + str(e))
|
||||||
|
printLog(log, "TOOL NOT FOUND " + file_name + suffix)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def findMax(log, dir, file):
|
||||||
|
tool = dir + "/" + file
|
||||||
|
if os.path.isfile(tool):
|
||||||
|
printLog(log, "3DSMAX " + tool)
|
||||||
|
return tool
|
||||||
|
printLog(log, "3DSMAX NOT FOUND " + file)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def toolLogFail(log, tool, suffix):
|
||||||
|
printLog(log, "FAIL " + tool + suffix + " is not found")
|
||||||
|
|
||||||
|
def askVar(log, name, default):
|
||||||
|
sys.stdout.write(name + " (" + default + "): ")
|
||||||
|
line = sys.stdin.readline()
|
||||||
|
linestrip = line.strip()
|
||||||
|
if linestrip == "--":
|
||||||
|
log.write(name + " (" + default + "): ''\n")
|
||||||
|
return ""
|
||||||
|
elif linestrip == "":
|
||||||
|
log.write(name + " (" + default + "): '" + default + "'\n")
|
||||||
|
return default
|
||||||
|
else:
|
||||||
|
log.write(name + " (" + default + "): '" + linestrip + "'\n")
|
||||||
|
return linestrip
|
@ -0,0 +1,102 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file process.py
|
||||||
|
# \brief Tools configuration
|
||||||
|
# \date 2009-03-10 11:33GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Tools configuration.
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# *** PROCESS TIMEOUT ***
|
||||||
|
SkelExportTimeout = 600000
|
||||||
|
SwtExportTimeout = 600000
|
||||||
|
ShapeExportTimeout = 3600000
|
||||||
|
ZoneExportTimeout = 1800000
|
||||||
|
ZoneBuildDependTimeout = 1800000
|
||||||
|
ZoneBuildWeldTimeout = 60000
|
||||||
|
ZoneLightBuildTimeout = 600000
|
||||||
|
ZoneIgLightBuildTimeout = 600000
|
||||||
|
SmallbankBuildTimeout = 60000
|
||||||
|
FarbankBuildTimeout = 180000
|
||||||
|
AnimExportTimeout = 1800000
|
||||||
|
IgExportTimeout = 600000
|
||||||
|
CmbExportTimeout = 60000
|
||||||
|
RbankBuildTesselTimeout = 6000000
|
||||||
|
RbankBuildSmoothTimeout = 6000000
|
||||||
|
RbankBuildProclocalTimeout = 6000000
|
||||||
|
RbankBuildProcglobalTimeout = 18000000
|
||||||
|
RbankBuildIndoorTimeout = 18000000
|
||||||
|
# WmapBuildTimeout = 60000
|
||||||
|
LigoExportTimeout = 3600000
|
||||||
|
LigoBuildTimeout = 1800000
|
||||||
|
PacsPrimExportTimeout = 600000
|
||||||
|
|
||||||
|
MapsBuildTimeout = 60000 # 1min
|
||||||
|
MaxShapeExportTimeout = 600000 # 10min
|
||||||
|
|
||||||
|
# *** TOOLS CONFIGURATION ***
|
||||||
|
|
||||||
|
TgaToDdsTool = "tga2dds"
|
||||||
|
BuildInterfaceTool = "build_interface"
|
||||||
|
ExecTimeoutTool = "exec_timeout"
|
||||||
|
BuildSmallbankTool = "build_smallbank"
|
||||||
|
BuildFarbankTool = "build_far_bank"
|
||||||
|
ZoneDependenciesTool = "zone_dependencies"
|
||||||
|
ZoneWelderTool = "zone_welder"
|
||||||
|
ZoneElevationTool = "zone_elevation"
|
||||||
|
BuildRbankTool = "build_rbank"
|
||||||
|
BuildIndoorRbankTool = "build_indoor_rbank"
|
||||||
|
BuildIgBoxesTool = "build_ig_boxes"
|
||||||
|
GetNeighborsTool = "get_neighbors"
|
||||||
|
ZoneLighterTool = "zone_lighter"
|
||||||
|
ZoneIgLighterTool = "zone_ig_lighter"
|
||||||
|
IgLighterTool = "ig_lighter"
|
||||||
|
AnimBuilderTool = "anim_builder"
|
||||||
|
TileEditTool = "tile_edit"
|
||||||
|
# BuildImagesetTool = "th_build_imageset" # kaetemi stuff, ignore this
|
||||||
|
MakeSheetIdTool = "make_sheet_id"
|
||||||
|
# BuildSheetsTool = "th_build_sheets" # kaetemi stuff, ignore this
|
||||||
|
# BuildSoundTool = "th_build_sound" # kaetemi stuff, ignore this
|
||||||
|
# BuildSoundTool = "build_sound"
|
||||||
|
BuildSoundbankTool = "build_soundbank"
|
||||||
|
BuildSamplebankTool = "build_samplebank"
|
||||||
|
BuildCoarseMeshTool = "build_coarse_mesh"
|
||||||
|
LightmapOptimizerTool = "lightmap_optimizer"
|
||||||
|
BuildClodtexTool = "build_clodtex"
|
||||||
|
BuildShadowSkinTool = "build_shadow_skin"
|
||||||
|
PanoplyMakerTool = "panoply_maker"
|
||||||
|
HlsBankMakerTool = "hls_bank_maker"
|
||||||
|
LandExportTool = "land_export"
|
||||||
|
PrimExportTool = "prim_export"
|
||||||
|
IgElevationTool = "ig_elevation"
|
||||||
|
IgAddTool = "ig_add"
|
||||||
|
BuildClodBankTool = "build_clod_bank"
|
||||||
|
SheetsPackerTool = "sheets_packer"
|
||||||
|
SheetsPackerShardTool = "sheets_packer_shard"
|
||||||
|
BnpMakeTool = "bnp_make"
|
||||||
|
SnpMakeTool = "snp_make"
|
||||||
|
AiBuildWmapTool = "ai_build_wmap"
|
||||||
|
TgaCutTool = "tga_cut"
|
||||||
|
PatchGenTool = "patch_gen"
|
||||||
|
TranslationToolsTool = "translation_tools"
|
||||||
|
BuildWorldPackedColTool = "build_world_packed_col"
|
||||||
|
R2IslandsTexturesTool = "r2_islands_textures"
|
||||||
|
PatchmanServiceTool = "ryzom_patchman_service"
|
||||||
|
SevenZipTool = "7za"
|
@ -0,0 +1,181 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file d1_client_patch.py
|
||||||
|
# \brief Install to client patch
|
||||||
|
# \date 2009-02-18 16:19GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install to client patch
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||||
|
sys.path.append("configuration")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Client Patch')
|
||||||
|
parser.add_argument('--bnponly', '-bo', action='store_true')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite_local import *
|
||||||
|
from tools import *
|
||||||
|
|
||||||
|
sys.path.append(WorkspaceDirectory)
|
||||||
|
from projects import *
|
||||||
|
|
||||||
|
# Log error
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install to client patch")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
BnpMake = findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix)
|
||||||
|
SnpMake = findTool(log, ToolDirectories, SnpMakeTool, ToolSuffix);
|
||||||
|
PatchGen = findTool(log, ToolDirectories, PatchGenTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find **** HARDCODED **** WINDOWS **** tools ... TODO: fix patch_gen tool !!!
|
||||||
|
Lzma = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, "lzma.exe")
|
||||||
|
printLog(log, "LZMA " + Lzma)
|
||||||
|
XDelta = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, "xdelta.exe")
|
||||||
|
printLog(log, "XDELTA " + XDelta)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
if BnpMake == "":
|
||||||
|
toolLogFail(log, BnpMakeTool, ToolSuffix)
|
||||||
|
elif PatchGen == "" and not args.bnponly:
|
||||||
|
toolLogFail(log, PatchGenTool, ToolSuffix)
|
||||||
|
elif Lzma == "" and not args.bnponly:
|
||||||
|
toolLogFail(log, "LZMA", ToolSuffix)
|
||||||
|
elif XDelta == "" and not args.bnponly:
|
||||||
|
toolLogFail(log, "XDELTA", ToolSuffix)
|
||||||
|
elif os.path.dirname(Lzma) != os.path.dirname(XDelta):
|
||||||
|
printLog(log, "FAIL lzma.exe and xdelta.exe must be in the same directory")
|
||||||
|
else:
|
||||||
|
mkPath(log, ClientPatchDirectory)
|
||||||
|
if not args.bnponly:
|
||||||
|
productXml = ClientPatchDirectory + "/" + ProductName + ".xml"
|
||||||
|
if not os.path.isfile(productXml):
|
||||||
|
printLog(log, ">>> Create new product <<<")
|
||||||
|
subprocess.call([ PatchGen, "createNewProduct", productXml ])
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, ">>> Rewrite " + ProductName + ".xml <<<") # because we know better.
|
||||||
|
shutil.move(productXml, productXml + ".old")
|
||||||
|
oldCfg = open(productXml + ".old", "r")
|
||||||
|
cfg = open(productXml, "w")
|
||||||
|
inCategories = 0
|
||||||
|
for line in oldCfg:
|
||||||
|
if not inCategories:
|
||||||
|
if line.strip() == "<_Categories>":
|
||||||
|
inCategories = 1
|
||||||
|
cfg.write("\t<_Categories>\n")
|
||||||
|
for category in InstallClientData:
|
||||||
|
packExt = ".bnp"
|
||||||
|
if (category["StreamedPackages"]):
|
||||||
|
packExt = ".snp"
|
||||||
|
cfg.write("\t\t<_Category>\n")
|
||||||
|
cfg.write("\t\t\t<_Name type=\"STRING\" value=\"" + category["Name"] + "\"/>\n")
|
||||||
|
if category["UnpackTo"] != None:
|
||||||
|
if category["UnpackTo"] != "":
|
||||||
|
cfg.write("\t\t\t<_UnpackTo type=\"STRING\" value=\"./" + category["UnpackTo"] + "/\"/>\n")
|
||||||
|
else:
|
||||||
|
cfg.write("\t\t\t<_UnpackTo type=\"STRING\" value=\"./\"/>\n")
|
||||||
|
cfg.write("\t\t\t<_IsOptional type=\"SINT32\" value=\"" + str(category["IsOptional"]) + "\"/>\n")
|
||||||
|
cfg.write("\t\t\t<_IsIncremental type=\"SINT32\" value=\"" + str(category["IsIncremental"]) + "\"/>\n")
|
||||||
|
for package in category["Packages"]:
|
||||||
|
if (len(package[1]) > 0):
|
||||||
|
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[1][0] + "\"/>\n")
|
||||||
|
else:
|
||||||
|
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[0] + packExt + "\"/>\n")
|
||||||
|
for ref in category["Refs"]:
|
||||||
|
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + ref + "_.ref\"/>\n")
|
||||||
|
cfg.write("\t\t</_Category>\n")
|
||||||
|
cfg.write("\t</_Categories>\n")
|
||||||
|
else:
|
||||||
|
cfg.write(line)
|
||||||
|
else:
|
||||||
|
if line.strip() == "</_Categories>":
|
||||||
|
inCategories = 0
|
||||||
|
oldCfg.close()
|
||||||
|
cfg.close()
|
||||||
|
os.remove(productXml + ".old")
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, ">>> Make bnp <<<")
|
||||||
|
targetPath = ClientPatchDirectory + "/bnp"
|
||||||
|
tagPath = ClientPatchDirectory + "/bnp_tag"
|
||||||
|
mkPath(log, targetPath)
|
||||||
|
mkPath(log, tagPath)
|
||||||
|
for category in InstallClientData:
|
||||||
|
packExt = ".bnp"
|
||||||
|
if (category["StreamedPackages"]):
|
||||||
|
packExt = ".snp"
|
||||||
|
for package in category["Packages"]:
|
||||||
|
printLog(log, "PACKAGE " + package[0])
|
||||||
|
sourcePath = InstallDirectory + "/" + package[0]
|
||||||
|
mkPath(log, sourcePath)
|
||||||
|
targetBnp = targetPath + "/" + package[0] + packExt
|
||||||
|
tagBnp = tagPath + "/" + package[0] + packExt + ".tag"
|
||||||
|
if (len(package[1]) > 0):
|
||||||
|
targetBnp = targetPath + "/" + package[1][0]
|
||||||
|
tagBnp = tagPath + "/" + package[1][0] + ".tag"
|
||||||
|
printLog(log, "TARGET " + package[1][0])
|
||||||
|
needUpdateBnp = 1
|
||||||
|
if (len(package) > 2):
|
||||||
|
needUpdateBnp = needUpdate(log, sourcePath + "/" + package[2], tagBnp)
|
||||||
|
else:
|
||||||
|
needUpdateBnp = needUpdateDirNoSubdirFile(log, sourcePath, tagBnp)
|
||||||
|
if (needUpdateBnp):
|
||||||
|
subRet = 0
|
||||||
|
open(tagBnp, 'a').close()
|
||||||
|
os.utime(tagBnp, None)
|
||||||
|
if (category["StreamedPackages"]):
|
||||||
|
printLog(log, "SNP " + targetBnp)
|
||||||
|
# cwDir = os.getcwd().replace("\\", "/")
|
||||||
|
# toolDir = os.path.dirname(Lzma).replace("\\", "/")
|
||||||
|
# os.chdir(toolDir)
|
||||||
|
subRet = subprocess.call([ SnpMake, "-p", sourcePath, targetBnp, ClientPatchDirectory + "/stream" ] + package[1][1:])
|
||||||
|
# os.chdir(cwDir)
|
||||||
|
else:
|
||||||
|
printLog(log, "BNP " + targetBnp)
|
||||||
|
subRet = subprocess.call([ BnpMake, "-p", sourcePath, "-o", targetBnp ] + package[1][1:])
|
||||||
|
if (subRet != 0):
|
||||||
|
os.remove(tagBnp)
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + targetBnp)
|
||||||
|
printLog(log, "")
|
||||||
|
if not args.bnponly:
|
||||||
|
printLog(log, ">>> Update product <<<")
|
||||||
|
cwDir = os.getcwd().replace("\\", "/")
|
||||||
|
toolDir = os.path.dirname(Lzma).replace("\\", "/")
|
||||||
|
os.chdir(toolDir)
|
||||||
|
subprocess.call([ PatchGen, "updateProduct", productXml ])
|
||||||
|
os.chdir(cwDir)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("d1_client_patch.log"):
|
||||||
|
os.remove("d1_client_patch.log")
|
||||||
|
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_client_patch.log")
|
||||||
|
shutil.move("log.log", "d1_client_patch.log")
|
@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build ai_wmap
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build ai_wmap
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build ai_wmap")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
AiBuildWmap = findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix)
|
||||||
|
TgaCut = findTool(log, ToolDirectories, TgaCutTool, ToolSuffix)
|
||||||
|
|
||||||
|
if AiBuildWmap == "":
|
||||||
|
toolLogFail(log, AiBuildWmapTool, ToolSuffix)
|
||||||
|
if TgaCut == "":
|
||||||
|
toolLogFail(log, TgaCutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
printLog(log, ">>> Copy ai_build_wmap.cfg <<<")
|
||||||
|
cfgPath = ActiveProjectDirectory + "/generated/ai_build_wmap.cfg"
|
||||||
|
tagPath = ExportBuildDirectory + "/" + AiWmapBuildTagDirectory + "/ai_wmap_build.tag"
|
||||||
|
shutil.copy(cfgPath, "ai_build_wmap.cfg")
|
||||||
|
printLog(log, ">>> Check up packed sheets <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "checkPackedSheets" ])
|
||||||
|
printLog(log, ">>> Build ai_wmap <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankOutputBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildTagDirectory)
|
||||||
|
if (needUpdate(log, "continents.packed_sheets", tagPath) or needUpdateMultiDirNoSubdirFile(log, ExportBuildDirectory, [ RbankOutputBuildDirectory ] + IgLookupDirectories + PacsPrimLookupDirectories, tagPath)):
|
||||||
|
printLog(log, ">>> Generate wmap <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsCrunch " + AiWmapContinentName ])
|
||||||
|
printLog(log, ">>> Generate sized wmap <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsBuildGabarit " + AiWmapContinentName ])
|
||||||
|
printLog(log, ">>> Generate cwmaps for each size <<<")
|
||||||
|
callParallelProcess([ AiBuildWmap, "pacsBuildWmap " + AiWmapContinentName + "_0" ])
|
||||||
|
callParallelProcess([ AiBuildWmap, "pacsBuildWmap " + AiWmapContinentName + "_1" ])
|
||||||
|
callParallelProcess([ AiBuildWmap, "pacsBuildWmap " + AiWmapContinentName + "_2" ])
|
||||||
|
flushParallelProcesses()
|
||||||
|
printLog(log, ">>> Generate bitmap for each size <<<")
|
||||||
|
callParallelProcess([ AiBuildWmap, "pacsBuildBitmap " + AiWmapContinentName + "_0" ])
|
||||||
|
callParallelProcess([ AiBuildWmap, "pacsBuildBitmap " + AiWmapContinentName + "_1" ])
|
||||||
|
callParallelProcess([ AiBuildWmap, "pacsBuildBitmap " + AiWmapContinentName + "_2" ])
|
||||||
|
flushParallelProcesses()
|
||||||
|
printLog(log, ">>> Clear height maps for size 1 and 2 <<<")
|
||||||
|
subprocess.call([ AiBuildWmap, "pacsClearHeightmap " + AiWmapContinentName ])
|
||||||
|
printLog(log, ">>> Cut tga for world editor <<<")
|
||||||
|
subprocess.call([ TgaCut, ExportBuildDirectory + "/" + AiWmapBuildDirectory + "/" + AiWmapContinentName + "_0.tga" ])
|
||||||
|
moveFilesExtNoTree(log, ".", ExportBuildDirectory + "/" + AiWmapBuildDirectory, ".tga")
|
||||||
|
printLog(log, ">>> Remove wmap <<<")
|
||||||
|
removeFilesRecursiveExt(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory, ".wmap")
|
||||||
|
tagFile = open(tagPath, "w")
|
||||||
|
tagFile.write(time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())) + "\n")
|
||||||
|
tagFile.close()
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,120 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup cartographer
|
||||||
|
# \date 2014-09-13 13:32GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup cartographer
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 Jan BOON
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup cartographer")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + CartographerBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + CartographerMapBuildDirectory)
|
||||||
|
|
||||||
|
# Setup lookup directories
|
||||||
|
printLog(log, ">>> Setup lookup directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + AiWmapBuildDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneLightBuildDirectory) # IN (.zonel)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneLightIgLandBuildDirectory) # IN (.ig)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + SmallbankExportDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + FarbankBuildDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + DisplaceExportDirectory) # IN
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + TilesExportDirectory) # IN
|
||||||
|
mkPath(log, LeveldesignDataCommonDirectory) # IN
|
||||||
|
mkPath(log, LeveldesignDfnDirectory) # IN
|
||||||
|
mkPath(log, LeveldesignDirectory) # IN
|
||||||
|
for dir in PropertiesExportBuildSearchPaths:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup install directories <<<")
|
||||||
|
mkPath(log, InstallDirectory + "/" + CartographerInstallDirectory)
|
||||||
|
mkPath(log, InstallDirectory + "/" + IslandsInstallDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup configuration <<<")
|
||||||
|
mkPath(log, ActiveProjectDirectory + "/generated")
|
||||||
|
cfg = open(ActiveProjectDirectory + "/generated/island_screenshots.cfg", "w")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("// BUILD CARTOGRAPHER CONFIGURATION\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("SearchPaths = {\n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + AiWmapBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + ZoneLightBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + ZoneLightIgLandBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + SmallbankExportDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + FarbankBuildDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + DisplaceExportDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + TilesExportDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + LeveldesignDataCommonDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + LeveldesignDfnDirectory + "\", \n")
|
||||||
|
cfg.write("\t\"" + LeveldesignDirectory + "\", \n")
|
||||||
|
for dir in PropertiesExportBuildSearchPaths:
|
||||||
|
cfg.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("OutDir = \"" + ExportBuildDirectory + "/" + CartographerBuildDirectory + "\";\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("Continents = {\n")
|
||||||
|
cfg.write("\t\"" + CartographerContinent + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("SeasonSuffixes = {\n")
|
||||||
|
if CartographerSeasonSuffixes:
|
||||||
|
for suffix in CartographerSeasonSuffixes:
|
||||||
|
cfg.write("\t\"" + suffix + "\", \n")
|
||||||
|
else:
|
||||||
|
for suffix in MultipleTilesPostfix:
|
||||||
|
cfg.write("\t\"" + suffix + "\", \n")
|
||||||
|
cfg.write("};\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("InverseZTest = true;\n")
|
||||||
|
cfg.write("Vegetation = true;\n")
|
||||||
|
cfg.write("MeterPixelSize = 2;\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.write("CompleteIslandsFile = \"" + ExportBuildDirectory + "/" + CartographerBuildDirectory + "/" + IslandsXmlFile + "\";\n")
|
||||||
|
cfg.write("EntryPointsFile = \"r2_entry_points.txt\";\n")
|
||||||
|
cfg.write("\n")
|
||||||
|
cfg.close()
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 1_export.py
|
||||||
|
# \brief Export font
|
||||||
|
# \date 2009-03-10-19-43-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Export font
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Export font")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Export font <<<")
|
||||||
|
fontExportDir = ExportBuildDirectory + "/" + FontExportDirectory
|
||||||
|
mkPath(log, fontExportDir)
|
||||||
|
for dir in FontSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".ttf")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".otf")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".afm")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".pfb")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, DatabaseDirectory + "/" + dir, fontExportDir, ".pfm")
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 3_install.py
|
||||||
|
# \brief Install font
|
||||||
|
# \date 2009-03-10-19-43-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Install font
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite_local import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Install font")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
installPath = InstallDirectory + "/" + FontInstallDirectory
|
||||||
|
mkPath(log, installPath)
|
||||||
|
fontExportDir = ExportBuildDirectory + "/" + FontExportDirectory
|
||||||
|
mkPath(log, fontExportDir)
|
||||||
|
|
||||||
|
printLog(log, ">>> Install font <<<")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, fontExportDir, installPath, ".ttf")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, fontExportDir, installPath, ".otf")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, fontExportDir, installPath, ".afm")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, fontExportDir, installPath, ".pfb")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, fontExportDir, installPath, ".pfm")
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,275 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build ig
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build ig
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build ig")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
ExecTimeout = findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
PrimExport = findTool(log, ToolDirectories, PrimExportTool , ToolSuffix)
|
||||||
|
IgElevation = findTool(log, ToolDirectories, IgElevationTool, ToolSuffix)
|
||||||
|
IgAdd = findTool(log, ToolDirectories, IgAddTool, ToolSuffix)
|
||||||
|
|
||||||
|
configDir = ActiveProjectDirectory + "/generated"
|
||||||
|
mkPath(log, configDir)
|
||||||
|
|
||||||
|
def igElevation(inputIgDir, outputIgDir):
|
||||||
|
printLog(log, ">>> IG Elevation <<<")
|
||||||
|
mkPath(log, inputIgDir)
|
||||||
|
mkPath(log, outputIgDir)
|
||||||
|
needUpdateIg = needUpdateDirByTagLog(log, inputIgDir, ".ig", outputIgDir, ".ig")
|
||||||
|
if needUpdateIg:
|
||||||
|
printLog(log, "DETECT UPDATE IG->Elevated")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP IG->Elevated")
|
||||||
|
needUpdateHeightMap = needUpdateFileDirNoSubdir(log, DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap1, outputIgDir) or needUpdateFileDirNoSubdir(log, DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap2, outputIgDir)
|
||||||
|
if needUpdateHeightMap:
|
||||||
|
printLog(log, "DETECT UPDATE HeightMap->Elevated")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP HeightMap->Elevated")
|
||||||
|
needUpdateLand = needUpdateFileDirNoSubdir(log, DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportLand, outputIgDir)
|
||||||
|
if needUpdateLand:
|
||||||
|
printLog(log, "DETECT UPDATE Land->Elevated")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Land->Elevated")
|
||||||
|
if needUpdateIg or needUpdateHeightMap or needUpdateLand:
|
||||||
|
printLog(log, "DETECT DECIDE UPDATE")
|
||||||
|
mkPath(log, inputIgDir)
|
||||||
|
mkPath(log, outputIgDir)
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + LigoBaseSourceDirectory)
|
||||||
|
|
||||||
|
configFile = configDir + "/ig_elevation.cfg"
|
||||||
|
if os.path.isfile(configFile):
|
||||||
|
os.remove(configFile)
|
||||||
|
|
||||||
|
printLog(log, "CONFIG " + configFile)
|
||||||
|
cf = open(configFile, "w")
|
||||||
|
cf.write("// ig_elevation.cfg\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("InputIGDir = \"" + inputIgDir + "\";\n")
|
||||||
|
cf.write("OutputIGDir = \"" + outputIgDir + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("CellSize = 160.0;")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("HeightMapFile1 = \"" + DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap1 + "\";\n")
|
||||||
|
cf.write("ZFactor1 = " + LigoExportZFactor1 + ";\n")
|
||||||
|
cf.write("HeightMapFile2 = \"" + DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap2 + "\";\n")
|
||||||
|
cf.write("ZFactor2 = " + LigoExportZFactor2 + ";\n")
|
||||||
|
cf.write("ExtendCoords = " + str(LigoExportExtendCoords) + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("LandFile = \"" + DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportLand + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.close()
|
||||||
|
subprocess.call([ IgElevation, configFile ])
|
||||||
|
os.remove(configFile)
|
||||||
|
|
||||||
|
# Copy remaining IG files
|
||||||
|
#BUG:copyFilesLogless(log, inputIgDir, outputIgDir)
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT DECIDE SKIP")
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
|
||||||
|
# Build process
|
||||||
|
if (ContinentLeveldesignWorldDirectory != "") or (len(IgOtherSourceDirectories) > 0):
|
||||||
|
printLog(log, ">>> Prim IG: ON <<<")
|
||||||
|
configFile = configDir + "/prim_export.cfg"
|
||||||
|
if os.path.isfile(configFile):
|
||||||
|
os.remove(configFile)
|
||||||
|
|
||||||
|
outIgDir = ExportBuildDirectory + "/" + IgElevLandPrimBuildDirectory
|
||||||
|
mkPath(log, outIgDir)
|
||||||
|
zoneWDir = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory
|
||||||
|
mkPath(log, zoneWDir)
|
||||||
|
smallBank = DatabaseDirectory + "/" + TileRootSourceDirectory + "/" + BankTileBankName + ".bank"
|
||||||
|
farBank = ExportBuildDirectory + "/" + FarbankBuildDirectory + "/" + BankTileBankName + MultipleTilesPostfix[0] + ".farbank"
|
||||||
|
displaceDir = DatabaseDirectory + "/" + DisplaceSourceDirectory
|
||||||
|
continentDir = LeveldesignWorldDirectory + "/" + ContinentLeveldesignWorldDirectory
|
||||||
|
mkPath(log, continentDir)
|
||||||
|
formDir = LeveldesignDirectory
|
||||||
|
mkPath(log, LeveldesignDirectory)
|
||||||
|
worldEditorFiles = WorldEditorFilesDirectory
|
||||||
|
mkPath(log, WorldEditorFilesDirectory)
|
||||||
|
|
||||||
|
printLog(log, "CONFIG " + configFile)
|
||||||
|
cf = open(configFile, "w")
|
||||||
|
cf.write("// prim_export.cfg\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("OutIGDir = \"" + outIgDir + "\";\n")
|
||||||
|
cf.write("ZoneWDir = \"" + zoneWDir + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("SmallBank = \"" + smallBank + "\";\n")
|
||||||
|
cf.write("FarBank = \"" + farBank + "\";\n")
|
||||||
|
cf.write("DisplaceDir = \"" + displaceDir + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("CellSize = 160.0;")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("PrimDirs = {\n")
|
||||||
|
cf.write("\t\"" + continentDir + "\", \n")
|
||||||
|
for dir in IgPrimitiveSourceDirectories:
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + dir)
|
||||||
|
cf.write("\t\"" + DatabaseDirectory + "/" + dir + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("FormDir = \"" + formDir + "\";\n")
|
||||||
|
cf.write("WorldEditorFiles = \"" + worldEditorFiles + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.close()
|
||||||
|
subprocess.call([ PrimExport, configFile ])
|
||||||
|
os.remove(configFile)
|
||||||
|
|
||||||
|
igElevation(ExportBuildDirectory + "/" + LigoIgLandBuildDirectory, ExportBuildDirectory + "/" + IgElevLandLigoBuildDirectory)
|
||||||
|
|
||||||
|
igElevation(ExportBuildDirectory + "/" + IgStaticLandExportDirectory, ExportBuildDirectory + "/" + IgElevLandStaticBuildDirectory)
|
||||||
|
|
||||||
|
printLog(log, ">>> Merge land IGs <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgTempLandMergeBuildDirectory)
|
||||||
|
removeFilesRecursive(log, ExportBuildDirectory + "/" + IgTempLandMergeBuildDirectory)
|
||||||
|
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgLandBuildDirectory)
|
||||||
|
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgElevLandPrimBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgElevLandLigoBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgElevLandStaticBuildDirectory)
|
||||||
|
igFilesPrim = findFiles(log, ExportBuildDirectory + "/" + IgElevLandPrimBuildDirectory, "", ".ig")
|
||||||
|
igFilesLigo = findFiles(log, ExportBuildDirectory + "/" + IgElevLandLigoBuildDirectory, "", ".ig")
|
||||||
|
igFilesStatic = findFiles(log, ExportBuildDirectory + "/" + IgElevLandStaticBuildDirectory, "", ".ig")
|
||||||
|
igFilesAll = [ ]
|
||||||
|
for igFile in igFilesPrim:
|
||||||
|
if not igFile in igFilesAll:
|
||||||
|
igFilesAll += [ igFile ]
|
||||||
|
for igFile in igFilesLigo:
|
||||||
|
if not igFile in igFilesAll:
|
||||||
|
igFilesAll += [ igFile ]
|
||||||
|
for igFile in igFilesStatic:
|
||||||
|
if not igFile in igFilesAll:
|
||||||
|
igFilesAll += [ igFile ]
|
||||||
|
igFilesAll.sort()
|
||||||
|
for igFile in igFilesAll:
|
||||||
|
primIgFile = ExportBuildDirectory + "/" + IgElevLandPrimBuildDirectory + "/" + igFile
|
||||||
|
ligoIgFile = ExportBuildDirectory + "/" + IgElevLandLigoBuildDirectory + "/" + igFile
|
||||||
|
staticIgFile = ExportBuildDirectory + "/" + IgElevLandStaticBuildDirectory + "/" + igFile
|
||||||
|
tempIgFile = ExportBuildDirectory + "/" + IgTempLandMergeBuildDirectory + "/" + igFile
|
||||||
|
outIgFile = ExportBuildDirectory + "/" + IgLandBuildDirectory + "/" + igFile
|
||||||
|
activeFile = ""
|
||||||
|
needsUpdate = 0
|
||||||
|
sourceTools = ""
|
||||||
|
if igFile in igFilesPrim:
|
||||||
|
if needUpdate(log, primIgFile, outIgFile):
|
||||||
|
needsUpdate = 1
|
||||||
|
if not needsUpdate == 1 and igFile in igFilesLigo:
|
||||||
|
if needUpdate(log, ligoIgFile, outIgFile):
|
||||||
|
needsUpdate = 1
|
||||||
|
if not needsUpdate == 1 and igFile in igFilesStatic:
|
||||||
|
if needUpdate(log, staticIgFile, outIgFile):
|
||||||
|
needsUpdate = 1
|
||||||
|
if needsUpdate == 1:
|
||||||
|
if os.path.isfile(outIgFile):
|
||||||
|
os.remove(outIgFile)
|
||||||
|
if igFile in igFilesPrim:
|
||||||
|
sourceTools += " [Prim]"
|
||||||
|
activeFile = primIgFile
|
||||||
|
if igFile in igFilesLigo:
|
||||||
|
if activeFile == "":
|
||||||
|
activeFile = ligoIgFile
|
||||||
|
else:
|
||||||
|
sourceTools += " [Ligo]"
|
||||||
|
subprocess.call([ IgAdd, tempIgFile, ligoIgFile, activeFile ])
|
||||||
|
activeFile = tempIgFile
|
||||||
|
if igFile in igFilesStatic:
|
||||||
|
if activeFile == "":
|
||||||
|
activeFile = staticIgFile
|
||||||
|
else:
|
||||||
|
sourceTools += " [Static]"
|
||||||
|
subprocess.call([ IgAdd, outIgFile, staticIgFile, activeFile ])
|
||||||
|
activeFile = outIgFile
|
||||||
|
else:
|
||||||
|
shutil.copy(activeFile, outIgFile)
|
||||||
|
printLog(log, "MERGE " + igFile + sourceTools)
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + igFile)
|
||||||
|
|
||||||
|
# Remove temporary land IGs
|
||||||
|
printLog(log, ">>> Remove temporary land IGs <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgTempLandMergeBuildDirectory)
|
||||||
|
removeFilesRecursive(log, ExportBuildDirectory + "/" + IgTempLandMergeBuildDirectory)
|
||||||
|
|
||||||
|
# Remove outdated land IGs
|
||||||
|
printLog(log, ">>> Remove outdated land IGs <<<")
|
||||||
|
igFilesOut = findFiles(log, ExportBuildDirectory + "/" + IgLandBuildDirectory, "", ".ig")
|
||||||
|
for igFile in igFilesOut:
|
||||||
|
if not igFile in igFilesAll:
|
||||||
|
printLog(log, "RM " + ExportBuildDirectory + "/" + IgLandBuildDirectory + "/" + igFile)
|
||||||
|
os.remove(ExportBuildDirectory + "/" + IgLandBuildDirectory + "/" + igFile)
|
||||||
|
|
||||||
|
# Verify land IGs
|
||||||
|
printLog(log, ">>> Verify land IGs <<<")
|
||||||
|
for igFile in igFilesAll:
|
||||||
|
if not igFile in igFilesOut:
|
||||||
|
printLog(log, "MISSING " + igFile)
|
||||||
|
|
||||||
|
# Write land IGs TXT
|
||||||
|
printLog(log, ">>> Write land IGs TXT <<<")
|
||||||
|
igTxtFile = ExportBuildDirectory + "/" + IgLandBuildDirectory + "/" + LandscapeName + "_ig.txt"
|
||||||
|
if needUpdateDirNoSubdirFile(log, ExportBuildDirectory + "/" + IgLandBuildDirectory, igTxtFile):
|
||||||
|
printLog(log, "WRITE " + ExportBuildDirectory + "/" + IgLandBuildDirectory + "/" + LandscapeName + "_ig.txt")
|
||||||
|
if os.path.isfile(igTxtFile):
|
||||||
|
os.remove(igTxtFile)
|
||||||
|
igTxt = open(igTxtFile, "w")
|
||||||
|
for igFile in igFilesAll:
|
||||||
|
igTxt.write(igFile + "\n")
|
||||||
|
igTxt.close()
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
|
||||||
|
# Merge other IGs
|
||||||
|
printLog(log, ">>> Merge other IGs <<<") # (not true merge, since not necesserary)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgStaticOtherExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoIgOtherBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgOtherBuildDirectory)
|
||||||
|
# copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + IgStaticOtherExportDirectory, ExportBuildDirectory + "/" + IgOtherBuildDirectory, ".ig")
|
||||||
|
igElevation(ExportBuildDirectory + "/" + IgStaticOtherExportDirectory, ExportBuildDirectory + "/" + IgOtherBuildDirectory)
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + LigoIgOtherBuildDirectory, ExportBuildDirectory + "/" + IgOtherBuildDirectory, ".ig")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,121 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 0_setup.py
|
||||||
|
# \brief setup ligo
|
||||||
|
# \date 2010-05-24 08:13GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Setup ligo
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Setup ligo")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Setup source directories
|
||||||
|
printLog(log, ">>> Setup source directories <<<")
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + LigoBaseSourceDirectory)
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + LigoMaxSourceDirectory)
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + ZoneSourceDirectory[0])
|
||||||
|
|
||||||
|
# Setup export directories
|
||||||
|
printLog(log, ">>> Setup export directories <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + SmallbankExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemIgExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemZoneExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemZoneLigoExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemCmbExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoEcosystemTagExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneExportDirectory)
|
||||||
|
|
||||||
|
# Setup build directories
|
||||||
|
printLog(log, ">>> Setup build directories <<<")
|
||||||
|
if LigoExportLand != "":
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoZoneBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoIgLandBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + LigoIgOtherBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RBankCmbExportDirectory)
|
||||||
|
|
||||||
|
# Setup client directories
|
||||||
|
printLog(log, ">>> Setup client directories <<<")
|
||||||
|
|
||||||
|
# Setup land exporter cfg
|
||||||
|
if LigoExportLand != "":
|
||||||
|
printLog(log, ">>> Setup land exporter cfg <<<")
|
||||||
|
mkPath(log, ActiveProjectDirectory + "/generated")
|
||||||
|
cf = open(ActiveProjectDirectory + "/generated/land_exporter.cfg", "w")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("// Ligo settings\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("OutZoneDir = \"" + ExportBuildDirectory + "/" + LigoZoneBuildDirectory + "\";\n")
|
||||||
|
cf.write("OutIGDir = \"" + ExportBuildDirectory + "/" + LigoIgLandBuildDirectory + "\";\n")
|
||||||
|
cf.write("AdditionnalIGOutDir = \"" + ExportBuildDirectory + "/" + LigoIgOtherBuildDirectory + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("RefZoneDir = \"" + ExportBuildDirectory + "/" + LigoEcosystemZoneExportDirectory+ "\";\n") # FIXME
|
||||||
|
cf.write("RefIGDir = \"" + ExportBuildDirectory + "/" + LigoEcosystemIgExportDirectory + "\";\n")
|
||||||
|
cf.write("AdditionnalIGInDir = \"" + ExportBuildDirectory + "/" + LigoEcosystemIgExportDirectory + "\";\n") # FIXME
|
||||||
|
cf.write("ContinentsDir = \"" + LeveldesignWorldDirectory + "\";\n")
|
||||||
|
cf.write("LigoBankDir = \"" + ExportBuildDirectory + "/" + LigoEcosystemZoneLigoExportDirectory + "\";\n") # FIXME
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("TileBankFile = \"" + DatabaseDirectory + "/" + LigoTileBankFile + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("ColorMapFile = \"" + DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportColormap + "\";\n")
|
||||||
|
cf.write("HeightMapFile1 = \"" + DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap1 + "\";\n")
|
||||||
|
cf.write("ZFactor1 = " + LigoExportZFactor1 + ";\n")
|
||||||
|
cf.write("HeightMapFile2 = \"" + DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap2 + "\";\n")
|
||||||
|
cf.write("ZFactor2 = " + LigoExportZFactor2 + ";\n")
|
||||||
|
cf.write("ExtendCoords = " + str(LigoExportExtendCoords) + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("ZoneLight = 0;\n")
|
||||||
|
cf.write("CellSize = 160;\n")
|
||||||
|
cf.write("Threshold = 1;\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("DFNDir = \"" + LeveldesignDfnDirectory + "\";\n")
|
||||||
|
cf.write("RefCMBDir = \"" + ExportBuildDirectory + "/" + LigoEcosystemCmbExportDirectory + "\";\n") # FIXME
|
||||||
|
cf.write("OutCMBDir = \"" + ExportBuildDirectory + "/" + RBankCmbExportDirectory + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("ContinentFile = \"" + LeveldesignWorldDirectory + "/" + ContinentFile + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("ExportCollisions = 1;\n")
|
||||||
|
cf.write("ExportAdditionnalIGs = 1;\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("ZoneRegionFile = \"" + DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportLand + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.close()
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,339 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build rbank
|
||||||
|
# \date 2009-03-10-22-43-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build rbank
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build rbank")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
BuildIgBoxes = findTool(log, ToolDirectories, BuildIgBoxesTool, ToolSuffix)
|
||||||
|
ExecTimeout = findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
BuildRbank = findTool(log, ToolDirectories, BuildRbankTool, ToolSuffix)
|
||||||
|
GetNeighbors = findTool(log, ToolDirectories, GetNeighborsTool, ToolSuffix)
|
||||||
|
BuildIndoorRbank = findTool(log, ToolDirectories, BuildIndoorRbankTool, ToolSuffix)
|
||||||
|
# AiBuildWmap = findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Build rbank bbox
|
||||||
|
printLog(log, ">>> Build rbank bbox <<<")
|
||||||
|
tempBbox = ExportBuildDirectory + "/" + RbankBboxBuildDirectory + "/temp.bbox"
|
||||||
|
rebuiltBbox = False
|
||||||
|
if BuildIgBoxes == "":
|
||||||
|
toolLogFail(log, BuildIgBoxesTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankBboxBuildDirectory)
|
||||||
|
needUpdateIg = needUpdateMultiDirNoSubdirFile(log, ExportBuildDirectory, IgLookupDirectories, tempBbox)
|
||||||
|
if needUpdateIg:
|
||||||
|
printLog(log, "DETECT UPDATE IG->Bbox")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP IG->Bbox")
|
||||||
|
needUpdateShape = needUpdateMultiDirNoSubdirFile(log, ExportBuildDirectory, ShapeLookupDirectories, tempBbox)
|
||||||
|
if needUpdateShape:
|
||||||
|
printLog(log, "DETECT UPDATE Shape->Bbox")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Shape->Bbox")
|
||||||
|
if needUpdateIg or needUpdateShape:
|
||||||
|
rebuiltBbox = True
|
||||||
|
printLog(log, "DETECT DECIDE UPDATE")
|
||||||
|
cf = open("build_ig_boxes.cfg", "w")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("Pathes = {\n")
|
||||||
|
for dir in IgLookupDirectories:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
cf.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
for dir in ShapeLookupDirectories:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
cf.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("IGs = {\n")
|
||||||
|
for dir in IgLookupDirectories:
|
||||||
|
files = findFiles(log, ExportBuildDirectory + "/" + dir, "", ".ig")
|
||||||
|
for file in files:
|
||||||
|
cf.write("\t\"" + os.path.basename(file)[0:-len(".ig")] + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("Output = \"" + tempBbox + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.close()
|
||||||
|
subprocess.call([ BuildIgBoxes ])
|
||||||
|
os.remove("build_ig_boxes.cfg")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT DECIDE SKIP")
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Build rbank build config <<<")
|
||||||
|
cf = open("build_rbank.cfg", "w")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("// Rbank settings\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("Verbose = " + str(RBankVerbose) + ";\n")
|
||||||
|
cf.write("CheckConsistency = " + str(RBankConsistencyCheck) + ";\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory)
|
||||||
|
cf.write("ZonePath = \"" + ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/\";\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + SmallbankExportDirectory)
|
||||||
|
cf.write("BanksPath = \"" + ExportBuildDirectory + "/" + SmallbankExportDirectory + "/\";\n")
|
||||||
|
cf.write("Bank = \"" + ExportBuildDirectory + "/" + SmallbankExportDirectory + "/" + BankTileBankName + ".smallbank\";\n")
|
||||||
|
cf.write("ZoneExt = \".zonew\";\n")
|
||||||
|
cf.write("ZoneNHExt = \".zonenhw\";\n")
|
||||||
|
cf.write("IGBoxes = \"" + tempBbox + "\";\n")
|
||||||
|
mkPath(log, LeveldesignWorldDirectory)
|
||||||
|
cf.write("LevelDesignWorldPath = \"" + LeveldesignWorldDirectory + "\";\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgLandBuildDirectory)
|
||||||
|
cf.write("IgLandPath = \"" + ExportBuildDirectory + "/" + IgLandBuildDirectory + "\";\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + IgOtherBuildDirectory)
|
||||||
|
cf.write("IgVillagePath = \"" + ExportBuildDirectory + "/" + IgOtherBuildDirectory + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankTessellationBuildDirectory)
|
||||||
|
cf.write("TessellationPath = \"" + ExportBuildDirectory + "/" + RbankTessellationBuildDirectory + "/\";\n")
|
||||||
|
cf.write("TessellateLevel = " + str(BuildQuality) + ";\n") # BuildQuality
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("WaterThreshold = 1.0;\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("OutputRootPath = \"" + ExportBuildDirectory + "/\";\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankSmoothBuildDirectory)
|
||||||
|
cf.write("SmoothDirectory = \"" + RbankSmoothBuildDirectory + "/\";\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankRawBuildDirectory)
|
||||||
|
cf.write("RawDirectory = \"" + RbankRawBuildDirectory + "/\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("ReduceSurfaces = " + str(RbankReduceSurfaces) + ";\n")
|
||||||
|
cf.write("SmoothBorders = " + str(RbankSmoothBorders) + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("ComputeElevation = " + str(RbankComputeElevation) + ";\n")
|
||||||
|
cf.write("ComputeLevels = " + str(RbankComputeLevels) + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("LinkElements = " + str(RbankLinkElements) + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("CutEdges = " + str(RbankCutEdges) + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("UseZoneSquare = " + str(RbankUseZoneSquare) + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("// The whole landscape\n")
|
||||||
|
cf.write("ZoneUL = \"" + RbankZoneUl + "\";\n")
|
||||||
|
cf.write("ZoneDR = \"" + RbankZoneDr + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankPreprocBuildDirectory)
|
||||||
|
cf.write("PreprocessDirectory = \"" + ExportBuildDirectory + "/" + RbankPreprocBuildDirectory + "/\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("// The global retriever processing settings\n")
|
||||||
|
cf.write("GlobalRetriever = \"temp.gr\";\n")
|
||||||
|
cf.write("RetrieverBank = \"temp.rbank\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("GlobalUL = \"" + RbankZoneUl + "\";\n")
|
||||||
|
cf.write("GlobalDR = \"" + RbankZoneDr + "\";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("// Which kind of stuff to do\n")
|
||||||
|
cf.write("TessellateZones = 0;\n")
|
||||||
|
cf.write("MoulineZones = 0;\n")
|
||||||
|
cf.write("ProcessRetrievers = 0;\n")
|
||||||
|
cf.write("ProcessGlobal = 0;\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("Zones = {\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory)
|
||||||
|
files = findFiles(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory, "", ".zonew")
|
||||||
|
for file in files:
|
||||||
|
cf.write("\t\"" + os.path.basename(file) + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("Pathes = {\n")
|
||||||
|
mkPath(log, WorldEditorFilesDirectory);
|
||||||
|
cf.write("\t\"" + WorldEditorFilesDirectory + "\", \n");
|
||||||
|
for dir in IgLookupDirectories:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
cf.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
for dir in ShapeLookupDirectories:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + dir)
|
||||||
|
cf.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.close()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Build rbank check prims <<<")
|
||||||
|
if BuildRbank == "":
|
||||||
|
toolLogFail(log, BuildRbankTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
subprocess.call([ ExecTimeout, str(RbankBuildTesselTimeout), BuildRbank, "-C", "-p", "-g" ])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Build rbank process all passes <<<")
|
||||||
|
if BuildRbank == "":
|
||||||
|
toolLogFail(log, BuildRbankTool, ToolSuffix)
|
||||||
|
if GetNeighbors == "":
|
||||||
|
toolLogFail(log, GetNeighborsTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
zonefiles = findFiles(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory, "", ".zonew")
|
||||||
|
zonesToBuild = []
|
||||||
|
for zonefile in zonefiles:
|
||||||
|
zone = os.path.basename(zonefile)[0:-len(".zonew")]
|
||||||
|
lr1 = ExportBuildDirectory + "/" + RbankSmoothBuildDirectory + "/" + zone + ".lr"
|
||||||
|
nearzones = subprocess.Popen([ GetNeighbors, zone ], stdout = subprocess.PIPE).communicate()[0].strip().split(" ")
|
||||||
|
printLog(log, "ZONE " + zone + ": " + str(nearzones))
|
||||||
|
zoneToBuild = 0
|
||||||
|
for nearzone in nearzones:
|
||||||
|
sourcePath = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + nearzone + ".zonew"
|
||||||
|
if (os.path.isfile(sourcePath)):
|
||||||
|
if (rebuiltBbox or needUpdate(log, sourcePath, lr1)):
|
||||||
|
zoneToBuild = 1
|
||||||
|
zonesToBuild.append(os.path.basename(zonefile))
|
||||||
|
sourcePath = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + zone + ".zonew"
|
||||||
|
if zoneToBuild:
|
||||||
|
printLog(log, sourcePath + " -> " + lr1)
|
||||||
|
# subprocess.call([ ExecTimeout, str(RbankBuildTesselTimeout), BuildRbank, "-c", "-P", "-g", os.path.basename(zonefile) ])
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP " + lr1)
|
||||||
|
while len(zonesToBuild) > 0:
|
||||||
|
processCommand = [ ExecTimeout, str(RbankBuildTesselTimeout), BuildRbank, "-c", "-P", "-g" ]
|
||||||
|
processCommand.extend(zonesToBuild[:min(len(zonesToBuild), 64)])
|
||||||
|
if len(zonesToBuild) > 64:
|
||||||
|
zonesToBuild = zonesToBuild[64:]
|
||||||
|
else:
|
||||||
|
zonesToBuild = []
|
||||||
|
print processCommand
|
||||||
|
callParallelProcess(processCommand)
|
||||||
|
flushParallelProcesses()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Detect modifications to rebuild lr <<<")
|
||||||
|
needUpdateCmbLr = needUpdateDirByTagLog(log, ExportBuildDirectory + "/" + RBankCmbExportDirectory, ".cmb", ExportBuildDirectory + "/" + RbankRetrieversBuildDirectory, ".lr")
|
||||||
|
if needUpdateCmbLr:
|
||||||
|
printLog(log, "DETECT UPDATE Cmb->Lr")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Cmb->Lr")
|
||||||
|
needUpdateCmbRbank = needUpdateDirNoSubdirFile(log, ExportBuildDirectory + "/" + RBankCmbExportDirectory, ExportBuildDirectory + "/" + RbankOutputBuildDirectory + "/" + RbankRbankName + ".rbank")
|
||||||
|
if needUpdateCmbRbank:
|
||||||
|
printLog(log, "DETECT UPDATE Cmb->Rbank")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Cmb->Rbank")
|
||||||
|
needUpdateLrRbank = needUpdateDirNoSubdirFile(log, ExportBuildDirectory + "/" + RbankSmoothBuildDirectory, ExportBuildDirectory + "/" + RbankOutputBuildDirectory + "/" + RbankRbankName + ".rbank")
|
||||||
|
if needUpdateLrRbank:
|
||||||
|
printLog(log, "DETECT UPDATE Lr->Rbank")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Lr->Rbank")
|
||||||
|
needUpdateBboxRbank = needUpdate(log, tempBbox, ExportBuildDirectory + "/" + RbankOutputBuildDirectory + "/" + RbankRbankName + ".rbank")
|
||||||
|
if needUpdateBboxRbank:
|
||||||
|
printLog(log, "DETECT UPDATE Lr->Rbank")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Lr->Rbank")
|
||||||
|
|
||||||
|
if rebuiltBbox or needUpdateCmbLr or needUpdateCmbRbank or needUpdateLrRbank or needUpdateBboxRbank:
|
||||||
|
printLog(log, "DETECT DECIDE UPDATE")
|
||||||
|
printLog(log, ">>> Build rbank process global <<<") # This generates temp lr files. TODO: Check if the LR changed?
|
||||||
|
if BuildRbank == "":
|
||||||
|
toolLogFail(log, BuildRbankTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
subprocess.call([ ExecTimeout, str(RbankBuildProcglobalTimeout), BuildRbank, "-c", "-P", "-G" ])
|
||||||
|
printLog(log, "")
|
||||||
|
os.remove("build_rbank.cfg")
|
||||||
|
|
||||||
|
printLog(log, ">>> Build rbank indoor <<<") # This generates the retrievers for the ig that have the cmb export
|
||||||
|
if BuildIndoorRbank == "":
|
||||||
|
toolLogFail(log, BuildIndoorRbankTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
retrieversDir = ExportBuildDirectory + "/" + RbankRetrieversBuildDirectory
|
||||||
|
mkPath(log, retrieversDir)
|
||||||
|
removeFilesRecursiveExt(log, retrieversDir, ".rbank")
|
||||||
|
removeFilesRecursiveExt(log, retrieversDir, ".gr")
|
||||||
|
removeFilesRecursiveExt(log, retrieversDir, ".lr")
|
||||||
|
cf = open("build_indoor_rbank.cfg", "w")
|
||||||
|
cf.write("\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RBankCmbExportDirectory)
|
||||||
|
cf.write("MeshPath = \"" + ExportBuildDirectory + "/" + RBankCmbExportDirectory + "/\";\n")
|
||||||
|
# cf.write("Meshes = { };\n")
|
||||||
|
cf.write("Meshes = \n")
|
||||||
|
cf.write("{\n")
|
||||||
|
meshFiles = findFilesNoSubdir(log, ExportBuildDirectory + "/" + RBankCmbExportDirectory, ".cmb")
|
||||||
|
lenCmbExt = len(".cmb")
|
||||||
|
for file in meshFiles:
|
||||||
|
cf.write("\t\"" + file[0:-lenCmbExt] + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("OutputPath = \"" + retrieversDir + "/\";\n")
|
||||||
|
# mkPath(log, ExportBuildDirectory + "/" + RbankOutputBuildDirectory)
|
||||||
|
# cf.write("OutputPath = \"" + ExportBuildDirectory + "/" + RbankOutputBuildDirectory + "/\";\n")
|
||||||
|
cf.write("OutputPrefix = \"unused\";\n")
|
||||||
|
cf.write("Merge = 1;\n")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + RbankSmoothBuildDirectory)
|
||||||
|
cf.write("MergePath = \"" + ExportBuildDirectory + "/" + RbankSmoothBuildDirectory + "/\";\n")
|
||||||
|
cf.write("MergeInputPrefix = \"temp\";\n")
|
||||||
|
cf.write("MergeOutputPrefix = \"tempMerged\";\n")
|
||||||
|
# cf.write("MergeOutputPrefix = \"" + RbankRbankName + "\";\n")
|
||||||
|
cf.write("AddToRetriever = 1;\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.close()
|
||||||
|
subprocess.call([ ExecTimeout, str(RbankBuildIndoorTimeout), BuildIndoorRbank ])
|
||||||
|
os.remove("build_indoor_rbank.cfg")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
retrieversDir = ExportBuildDirectory + "/" + RbankRetrieversBuildDirectory
|
||||||
|
mkPath(log, retrieversDir)
|
||||||
|
outputDir = ExportBuildDirectory + "/" + RbankOutputBuildDirectory
|
||||||
|
mkPath(log, outputDir)
|
||||||
|
printLog(log, ">>> Move gr, rbank and lr <<<") # This simply renames everything
|
||||||
|
if needUpdateDirNoSubdir(log, retrieversDir, outputDir):
|
||||||
|
removeFilesRecursiveExt(log, outputDir, ".rbank")
|
||||||
|
removeFilesRecursiveExt(log, outputDir, ".gr")
|
||||||
|
removeFilesRecursiveExt(log, outputDir, ".lr")
|
||||||
|
copyFilesRenamePrefixExt(log, retrieversDir, outputDir, "tempMerged", RbankRbankName, ".rbank")
|
||||||
|
copyFilesRenamePrefixExt(log, retrieversDir, outputDir, "tempMerged", RbankRbankName, ".gr")
|
||||||
|
copyFilesRenamePrefixExt(log, retrieversDir, outputDir, "tempMerged_", RbankRbankName + "_", ".lr")
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT DECIDE SKIP")
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
|
||||||
|
# Remove pacs.packed_prims when done
|
||||||
|
if os.path.isfile("pacs.packed_prims"):
|
||||||
|
os.remove("pacs.packed_prims")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,198 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build shape
|
||||||
|
# \date 2010-05-24 13:42GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build shape
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build shape")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
ExecTimeout = findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
BuildShadowSkin = findTool(log, ToolDirectories, BuildShadowSkinTool, ToolSuffix)
|
||||||
|
BuildClodtex = findTool(log, ToolDirectories, BuildClodtexTool, ToolSuffix)
|
||||||
|
LightmapOptimizer = findTool(log, ToolDirectories, LightmapOptimizerTool, ToolSuffix)
|
||||||
|
TgaToDds = findTool(log, ToolDirectories, TgaToDdsTool, ToolSuffix)
|
||||||
|
BuildCoarseMesh = findTool(log, ToolDirectories, BuildCoarseMeshTool, ToolSuffix)
|
||||||
|
|
||||||
|
shapeDirectory = ExportBuildDirectory + "/" + ShapeNotOptimizedExportDirectory
|
||||||
|
if BuildShadowSkinEnabled:
|
||||||
|
mkPath(log, shapeDirectory)
|
||||||
|
shadowSkinBuildDirectory = ExportBuildDirectory + "/" + ShapeShadowSkinBuildDirectory
|
||||||
|
printLog(log, ">>> BuildShadowSkin <<<")
|
||||||
|
shadowSkinShapes = findFilesNoSubdir(log, shapeDirectory, ".shape")
|
||||||
|
for shadowSkinShape in shadowSkinShapes:
|
||||||
|
srcShape = shapeDirectory + "/" + shadowSkinShape
|
||||||
|
dstShape = shadowSkinBuildDirectory + "/" + shadowSkinShape
|
||||||
|
if needUpdateLogRemoveDest(log, srcShape, dstShape):
|
||||||
|
subprocess.call([ BuildShadowSkin, srcShape, dstShape, str(BuildShadowSkinRatio), str(BuildShadowSkinMaxface) ])
|
||||||
|
shapeDirectory = shadowSkinBuildDirectory
|
||||||
|
|
||||||
|
mkPath(log, shapeDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory)
|
||||||
|
if ClodConfigFile != "":
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ClodExportDirectory)
|
||||||
|
printLog(log, ">>> Build CLodTex <<<")
|
||||||
|
subprocess.call([ BuildClodtex, "-d", DatabaseDirectory + "/" + ClodConfigFile, ExportBuildDirectory + "/" + ClodExportDirectory, shapeDirectory, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory ])
|
||||||
|
else:
|
||||||
|
printLog(log, ">>> Copy Shape <<<")
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, shapeDirectory, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory, ".shape")
|
||||||
|
|
||||||
|
printLog(log, ">>> Copy non-ShadowSkin non-CLodTex Shape <<<")
|
||||||
|
shapeDirectory = ExportBuildDirectory + "/" + ShapeNotOptimizedExportDirectory
|
||||||
|
mkPath(log, shapeDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory)
|
||||||
|
copyFilesExtNoTreeIfNeeded(log, shapeDirectory, ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory, ".shape")
|
||||||
|
shapeDirectory = ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory
|
||||||
|
|
||||||
|
# copy lightmap_not_optimized to lightmap
|
||||||
|
printLog(log, ">>> Optimize lightmaps <<<")
|
||||||
|
loPathLightmapsOriginal = ExportBuildDirectory + "/" + ShapeLightmapNotOptimizedExportDirectory
|
||||||
|
loPathShapesOriginal = ExportBuildDirectory + "/" + ShapeClodtexBuildDirectory
|
||||||
|
mkPath(log, loPathLightmapsOriginal)
|
||||||
|
loPathLightmaps = ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory
|
||||||
|
loPathShapes = ExportBuildDirectory + "/" + ShapeOptimizedBuildDirectory
|
||||||
|
loPathTags = ExportBuildDirectory + "/" + ShapeTagExportDirectory
|
||||||
|
mkPath(log, loPathLightmaps)
|
||||||
|
mkPath(log, loPathShapes)
|
||||||
|
mkPath(log, loPathTags)
|
||||||
|
if needUpdateDirByTagLog(log, loPathLightmapsOriginal, ".txt", loPathLightmaps, ".txt") or needUpdateDirNoSubdir(log, loPathLightmapsOriginal, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathShapesOriginal, loPathShapes) or needUpdateDirNoSubdir(log, loPathShapes, loPathLightmaps) or needUpdateDirNoSubdir(log, loPathTags, loPathLightmaps):
|
||||||
|
removeFilesRecursive(log, loPathLightmaps)
|
||||||
|
copyFiles(log, loPathLightmapsOriginal, loPathLightmaps)
|
||||||
|
removeFilesRecursive(log, loPathShapes)
|
||||||
|
copyFiles(log, loPathShapesOriginal, loPathShapes)
|
||||||
|
# Optimize lightmaps if any. Additionnaly, output a file indicating which lightmaps are 8 bits
|
||||||
|
# lightmap_optimizer <path_lightmaps> <path_shapes> [path_tags] [path_flag8bit]
|
||||||
|
subprocess.call([ LightmapOptimizer, loPathLightmaps, loPathShapes, loPathTags, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt" ])
|
||||||
|
else:
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
|
||||||
|
# Convert lightmap in 16 bits mode if they are not 8 bits lightmap
|
||||||
|
printLog(log, ">>> Convert lightmaps in 16 or 8 bits <<<")
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory)
|
||||||
|
lightMapTgas = findFilesNoSubdir(log, ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory, ".tga")
|
||||||
|
listLm8Bit = [ ]
|
||||||
|
listLm8BitFile = open(ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/list_lm_8bit.txt", "r")
|
||||||
|
for line in listLm8BitFile:
|
||||||
|
lineStrip = line.strip()
|
||||||
|
if (len(lineStrip) > 0):
|
||||||
|
listLm8Bit += [ lineStrip ]
|
||||||
|
for lightMapTga in lightMapTgas:
|
||||||
|
srcTga = ExportBuildDirectory + "/" + ShapeLightmapBuildDirectory + "/" + lightMapTga
|
||||||
|
dstTga = ExportBuildDirectory + "/" + ShapeLightmap16BitsBuildDirectory + "/" + lightMapTga
|
||||||
|
if needUpdateLogRemoveDest(log, srcTga, dstTga):
|
||||||
|
if lightMapTga in listLm8Bit: # THIS MAY NOT WORK, PLEASE VERIFY CONTENTS OF list_lm_8bit.txt!!!
|
||||||
|
subprocess.call([ TgaToDds, srcTga, "-o", dstTga, "-a", "tga8" ])
|
||||||
|
else:
|
||||||
|
subprocess.call([ TgaToDds, srcTga, "-o", dstTga, "-a", "tga16" ])
|
||||||
|
|
||||||
|
# Corse meshes for this process ?
|
||||||
|
if len(CoarseMeshTextureNames) > 0:
|
||||||
|
printLog(log, ">>> Build coarse meshes <<<")
|
||||||
|
shapeWithCoarseMesh = ExportBuildDirectory + "/" + ShapeWithCoarseMeshExportDirectory
|
||||||
|
mkPath(log, shapeWithCoarseMesh)
|
||||||
|
shapeWithCoarseMeshBuilded = ExportBuildDirectory + "/" + ShapeWithCoarseMeshBuildDirectory
|
||||||
|
mkPath(log, shapeWithCoarseMeshBuilded)
|
||||||
|
# This builds from shapeWithCoarseMesh .shape to shapeWithCoarseMesh .tga
|
||||||
|
# And from shapeWithCoarseMesh .shape to shapeWithCoarseMeshBuilded .shape
|
||||||
|
# Then builds from shapeWithCoarseMesh .tga to shapeWithCoarseMeshBuilded .tga
|
||||||
|
# Depends on MapLookupDirectories
|
||||||
|
needUpdateMaps = needUpdateMultiDirNoSubdirMultiFileExt(log, ExportBuildDirectory, MapLookupDirectories, shapeWithCoarseMesh, CoarseMeshTextureNames, ".tga") or needUpdateMultiDirNoSubdir(log, ExportBuildDirectory, MapLookupDirectories, shapeWithCoarseMeshBuilded)
|
||||||
|
if needUpdateMaps:
|
||||||
|
printLog(log, "DETECT UPDATE Maps->*")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Maps->*")
|
||||||
|
needUpdateShapeShape = needUpdateDirByTagLog(log, shapeWithCoarseMesh, ".shape", shapeWithCoarseMeshBuilded, ".shape")
|
||||||
|
if needUpdateShapeShape:
|
||||||
|
printLog(log, "DETECT UPDATE Shape->Shape")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Shape->Shape")
|
||||||
|
needUpdateShapeCoarse = needUpdateDirNoSubdirExtMultiFileExt(log, shapeWithCoarseMesh, ".shape", shapeWithCoarseMesh, CoarseMeshTextureNames, ".tga")
|
||||||
|
if needUpdateShapeCoarse:
|
||||||
|
printLog(log, "DETECT UPDATE Shape->Coarse")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Shape->Coarse")
|
||||||
|
if needUpdateMaps or needUpdateShapeShape or needUpdateShapeCoarse:
|
||||||
|
cf = open("config_generated.cfg", "w")
|
||||||
|
cf.write("texture_mul_size = " + TextureMulSizeValue + ";\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("search_path = \n")
|
||||||
|
cf.write("{\n")
|
||||||
|
cf.write("\t\"" + shapeWithCoarseMesh + "\", \n")
|
||||||
|
for dir in MapLookupDirectories:
|
||||||
|
cf.write("\t\"" + ExportBuildDirectory + "/" + dir + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("list_mesh = \n")
|
||||||
|
cf.write("{\n")
|
||||||
|
# For each shape with coarse mesh
|
||||||
|
files = findFiles(log, shapeWithCoarseMesh, "", ".shape")
|
||||||
|
for file in files:
|
||||||
|
sourceFile = shapeWithCoarseMesh + "/" + file
|
||||||
|
if os.path.isfile(sourceFile):
|
||||||
|
destFile = shapeWithCoarseMeshBuilded + "/" + file
|
||||||
|
cf.write("\t\"" + file + "\", \"" + destFile + "\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.write("\n")
|
||||||
|
cf.write("output_textures = \n")
|
||||||
|
cf.write("{\n")
|
||||||
|
# For each shape with coarse mesh
|
||||||
|
for tn in CoarseMeshTextureNames:
|
||||||
|
cf.write("\t\"" + shapeWithCoarseMesh + "/" + tn + ".tga\", \n")
|
||||||
|
cf.write("};\n")
|
||||||
|
cf.close()
|
||||||
|
subprocess.call([ BuildCoarseMesh, "config_generated.cfg" ])
|
||||||
|
os.remove("config_generated.cfg")
|
||||||
|
needUpdateCoarse = needUpdateDirNoSubdirExtMultiFileExt(log, shapeWithCoarseMesh, ".tga", shapeWithCoarseMeshBuilded, CoarseMeshTextureNames, ".dds")
|
||||||
|
if needUpdateCoarse:
|
||||||
|
printLog(log, "DETECT UPDATE Coarse->DDS")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Coarse->DDS")
|
||||||
|
# Convert the coarse texture to dds
|
||||||
|
if needUpdateCoarse:
|
||||||
|
for tn in CoarseMeshTextureNames:
|
||||||
|
subprocess.call([ TgaToDds, shapeWithCoarseMesh + "/" + tn + ".tga", "-o", shapeWithCoarseMeshBuilded + "/" + tn + ".dds", "-a", "5" ])
|
||||||
|
else:
|
||||||
|
printLog(log, ">>> No coarse meshes <<<")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,175 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build zone
|
||||||
|
# \date 2009-03-10-22-23-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build zone
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build zone")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
ZoneDependencies = findTool(log, ToolDirectories, ZoneDependenciesTool, ToolSuffix)
|
||||||
|
ZoneWelder = findTool(log, ToolDirectories, ZoneWelderTool, ToolSuffix)
|
||||||
|
ZoneElevation = findTool(log, ToolDirectories, ZoneElevationTool, ToolSuffix)
|
||||||
|
ExecTimeout = findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# We are in BEST mode
|
||||||
|
if BuildQuality == 1:
|
||||||
|
printLog(log, ">>> Build zone dependencies <<<")
|
||||||
|
if ZoneDependencies == "":
|
||||||
|
toolLogFail(log, ZoneDependenciesTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneDependBuildDirectory)
|
||||||
|
needUpdateZoneDepend = needUpdateDirByLowercaseTagLog(log, ExportBuildDirectory + "/" + ZoneExportDirectory, ".zone", ExportBuildDirectory + "/" + ZoneDependBuildDirectory, ".depend")
|
||||||
|
if needUpdateZoneDepend:
|
||||||
|
printLog(log, "DETECT UPDATE Zone->Depend")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Zone->Depend")
|
||||||
|
needUpdateContinentDepend = needUpdateFileDirNoSubdir(log, LeveldesignWorldDirectory + "/" + ContinentFile, ExportBuildDirectory + "/" + ZoneDependBuildDirectory)
|
||||||
|
if needUpdateContinentDepend:
|
||||||
|
printLog(log, "DETECT UPDATE Continent->Depend")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP Continent->Depend")
|
||||||
|
needUpdateSearchPaths = needUpdateMultiDirNoSubdir(log, ExportBuildDirectory, PropertiesExportBuildSearchPaths, ExportBuildDirectory + "/" + ZoneDependBuildDirectory)
|
||||||
|
if needUpdateSearchPaths:
|
||||||
|
printLog(log, "DETECT UPDATE SearchPaths->Depend")
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT SKIP SearchPaths->Depend")
|
||||||
|
if needUpdateZoneDepend or needUpdateContinentDepend or needUpdateSearchPaths:
|
||||||
|
printLog(log, "DETECT DECIDE UPDATE")
|
||||||
|
mkPath(log, ActiveProjectDirectory + "/generated")
|
||||||
|
configFile = ActiveProjectDirectory + "/generated/zone_dependencies.cfg"
|
||||||
|
templateCf = open(ActiveProjectDirectory + "/generated/properties.cfg", "r")
|
||||||
|
cf = open(configFile, "w")
|
||||||
|
for line in templateCf:
|
||||||
|
cf.write(line)
|
||||||
|
cf.write("\n");
|
||||||
|
cf.write("level_design_directory = \"" + LeveldesignDirectory + "\";\n");
|
||||||
|
cf.write("level_design_world_directory = \"" + LeveldesignWorldDirectory + "\";\n");
|
||||||
|
cf.write("level_design_dfn_directory = \"" + LeveldesignDfnDirectory + "\";\n");
|
||||||
|
cf.write("continent_name = \"" + ContinentName + "\";\n");
|
||||||
|
cf.write("\n");
|
||||||
|
cf.close()
|
||||||
|
|
||||||
|
for zoneRegion in ZoneRegions:
|
||||||
|
# zone_dependencies [properties.cfg] [firstZone.zone] [lastzone.zone] [output_dependencies.cfg]
|
||||||
|
subprocess.call([ ExecTimeout, str(ZoneBuildDependTimeout), ZoneDependencies, configFile, ExportBuildDirectory + "/" + ZoneExportDirectory + "/" + zoneRegion[0] + ".zone", ExportBuildDirectory + "/" + ZoneExportDirectory + "/" + zoneRegion[1] + ".zone", ExportBuildDirectory + "/" + ZoneDependBuildDirectory + "/doomy.depend" ])
|
||||||
|
else:
|
||||||
|
printLog(log, "DETECT DECIDE SKIP")
|
||||||
|
printLog(log, "SKIP *")
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# For each zone directory
|
||||||
|
#printLog(log, ">>> Build zone weld <<<")
|
||||||
|
#if ZoneWelder == "":
|
||||||
|
# toolLogFail(log, ZoneWelderTool, ToolSuffix)
|
||||||
|
#elif ExecTimeout == "":
|
||||||
|
# toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
#else:
|
||||||
|
# mkPath(log, ExportBuildDirectory + "/" + ZoneExportDirectory)
|
||||||
|
# mkPath(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory)
|
||||||
|
# files = findFiles(log, ExportBuildDirectory + "/" + ZoneExportDirectory, "", ".zone")
|
||||||
|
# for file in files:
|
||||||
|
# sourceFile = ExportBuildDirectory + "/" + ZoneExportDirectory + "/" + file
|
||||||
|
# destFile = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + os.path.basename(file)[0:-len(".zone")] + ".zonew"
|
||||||
|
# if needUpdateLogRemoveDest(log, sourceFile, destFile):
|
||||||
|
# subprocess.call([ ExecTimeout, str(ZoneBuildWeldTimeout), ZoneWelder, sourceFile, destFile ])
|
||||||
|
#printLog(log, "")
|
||||||
|
|
||||||
|
# For each zone directory
|
||||||
|
printLog(log, ">>> Weld zone without heightmap <<<")
|
||||||
|
if ZoneWelder == "":
|
||||||
|
toolLogFail(log, ZoneWelderTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneExportDirectory)
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory)
|
||||||
|
files = findFiles(log, ExportBuildDirectory + "/" + ZoneExportDirectory, "", ".zonenh")
|
||||||
|
for file in files:
|
||||||
|
sourceFile = ExportBuildDirectory + "/" + ZoneExportDirectory + "/" + file
|
||||||
|
destFile = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + os.path.basename(file)[0:-len(".zonenh")] + ".zonenhw"
|
||||||
|
if needUpdateLogRemoveDest(log, sourceFile, destFile):
|
||||||
|
subprocess.call([ ExecTimeout, str(ZoneBuildWeldTimeout), ZoneWelder, sourceFile, destFile ])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Apply zone heightmap to welded zone <<<")
|
||||||
|
if ZoneElevation == "":
|
||||||
|
toolLogFail(log, ZoneElevationTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory)
|
||||||
|
mkPath(log, DatabaseDirectory + "/" + LigoBaseSourceDirectory);
|
||||||
|
land = DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportLand
|
||||||
|
heightMap1 = DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap1
|
||||||
|
heightMap2 = DatabaseDirectory + "/" + LigoBaseSourceDirectory + "/" + LigoExportHeightmap2
|
||||||
|
files = findFiles(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory, "", ".zonenhw")
|
||||||
|
for file in files:
|
||||||
|
sourceFile = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + file
|
||||||
|
destFile = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + os.path.basename(file)[0:-len(".zonenhw")] + ".zone"
|
||||||
|
if needUpdateLogRemoveDest(log, sourceFile, destFile):
|
||||||
|
command = [ ZoneElevation, sourceFile, destFile, "--land", land, "--heightmap", heightMap1, "--zfactor", LigoExportZFactor1, "--heightmap2", heightMap2, "--zfactor2", LigoExportZFactor2 ]
|
||||||
|
if LigoExportExtendCoords != 0:
|
||||||
|
command.append("--extendcoords")
|
||||||
|
callParallelProcess(command)
|
||||||
|
flushParallelProcesses()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Re-weld zone with heightmap <<<")
|
||||||
|
if ZoneWelder == "":
|
||||||
|
toolLogFail(log, ZoneWelderTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogFail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
mkPath(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory)
|
||||||
|
files = findFiles(log, ExportBuildDirectory + "/" + ZoneWeldBuildDirectory, "", ".zone")
|
||||||
|
for file in files:
|
||||||
|
sourceFile = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + file
|
||||||
|
destFile = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory + "/" + os.path.basename(file)[0:-len(".zone")] + ".zonew"
|
||||||
|
if needUpdateLogRemoveDest(log, sourceFile, destFile):
|
||||||
|
subprocess.call([ ExecTimeout, str(ZoneBuildWeldTimeout), ZoneWelder, sourceFile, destFile ])
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,105 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \file 2_build.py
|
||||||
|
# \brief Build zone_light
|
||||||
|
# \date 2009-03-11-13-45-GMT
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
# Python port of game data build pipeline.
|
||||||
|
# Build zone_light
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2009-2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../../configuration")
|
||||||
|
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from process import *
|
||||||
|
from tools import *
|
||||||
|
from directories import *
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Build zone_light")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# Find tools
|
||||||
|
ExecTimeout = findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
|
||||||
|
ZoneLighter = findTool(log, ToolDirectories, ZoneLighterTool, ToolSuffix)
|
||||||
|
ZoneIgLighter = findTool(log, ToolDirectories, ZoneIgLighterTool, ToolSuffix)
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# For each zone_light directory
|
||||||
|
printLog(log, ">>> Build zone_light <<<")
|
||||||
|
if ZoneLighter == "":
|
||||||
|
toolLogFail(log, ZoneLighterTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogfail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
srcDir = ExportBuildDirectory + "/" + ZoneWeldBuildDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
destDir = ExportBuildDirectory + "/" + ZoneLightBuildDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
dependDir = ExportBuildDirectory + "/" + ZoneDependBuildDirectory
|
||||||
|
mkPath(log, dependDir)
|
||||||
|
files = findFiles(log, srcDir, "", ".zonew")
|
||||||
|
for file in files:
|
||||||
|
srcFile = srcDir + "/" + file
|
||||||
|
destFile = destDir + "/" + file[0:-len(".zonew")] + ".zonel"
|
||||||
|
if (needUpdateLogRemoveDest(log, srcFile, destFile)):
|
||||||
|
dependFile = dependDir + "/" + file[0:-len(".zonew")] + ".depend"
|
||||||
|
callParallelProcess([ ExecTimeout, str(ZoneLightBuildTimeout), ZoneLighter, srcFile, destFile, ActiveProjectDirectory + "/generated/properties.cfg", dependFile ])
|
||||||
|
flushParallelProcesses()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
# For each zone_light ig
|
||||||
|
printLog(log, ">>> Build zone_light ig <<<")
|
||||||
|
if ZoneIgLighter == "":
|
||||||
|
toolLogFail(log, ZoneIgLighterTool, ToolSuffix)
|
||||||
|
elif ExecTimeout == "":
|
||||||
|
toolLogfail(log, ExecTimeoutTool, ToolSuffix)
|
||||||
|
else:
|
||||||
|
srcDir = ExportBuildDirectory + "/" + ZoneLightBuildDirectory
|
||||||
|
mkPath(log, srcDir)
|
||||||
|
igsrcDir = ExportBuildDirectory + "/" + IgLandBuildDirectory
|
||||||
|
mkPath(log, igsrcDir)
|
||||||
|
destDir = ExportBuildDirectory + "/" + ZoneLightIgLandBuildDirectory
|
||||||
|
mkPath(log, destDir)
|
||||||
|
dependDir = ExportBuildDirectory + "/" + ZoneDependBuildDirectory
|
||||||
|
mkPath(log, dependDir)
|
||||||
|
files = findFiles(log, srcDir, "", ".zonel")
|
||||||
|
for file in files:
|
||||||
|
igsrcFile = igsrcDir + "/" + os.path.basename(file)[0:-len(".zonel")] + ".ig"
|
||||||
|
destFile = destDir + "/" + os.path.basename(file)[0:-len(".zonel")] + ".ig"
|
||||||
|
if (os.path.isfile(igsrcFile)):
|
||||||
|
if (needUpdateLogRemoveDest(log, igsrcFile, destFile)):
|
||||||
|
srcFile = srcDir + "/" + file
|
||||||
|
dependFile = dependDir + "/" + file[0:-len(".zonel")] + ".depend"
|
||||||
|
callParallelProcess([ ExecTimeout, str(ZoneIgLightBuildTimeout), ZoneIgLighter, srcFile, destFile, ActiveProjectDirectory + "/generated/properties.cfg", dependFile ])
|
||||||
|
flushParallelProcesses()
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
|
||||||
|
|
||||||
|
# end of file
|
@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
os.chdir(TranslationDirectory)
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Make and merge all translations")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
TranslationTools = findTool(log, ToolDirectories, TranslationToolsTool, ToolSuffix)
|
||||||
|
try:
|
||||||
|
subprocess.call([ TranslationTools, "make_phrase_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_phrase_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_clause_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_clause_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_words_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_words_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "clean_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_r2_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_r2_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "clean_r2_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "clean_words_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "clean_clause_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "clean_phrase_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_worksheet_diff", "bot_names.txt" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_worksheet_diff", "bot_names.txt" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("make_merge_all.log"):
|
||||||
|
os.remove("make_merge_all.log")
|
||||||
|
shutil.copy("log.log", "make_merge_all_" + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + ".log")
|
||||||
|
shutil.move("log.log", "make_merge_all.log")
|
||||||
|
|
||||||
|
raw_input("PRESS ANY KEY TO EXIT")
|
@ -0,0 +1,115 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# \author Jan Boon (Kaetemi)
|
||||||
|
#
|
||||||
|
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
# Copyright (C) 2014 by authors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||||
|
sys.path.append("../configuration")
|
||||||
|
from scripts import *
|
||||||
|
from buildsite import *
|
||||||
|
from tools import *
|
||||||
|
os.chdir(TranslationDirectory)
|
||||||
|
if os.path.isfile("log.log"):
|
||||||
|
os.remove("log.log")
|
||||||
|
log = open("log.log", "w")
|
||||||
|
|
||||||
|
printLog(log, "")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, "--- Make, merge and clean work")
|
||||||
|
printLog(log, "-------")
|
||||||
|
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
TranslationTools = findTool(log, ToolDirectories, TranslationToolsTool, ToolSuffix)
|
||||||
|
printLog(log, ">>> Override languages.txt <<<")
|
||||||
|
if not os.path.isfile("make_merge_wk_languages.txt"):
|
||||||
|
shutil.move("languages.txt", "make_merge_wk_languages.txt")
|
||||||
|
languagesTxt = open("languages.txt", "w")
|
||||||
|
languagesTxt.write("wk\n")
|
||||||
|
languagesTxt.close()
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, ">>> Merge diff <<<") # This is necessary, because when we crop lines, we should only do this from untranslated files
|
||||||
|
try:
|
||||||
|
subprocess.call([ TranslationTools, "merge_phrase_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_clause_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_words_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_r2_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_worksheet_diff", "bot_names.txt" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, ">>> Make diff <<<")
|
||||||
|
try:
|
||||||
|
subprocess.call([ TranslationTools, "make_phrase_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_clause_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_words_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_r2_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "make_worksheet_diff", "bot_names.txt" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, ">>> Mark diffs as translated <<<")
|
||||||
|
diffFiles = os.listdir("diff")
|
||||||
|
for diffFile in diffFiles:
|
||||||
|
if "wk_diff_" in diffFile:
|
||||||
|
printLog(log, "DIFF " + "diff/" + diffFile)
|
||||||
|
subprocess.call([ TranslationTools, "crop_lines", "diff/" + diffFile, "3" ])
|
||||||
|
|
||||||
|
#printLog(log, ">>> Clean diff <<<")
|
||||||
|
#try:
|
||||||
|
# subprocess.call([ TranslationTools, "clean_string_diff" ])
|
||||||
|
# subprocess.call([ TranslationTools, "clean_phrase_diff" ])
|
||||||
|
# subprocess.call([ TranslationTools, "clean_clause_diff" ])
|
||||||
|
# subprocess.call([ TranslationTools, "clean_words_diff" ])
|
||||||
|
#except Exception, e:
|
||||||
|
# printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
#printLog(log, "")
|
||||||
|
|
||||||
|
printLog(log, ">>> Merge diff <<<")
|
||||||
|
try:
|
||||||
|
subprocess.call([ TranslationTools, "merge_phrase_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_clause_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_words_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_r2_string_diff" ])
|
||||||
|
subprocess.call([ TranslationTools, "merge_worksheet_diff", "bot_names.txt" ])
|
||||||
|
except Exception, e:
|
||||||
|
printLog(log, "<" + processName + "> " + str(e))
|
||||||
|
printLog(log, "")
|
||||||
|
|
||||||
|
|
||||||
|
printLog(log, ">>> Restore languages.txt <<<")
|
||||||
|
os.remove("languages.txt")
|
||||||
|
shutil.move("make_merge_wk_languages.txt", "languages.txt")
|
||||||
|
|
||||||
|
|
||||||
|
log.close()
|
||||||
|
if os.path.isfile("make_merge_wk.log"):
|
||||||
|
os.remove("make_merge_wk.log")
|
||||||
|
shutil.copy("log.log", "make_merge_wk_" + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + ".log")
|
||||||
|
shutil.move("log.log", "make_merge_wk.log")
|
||||||
|
|
||||||
|
raw_input("PRESS ANY KEY TO EXIT")
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue