1 /**
2  * DigitalMars C++ installer
3  *
4  * License:
5  *   This Source Code Form is subject to the terms of
6  *   the Mozilla Public License, v. 2.0. If a copy of
7  *   the MPL was not distributed with this file, You
8  *   can obtain one at http://mozilla.org/MPL/2.0/.
9  *
10  * Authors:
11  *   Vladimir Panteleev <vladimir@thecybershadow.net>
12  */
13 
14 module ae.sys.install.dmc;
15 
16 version(Windows):
17 
18 import std.array;
19 import std.exception;
20 import std.file;
21 import std.path;
22 
23 import ae.sys.archive;
24 import ae.sys.file;
25 import ae.utils.meta.misc;
26 
27 public import ae.sys.install.common;
28 
29 class DMC : Installer
30 {
31 	@property override string name() { return "DigitalMars C++"; }
32 	@property override string subdirectory() { return "dm"; }
33 
34 	@property override string[] requiredExecutables() { return ["dmc", "link"]; }
35 	@property override string[] binPaths() { return ["bin"]; }
36 
37 	string dmcURL = "http://ftp.digitalmars.com/dmc.zip";
38 	string optlinkURL = "http://ftp.digitalmars.com/optlink.zip";
39 
40 	override void installImpl(string target)
41 	{
42 		auto dmcDir =
43 			dmcURL
44 			.I!save()
45 			.I!unpack();
46 		scope(success) removeRecurse(dmcDir);
47 
48 		enforce(buildPath(dmcDir, "dm", "bin", "dmc.exe").exists);
49 		rename(buildPath(dmcDir, "dm"), target);
50 
51 		// Get latest OPTLINK
52 
53 		auto optlinkDir =
54 			optlinkURL
55 			.I!save()
56 			.I!unpack();
57 		scope(success) rmdir(optlinkDir);
58 
59 		rename(buildPath(optlinkDir, "link.exe"), buildPath(target, "bin", "link.exe"));
60 	}
61 }
62 
63 alias dmcInstaller = singleton!DMC;