forked from mirrors/nixpkgs
Merge pull request #32274 from ThomasMader/dlang
Improve dlang packages
This commit is contained in:
commit
c0d7a054cb
|
@ -1,167 +0,0 @@
|
|||
{ stdenv, fetchFromGitHub
|
||||
, makeWrapper, unzip, which
|
||||
, curl, tzdata
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dmd-${version}";
|
||||
# This is the last version of dmd which is buildable without a D compiler.
|
||||
# So we use this as a bootstrap version.
|
||||
# The DMD frontend has been ported to D in 2.069.0 but idgen was already
|
||||
# ported in 2.068.0.
|
||||
version = "2.067.1";
|
||||
|
||||
srcs = [
|
||||
(fetchFromGitHub {
|
||||
owner = "dlang";
|
||||
repo = "dmd";
|
||||
rev = "v${version}";
|
||||
sha256 = "0fm29lg8axfmzdaj0y6vg70lhwb5d9rv4aavnvdd15xjschinlcz";
|
||||
name = "dmd-v${version}-src";
|
||||
})
|
||||
(fetchFromGitHub {
|
||||
owner = "dlang";
|
||||
repo = "druntime";
|
||||
rev = "v${version}";
|
||||
sha256 = "1n2qfw9kmnql0fk2nxikispqs7vh85nhvyyr00fk227n9lgnqf02";
|
||||
name = "druntime-v${version}-src";
|
||||
})
|
||||
(fetchFromGitHub {
|
||||
owner = "dlang";
|
||||
repo = "phobos";
|
||||
rev = "v${version}";
|
||||
sha256 = "0fywgds9xvjcgnqxmpwr67p3wi2m535619pvj159cgwv5y0nr3p1";
|
||||
name = "phobos-v${version}-src";
|
||||
})
|
||||
];
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
postUnpack = ''
|
||||
mv dmd-v${version}-src dmd
|
||||
mv druntime-v${version}-src druntime
|
||||
mv phobos-v${version}-src phobos
|
||||
'';
|
||||
|
||||
# Compile with PIC to prevent colliding modules with binutils 2.28.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=17375
|
||||
usePIC = "-fPIC";
|
||||
ROOT_HOME_DIR = "$(echo ~root)";
|
||||
|
||||
postPatch = ''
|
||||
# Ugly hack so the dlopen call has a chance to succeed.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=15391
|
||||
substituteInPlace phobos/std/net/curl.d \
|
||||
--replace libcurl.so ${curl.out}/lib/libcurl.so
|
||||
|
||||
# Ugly hack to fix the hardcoded path to zoneinfo in the source file.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=15391
|
||||
substituteInPlace phobos/std/datetime.d \
|
||||
--replace /usr/share/zoneinfo/ ${tzdata}/share/zoneinfo/
|
||||
|
||||
substituteInPlace druntime/test/shared/Makefile \
|
||||
--replace "DFLAGS:=" "DFLAGS:=${usePIC} "
|
||||
|
||||
# phobos uses curl, so we need to patch the path to the lib.
|
||||
substituteInPlace phobos/posix.mak \
|
||||
--replace "-soname=libcurl.so.4" "-soname=${curl.out}/lib/libcurl.so.4"
|
||||
|
||||
# Use proper C++ compiler
|
||||
substituteInPlace dmd/src/posix.mak \
|
||||
--replace g++ $CXX
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||
substituteInPlace dmd/src/root/port.c \
|
||||
--replace "#include <bits/mathdef.h>" "#include <complex.h>"
|
||||
|
||||
# See https://github.com/NixOS/nixpkgs/issues/29443
|
||||
substituteInPlace phobos/std/path.d \
|
||||
--replace "\"/root" "\"${ROOT_HOME_DIR}"
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
substituteInPlace dmd/src/posix.mak \
|
||||
--replace MACOSX_DEPLOYMENT_TARGET MACOSX_DEPLOYMENT_TARGET_
|
||||
|
||||
# Was not able to compile on darwin due to "__inline_isnanl"
|
||||
# being undefined.
|
||||
substituteInPlace dmd/src/root/port.c --replace __inline_isnanl __inline_isnan
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ makeWrapper unzip which ];
|
||||
buildInputs = [ curl tzdata ];
|
||||
|
||||
# Buid and install are based on http://wiki.dlang.org/Building_DMD
|
||||
buildPhase = ''
|
||||
cd dmd
|
||||
make -f posix.mak INSTALL_DIR=$out
|
||||
export DMD=$PWD/src/dmd
|
||||
cd ../druntime
|
||||
make -f posix.mak PIC=${usePIC} INSTALL_DIR=$out DMD=$DMD
|
||||
cd ../phobos
|
||||
make -f posix.mak PIC=${usePIC} INSTALL_DIR=$out DMD=$DMD
|
||||
cd ..
|
||||
'';
|
||||
|
||||
# disable check phase because some tests are not working with sandboxing
|
||||
doCheck = false;
|
||||
|
||||
checkPhase = ''
|
||||
cd dmd
|
||||
export DMD=$PWD/src/dmd
|
||||
cd ../druntime
|
||||
make -f posix.mak unittest PIC=${usePIC} DMD=$DMD BUILD=release
|
||||
cd ../phobos
|
||||
make -f posix.mak unittest PIC=${usePIC} DMD=$DMD BUILD=release
|
||||
cd ..
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
cd dmd
|
||||
mkdir $out
|
||||
mkdir $out/bin
|
||||
cp $PWD/src/dmd $out/bin
|
||||
mkdir -p $out/share/man/man1
|
||||
mkdir -p $out/share/man/man5
|
||||
cp -r docs/man/man1/* $out/share/man/man1/
|
||||
cp -r docs/man/man5/* $out/share/man/man5/
|
||||
|
||||
cd ../druntime
|
||||
mkdir $out/include
|
||||
mkdir $out/include/d2
|
||||
cp -r import/* $out/include/d2
|
||||
|
||||
cd ../phobos
|
||||
mkdir $out/lib
|
||||
${
|
||||
let bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
|
||||
osname = if stdenv.hostPlatform.isDarwin then "osx" else stdenv.hostPlatform.parsed.kernel.name;
|
||||
extension = if stdenv.hostPlatform.isDarwin then "a" else "{a,so}"; in
|
||||
"cp generated/${osname}/release/${bits}/libphobos2.${extension} $out/lib"
|
||||
}
|
||||
|
||||
cp -r std $out/include/d2
|
||||
cp -r etc $out/include/d2
|
||||
|
||||
wrapProgram $out/bin/dmd \
|
||||
--prefix PATH ":" "${stdenv.cc}/bin" \
|
||||
--set-default CC "$CC"
|
||||
|
||||
cd $out/bin
|
||||
tee dmd.conf << EOF
|
||||
[Environment]
|
||||
DFLAGS=-I$out/include/d2 -L-L$out/lib ${stdenv.lib.optionalString (!stdenv.cc.isClang) "-L--export-dynamic"} -fPIC
|
||||
EOF
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Official reference compiler for the D language";
|
||||
homepage = http://dlang.org/;
|
||||
# Everything is now Boost licensed, even the backend.
|
||||
# https://github.com/dlang/dmd/pull/6680
|
||||
license = licenses.boost;
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,43 +1,68 @@
|
|||
{ stdenv, fetchFromGitHub
|
||||
{ stdenv, fetchFromGitHub, overrideCC, gcc5
|
||||
, makeWrapper, unzip, which
|
||||
, curl, tzdata, gdb, darwin
|
||||
# Versions 2.070.2 and up require a working dmd compiler to build:
|
||||
, bootstrapDmd }:
|
||||
, callPackage
|
||||
, bootstrapVersion ? false
|
||||
, version ? "2.075.1"
|
||||
, dmdSha256 ? "0kq6r8rcghvzk5jcphg89l85rg734s29bssd2rcw3fygx0k9a9k5"
|
||||
, druntimeSha256 ? "0idn2v1lmp7hl637g3i7pdfj9mjk4sclkz4cm77nl8873k2fhk8j"
|
||||
, phobosSha256 ? "1a7q5fd15yspgs5plxgx54jyrcwgzlyw3rahmz04jd2s5h56dj04"
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dmd-${version}";
|
||||
version = "2.075.1";
|
||||
let
|
||||
|
||||
bootstrapDmd = if !bootstrapVersion then
|
||||
# Versions 2.070.2 and up require a working dmd compiler to build so we just
|
||||
# use the last dmd without any D code to bootstrap the actual build.
|
||||
callPackage ./default.nix {
|
||||
stdenv = if stdenv.hostPlatform.isDarwin then
|
||||
stdenv
|
||||
else
|
||||
# Doesn't build with gcc6 on linux
|
||||
overrideCC stdenv gcc5;
|
||||
bootstrapVersion = true;
|
||||
version = "2.067.1";
|
||||
dmdSha256 = "0fm29lg8axfmzdaj0y6vg70lhwb5d9rv4aavnvdd15xjschinlcz";
|
||||
druntimeSha256 = "1n2qfw9kmnql0fk2nxikispqs7vh85nhvyyr00fk227n9lgnqf02";
|
||||
phobosSha256 = "0fywgds9xvjcgnqxmpwr67p3wi2m535619pvj159cgwv5y0nr3p1";
|
||||
}
|
||||
else
|
||||
"";
|
||||
|
||||
dmdBuild = stdenv.mkDerivation rec {
|
||||
name = "dmdBuild-${version}";
|
||||
inherit version;
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
srcs = [
|
||||
(fetchFromGitHub {
|
||||
owner = "dlang";
|
||||
repo = "dmd";
|
||||
rev = "v${version}";
|
||||
sha256 = "0kq6r8rcghvzk5jcphg89l85rg734s29bssd2rcw3fygx0k9a9k5";
|
||||
name = "dmd-v${version}-src";
|
||||
sha256 = dmdSha256;
|
||||
name = "dmd";
|
||||
})
|
||||
(fetchFromGitHub {
|
||||
owner = "dlang";
|
||||
repo = "druntime";
|
||||
rev = "v${version}";
|
||||
sha256 = "0idn2v1lmp7hl637g3i7pdfj9mjk4sclkz4cm77nl8873k2fhk8j";
|
||||
name = "druntime-v${version}-src";
|
||||
sha256 = druntimeSha256;
|
||||
name = "druntime";
|
||||
})
|
||||
(fetchFromGitHub {
|
||||
owner = "dlang";
|
||||
repo = "phobos";
|
||||
rev = "v${version}";
|
||||
sha256 = "1a7q5fd15yspgs5plxgx54jyrcwgzlyw3rahmz04jd2s5h56dj04";
|
||||
name = "phobos-v${version}-src";
|
||||
sha256 = phobosSha256;
|
||||
name = "phobos";
|
||||
})
|
||||
];
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
postUnpack = ''
|
||||
mv dmd-v${version}-src dmd
|
||||
mv druntime-v${version}-src druntime
|
||||
mv phobos-v${version}-src phobos
|
||||
patchShebangs .
|
||||
|
||||
# Remove cppa test for now because it doesn't work.
|
||||
rm dmd/test/runnable/cppa.d
|
||||
|
@ -47,33 +72,86 @@ stdenv.mkDerivation rec {
|
|||
# Compile with PIC to prevent colliding modules with binutils 2.28.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=17375
|
||||
usePIC = "-fPIC";
|
||||
ROOT_HOME_DIR = "$(echo ~root)";
|
||||
|
||||
datetimePath = if bootstrapVersion then
|
||||
"phobos/std/datetime.d"
|
||||
else
|
||||
"phobos/std/datetime/timezone.d";
|
||||
|
||||
phobosPatches = ''
|
||||
substituteInPlace ${datetimePath} \
|
||||
--replace "import core.time;" "import core.time;import std.path;"
|
||||
|
||||
substituteInPlace ${datetimePath} \
|
||||
--replace "tzName == \"leapseconds\"" "baseName(tzName) == \"leapseconds\""
|
||||
|
||||
# Ugly hack to fix the hardcoded path to zoneinfo in the source file.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=15391
|
||||
substituteInPlace ${datetimePath} \
|
||||
--replace /usr/share/zoneinfo/ ${tzdata}/share/zoneinfo/
|
||||
|
||||
postPatch = ''
|
||||
# Ugly hack so the dlopen call has a chance to succeed.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=15391
|
||||
substituteInPlace phobos/std/net/curl.d \
|
||||
--replace libcurl.so ${curl.out}/lib/libcurl.so
|
||||
|
||||
# Ugly hack to fix the hardcoded path to zoneinfo in the source file.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=15391
|
||||
substituteInPlace phobos/std/datetime/timezone.d \
|
||||
--replace /usr/share/zoneinfo/ ${tzdata}/share/zoneinfo/
|
||||
|
||||
substituteInPlace druntime/test/common.mak \
|
||||
--replace "DFLAGS:=" "DFLAGS:=${usePIC} "
|
||||
|
||||
# phobos uses curl, so we need to patch the path to the lib.
|
||||
substituteInPlace phobos/posix.mak \
|
||||
--replace "-soname=libcurl.so.4" "-soname=${curl.out}/lib/libcurl.so.4"
|
||||
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (bootstrapVersion) ''
|
||||
substituteInPlace ${datetimePath} \
|
||||
--replace "import std.traits;" "import std.traits;import std.path;"
|
||||
|
||||
substituteInPlace ${datetimePath} \
|
||||
--replace "tzName == \"+VERSION\"" "baseName(tzName) == \"leapseconds\" || tzName == \"+VERSION\""
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||
# See https://github.com/NixOS/nixpkgs/issues/29443
|
||||
substituteInPlace phobos/std/path.d \
|
||||
--replace "\"/root" "\"${ROOT_HOME_DIR}"
|
||||
'';
|
||||
|
||||
dmdPath = if bootstrapVersion then
|
||||
"dmd/src"
|
||||
else
|
||||
"dmd";
|
||||
|
||||
postPatch = ''
|
||||
# Use proper C++ compiler
|
||||
substituteInPlace dmd/posix.mak \
|
||||
substituteInPlace ${dmdPath}/posix.mak \
|
||||
--replace g++ $CXX
|
||||
|
||||
# TODO
|
||||
substituteInPlace druntime/src/core/memory.d \
|
||||
--replace "assert(z is null);" "//assert(z is null);"
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
substituteInPlace druntime/test/common.mak \
|
||||
--replace "DFLAGS:=" "DFLAGS:=${usePIC} "
|
||||
''
|
||||
|
||||
+ phobosPatches
|
||||
|
||||
+ stdenv.lib.optionalString (stdenv.hostPlatform.isLinux && bootstrapVersion) ''
|
||||
substituteInPlace ${dmdPath}/root/port.c \
|
||||
--replace "#include <bits/mathdef.h>" "#include <complex.h>"
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
substituteInPlace dmd/posix.mak \
|
||||
substituteInPlace ${dmdPath}/posix.mak \
|
||||
--replace MACOSX_DEPLOYMENT_TARGET MACOSX_DEPLOYMENT_TARGET_
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (stdenv.hostPlatform.isDarwin && bootstrapVersion) ''
|
||||
# Was not able to compile on darwin due to "__inline_isnanl"
|
||||
# being undefined.
|
||||
substituteInPlace ${dmdPath}/root/port.c --replace __inline_isnanl __inline_isnan
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ bootstrapDmd makeWrapper unzip which gdb ]
|
||||
|
@ -84,49 +162,45 @@ stdenv.mkDerivation rec {
|
|||
|
||||
buildInputs = [ curl tzdata ];
|
||||
|
||||
bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
|
||||
osname = if stdenv.hostPlatform.isDarwin then
|
||||
"osx"
|
||||
else
|
||||
stdenv.hostPlatform.parsed.kernel.name;
|
||||
top = "$(echo $NIX_BUILD_TOP)";
|
||||
pathToDmd = if bootstrapVersion then
|
||||
"${top}/dmd/src/dmd"
|
||||
else
|
||||
"${top}/dmd/generated/${osname}/release/${bits}/dmd";
|
||||
|
||||
# Buid and install are based on http://wiki.dlang.org/Building_DMD
|
||||
buildPhase = ''
|
||||
cd dmd
|
||||
make -j$NIX_BUILD_CORES -f posix.mak INSTALL_DIR=$out
|
||||
${
|
||||
let bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
|
||||
osname = if stdenv.hostPlatform.isDarwin then "osx" else stdenv.hostPlatform.parsed.kernel.name; in
|
||||
"export DMD=$PWD/generated/${osname}/release/${bits}/dmd"
|
||||
}
|
||||
cd ../druntime
|
||||
make -j$NIX_BUILD_CORES -f posix.mak PIC=${usePIC} INSTALL_DIR=$out DMD=$DMD
|
||||
make -j$NIX_BUILD_CORES -f posix.mak PIC=1 INSTALL_DIR=$out DMD=${pathToDmd}
|
||||
cd ../phobos
|
||||
make -j$NIX_BUILD_CORES -f posix.mak PIC=${usePIC} INSTALL_DIR=$out DMD=$DMD
|
||||
make -j$NIX_BUILD_CORES -f posix.mak PIC=1 INSTALL_DIR=$out DMD=${pathToDmd}
|
||||
cd ..
|
||||
'';
|
||||
|
||||
# disable check phase because some tests are not working with sandboxing
|
||||
doCheck = false;
|
||||
doCheck = !bootstrapVersion;
|
||||
|
||||
checkPhase = ''
|
||||
cd dmd
|
||||
${
|
||||
let bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
|
||||
osname = if stdenv.hostPlatform.isDarwin then "osx" else stdenv.hostPlatform.parsed.kernel.name; in
|
||||
"export DMD=$PWD/generated/${osname}/release/${bits}/dmd"
|
||||
}
|
||||
make -j$NIX_BUILD_CORES -C test -f Makefile PIC=${usePIC} DMD=$DMD BUILD=release SHARED=0
|
||||
make -j$NIX_BUILD_CORES -C test -f Makefile PIC=1 DMD=${pathToDmd} BUILD=release SHARED=0 SHELL=$SHELL
|
||||
cd ../druntime
|
||||
make -j$NIX_BUILD_CORES -f posix.mak unittest PIC=${usePIC} DMD=$DMD BUILD=release
|
||||
cd ../phobos
|
||||
make -j$NIX_BUILD_CORES -f posix.mak unittest PIC=${usePIC} DMD=$DMD BUILD=release
|
||||
make -j$NIX_BUILD_CORES -f posix.mak unittest PIC=1 DMD=${pathToDmd} BUILD=release
|
||||
cd ..
|
||||
'';
|
||||
|
||||
extension = if stdenv.hostPlatform.isDarwin then "a" else "{a,so}";
|
||||
|
||||
installPhase = ''
|
||||
cd dmd
|
||||
mkdir $out
|
||||
mkdir $out/bin
|
||||
${
|
||||
let bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
|
||||
osname = if stdenv.hostPlatform.isDarwin then "osx" else stdenv.hostPlatform.parsed.kernel.name; in
|
||||
"cp $PWD/generated/${osname}/release/${bits}/dmd $out/bin"
|
||||
}
|
||||
cp ${pathToDmd} $out/bin
|
||||
|
||||
mkdir -p $out/share/man/man1
|
||||
mkdir -p $out/share/man/man5
|
||||
|
@ -140,12 +214,7 @@ stdenv.mkDerivation rec {
|
|||
|
||||
cd ../phobos
|
||||
mkdir $out/lib
|
||||
${
|
||||
let bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits;
|
||||
osname = if stdenv.hostPlatform.isDarwin then "osx" else stdenv.hostPlatform.parsed.kernel.name;
|
||||
extension = if stdenv.hostPlatform.isDarwin then "a" else "{a,so}"; in
|
||||
"cp generated/${osname}/release/${bits}/libphobos2.${extension} $out/lib"
|
||||
}
|
||||
cp generated/${osname}/release/${bits}/libphobos2.${extension} $out/lib
|
||||
|
||||
cp -r std $out/include/d2
|
||||
cp -r etc $out/include/d2
|
||||
|
@ -168,6 +237,51 @@ stdenv.mkDerivation rec {
|
|||
# https://github.com/dlang/dmd/pull/6680
|
||||
license = licenses.boost;
|
||||
maintainers = with maintainers; [ ThomasMader ];
|
||||
platforms = platforms.unix;
|
||||
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Need to test Phobos in a fixed-output derivation, otherwise the
|
||||
# network stuff in Phobos would fail if sandbox mode is enabled.
|
||||
phobosUnittests = stdenv.mkDerivation rec {
|
||||
name = "phobosUnittests-${version}";
|
||||
version = dmdBuild.version;
|
||||
|
||||
enableParallelBuilding = dmdBuild.enableParallelBuilding;
|
||||
preferLocalBuild = true;
|
||||
inputString = dmdBuild.outPath;
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = builtins.hashString "sha256" inputString;
|
||||
|
||||
srcs = dmdBuild.srcs;
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
postPatch = dmdBuild.phobosPatches;
|
||||
|
||||
nativeBuildInputs = dmdBuild.nativeBuildInputs;
|
||||
buildInputs = dmdBuild.buildInputs;
|
||||
|
||||
buildPhase = ''
|
||||
cd phobos
|
||||
make -j$NIX_BUILD_CORES -f posix.mak unittest PIC=1 DMD=${dmdBuild}/bin/dmd BUILD=release
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
echo -n $inputString > $out
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
inherit phobosUnittests;
|
||||
name = "dmd-${version}";
|
||||
phases = "installPhase";
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r --symbolic-link ${dmdBuild}/* $out/
|
||||
'';
|
||||
}
|
||||
|
||||
|
|
|
@ -1,95 +1,172 @@
|
|||
{ stdenv, fetchFromGitHub, cmake, llvm, dmd, curl, tzdata, python,
|
||||
lit, gdb, unzip, darwin }:
|
||||
{ stdenv, fetchgit, fetchurl, cmake, llvm, curl, tzdata
|
||||
, python, libconfig, lit, gdb, unzip, darwin, bash
|
||||
, callPackage
|
||||
, bootstrapVersion ? false
|
||||
, version ? "1.5.0"
|
||||
, ldcSha256 ? "1150sgns03vplni2wd4afk3rgw3rap8rsiipspw0rzxgki5rlr83"
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "ldc-${version}";
|
||||
version = "1.3.0";
|
||||
let
|
||||
|
||||
srcs = [
|
||||
(fetchFromGitHub {
|
||||
owner = "ldc-developers";
|
||||
repo = "ldc";
|
||||
rev = "v${version}";
|
||||
sha256 = "1ac3j4cwwgjpayhijxx4d6478bc3iqksjxkd7xp7byx7k8w1ppdl";
|
||||
name = "ldc-v${version}-src";
|
||||
})
|
||||
(fetchFromGitHub {
|
||||
owner = "ldc-developers";
|
||||
repo = "druntime";
|
||||
rev = "ldc-v${version}";
|
||||
sha256 = "1m13370wnj3sizqk3sdpzi9am5d24srf27d613qblhqa9n8vwz30";
|
||||
name = "druntime-ldc-v${version}-src";
|
||||
})
|
||||
(fetchFromGitHub {
|
||||
owner = "ldc-developers";
|
||||
repo = "phobos";
|
||||
rev = "ldc-v${version}";
|
||||
sha256 = "0fhcdfi7a00plwj27ysfyv783nhk0kspq7hawf6vbsl3s1nyvn8g";
|
||||
name = "phobos-ldc-v${version}-src";
|
||||
})
|
||||
(fetchFromGitHub {
|
||||
owner = "ldc-developers";
|
||||
repo = "dmd-testsuite";
|
||||
rev = "ldc-v${version}";
|
||||
sha256 = "0dmdkp220gqhxjrmrjfkf0vsvylwfaj70hswavq4q3v4dg17pzmj";
|
||||
name = "dmd-testsuite-ldc-v${version}-src";
|
||||
})
|
||||
];
|
||||
bootstrapLdc = if !bootstrapVersion then
|
||||
# LDC 0.17.x is the last version which doesn't need a working D compiler to
|
||||
# build so we use that version to bootstrap the actual build.
|
||||
callPackage ./default.nix {
|
||||
bootstrapVersion = true;
|
||||
version = "0.17.5";
|
||||
ldcSha256 = "0200r5y8hs5yv2cx24csgyh00dlg18877b9cfblixypr6nhl19bs";
|
||||
}
|
||||
else
|
||||
"";
|
||||
|
||||
ldcBuild = stdenv.mkDerivation rec {
|
||||
name = "ldcBuild-${version}";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz";
|
||||
sha256 = ldcSha256;
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
postUnpack = ''
|
||||
mv ldc-v${version}-src/* .
|
||||
cd ldc-${version}-src/
|
||||
|
||||
mv druntime-ldc-v${version}-src/* runtime/druntime
|
||||
|
||||
mv phobos-ldc-v${version}-src/* runtime/phobos
|
||||
|
||||
mv dmd-testsuite-ldc-v${version}-src/* tests/d2/dmd-testsuite
|
||||
patchShebangs .
|
||||
|
||||
# Remove cppa test for now because it doesn't work.
|
||||
rm tests/d2/dmd-testsuite/runnable/cppa.d
|
||||
rm tests/d2/dmd-testsuite/runnable/extra-files/cppb.cpp
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (bootstrapVersion) ''
|
||||
# ... runnable/variadic.d ()
|
||||
#Test failed. The logged output:
|
||||
#/tmp/nix-build-ldcBuild-0.17.5.drv-0/ldc-0.17.5-src/build/bin/ldmd2 -conf= -m64 -Irunnable -od/tmp/nix-build-ldcBuild-0.17.5.drv-0/ldc-0.17.5-src/build/dmd-testsuite/runnable -of/tmp/nix-build-ldcBuild-0.17.5.drv-0/ldc-0.17.5-src/build/dmd-testsuite/runnable/variadic_0 runnable/variadic.d
|
||||
#Error: integer constant expression expected instead of <cant>
|
||||
#Error: integer constant expression expected instead of <cant>
|
||||
#Error: integer constant expression expected instead of <cant>
|
||||
#Error: integer constant expression expected instead of <cant>
|
||||
#Error: integer constant expression expected instead of <cant>
|
||||
#runnable/variadic.d(84): Error: template instance variadic.Foo3!(int, int, int) error instantiating
|
||||
#
|
||||
#
|
||||
#==============================
|
||||
#Test failed: expected rc == 0, exited with rc == 1
|
||||
rm tests/d2/dmd-testsuite/runnable/variadic.d
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
# https://github.com/NixOS/nixpkgs/issues/29611
|
||||
rm tests/sanitizers/asan_*
|
||||
'';
|
||||
|
||||
ROOT_HOME_DIR = "$(echo ~root)";
|
||||
|
||||
datetimePath = if bootstrapVersion then
|
||||
"phobos/std/datetime.d"
|
||||
else
|
||||
"phobos/std/datetime/timezone.d";
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace cmake/Modules/FindLLVM.cmake \
|
||||
--replace "llvm_set(LIBRARY_DIRS" "#llvm_set(LIBRARY_DIRS"
|
||||
|
||||
substituteInPlace runtime/${datetimePath} \
|
||||
--replace "import core.time;" "import core.time;import std.path;"
|
||||
|
||||
substituteInPlace runtime/${datetimePath} \
|
||||
--replace "tzName == \"leapseconds\"" "baseName(tzName) == \"leapseconds\""
|
||||
|
||||
substituteInPlace runtime/phobos/std/net/curl.d \
|
||||
--replace libcurl.so ${curl.out}/lib/libcurl.so
|
||||
|
||||
# Ugly hack to fix the hardcoded path to zoneinfo in the source file.
|
||||
# https://issues.dlang.org/show_bug.cgi?id=15391
|
||||
substituteInPlace runtime/phobos/std/datetime.d \
|
||||
substituteInPlace runtime/${datetimePath} \
|
||||
--replace /usr/share/zoneinfo/ ${tzdata}/share/zoneinfo/
|
||||
|
||||
substituteInPlace tests/d2/dmd-testsuite/Makefile \
|
||||
--replace "SHELL=/bin/bash" "SHELL=${bash}/bin/bash"
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||
substituteInPlace driver/tool.cpp \
|
||||
+ stdenv.lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||
# See https://github.com/NixOS/nixpkgs/issues/29443
|
||||
substituteInPlace runtime/phobos/std/path.d \
|
||||
--replace "\"/root" "\"${ROOT_HOME_DIR}"
|
||||
|
||||
# TODO
|
||||
substituteInPlace runtime/druntime/src/core/memory.d \
|
||||
--replace "assert(z is null);" "//assert(z is null);"
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (bootstrapVersion && stdenv.hostPlatform.isDarwin) ''
|
||||
# https://github.com/ldc-developers/ldc/pull/2306
|
||||
# Can be removed on bootstrap version > 0.17.5
|
||||
substituteInPlace gen/programs.cpp \
|
||||
--replace "gcc" "clang"
|
||||
|
||||
# Was not able to compile on darwin due to "__inline_isnanl"
|
||||
# being undefined.
|
||||
substituteInPlace dmd2/root/port.c --replace __inline_isnanl __inline_isnan
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (stdenv.hostPlatform.isLinux && bootstrapVersion) ''
|
||||
substituteInPlace dmd2/root/port.c \
|
||||
--replace "#include <bits/mathdef.h>" "#include <complex.h>"
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (bootstrapVersion) ''
|
||||
substituteInPlace runtime/${datetimePath} \
|
||||
--replace "import std.traits;" "import std.traits;import std.path;"
|
||||
|
||||
substituteInPlace runtime/${datetimePath} \
|
||||
--replace "tzName == \"+VERSION\"" "baseName(tzName) == \"leapseconds\" || tzName == \"+VERSION\""
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ cmake llvm dmd python lit gdb unzip ]
|
||||
nativeBuildInputs = [ cmake llvm bootstrapLdc python lit gdb unzip ]
|
||||
|
||||
++ stdenv.lib.optional (bootstrapVersion) [
|
||||
libconfig
|
||||
]
|
||||
|
||||
++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
|
||||
Foundation
|
||||
]);
|
||||
|
||||
|
||||
buildInputs = [ curl tzdata stdenv.cc ];
|
||||
|
||||
preConfigure = ''
|
||||
cmakeFlagsArray=("-DINCLUDE_INSTALL_DIR=$out/include/dlang/ldc")
|
||||
cmakeFlagsArray=("-DINCLUDE_INSTALL_DIR=$out/include/dlang/ldc"
|
||||
"-DCMAKE_BUILD_TYPE=Release"
|
||||
"-DCMAKE_SKIP_RPATH=ON"
|
||||
"-DBUILD_SHARED_LIBS=OFF"
|
||||
"-DLDC_WITH_LLD=OFF"
|
||||
# Xcode 9.0.1 fixes that bug according to ldc release notes
|
||||
"-DRT_ARCHIVE_WITH_LDC=OFF"
|
||||
"-DLLVM_LIBRARY_DIRS=${llvm}/lib"
|
||||
)
|
||||
'';
|
||||
|
||||
|
||||
postConfigure = ''
|
||||
export DMD=$PWD/bin/ldc2
|
||||
export DMD=$PWD/bin/ldmd2
|
||||
'';
|
||||
|
||||
makeFlags = [ "DMD=$DMD" ];
|
||||
|
||||
# disable check phase because some tests are not working with sandboxing
|
||||
doCheck = false;
|
||||
doCheck = true;
|
||||
|
||||
checkPhase = ''
|
||||
ctest -j $NIX_BUILD_CORES -V DMD=$DMD
|
||||
# Build and run LDC D unittests.
|
||||
ctest --output-on-failure -R "ldc2-unittest"
|
||||
# Run LIT testsuite.
|
||||
ctest -V -R "lit-tests"
|
||||
# Run DMD testsuite.
|
||||
DMD_TESTSUITE_MAKE_ARGS=-j$NIX_BUILD_CORES ctest -V -R "dmd-testsuite"
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
@ -98,6 +175,84 @@ stdenv.mkDerivation rec {
|
|||
# from https://github.com/ldc-developers/ldc/blob/master/LICENSE
|
||||
license = with licenses; [ bsd3 boost mit ncsa gpl2Plus ];
|
||||
maintainers = with maintainers; [ ThomasMader ];
|
||||
platforms = platforms.unix;
|
||||
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Need to test Phobos in a fixed-output derivation, otherwise the
|
||||
# network stuff in Phobos would fail if sandbox mode is enabled.
|
||||
ldcUnittests = stdenv.mkDerivation rec {
|
||||
name = "ldcUnittests-${version}";
|
||||
|
||||
enableParallelBuilding = ldcBuild.enableParallelBuilding;
|
||||
preferLocalBuild = true;
|
||||
inputString = ldcBuild.outPath;
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = builtins.hashString "sha256" inputString;
|
||||
|
||||
src = ldcBuild.src;
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
postUnpack = ldcBuild.postUnpack;
|
||||
|
||||
postPatch = ldcBuild.postPatch;
|
||||
|
||||
nativeBuildInputs = ldcBuild.nativeBuildInputs
|
||||
|
||||
++ [
|
||||
ldcBuild
|
||||
];
|
||||
|
||||
buildInputs = ldcBuild.buildInputs;
|
||||
|
||||
preConfigure = ''
|
||||
cmakeFlagsArray=( "-DINCLUDE_INSTALL_DIR=$out/include/dlang/ldc"
|
||||
"-DCMAKE_BUILD_TYPE=Release"
|
||||
"-DCMAKE_SKIP_RPATH=ON"
|
||||
"-DBUILD_SHARED_LIBS=OFF"
|
||||
"-DLDC_WITH_LLD=OFF"
|
||||
# Xcode 9.0.1 fixes that bug according to ldc release notes
|
||||
"-DRT_ARCHIVE_WITH_LDC=OFF"
|
||||
"-DLLVM_LIBRARY_DIRS=${llvm}/lib"
|
||||
"-DD_COMPILER=${ldcBuild}/bin/ldmd2"
|
||||
)
|
||||
'';
|
||||
|
||||
postConfigure = ldcBuild.postConfigure;
|
||||
|
||||
makeFlags = ldcBuild.makeFlags;
|
||||
|
||||
buildCmd = if bootstrapVersion then
|
||||
"ctest -V -R \"build-druntime-ldc-unittest|build-phobos2-ldc-unittest\""
|
||||
else
|
||||
"make -j$NIX_BUILD_CORES DMD=${ldcBuild}/bin/ldc2 druntime-test-runner druntime-test-runner-debug phobos2-test-runner phobos2-test-runner-debug";
|
||||
|
||||
testCmd = if bootstrapVersion then
|
||||
"ctest -j$NIX_BUILD_CORES --output-on-failure -E \"dmd-testsuite|lit-tests|ldc2-unittest|llvm-ir-testsuite\""
|
||||
else
|
||||
"ctest -j$NIX_BUILD_CORES --output-on-failure -E \"dmd-testsuite|lit-tests|ldc2-unittest\"";
|
||||
|
||||
buildPhase = ''
|
||||
${buildCmd}
|
||||
${testCmd}
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
echo -n $inputString > $out
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
inherit ldcUnittests;
|
||||
name = "ldc-${version}";
|
||||
phases = "installPhase";
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r --symbolic-link ${ldcBuild}/* $out/
|
||||
'';
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
{ stdenv, fetchFromGitHub, curl, dmd, libevent, rsync }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dub-${version}";
|
||||
version = "1.5.0";
|
||||
let
|
||||
|
||||
dubBuild = stdenv.mkDerivation rec {
|
||||
name = "dubBuild-${version}";
|
||||
version = "1.6.0";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dlang";
|
||||
repo = "dub";
|
||||
rev = "v${version}";
|
||||
sha256 = "0kmirx4ijhzirjwdqmnwqhngg38zdaydpvny2p0yj3afqgkj6vq5";
|
||||
sha256 = "1xjr5pp263lbcd4harxy1ybh7q0kzj9iyy63ji6pn66fizrgm7zk";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -16,19 +20,7 @@ stdenv.mkDerivation rec {
|
|||
substituteInPlace build.sh \
|
||||
--replace source/dub/version_.d /dev/null
|
||||
|
||||
substituteInPlace build.sh \
|
||||
--replace MACOSX_DEPLOYMENT_TARGET MACOSX_DEPLOYMENT_TARGET_
|
||||
|
||||
patchShebangs build.sh
|
||||
patchShebangs test
|
||||
|
||||
# Remove unittest which is not working for now (upstream already fixed: https://github.com/dlang/dub/issues/1224)
|
||||
rm test/interactive-remove.sh
|
||||
|
||||
# Fix test as long as there is no upstream solution. (see https://github.com/dlang/dub/pull/1227)
|
||||
substituteInPlace test/issue884-init-defer-file-creation.sh \
|
||||
--replace "< /dev/stdin" "<(while :; do sleep 1; done)" \
|
||||
--replace "sleep 1" ""
|
||||
patchShebangs .
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ dmd libevent rsync ];
|
||||
|
@ -39,15 +31,6 @@ stdenv.mkDerivation rec {
|
|||
./build.sh
|
||||
'';
|
||||
|
||||
doCheck = false;
|
||||
|
||||
checkPhase = ''
|
||||
export DUB=$PWD/bin/dub
|
||||
export DC=${dmd.out}/bin/dmd
|
||||
export HOME=$TMP
|
||||
./test/run-unittest.sh
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
mkdir $out/bin
|
||||
|
@ -59,7 +42,55 @@ stdenv.mkDerivation rec {
|
|||
homepage = http://code.dlang.org/;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ ThomasMader ];
|
||||
platforms = platforms.unix;
|
||||
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Need to test in a fixed-output derivation, otherwise the
|
||||
# network tests would fail if sandbox mode is enabled.
|
||||
dubUnittests = stdenv.mkDerivation rec {
|
||||
name = "dubUnittests-${version}";
|
||||
version = dubBuild.version;
|
||||
|
||||
enableParallelBuilding = dubBuild.enableParallelBuilding;
|
||||
preferLocalBuild = true;
|
||||
inputString = dubBuild.outPath;
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = builtins.hashString "sha256" inputString;
|
||||
|
||||
src = dubBuild.src;
|
||||
|
||||
postPatch = dubBuild.postPatch;
|
||||
|
||||
nativeBuildInputs = dubBuild.nativeBuildInputs;
|
||||
buildInputs = dubBuild.buildInputs;
|
||||
|
||||
buildPhase = ''
|
||||
# Can't use dub from dubBuild directly because one unittest
|
||||
# (issue895-local-configuration) needs to generate a config
|
||||
# file under ../etc relative to the dub location.
|
||||
cp ${dubBuild}/bin/dub bin/
|
||||
export DUB=$NIX_BUILD_TOP/source/bin/dub
|
||||
export DC=${dmd.out}/bin/dmd
|
||||
export HOME=$TMP
|
||||
./test/run-unittest.sh
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
echo -n $inputString > $out
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
inherit dubUnittests;
|
||||
name = "dub-${dubBuild.version}";
|
||||
phases = "installPhase";
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r --symbolic-link ${dubBuild}/* $out/
|
||||
'';
|
||||
}
|
||||
|
||||
|
|
|
@ -1777,17 +1777,7 @@ with pkgs;
|
|||
|
||||
dleyna-server = callPackage ../development/libraries/dleyna-server { };
|
||||
|
||||
dmd_2_067_1 = callPackage ../development/compilers/dmd/2.067.1.nix {
|
||||
stdenv = if stdenv.hostPlatform.isDarwin then
|
||||
stdenv
|
||||
else
|
||||
# Doesn't build with gcc6 on linux
|
||||
overrideCC stdenv gcc5;
|
||||
};
|
||||
|
||||
dmd = callPackage ../development/compilers/dmd {
|
||||
bootstrapDmd = dmd_2_067_1;
|
||||
};
|
||||
dmd = callPackage ../development/compilers/dmd { };
|
||||
|
||||
dmg2img = callPackage ../tools/misc/dmg2img { };
|
||||
|
||||
|
|
Loading…
Reference in a new issue