Patch rdmd to auto-detect available *dmd binary
This commit is contained in:
parent
dcac85cdb6
commit
20eb98f837
5
PKGBUILD
5
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
|
||||
|
47
autodetect.diff
Normal file
47
autodetect.diff
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user