Merge branch 'main/rendor-staging' into fixes
[ryzomcore.git] / nel / tools / build_gamedata / 0_setup.py
blobcd1a4dace7ea14827594f4842389e84965afb14d
1 #!/usr/bin/python
2 #
3 # \file 0_setup.py
4 # \brief Run all setup processes
5 # \date 2009-02-18 15:28GMT
6 # \author Jan Boon (Kaetemi)
7 # Python port of game data build pipeline.
8 # Run all setup processes
9 #
10 # NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
11 # Copyright (C) 2009-2014 by authors
13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU Affero General Public License as
15 # published by the Free Software Foundation, either version 3 of the
16 # License, or (at your option) any later version.
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # GNU Affero General Public License for more details.
23 # You should have received a copy of the GNU Affero General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
27 import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
28 sys.path.append("configuration")
30 parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Setup')
31 parser.add_argument('--noconf', '-nc', action='store_true')
32 parser.add_argument('--noverify', '-nv', action='store_true')
33 parser.add_argument('--preset', '-p', action='store_true')
34 # parser.add_argument('--haltonerror', '-eh', action='store_true')
35 parser.add_argument('--includeproject', '-ipj', nargs='+')
36 parser.add_argument('--excludeproject', '-epj', nargs='+')
37 parser.add_argument('--includeprocess', '-ipc', nargs='+')
38 parser.add_argument('--excludeprocess', '-epc', nargs='+')
39 args = parser.parse_args()
41 if not args.includeproject == None and not args.excludeproject == None:
42 print "ERROR --includeproject cannot be combined with --excludeproject, exit."
43 exit()
45 if not args.includeprocess == None and not args.excludeprocess == None:
46 print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
47 exit()
49 if os.path.isfile("log.log"):
50 os.remove("log.log")
51 log = open("log.log", "w")
52 from scripts import *
53 try:
54 from buildsite import *
55 except ImportError:
56 printLog(log, "*** FIRST RUN ***")
57 if args.noconf:
58 printLog(log, "ERROR --noconf is invalid on first run, exit.")
59 exit()
60 from tools import *
62 if not args.noconf:
63 try:
64 BuildQuality
65 except NameError:
66 BuildQuality = 1
67 try:
68 if not args.preset:
69 ToolDirectories
70 except NameError:
71 ToolDirectories = [ 'R:/distribution/nel_tools_win_x64-distribution', 'R:/distribution/ryzom_tools_win_x64-distribution' ]
72 try:
73 ToolSuffix
74 except NameError:
75 ToolSuffix = ".exe"
76 try:
77 if not args.preset:
78 ScriptDirectory
79 except NameError:
80 ScriptDirectory = "R:/code/nel/tools/build_gamedata"
81 try:
82 if not args.preset:
83 WorkspaceDirectory
84 except NameError:
85 WorkspaceDirectory = "R:/leveldesign/workspace"
86 try:
87 if not args.preset:
88 DatabaseDirectory
89 except NameError:
90 DatabaseDirectory = "R:/graphics"
91 try:
92 if not args.preset:
93 SoundDirectory
94 except NameError:
95 SoundDirectory = "R:/sound"
96 try:
97 if not args.preset:
98 SoundDfnDirectory
99 except NameError:
100 SoundDfnDirectory = "R:/sound/DFN"
101 try:
102 if not args.preset:
103 ExportBuildDirectory
104 except NameError:
105 ExportBuildDirectory = "R:/pipeline/export"
106 try:
107 if not args.preset:
108 InstallDirectory
109 except NameError:
110 InstallDirectory = "R:/pipeline/install"
111 try:
112 if not args.preset:
113 ClientDevDirectory
114 except NameError:
115 ClientDevDirectory = "R:/pipeline/client_dev"
116 try:
117 if not args.preset:
118 ClientPatchDirectory
119 except NameError:
120 ClientPatchDirectory = "R:/pipeline/client_patch"
121 try:
122 if not args.preset:
123 ClientInstallDirectory
124 except NameError:
125 ClientInstallDirectory = "R:/pipeline/client_install"
126 try:
127 if not args.preset:
128 ShardInstallDirectory
129 except NameError:
130 ShardInstallDirectory = "R:/pipeline/shard"
131 try:
132 if not args.preset:
133 WorldEditInstallDirectory
134 except NameError:
135 WorldEditInstallDirectory = "R:/pipeline/worldedit"
136 try:
137 if not args.preset:
138 WorldEditorFilesDirectory
139 except NameError:
140 WorldEditorFilesDirectory = "R:/code/ryzom/common/data_leveldesign/leveldesign/world_editor_files"
141 try:
142 if not args.preset:
143 LeveldesignDirectory
144 except NameError:
145 LeveldesignDirectory = "R:/leveldesign"
146 try:
147 if not args.preset:
148 LeveldesignDfnDirectory
149 except NameError:
150 LeveldesignDfnDirectory = "R:/leveldesign/DFN"
151 try:
152 if not args.preset:
153 LeveldesignWorldDirectory
154 except NameError:
155 LeveldesignWorldDirectory = "R:/leveldesign/world"
156 try:
157 if not args.preset:
158 PrimitivesDirectory
159 except NameError:
160 PrimitivesDirectory = "R:/leveldesign/primitives"
161 try:
162 if not args.preset:
163 LeveldesignDataCommonDirectory
164 except NameError:
165 LeveldesignDataCommonDirectory = "R:/leveldesign/common"
166 try:
167 if not args.preset:
168 LeveldesignDataShardDirectory
169 except NameError:
170 LeveldesignDataShardDirectory = "R:/leveldesign/shard"
171 try:
172 if not args.preset:
173 TranslationDirectory
174 except NameError:
175 TranslationDirectory = "R:/leveldesign/translation"
176 try:
177 if not args.preset:
178 GamedevDirectory
179 except NameError:
180 GamedevDirectory = "R:/code/ryzom/client/data/gamedev"
181 try:
182 if not args.preset:
183 DataCommonDirectory
184 except NameError:
185 DataCommonDirectory = "R:/code/ryzom/common/data_common"
186 try:
187 if not args.preset:
188 DataShardDirectory
189 except NameError:
190 DataShardDirectory = "R:/code/ryzom/server/data_shard"
191 try:
192 if not args.preset:
193 WindowsExeDllCfgDirectories
194 except NameError:
195 # TODO: Separate 64bit and 32bit
196 WindowsExeDllCfgDirectories = [ '', 'R:/build/fv_x64/bin/Release', 'R:/distribution/external_x64', 'R:/code/ryzom/client', '', '', '' ]
197 try:
198 if not args.preset:
199 LinuxServiceExecutableDirectory
200 except NameError:
201 LinuxServiceExecutableDirectory = "R:/build/gcc_server/bin"
202 try:
203 if not args.preset:
204 LinuxClientExecutableDirectory
205 except NameError:
206 LinuxClientExecutableDirectory = "R:/build/gcc_client/bin"
207 try:
208 if not args.preset:
209 PatchmanCfgAdminDirectory
210 except NameError:
211 PatchmanCfgAdminDirectory = "R:/patchman/admin_install"
212 try:
213 if not args.preset:
214 PatchmanCfgDefaultDirectory
215 except NameError:
216 PatchmanCfgDefaultDirectory = "R:/patchman/default"
217 try:
218 if not args.preset:
219 PatchmanBridgeServerDirectory
220 except NameError:
221 PatchmanBridgeServerDirectory = "R:/pipeline/bridge_server"
222 try:
223 SignToolExecutable
224 except NameError:
225 SignToolExecutable = "C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bin/signtool.exe"
226 try:
227 SignToolSha1
228 except NameError:
229 SignToolSha1 = ""
230 try:
231 SignToolTimestamp
232 except NameError:
233 SignToolTimestamp = "http://timestamp.comodoca.com/authenticode"
234 try:
235 MaxAvailable
236 except NameError:
237 MaxAvailable = 1
238 try:
239 MaxDirectory
240 except NameError:
241 MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010"
242 try:
243 MaxUserDirectory
244 except NameError:
245 import os
246 try:
247 MaxUserDirectory = os.path.normpath(os.environ["LOCALAPPDATA"] + "/Autodesk/3dsMax/2010 - 32bit/enu")
248 except KeyError:
249 MaxAvailable = 0
250 MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
251 try:
252 MaxExecutable
253 except NameError:
254 MaxExecutable = "3dsmax.exe"
256 printLog(log, "")
257 printLog(log, "-------")
258 printLog(log, "--- Setup build site")
259 printLog(log, "-------")
260 printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
261 printLog(log, "")
262 printLog(log, "This script will set up the buildsite configuration, and create needed directories.")
263 printLog(log, "To use the defaults, simply hit ENTER, else type in the new value.")
264 printLog(log, "Use -- if you need to insert an empty value.")
265 printLog(log, "")
266 BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality)))
267 if not args.preset:
268 ToolDirectories[0] = askVar(log, "[IN] Primary Tool Directory", ToolDirectories[0]).replace("\\", "/")
269 ToolDirectories[1] = askVar(log, "[IN] Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/")
270 ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix)
271 ScriptDirectory = askVar(log, "[IN] Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/")
272 WorkspaceDirectory = askVar(log, "[IN] Workspace Directory", WorkspaceDirectory).replace("\\", "/")
273 DatabaseDirectory = askVar(log, "[IN] Database Directory", DatabaseDirectory).replace("\\", "/")
274 SoundDirectory = askVar(log, "[IN] Sound Directory", SoundDirectory).replace("\\", "/")
275 SoundDfnDirectory = askVar(log, "[IN] Sound DFN Directory", SoundDfnDirectory).replace("\\", "/")
276 ExportBuildDirectory = askVar(log, "[OUT] Export Build Directory", ExportBuildDirectory).replace("\\", "/")
277 InstallDirectory = askVar(log, "[OUT] Install Directory", InstallDirectory).replace("\\", "/")
278 ClientDevDirectory = askVar(log, "[OUT] Client Dev Directory", ClientDevDirectory).replace("\\", "/")
279 ClientPatchDirectory = askVar(log, "[OUT] Client Patch Directory", ClientPatchDirectory).replace("\\", "/")
280 ClientInstallDirectory = askVar(log, "[OUT] Client Install Directory", ClientInstallDirectory).replace("\\", "/")
281 ShardInstallDirectory = askVar(log, "[OUT] Shard Data Install Directory", ShardInstallDirectory).replace("\\", "/")
282 WorldEditInstallDirectory = askVar(log, "[OUT] World Edit Data Install Directory", WorldEditInstallDirectory).replace("\\", "/")
283 LeveldesignDirectory = askVar(log, "[IN] Leveldesign Directory", LeveldesignDirectory).replace("\\", "/")
284 LeveldesignDfnDirectory = askVar(log, "[IN] Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/")
285 LeveldesignWorldDirectory = askVar(log, "[IN] Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/")
286 PrimitivesDirectory = askVar(log, "[IN] Primitives Directory", PrimitivesDirectory).replace("\\", "/")
287 GamedevDirectory = askVar(log, "[IN] Gamedev Directory", GamedevDirectory).replace("\\", "/")
288 DataShardDirectory = askVar(log, "[IN] Data Shard Directory", DataShardDirectory).replace("\\", "/")
289 DataCommonDirectory = askVar(log, "[IN] Data Common Directory", DataCommonDirectory).replace("\\", "/")
290 TranslationDirectory = askVar(log, "[IN] Translation Directory", TranslationDirectory).replace("\\", "/")
291 LeveldesignDataShardDirectory = askVar(log, "[IN] Leveldesign Data Shard Directory", LeveldesignDataShardDirectory).replace("\\", "/")
292 LeveldesignDataCommonDirectory = askVar(log, "[IN] Leveldesign Data Common Directory", LeveldesignDataCommonDirectory).replace("\\", "/")
293 WorldEditorFilesDirectory = askVar(log, "[IN] World Editor Files Directory", WorldEditorFilesDirectory).replace("\\", "/")
294 WindowsExeDllCfgDirectories[0] = askVar(log, "[IN] Primary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[0]).replace("\\", "/")
295 WindowsExeDllCfgDirectories[1] = askVar(log, "[IN] Secondary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[1]).replace("\\", "/")
296 WindowsExeDllCfgDirectories[2] = askVar(log, "[IN] Tertiary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[2]).replace("\\", "/")
297 WindowsExeDllCfgDirectories[3] = askVar(log, "[IN] Quaternary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[3]).replace("\\", "/")
298 WindowsExeDllCfgDirectories[4] = askVar(log, "[IN] Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/")
299 WindowsExeDllCfgDirectories[5] = askVar(log, "[IN] Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/")
300 WindowsExeDllCfgDirectories[6] = askVar(log, "[IN] Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/")
301 LinuxServiceExecutableDirectory = askVar(log, "[IN] Linux Service Executable Directory", LinuxServiceExecutableDirectory).replace("\\", "/")
302 LinuxClientExecutableDirectory = askVar(log, "[IN] Linux Client Executable Directory", LinuxClientExecutableDirectory).replace("\\", "/")
303 PatchmanCfgAdminDirectory = askVar(log, "[IN] Patchman Cfg Admin Directory", PatchmanCfgAdminDirectory).replace("\\", "/")
304 PatchmanCfgDefaultDirectory = askVar(log, "[IN] Patchman Cfg Default Directory", PatchmanCfgDefaultDirectory).replace("\\", "/")
305 PatchmanBridgeServerDirectory = askVar(log, "[OUT] Patchman Bridge Server Patch Directory", PatchmanBridgeServerDirectory).replace("\\", "/")
306 SignToolExecutable = askVar(log, "Sign Tool Executable", SignToolExecutable).replace("\\", "/")
307 SignToolSha1 = askVar(log, "Sign Tool Signature SHA1", SignToolSha1)
308 SignToolTimestamp = askVar(log, "Sign Tool Timestamp Authority", SignToolTimestamp)
309 MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable)))
310 if MaxAvailable:
311 MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/")
312 MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/")
313 MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable)
314 if os.path.isfile("configuration/buildsite.py"):
315 os.remove("configuration/buildsite.py")
316 sf = open("configuration/buildsite.py", "w")
317 sf.write("#!/usr/bin/python\n")
318 sf.write("# \n")
319 sf.write("# \\file site.py\n")
320 sf.write("# \\brief Site configuration\n")
321 sf.write("# \\date " + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "\n")
322 sf.write("# \\author Jan Boon (Kaetemi)\n")
323 sf.write("# Python port of game data build pipeline.\n")
324 sf.write("# Site configuration.\n")
325 sf.write("# \n")
326 sf.write("# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>\n")
327 sf.write("# Copyright (C) 2009-2014 by authors\n")
328 sf.write("# \n")
329 sf.write("# This program is free software: you can redistribute it and/or modify\n")
330 sf.write("# it under the terms of the GNU Affero General Public License as\n")
331 sf.write("# published by the Free Software Foundation, either version 3 of the\n")
332 sf.write("# License, or (at your option) any later version.\n")
333 sf.write("# \n")
334 sf.write("# This program is distributed in the hope that it will be useful,\n")
335 sf.write("# but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
336 sf.write("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
337 sf.write("# GNU Affero General Public License for more details.\n")
338 sf.write("# \n")
339 sf.write("# You should have received a copy of the GNU Affero General Public License\n")
340 sf.write("# along with this program. If not, see <http://www.gnu.org/licenses/>.\n")
341 sf.write("# \n")
342 sf.write("\n")
343 sf.write("\n")
344 sf.write("# *** SITE INSTALLATION ***\n")
345 sf.write("\n")
346 sf.write("# Use '/' in path name, not '\'\n")
347 sf.write("# Don't put '/' at the end of a directory name\n")
348 sf.write("\n")
349 sf.write("\n")
350 sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n")
351 sf.write("BuildQuality = " + str(BuildQuality) + "\n")
352 sf.write("\n")
353 sf.write("ToolDirectories = " + str(ToolDirectories) + "\n")
354 sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n")
355 sf.write("\n")
356 sf.write("# Build script directory\n")
357 sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n")
358 sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n")
359 sf.write("\n")
360 sf.write("# Data build directories\n")
361 sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n")
362 sf.write("SoundDirectory = \"" + str(SoundDirectory) + "\"\n")
363 sf.write("SoundDfnDirectory = \"" + str(SoundDfnDirectory) + "\"\n")
364 sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n")
365 sf.write("\n")
366 sf.write("# Install directories\n")
367 sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n")
368 sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n")
369 sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n")
370 sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n")
371 sf.write("ShardInstallDirectory = \"" + str(ShardInstallDirectory) + "\"\n")
372 sf.write("WorldEditInstallDirectory = \"" + str(WorldEditInstallDirectory) + "\"\n")
373 sf.write("\n")
374 sf.write("# Utility directories\n")
375 sf.write("WorldEditorFilesDirectory = \"" + str(WorldEditorFilesDirectory) + "\"\n")
376 sf.write("\n")
377 sf.write("# Leveldesign directories\n")
378 sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n")
379 sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n")
380 sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n")
381 sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n")
382 sf.write("LeveldesignDataCommonDirectory = \"" + str(LeveldesignDataCommonDirectory) + "\"\n")
383 sf.write("LeveldesignDataShardDirectory = \"" + str(LeveldesignDataShardDirectory) + "\"\n")
384 sf.write("TranslationDirectory = \"" + str(TranslationDirectory) + "\"\n")
385 sf.write("\n")
386 sf.write("# Misc data directories\n")
387 sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n")
388 sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n")
389 sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n")
390 sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n")
391 sf.write("LinuxServiceExecutableDirectory = \"" + str(LinuxServiceExecutableDirectory) + "\"\n")
392 sf.write("LinuxClientExecutableDirectory = \"" + str(LinuxClientExecutableDirectory) + "\"\n")
393 sf.write("PatchmanCfgAdminDirectory = \"" + str(PatchmanCfgAdminDirectory) + "\"\n")
394 sf.write("PatchmanCfgDefaultDirectory = \"" + str(PatchmanCfgDefaultDirectory) + "\"\n")
395 sf.write("PatchmanBridgeServerDirectory = \"" + str(PatchmanBridgeServerDirectory) + "\"\n")
396 sf.write("\n")
397 sf.write("# Sign tool\n")
398 sf.write("SignToolExecutable = \"" + str(SignToolExecutable) + "\"\n")
399 sf.write("SignToolSha1 = \"" + str(SignToolSha1) + "\"\n")
400 sf.write("SignToolTimestamp = \"" + str(SignToolTimestamp) + "\"\n")
401 sf.write("\n")
402 sf.write("# 3dsMax directives\n")
403 sf.write("MaxAvailable = " + str(MaxAvailable) + "\n")
404 sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n")
405 sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n")
406 sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n")
407 sf.write("\n")
408 sf.write("\n")
409 sf.write("# end of file\n")
410 sf.close()
412 sys.path.append(WorkspaceDirectory)
413 from projects import *
415 printLog(log, "")
416 printLog(log, "-------")
417 printLog(log, "--- Run the setup projects")
418 printLog(log, "-------")
419 printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
420 printLog(log, "")
421 # For each project
422 for projectName in ProjectsToProcess:
423 if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
424 printLog(log, "PROJECT " + projectName)
425 os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
426 os.chdir("processes")
427 try:
428 if not args.includeprocess == None:
429 subprocess.call([ "python", "0_setup.py", "--includeprocess" ] + args.includeprocess)
430 elif not args.excludeprocess == None:
431 subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess)
432 else:
433 subprocess.call([ "python", "0_setup.py" ])
434 except Exception, e:
435 printLog(log, "<" + projectName + "> " + str(e))
436 os.chdir("..")
437 try:
438 projectLog = open("processes/log.log", "r")
439 projectLogData = projectLog.read()
440 projectLog.close()
441 log.write(projectLogData)
442 except Exception, e:
443 printLog(log, "<" + projectName + "> " + str(e))
444 else:
445 printLog(log, "IGNORE PROJECT " + projectName)
446 printLog(log, "")
448 # Additional directories
449 printLog(log, ">>> Setup additional directories <<<")
450 mkPath(log, ClientDevDirectory)
451 mkPath(log, ClientPatchDirectory)
452 mkPath(log, ClientInstallDirectory)
454 if not args.noverify:
455 printLog(log, "")
456 printLog(log, "-------")
457 printLog(log, "--- Verify tool paths")
458 printLog(log, "-------")
459 printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
460 printLog(log, "")
461 if MaxAvailable:
462 findMax(log, MaxDirectory, MaxExecutable)
463 findTool(log, ToolDirectories, TgaToDdsTool, ToolSuffix)
464 findTool(log, ToolDirectories, BuildInterfaceTool, ToolSuffix)
465 findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
466 findTool(log, ToolDirectories, BuildSmallbankTool, ToolSuffix)
467 findTool(log, ToolDirectories, BuildFarbankTool, ToolSuffix)
468 findTool(log, ToolDirectories, ZoneDependenciesTool, ToolSuffix)
469 findTool(log, ToolDirectories, ZoneWelderTool, ToolSuffix)
470 findTool(log, ToolDirectories, ZoneElevationTool, ToolSuffix)
471 findTool(log, ToolDirectories, BuildRbankTool, ToolSuffix)
472 findTool(log, ToolDirectories, BuildIndoorRbankTool, ToolSuffix)
473 findTool(log, ToolDirectories, BuildIgBoxesTool, ToolSuffix)
474 findTool(log, ToolDirectories, GetNeighborsTool, ToolSuffix)
475 findTool(log, ToolDirectories, ZoneLighterTool, ToolSuffix)
476 findTool(log, ToolDirectories, ZoneIgLighterTool, ToolSuffix)
477 findTool(log, ToolDirectories, IgLighterTool, ToolSuffix)
478 findTool(log, ToolDirectories, AnimBuilderTool, ToolSuffix)
479 findTool(log, ToolDirectories, TileEditTool, ToolSuffix)
480 # findTool(log, ToolDirectories, BuildImagesetTool, ToolSuffix) # kaetemi stuff, ignore this
481 findTool(log, ToolDirectories, MakeSheetIdTool, ToolSuffix)
482 # findTool(log, ToolDirectories, BuildSheetsTool, ToolSuffix) # kaetemi stuff, ignore this
483 # findTool(log, ToolDirectories, BuildSoundTool, ToolSuffix) # kaetemi stuff, ignore this
484 # findTool(log, ToolDirectories, BuildSoundTool, ToolSuffix)
485 findTool(log, ToolDirectories, BuildSoundbankTool, ToolSuffix)
486 findTool(log, ToolDirectories, BuildSamplebankTool, ToolSuffix)
487 findTool(log, ToolDirectories, BuildCoarseMeshTool, ToolSuffix)
488 findTool(log, ToolDirectories, LightmapOptimizerTool, ToolSuffix)
489 findTool(log, ToolDirectories, BuildClodtexTool, ToolSuffix)
490 findTool(log, ToolDirectories, BuildShadowSkinTool, ToolSuffix)
491 findTool(log, ToolDirectories, PanoplyMakerTool, ToolSuffix)
492 findTool(log, ToolDirectories, HlsBankMakerTool, ToolSuffix)
493 findTool(log, ToolDirectories, LandExportTool, ToolSuffix)
494 findTool(log, ToolDirectories, PrimExportTool, ToolSuffix)
495 findTool(log, ToolDirectories, IgElevationTool, ToolSuffix)
496 findTool(log, ToolDirectories, IgAddTool, ToolSuffix)
497 findTool(log, ToolDirectories, BuildClodBankTool, ToolSuffix)
498 findTool(log, ToolDirectories, SheetsPackerTool, ToolSuffix)
499 findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix)
500 findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix)
501 findTool(log, ToolDirectories, TgaCutTool, ToolSuffix)
502 findTool(log, ToolDirectories, PatchGenTool, ToolSuffix)
503 findTool(log, ToolDirectories, TranslationToolsTool, ToolSuffix)
504 findTool(log, ToolDirectories, BuildWorldPackedColTool, ToolSuffix)
505 findTool(log, ToolDirectories, R2IslandsTexturesTool, ToolSuffix)
507 log.close()
508 if os.path.isfile("0_setup.log"):
509 os.remove("0_setup.log")
510 shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_setup.log")
511 shutil.move("log.log", "0_setup.log")