1 /** 2 * MSYS 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 <ae@cy.md> 12 */ 13 14 module ae.sys.install.msys; 15 16 import std.file; 17 import std.path; 18 import std..string : format; 19 20 import ae.utils.meta : singleton, I; 21 22 public import ae.sys.install.common; 23 24 /// Installs an MSYS component. 25 final class MSYSComponent : Installer 26 { 27 this(string componentName, string testFile, string url) { this.componentName = componentName; this.testFile = testFile; this.url = url; } /// 28 29 protected: 30 string componentName, testFile, url; 31 32 @property override string name() { return "%s (MSYS)".format(componentName); } 33 @property override string subdirectory() { return "msys"; } 34 @property override string[] binPaths() { return ["bin"]; } 35 36 override @property bool installedLocally() 37 { 38 return directory.buildPath(testFile).exists; 39 } 40 41 override void atomicInstallImpl() 42 { 43 windowsOnly(); 44 if (!directory.exists) 45 directory.mkdir(); 46 url 47 .I!save() 48 .I!unpack() 49 .atomicMoveInto(directory); 50 assert(installedLocally); 51 } 52 53 static this() 54 { 55 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.18-1/msysCORE-1.0.18-1-msys-1.0.18-bin.tar.lzma" ] = "36d52ca7066eb6ad0da68c6f31214416f4c9dcec"; 56 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/gettext/gettext-0.18.1.1-1/libintl-0.18.1.1-1-msys-1.0.17-dll-8.tar.lzma" ] = "4000b935a5bc30b4c757fde69d27716fa3c2c269"; 57 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/libiconv/libiconv-1.14-1/libiconv-1.14-1-msys-1.0.17-dll-2.tar.lzma" ] = "056d16bfb7a91c3e3b1acf8adb20edea6fceecdd"; 58 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/termcap/termcap-0.20050421_1-2/libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma" ] = "e4273ccfde8ecf3a7631446fb2b01971a24ff9f7"; 59 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/regex/regex-1.20090805-2/libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma" ] = "d95faa144cf06625b3932a8e84ed1a6ab6bbe644"; 60 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/coreutils/coreutils-5.97-3/coreutils-5.97-3-msys-1.0.13-bin.tar.lzma" ] = "54ac256a8f0c6a89f1b3c7758f3703b4e56382be"; 61 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/bash/bash-3.1.23-1/bash-3.1.23-1-msys-1.0.18-bin.tar.xz" ] = "b6ef3399b8d76b5fbbd0a88774ebc2a90e8af13a"; 62 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/make/make-3.81-3/make-3.81-3-msys-1.0.13-bin.tar.lzma" ] = "c7264eb13b05cf2e1a982a3c2619837b96203a27"; 63 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/grep/grep-2.5.4-2/grep-2.5.4-2-msys-1.0.13-bin.tar.lzma" ] = "69d03c4415c55b9617850a4991d0708fbe3788f6"; 64 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/sed/sed-4.2.1-2/sed-4.2.1-2-msys-1.0.13-bin.tar.lzma" ] = "ced60ab96ab3f713da0d0a570232f2a5f0ec5270"; 65 urlDigests["https://sourceforge.net/projects/mingw/files/MSYS/Base/diffutils/diffutils-2.8.7.20071206cvs-3/diffutils-2.8.7.20071206cvs-3-msys-1.0.13-bin.tar.lzma"] = "674d3e0be4c8ffe84290f48ed1dd8eb21bc3f805"; 66 } 67 } 68 69 /// Definitions for some MSYS components. 70 struct MSYS 71 { 72 alias msysCORE = singleton!(MSYSComponent, "msysCORE" , "bin/msys-1.0.dll" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.18-1/msysCORE-1.0.18-1-msys-1.0.18-bin.tar.lzma" ); /// 73 alias libintl = singleton!(MSYSComponent, "libintl" , "bin/msys-intl-8.dll" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/gettext/gettext-0.18.1.1-1/libintl-0.18.1.1-1-msys-1.0.17-dll-8.tar.lzma" ); /// 74 alias libiconv = singleton!(MSYSComponent, "libiconv" , "bin/msys-iconv-2.dll" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/libiconv/libiconv-1.14-1/libiconv-1.14-1-msys-1.0.17-dll-2.tar.lzma" ); /// 75 alias libtermcap = singleton!(MSYSComponent, "libtermcap", "bin/msys-termcap-0.dll", "https://sourceforge.net/projects/mingw/files/MSYS/Base/termcap/termcap-0.20050421_1-2/libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma" ); /// 76 alias libregex = singleton!(MSYSComponent, "libregex" , "bin/msys-regex-1.dll" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/regex/regex-1.20090805-2/libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma" ); /// 77 78 alias coreutils = singleton!(MSYSComponent, "coreutils" , "bin/true.exe" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/coreutils/coreutils-5.97-3/coreutils-5.97-3-msys-1.0.13-bin.tar.lzma" ); /// 79 alias bash = singleton!(MSYSComponent, "bash" , "bin/bash.exe" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/bash/bash-3.1.23-1/bash-3.1.23-1-msys-1.0.18-bin.tar.xz" ); /// 80 alias make = singleton!(MSYSComponent, "make" , "bin/make.exe" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/make/make-3.81-3/make-3.81-3-msys-1.0.13-bin.tar.lzma" ); /// 81 alias grep = singleton!(MSYSComponent, "grep" , "bin/grep.exe" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/grep/grep-2.5.4-2/grep-2.5.4-2-msys-1.0.13-bin.tar.lzma" ); /// 82 alias sed = singleton!(MSYSComponent, "sed" , "bin/sed.exe" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/sed/sed-4.2.1-2/sed-4.2.1-2-msys-1.0.13-bin.tar.lzma" ); /// 83 alias diffutils = singleton!(MSYSComponent, "diffutils" , "bin/diff.exe" , "https://sourceforge.net/projects/mingw/files/MSYS/Base/diffutils/diffutils-2.8.7.20071206cvs-3/diffutils-2.8.7.20071206cvs-3-msys-1.0.13-bin.tar.lzma" ); /// 84 }