From 20eb98f837c6c822fa3842ee7679c8f0c9145255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=A1=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D1=88=D1=83=D0=BD?= Date: Sat, 28 Mar 2015 20:09:39 +0000 Subject: [PATCH] Patch rdmd to auto-detect available *dmd binary --- PKGBUILD | 5 ++++- autodetect.diff | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 autodetect.diff diff --git a/PKGBUILD b/PKGBUILD index 720be8e..bfdecc0 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -2,7 +2,7 @@ pkgname=('dtools') pkgver=2.067.0 -pkgrel=1 +pkgrel=2 pkgdesc="Ancilliary tools for the D programming language" license=("custom") groups=('dlang') @@ -17,11 +17,13 @@ source=( "git+http://github.com/D-Programming-Language/tools#tag=v$pkgver" "git+https://github.com/Dicebot/Arch-PKGBUILDs.git" "http://www.boost.org/LICENSE_1_0.txt" + "autodetect.diff" ) sha1sums=( 'SKIP' 'SKIP' '3cba29011be2b9d59f6204d6fa0a386b1b2dbd90' + '7fb5bd71d6c4e90c0ca49b292454e11169afdee8' ) build() @@ -30,6 +32,7 @@ build() DMD=ldmd cd $srcdir/tools + git apply $srcdir/autodetect.diff # rdmd is used to build others $DMD -od. -ofdtools-rdmd rdmd.d diff --git a/autodetect.diff b/autodetect.diff new file mode 100644 index 0000000..df01313 --- /dev/null +++ b/autodetect.diff @@ -0,0 +1,47 @@ +diff --git a/rdmd.d b/rdmd.d +index 5d66c9f..61fb86a 100644 +--- a/rdmd.d ++++ b/rdmd.d +@@ -51,7 +51,32 @@ else version (LDC) + else + static assert(false, "Unknown compiler"); + +-private string compiler = defaultCompiler; ++private string compiler; ++ ++void chooseCompiler(ref string compiler) ++{ ++ import std.stdio; ++ ++ // if compiler is set explicitly, don't interefer ++ // otherwise find one that exists in PATH ++ if (!compiler.length) ++ { ++ import std.process : executeShell; ++ auto compilers = [ defaultCompiler, "dmd", "ldmd2", "gdmd2", "ldmd", "gdmd" ]; ++ ++ foreach (candidate; compilers) ++ { ++ // dirty hack, no-arg dmd invocation will return 1 ++ if (executeShell(candidate ~ "| grep Usage").status == 0) ++ { ++ compiler = candidate; ++ return; ++ } ++ } ++ ++ throw new Exception("Couldn't find any D compiler"); ++ } ++} + + int main(string[] args) + { +@@ -141,6 +166,8 @@ int main(string[] args) + if (bailout) return 0; + if (dryRun) chatty = true; // dry-run implies chatty + ++ chooseCompiler(compiler); ++ + /* Only -of is supported because Make is very susceptible to file names, and + * it doesn't do a good job resolving them. One option would be to use + * std.path.buildNormalizedPath(), but some corner cases will break, so it