remove RSA's md4.c, replace by DP's
[xonotic/netradiant.git] / install.py
1 # Copyright (C) 2001-2006 William Joseph.
2 #
3 # This file is part of GtkRadiant.
4 #
5 # GtkRadiant is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # GtkRadiant is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with GtkRadiant; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
19 """
20 Builds the ./install directory.
21
22 Copies files from various locations:
23 ./setup/data/tools/
24 ./games/<gamepack>/
25 ./include/version.default is used to generate RADIANT_MAJOR and RADIANT_MINOR
26 """
27
28 import os
29 import sys
30 import shutil
31
32 def assertMessage(condition, message):
33   if not condition:
34     raise Exception(message)
35
36 def copyFile(source, target):
37   assertMessage(os.path.isfile(source), "failed to find file: " + source)
38   print source, "->", target
39   shutil.copy2(source, target)
40
41 def copyFileIfExists(source, target):
42   if os.path.exists(source):
43     copyFile(source, target)
44
45 def copySvn(source, target):
46   assertMessage(os.path.isdir(source), "failed to find directory: " + source)
47   if not os.path.exists(target):
48     os.mkdir(target)
49   for name in os.listdir(source):
50     absolute = os.path.join(source, name)
51     absTarget = os.path.join(target, name)
52     if os.path.isdir(absolute):
53       if name != ".svn":
54         copySvn(absolute, absTarget)
55     else:
56       copyFile(absolute, absTarget)
57
58 def copyGame(source, game, target):
59   assertMessage(os.path.isdir(source), "failed to find directory: " + source)
60   assertMessage(os.path.isdir(target), "failed to find directory: " + target)
61   root = os.path.join(source, os.path.normpath(game[0]))
62   if os.path.exists(root):
63     gamename = game[1] + ".game"
64     copySvn(os.path.join(root, gamename), os.path.join(target, gamename))
65     gamesDir = os.path.join(target, "games")
66     if not os.path.exists(gamesDir):
67       os.mkdir(gamesDir)
68     copyFile(os.path.join(root, "games", gamename), os.path.join(gamesDir, gamename))
69
70 thisDir = os.path.dirname(__file__)
71 gamesRoot = os.path.join(thisDir, "games")
72 installRoot = os.path.join(thisDir, "install")
73
74 if not os.path.exists(installRoot):
75   os.mkdir(installRoot)
76
77 # copy generic data
78 copySvn(os.path.join(thisDir, os.path.normpath("setup/data/tools")), installRoot)
79
80 # root, gamename
81 games = [
82   ("Doom3Pack/tools", "doom3"),
83   ("ETPack", "et"),
84   ("HalfLifePack", "hl"),
85   ("Her2Pack", "heretic2"),
86   ("JAPack/Tools", "ja"),
87   ("JK2Pack", "jk2"),
88   ("Q1Pack", "q1"),
89   ("Q2Pack", "q2"),
90   ("Q3Pack/tools", "q3"),
91   ("Q4Pack/tools", "q4"),
92   ("Sof2Pack", "sof2"),
93   ("STVEFPack", "stvef"),
94   ("WolfPack/bin", "wolf"),
95   ("NexuizPack", "nexuiz"),
96   ("DarkPlacesPack", "darkplaces"),
97   ("WarsowPack/tools", "warsow"),
98   ("TremulousPack/tools", "trem")
99 ]
100
101 # copy games
102 for game in games:
103   copyGame(gamesRoot, game, installRoot)
104
105 # copy win32 dlls
106 gtk2Root = os.path.normpath(os.path.join(thisDir, "../gtk2-2.10/install"))
107 if os.path.exists(gtk2Root):
108   copySvn(gtk2Root, installRoot)
109
110 libxml2 = os.path.normpath(os.path.join(thisDir, "../libxml2-2.6/bin/libxml2.dll"))
111 copyFileIfExists(libxml2, installRoot)
112
113 libmhash = os.path.normpath(os.path.join(thisDir, "../mhash-0.9/win32/libmhash/Release/libmhash.dll"))
114 copyFileIfExists(libmhash, installRoot)
115
116 if sys.platform[:3] == "win" :
117   copySvn("../msvc_redist", installRoot)
118   dbghelp = os.path.normpath(os.path.join(thisDir, "../msvc_redist/dbghelp.dll"))
119   copyFileIfExists(dbghelp, installRoot)
120
121 # create version files
122 version = open(os.path.join(thisDir, "include/version.default"), "rt").readline().split(".")
123 assertMessage(len(version) == 3, "failed to parse include/version.default")
124 open(os.path.join(thisDir, "install/RADIANT_MAJOR"), "wt").write(str(version[1]))
125 open(os.path.join(thisDir, "install/RADIANT_MINOR"), "wt").write(str(version[2]))