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;