forked from gtkd-developers/GtkD
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBuild.d
101 lines (87 loc) · 1.83 KB
/
Build.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
module Build;
import std.algorithm;
import std.array;
import std.file;
import std.getopt;
import std.path;
import std.process;
import std.stdio;
import std.string;
string dcflags;
string ldflags;
int main(string[] args)
{
version(Posix)
{
writeln("This build script is currently Windows only.");
return(1);
}
getopt(args, "dcflags", &dcflags, "ldflags", &ldflags);
args.popFront();
foreach ( arg; args )
{
if ( !["gtkd", "gtkdgl", "sv", "gstreamer", "vte", "all"].canFind(arg) )
{
writefln("Unknown option: %s", arg);
return 1;
}
}
if ( args.length == 0 )
args = ["gtkd", "gtkdgl", "sv"];
if ( args.canFind("all") )
args = ["gtkd", "gtkdgl", "sv", "gstreamer", "vte"];
foreach ( arg; args )
{
switch ( arg )
{
case "gtkd":
build("src", "gtkd");
break;
case "gtkdgl":
build("srcgl", "gtkdgl");
break;
case "sv":
build("srcsv", "gtkdsv");
break;
case "gstreamer":
build("srcgstreamer", "gstreamerd");
break;
case "vte":
build("srcvte", "vted");
break;
default:
assert(false);
break;
}
}
return(0);
}
void build(string dir, string lib)
{
version(Win64)
{
std.file.write("build.rf", format("-m64 -c -lib %s %s -Isrc -of%s.lib %s", dcflags, ldflags, lib, dFiles(dir)));
executeShell("dmd @build.rf");
}
else
{
std.file.write("build.rf", format("-c %s -Isrc -of%s.obj %s", dcflags, lib, dFiles(dir)));
executeShell("dmd @build.rf");
executeShell(format("dmd -lib %s -of%s.lib %s.obj", ldflags, lib, lib));
std.file.remove(lib ~".obj");
}
std.file.remove("build.rf");
}
string dFiles(string sourceDir)
{
string files;
auto entries = dirEntries(sourceDir, SpanMode.breadth);
foreach ( DirEntry entry; entries )
{
if ( entry.isDir == false && entry.name.extension == ".d" )
{
files ~= entry.name ~ " ";
}
}
return files;
}