diff --git a/code/nel/tools/build_gamedata/0_setup.py b/code/nel/tools/build_gamedata/0_setup.py
index 42a9a409b..69d825fed 100755
--- a/code/nel/tools/build_gamedata/0_setup.py
+++ b/code/nel/tools/build_gamedata/0_setup.py
@@ -187,6 +187,18 @@ if not args.noconf:
PatchmanBridgeServerDirectory
except NameError:
PatchmanBridgeServerDirectory = "T:/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:
@@ -258,6 +270,9 @@ if not args.noconf:
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("\\", "/")
@@ -346,6 +361,11 @@ if not args.noconf:
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")
diff --git a/code/nel/tools/build_gamedata/configuration/scripts.py b/code/nel/tools/build_gamedata/configuration/scripts.py
index 9a815a2b9..5bbed497f 100755
--- a/code/nel/tools/build_gamedata/configuration/scripts.py
+++ b/code/nel/tools/build_gamedata/configuration/scripts.py
@@ -541,9 +541,10 @@ def needUpdateDirNoSubdirLogExtMultidir(log, all_dir_base, all_dir_source, dir_s
def findFileMultiDir(log, dirs_where, file_name):
try:
for dir in dirs_where:
- file = findFile(log, dir, file_name)
- if file != "":
- return file
+ 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)
@@ -552,10 +553,11 @@ def findFileMultiDir(log, dirs_where, file_name):
def findTool(log, dirs_where, file_name, suffix):
try:
for dir in dirs_where:
- tool = findFile(log, dir, file_name + suffix)
- if tool != "":
- printLog(log, "TOOL " + tool)
- return tool
+ 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)
diff --git a/code/nel/tools/build_gamedata/executables_dev.bat b/code/nel/tools/build_gamedata/executables_dev.bat
index 2007016c4..bbca70ab7 100644
--- a/code/nel/tools/build_gamedata/executables_dev.bat
+++ b/code/nel/tools/build_gamedata/executables_dev.bat
@@ -1,3 +1,9 @@
+title Ryzom Core: 0_setup.py (EXECUTABLES)
+0_setup.py --noconf -ipj common/gamedev common/exedll common/cfg common/data_common
+title Ryzom Core: 1_export.py (EXECUTABLES)
+1_export.py -ipj common/gamedev common/exedll common/cfg common/data_common
+title Ryzom Core: 2_build.py (EXECUTABLES)
+2_build.py -ipj common/gamedev common/exedll common/cfg common/data_common
title Ryzom Core: 3_install.py (EXECUTABLES)
3_install.py -ipj common/gamedev common/exedll common/cfg common/data_common
title Ryzom Core: b1_client_dev.py
diff --git a/code/nel/tools/build_gamedata/processes/sign/0_setup.py b/code/nel/tools/build_gamedata/processes/sign/0_setup.py
new file mode 100644
index 000000000..418fcb15e
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/sign/0_setup.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#
+# \file 0_setup.py
+# \brief setup sign
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Setup sign
+#
+# NeL - MMORPG Framework
+# 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 .
+#
+
+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 sign")
+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 <<<")
+
+# Setup build directories
+printLog(log, ">>> Setup export directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + UnsignedExeDllDirectory)
+
+# Setup build directories
+printLog(log, ">>> Setup build directories <<<")
+mkPath(log, ExportBuildDirectory + "/" + SignedExeDllDirectory)
+
+# Setup client directories
+printLog(log, ">>> Setup client directories <<<")
+mkPath(log, InstallDirectory + "/" + SignInstallDirectory)
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/sign/1_export.py b/code/nel/tools/build_gamedata/processes/sign/1_export.py
new file mode 100644
index 000000000..352860bda
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/sign/1_export.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+#
+# \file 1_export.py
+# \brief Export sign
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Export sign
+#
+# NeL - MMORPG Framework
+# 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 .
+#
+
+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 sign")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+mkPath(log, ExportBuildDirectory + "/" + UnsignedExeDllDirectory)
+for file in SignExeDllFiles:
+ printLog(log, str(WindowsExeDllCfgDirectories))
+ printLog(log, file)
+ filePath = findFileMultiDir(log, WindowsExeDllCfgDirectories, file)
+ if (filePath != ""):
+ copyFileIfNeeded(log, filePath, ExportBuildDirectory + "/" + UnsignedExeDllDirectory + "/" + os.path.basename(file))
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/sign/2_build.py b/code/nel/tools/build_gamedata/processes/sign/2_build.py
new file mode 100644
index 000000000..c08049538
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/sign/2_build.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+#
+# \file 2_build.py
+# \brief Build sign
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Build sign
+#
+# NeL - MMORPG Framework
+# 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 .
+#
+
+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 sign")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+if SignToolSha1 != "":
+ unsignedDirectory = ExportBuildDirectory + "/" + UnsignedExeDllDirectory
+ signedDirectory = ExportBuildDirectory + "/" + SignedExeDllDirectory
+ mkPath(log, unsignedDirectory)
+ mkPath(log, signedDirectory)
+ unsignedFiles = os.listdir(unsignedDirectory)
+ for fileName in unsignedFiles:
+ if (fileName != ".svn" and fileName != ".." and fileName != "." and fileName != "*.*"):
+ if needUpdateLogRemoveDest(log, unsignedDirectory + "/" + fileName, signedDirectory + "/" + fileName):
+ shutil.copy(unsignedDirectory + "/" + fileName, signedDirectory + "/" + fileName)
+ subprocess.call([ SignToolExecutable, "sign", "/sha1", SignToolSha1, "/t", SignToolTimestamp, signedDirectory + "/" + fileName ])
+
+log.close()
+
+
+# end of file
diff --git a/code/nel/tools/build_gamedata/processes/sign/3_install.py b/code/nel/tools/build_gamedata/processes/sign/3_install.py
new file mode 100644
index 000000000..b537da92d
--- /dev/null
+++ b/code/nel/tools/build_gamedata/processes/sign/3_install.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+#
+# \file 3_install.py
+# \brief Install sign
+# \date 2010-05-24 13:42GMT
+# \author Jan Boon (Kaetemi)
+# Python port of game data build pipeline.
+# Install sign
+#
+# NeL - MMORPG Framework
+# 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 .
+#
+
+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, "--- Install sign")
+printLog(log, "-------")
+printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
+printLog(log, "")
+
+srcDir = ExportBuildDirectory + "/" + SignedExeDllDirectory
+if SignToolSha1 == "":
+ srcDir = ExportBuildDirectory + "/" + UnsignedExeDllDirectory
+mkPath(log, srcDir)
+destDir = InstallDirectory + "/" + SignInstallDirectory
+mkPath(log, destDir)
+copyFilesNoTreeIfNeeded(log, srcDir, destDir)
+
+printLog(log, "")
+log.close()
+
+
+# end of file