annotate buildHelper.d @ 172:5a9a88e919f9

BuildHelper updated to use src and lib from dmd2/, not copies
author korDen
date Fri, 08 Oct 2010 20:23:30 +0400
parents b080e62b16b4
children 0622fff7810a
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
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
11 enum dmdVersionDefault = "2.039";
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 });
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
169
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
170 // Apply patch
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
171 doChDir("../../..");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
172 doChDir("dmd2");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
173 doSystem("patch -p1 --binary < " ~ normFilePath("../dmdpatch.patch"));
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
174
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
175 // Setup makefile for dmd.lib
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
176 doChDir("..");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
177 doChDir("dmd2/src/dmd");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
178 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
179 enum makefile = "win32.mak";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
180 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
181 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
182 enum makefile = "linux_lib.mak";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
183 doCopy("../../../"~makefile, makefile);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
184 }
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 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
187 copyAndPatch(makefile, makefile, (ref string data) {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
188 if(dmBase == "")
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 data = data.replace("\nCC=$(SCROOT)\\bin\\dmc", "\nCC=dmc");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
191 data = data.replace("\nLIB=$(SCROOT)\\bin\\lib", "\nLIB=lib");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
192 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
193 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
194 data = data.replace("\nD=", "\nD="~dmBase);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
195 });
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
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
198 // Build dmd.lib
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
199 version(Windows)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
200 doSystem("make deblib -f"~makefile);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
201 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
202 doSystem("make -f"~makefile);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
203 doCopy("dmd.lib", "../../../dmd.lib");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
204
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
205 // Copy and patch config file
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
206 doChDir("../../..");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
207 copyAndPatch(
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
208 normFilePath("dmd2/"~osSubDir~"/bin/"~configFile),
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
209 normFilePath("bin/"~configFile),
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
210 (ref string data) {
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
211 data = data.replace(normDirPath("../.."), normDirPath("../dmd2"));
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
212 data = data.replace(normDirPath("../lib"), normDirPath("../dmd2/"~osSubDir~"/lib"));
171
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
213 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
214 );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
215
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
216 // Copy linker
172
5a9a88e919f9 BuildHelper updated to use src and lib from dmd2/, not copies
korDen
parents: 171
diff changeset
217 doCopy("dmd2/"~osSubDir~"/bin/link"~execExt, "bin/link"~execExt);
171
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 return true;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
220 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
221
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
222 int main(string[] args)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
223 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
224 endOfOptions = "";
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
225 bool help;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
226 bool shouldSetup;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
227 bool debugOnly;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
228 bool releaseOnly;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
229 dmdVersion = dmdVersionDefault;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
230 getopt(
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
231 args,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
232 std.getopt.config.caseSensitive,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
233 "setup", &shouldSetup,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
234 "debug|d", &debugOnly,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
235 "release|r", &releaseOnly,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
236 "ver", &dmdVersion,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
237 "download", &shouldDownload,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
238 "dmbase", &dmBase,
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
239 "help|h|H|?", &help
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
240 );
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
241
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
242 dmdPackage = "dmd."~dmdVersion;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
243 dmdArchive = dmdPackage~".zip";
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 auto helpMsg =
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
246 `This script will compile DDMD
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
247
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
248 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
249
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
250 Also, make sure you have GNU patch installed and current versions
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
251 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
252
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
253 Usage:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
254 `~scriptName~` [options...]
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
255
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
256 --help,-h,-H,-? Display this help message
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
257 --debug,-d Only build debug version
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
258 --release,-r Only build release version
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
259 --ver={ver} Base DDMD off specific DMD version (default: `~dmdVersionDefault~`)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
260 --setup Run initial setup
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
261 --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
262 use wget to download it
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
263 --dmbase={path} Path to directory containing 'dm' for building dmd.lib
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
264 (Optional if --setup is used, otherwise ignored)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
265 `;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
266
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
267 // Assume the user meant they wanted both.
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
268 if(debugOnly && releaseOnly)
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 debugOnly = releaseOnly = false;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
271 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
272
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
273 if(
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
274 help ||
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
275 ( shouldSetup && !exists(dmdArchive) && !shouldDownload ) ||
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
276 ( shouldSetup && exists(dmdArchive) && !isfile(dmdArchive) )
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
277 )
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
278 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
279 write(helpMsg);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
280 return 1;
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 if( !shouldSetup && (!exists(dmdLib) || !isfile(dmdLib)) )
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
284 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
285 auto needSetupMsg =
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
286 `'`~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
287
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
288 If you have GNU wget installed, just run:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
289 `~scriptName~` --setup --download
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
290
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
291 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
292 directory. It can be obtained from:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
293 `~dmdArchiveBaseURL~dmdArchive~`
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
294 Then run:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
295 `~scriptName~` --setup
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
296
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
297 For a full list of options, run:
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
298 `~scriptName~` --help
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
299 `;
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 write(needSetupMsg);
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
302 return 1;
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 if(shouldSetup)
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
306 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
307 if(!initialSetup())
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
308 return 1;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
309 }
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 int ret=0;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
312 version(Windows)
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 system("cls");
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
315 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
316 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
317 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
318 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
319 else
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
320 {
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
321 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
322 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
323 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
324 }
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
325
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
326 return ret;
b080e62b16b4 Enhanced buildscript to simplify compiling for new users
Abscissa
parents:
diff changeset
327 }