annotate buildHelper.d @ 182:b64060ab22df

Now compileable with dmd2.050
author korDen
date Sat, 30 Oct 2010 05:05:32 +0400
parents 0622fff7810a
children 190ba98276b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
1 // Written in The D Programming Language
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
2 /// Script to build DDMD
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
3 import std.file;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
4 import std.getopt;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
5 import std.path;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
6 import std.process;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
7 import std.stdio;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
8 import std.string: replace, format;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
9 import std.zip;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
10
180
0622fff7810a Fixed a few memory allocation related issues
korDen
parents: 172
diff changeset
11 enum dmdVersionDefault = "2.040";
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
12 enum dmdArchiveBaseURL = "http://ftp.digitalmars.com/";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
13 enum dmdLib = "dmd.lib";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
14 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
15 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
16 enum scriptName = "build.bat";
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
17 enum osSubDir = "windows";
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
18 enum configFile = "sc.ini";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
19 enum execExt = ".exe";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
20 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
21 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
22 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
23 enum scriptName = "./build.sh";
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
24 enum osSubDir = "linux";
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
25 enum configFile = "dmd.conf";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
26 enum execExt = "";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
27 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
28
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
29 string dmdVersion;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
30 string dmdPackage;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
31 string dmdArchive;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
32 string dmBase="";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
33 bool shouldDownload;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
34
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
35 void doCopy(string from, string to)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
36 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
37 from = normFilePath(from);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
38 to = normFilePath(to);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
39
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
40 writefln(`copy "%s" "%s"`, from, to);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
41 copy(from, to);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
42 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
43
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
44 void doChDir(string dir)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
45 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
46 dir = normDirPath(dir);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
47
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
48 writefln(`chdir "%s"`, dir);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
49 chdir(dir);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
50 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
51
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
52 int doSystem(string cmd)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
53 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
54 writeln(cmd);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
55 stdout.flush();
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
56 return system(cmd);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
57 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
58
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
59 void copyRecurse(string from, string to)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
60 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
61 from = normDirPath(from)[0..$-1];
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
62 to = normDirPath(to)[0..$-1];
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
63 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
64 doSystem(`xcopy "%s" "%s" /E /I /Y /Q`.format(from, to));
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
65 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
66 doSystem(`cp '%s' '%s' -r`.format(from, to));
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
67 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
68
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
69 void copyAndPatch(string from, string to, void delegate(ref string) patcher)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
70 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
71 auto data = cast(string)read(from);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
72 patcher(data);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
73 std.file.write(to, data);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
74 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
75
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
76 /// makePath("C:\foo\bar\dir") will create "C:\foo\bar\dir" if it doesn't already exist.
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
77 /// makePath("C:\foo\bar\dir\") will create "C:\foo\bar\dir" if it doesn't already exist.
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
78 void makePath(string dir)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
79 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
80 dir = normDirPath(dir)[0..$-1];
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
81 if(!exists(dir))
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
82 mkdirRecurse(dir);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
83 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
84
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
85 /// makePathTo("C:\foo\bar\file.txt") will create "C:\foo\bar\" if it doesn't already exist.
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
86 /// makePathTo("C:\foo\bar\dir\") will create "C:\foo\bar\" if it doesn't already exist.
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
87 void makePathTo(string file)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
88 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
89 file = normFilePath(file);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
90 auto dir = dirname(file);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
91 makePath(dir);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
92 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
93
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
94 /// Ensure trailing slash and OS-correct path separators
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
95 string normDirPath(string str)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
96 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
97 str = normPathSep(str);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
98 if(str.length > 0 && str[$-1] != sep[0])
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
99 str ~= sep;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
100
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
101 return str;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
102 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
103
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
104 /// Ensure no trailing slash and OS-correct path separators
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
105 string normFilePath(string str)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
106 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
107 str = normPathSep(str);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
108 if(str.length > 0 && str[$-1] == sep[0])
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
109 str = str[0..$-1];
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
110
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
111 return str;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
112 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
113
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
114 /// Ensure OS-correct path separators
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
115 string normPathSep(string str)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
116 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
117 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
118 str = str.replace("/", "\\");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
119 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
120 str = str.replace("\\", "/");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
121
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
122 return str;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
123 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
124
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
125 unittest
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
126 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
127 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
128 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
129 assert(normDirPath ("C:\\a/b\\c/d" ) == "C:\\a\\b\\c\\d\\");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
130 assert(normDirPath ("C:\\a/b\\c/d\\") == "C:\\a\\b\\c\\d\\");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
131 assert(normDirPath ("C:\\a/b\\c/d/" ) == "C:\\a\\b\\c\\d\\");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
132 assert(normFilePath("C:\\a/b\\c/d" ) == "C:\\a\\b\\c\\d" );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
133 assert(normFilePath("C:\\a/b\\c/d\\") == "C:\\a\\b\\c\\d" );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
134 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
135 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
136 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
137 assert(normDirPath ("\\a/b\\c/d" ) == "/a/b/c/d/");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
138 assert(normDirPath ("\\a/b\\c/d\\") == "/a/b/c/d/");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
139 assert(normDirPath ("\\a/b\\c/d/" ) == "/a/b/c/d/");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
140 assert(normFilePath("\\a/b\\c/d" ) == "/a/b/c/d" );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
141 assert(normFilePath("\\a/b\\c/d\\") == "/a/b/c/d" );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
142 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
143 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
144
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
145 bool initialSetup()
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
146 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
147 writeln("Running initial setup...");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
148
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
149 // Download dmd zip
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
150 if(!exists(dmdArchive) && shouldDownload)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
151 doSystem("wget "~dmdArchiveBaseURL~dmdArchive);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
152
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
153 // Extract dmd zip
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
154 writeln("Extracting dmd archive...");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
155 if(exists("dmd2"))
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
156 rmdirRecurse("dmd2");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
157 auto zip = new ZipArchive(std.file.read(dmdArchive));
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
158 foreach(member; zip.directory)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
159 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
160 makePathTo(member.name);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
161 std.file.write(member.name, zip.expand(member));
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
162 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
163
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
164 // Make mars2.c with 'main' hidden
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
165 doChDir("dmd2/src/dmd");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
166 copyAndPatch("mars.c", "mars2.c", (ref string data) {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
167 data = data.replace("int main(int argc, char *argv[])", "int HIDE_main(int argc, char *argv[])");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
168 });
180
0622fff7810a Fixed a few memory allocation related issues
korDen
parents: 172
diff changeset
169
0622fff7810a Fixed a few memory allocation related issues
korDen
parents: 172
diff changeset
170 copyAndPatch("util.c", "util.c", (ref string data) {
0622fff7810a Fixed a few memory allocation related issues
korDen
parents: 172
diff changeset
171 data = data.replace("void util_assert(char *file,int line)", "void HIDE_util_assert(char *file,int line)");
0622fff7810a Fixed a few memory allocation related issues
korDen
parents: 172
diff changeset
172 });
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
173
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
174 // Apply patch
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
175 doChDir("../../..");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
176 doChDir("dmd2");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
177 doSystem("patch -p1 --binary < " ~ normFilePath("../dmdpatch.patch"));
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
178
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
179 // Setup makefile for dmd.lib
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
180 doChDir("..");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
181 doChDir("dmd2/src/dmd");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
182 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
183 enum makefile = "win32.mak";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
184 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
185 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
186 enum makefile = "linux_lib.mak";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
187 doCopy("../../../"~makefile, makefile);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
188 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
189
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
190 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
191 copyAndPatch(makefile, makefile, (ref string data) {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
192 if(dmBase == "")
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
193 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
194 data = data.replace("\nCC=$(SCROOT)\\bin\\dmc", "\nCC=dmc");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
195 data = data.replace("\nLIB=$(SCROOT)\\bin\\lib", "\nLIB=lib");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
196 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
197 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
198 data = data.replace("\nD=", "\nD="~dmBase);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
199 });
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
200
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
201
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
202 // Build dmd.lib
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
203 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
204 doSystem("make deblib -f"~makefile);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
205 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
206 doSystem("make -f"~makefile);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
207 doCopy("dmd.lib", "../../../dmd.lib");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
208
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
209 // Copy and patch config file
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
210 doChDir("../../..");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
211 copyAndPatch(
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
212 normFilePath("dmd2/"~osSubDir~"/bin/"~configFile),
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
213 normFilePath("bin/"~configFile),
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
214 (ref string data) {
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
215 data = data.replace(normDirPath("../.."), normDirPath("../dmd2"));
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
216 data = data.replace(normDirPath("../lib"), normDirPath("../dmd2/"~osSubDir~"/lib"));
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
217 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
218 );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
219
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
220 // Copy linker
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
221 doCopy("dmd2/"~osSubDir~"/bin/link"~execExt, "bin/link"~execExt);
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
222
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
223 return true;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
224 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
225
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
226 int main(string[] args)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
227 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
228 endOfOptions = "";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
229 bool help;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
230 bool shouldSetup;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
231 bool debugOnly;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
232 bool releaseOnly;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
233 dmdVersion = dmdVersionDefault;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
234 getopt(
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
235 args,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
236 std.getopt.config.caseSensitive,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
237 "setup", &shouldSetup,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
238 "debug|d", &debugOnly,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
239 "release|r", &releaseOnly,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
240 "ver", &dmdVersion,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
241 "download", &shouldDownload,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
242 "dmbase", &dmBase,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
243 "help|h|H|?", &help
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
244 );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
245
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
246 dmdPackage = "dmd."~dmdVersion;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
247 dmdArchive = dmdPackage~".zip";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
248
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
249 auto helpMsg =
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
250 `This script will compile DDMD
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
251
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
252 Note that this script must be run from the main DDMD directory.
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
253
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
254 Also, make sure you have GNU patch installed and current versions
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
255 of DMC and DMD (D2) on the PATH. (DMC is only needed on Windows.)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
256
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
257 Usage:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
258 `~scriptName~` [options...]
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
259
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
260 --help,-h,-H,-? Display this help message
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
261 --debug,-d Only build debug version
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
262 --release,-r Only build release version
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
263 --ver={ver} Base DDMD off specific DMD version (default: `~dmdVersionDefault~`)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
264 --setup Run initial setup
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
265 --download If running initial setup and the dmd zip doesn't exist,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
266 use wget to download it
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
267 --dmbase={path} Path to directory containing 'dm' for building dmd.lib
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
268 (Optional if --setup is used, otherwise ignored)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
269 `;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
270
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
271 // Assume the user meant they wanted both.
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
272 if(debugOnly && releaseOnly)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
273 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
274 debugOnly = releaseOnly = false;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
275 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
276
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
277 if(
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
278 help ||
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
279 ( shouldSetup && !exists(dmdArchive) && !shouldDownload ) ||
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
280 ( shouldSetup && exists(dmdArchive) && !isfile(dmdArchive) )
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
281 )
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
282 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
283 write(helpMsg);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
284 return 1;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
285 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
286
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
287 if( !shouldSetup && (!exists(dmdLib) || !isfile(dmdLib)) )
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
288 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
289 auto needSetupMsg =
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
290 `'`~dmdLib~`' has not been built so you need to run the initial setup:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
291
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
292 If you have GNU wget installed, just run:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
293 `~scriptName~` --setup --download
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
294
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
295 If you don't have wget, download a copy of `~dmdArchive~` to this
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
296 directory. It can be obtained from:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
297 `~dmdArchiveBaseURL~dmdArchive~`
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
298 Then run:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
299 `~scriptName~` --setup
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
300
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
301 For a full list of options, run:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
302 `~scriptName~` --help
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
303 `;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
304
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
305 write(needSetupMsg);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
306 return 1;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
307 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
308
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
309 if(shouldSetup)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
310 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
311 if(!initialSetup())
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
312 return 1;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
313 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
314
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
315 int ret=0;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
316 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
317 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
318 system("cls");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
319 if(ret == 0) ret = doSystem(r"dmc.exe bridge\bridge.cpp -c");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
320 if(!releaseOnly) if(ret == 0) ret = doSystem(r"dmd -debug -g @commands.txt");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
321 if(!debugOnly) if(ret == 0) ret = doSystem(r"dmd -release -O -inline @commands.txt");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
322 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
323 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
324 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
325 if(ret == 0) ret = doSystem("g++ -c bridge/bridge.cpp -obridge.o");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
326 if(!releaseOnly) if(ret == 0) ret = doSystem("dmd -debug -gc @commands.linux.txt");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
327 if(!debugOnly) if(ret == 0) ret = doSystem("dmd -release -O -inline @commands.linux.txt");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
328 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
329
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
330 return ret;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
331 }