about summary refs log tree commit diff
path: root/pkgs/development
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development')
-rw-r--r--pkgs/development/compilers/dmd/2.067.1.nix167
-rw-r--r--pkgs/development/compilers/dmd/default.nix422
-rw-r--r--pkgs/development/compilers/ldc/default.nix331
-rw-r--r--pkgs/development/libraries/libp11/default.nix4
-rw-r--r--pkgs/development/libraries/v8/default.nix14
-rw-r--r--pkgs/development/tools/build-managers/dub/default.nix121
6 files changed, 596 insertions, 463 deletions
diff --git a/pkgs/development/compilers/dmd/2.067.1.nix b/pkgs/development/compilers/dmd/2.067.1.nix
deleted file mode 100644
index 29a8618dc7b9..000000000000
--- a/pkgs/development/compilers/dmd/2.067.1.nix
+++ /dev/null
@@ -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;
-  };
-}
-
diff --git a/pkgs/development/compilers/dmd/default.nix b/pkgs/development/compilers/dmd/default.nix
index ff19a5b872cc..d20d2a7e8ed9 100644
--- a/pkgs/development/compilers/dmd/default.nix
+++ b/pkgs/development/compilers/dmd/default.nix
@@ -1,173 +1,287 @@
-{ 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";
-
-  srcs = [
-  (fetchFromGitHub {
-    owner = "dlang";
-    repo = "dmd";
-    rev = "v${version}";
-    sha256 = "0kq6r8rcghvzk5jcphg89l85rg734s29bssd2rcw3fygx0k9a9k5";
-    name = "dmd-v${version}-src";
-  })
-  (fetchFromGitHub {
-    owner = "dlang";
-    repo = "druntime";
-    rev = "v${version}";
-    sha256 = "0idn2v1lmp7hl637g3i7pdfj9mjk4sclkz4cm77nl8873k2fhk8j";
-    name = "druntime-v${version}-src";
-  })
-  (fetchFromGitHub {
-    owner = "dlang";
-    repo = "phobos";
-    rev = "v${version}";
-    sha256 = "1a7q5fd15yspgs5plxgx54jyrcwgzlyw3rahmz04jd2s5h56dj04";
-    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
-
-      # Remove cppa test for now because it doesn't work.
-      rm dmd/test/runnable/cppa.d
-      rm dmd/test/runnable/extra-files/cppb.cpp
-  '';
+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 = dmdSha256;
+      name = "dmd";
+    })
+    (fetchFromGitHub {
+      owner = "dlang";
+      repo = "druntime";
+      rev = "v${version}";
+      sha256 = druntimeSha256;
+      name = "druntime";
+    })
+    (fetchFromGitHub {
+      owner = "dlang";
+      repo = "phobos";
+      rev = "v${version}";
+      sha256 = phobosSha256;
+      name = "phobos";
+    })
+    ];
+
+    sourceRoot = ".";
 
-  # Compile with PIC to prevent colliding modules with binutils 2.28.
-  # https://issues.dlang.org/show_bug.cgi?id=17375
-  usePIC = "-fPIC";
+    postUnpack = ''
+        patchShebangs .
 
-  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
+        # Remove cppa test for now because it doesn't work.
+        rm dmd/test/runnable/cppa.d
+        rm dmd/test/runnable/extra-files/cppb.cpp
+    '';
+
+    # 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;"
 
-      # 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 ${datetimePath} \
+            --replace "tzName == \"leapseconds\"" "baseName(tzName) == \"leapseconds\""
 
-      substituteInPlace druntime/test/common.mak \
-          --replace "DFLAGS:=" "DFLAGS:=${usePIC} "
+        # 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/
 
-      # 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"
+        # 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
 
-      # Use proper C++ compiler
-      substituteInPlace dmd/posix.mak \
-          --replace g++ $CXX
-  ''
+        # 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 ${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 ]
-
-  ++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
-    Foundation
-  ]);
-
-  buildInputs = [ curl tzdata ];
-
-  # 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
-      cd ../phobos
-      make -j$NIX_BUILD_CORES -f posix.mak PIC=${usePIC} INSTALL_DIR=$out DMD=$DMD
-      cd ..
-  '';
+    nativeBuildInputs = [ bootstrapDmd makeWrapper unzip which gdb ]
 
-  # disable check phase because some tests are not working with sandboxing
-  doCheck = false;
-
-  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
-      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
-      cd ..
-  '';
+    ++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
+      Foundation
+    ]);
 
-  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"
-      }
-
-      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
-  '';
+    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
+        cd ../druntime
+        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=1 INSTALL_DIR=$out DMD=${pathToDmd}
+        cd ..
+    '';
 
-  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;
-    maintainers = with maintainers; [ ThomasMader ];
-    platforms = platforms.unix;
+    doCheck = !bootstrapVersion;
+
+    checkPhase = ''
+        cd dmd
+        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=1 DMD=${pathToDmd} BUILD=release
+        cd ..
+    '';
+    
+    extension = if stdenv.hostPlatform.isDarwin then "a" else "{a,so}";
+
+    installPhase = ''
+        cd dmd
+        mkdir $out
+        mkdir $out/bin
+        cp ${pathToDmd} $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
+        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;
+      maintainers = with maintainers; [ ThomasMader ];
+      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/
+  '';
 }
+
diff --git a/pkgs/development/compilers/ldc/default.nix b/pkgs/development/compilers/ldc/default.nix
index 5c283dd4380c..154da0707f67 100644
--- a/pkgs/development/compilers/ldc/default.nix
+++ b/pkgs/development/compilers/ldc/default.nix
@@ -1,103 +1,258 @@
-{ 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";
-
-  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";
-  })
-  ];
-
-  sourceRoot = ".";
-
-  postUnpack = ''
-      mv ldc-v${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
-
-      # 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
-  '';
+let
 
-  postPatch = ''
-      substituteInPlace runtime/phobos/std/net/curl.d \
-          --replace libcurl.so ${curl.out}/lib/libcurl.so
+  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
+    "";
 
-      # 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 \
-          --replace /usr/share/zoneinfo/ ${tzdata}/share/zoneinfo/
-  ''
+  ldcBuild = stdenv.mkDerivation rec {
+    name = "ldcBuild-${version}";
 
-  + stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
-      substituteInPlace driver/tool.cpp \
-          --replace "gcc" "clang"
-  '';
+    enableParallelBuilding = true;
 
-  nativeBuildInputs = [ cmake llvm dmd python lit gdb unzip ]
+    src = fetchurl {
+      url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz";
+      sha256 = ldcSha256;
+    };
 
-  ++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
-    Foundation
-  ]);
+    sourceRoot = ".";
 
-  buildInputs = [ curl tzdata stdenv.cc ];
+    postUnpack = ''
+        cd ldc-${version}-src/
 
-  preConfigure = ''
-    cmakeFlagsArray=("-DINCLUDE_INSTALL_DIR=$out/include/dlang/ldc")
-  '';
+        patchShebangs .
 
-  postConfigure = ''
-    export DMD=$PWD/bin/ldc2
-  '';
+        # 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
+    ''
 
-  makeFlags = [ "DMD=$DMD" ];
+    + 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
+    ''
 
-  # disable check phase because some tests are not working with sandboxing
-  doCheck = false;
+    + 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/${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.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 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"
+                       "-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"
+                      )
+    '';
 
-  checkPhase = ''
-      ctest -j $NIX_BUILD_CORES -V DMD=$DMD
-  '';
 
-  meta = with stdenv.lib; {
-    description = "The LLVM-based D compiler";
-    homepage = https://github.com/ldc-developers/ldc;
-    # 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;
+    postConfigure = ''
+      export DMD=$PWD/bin/ldmd2
+    '';
+
+    makeFlags = [ "DMD=$DMD" ];
+
+    doCheck = true;
+
+    checkPhase = ''
+	# 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; {
+      description = "The LLVM-based D compiler";
+      homepage = https://github.com/ldc-developers/ldc;
+      # from https://github.com/ldc-developers/ldc/blob/master/LICENSE
+      license = with licenses; [ bsd3 boost mit ncsa gpl2Plus ];
+      maintainers = with maintainers; [ ThomasMader ];
+      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/
+  '';
 }
+
diff --git a/pkgs/development/libraries/libp11/default.nix b/pkgs/development/libraries/libp11/default.nix
index 26e754317df0..54e2616e782f 100644
--- a/pkgs/development/libraries/libp11/default.nix
+++ b/pkgs/development/libraries/libp11/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   name = "libp11-${version}";
-  version = "0.4.4";
+  version = "0.4.7";
 
   src = fetchFromGitHub {
     owner = "OpenSC";
     repo = "libp11";
     rev = name;
-    sha256 = "1jnpnwipmw3skw112qff36w046nyz5amiil228rn5divpkvx4axa";
+    sha256 = "0n1i0pxj6l0vdq8gpdwfp5p9qd7wkymg0lpy6a17ix8hpqsljlhr";
   };
 
   makeFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
diff --git a/pkgs/development/libraries/v8/default.nix b/pkgs/development/libraries/v8/default.nix
index c2cd5a015168..4d49fdce3a92 100644
--- a/pkgs/development/libraries/v8/default.nix
+++ b/pkgs/development/libraries/v8/default.nix
@@ -7,13 +7,11 @@
 assert readline != null;
 
 let
-  arch = if stdenv.isArm
-         then if stdenv.is64bit
-              then"arm64"
-              else "arm"
-         else if stdenv.is64bit
-              then"x64"
-              else "ia32";
+  arch = if stdenv.isx86_64 then "x64"
+            else if stdenv.isi686 then "ia32"
+            else if stdenv.isAarch64 then "arm64"
+            else if stdenv.isArm then "arm"
+            else throw "Unknown architecture for v8";
   git_url = "https://chromium.googlesource.com";
   clangFlag = if stdenv.isDarwin then "1" else "0";
   sharedFlag = if static then "static_library" else "shared_library";
@@ -172,6 +170,8 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  dontUpdateAutotoolsGnuConfigScripts = if stdenv.isAarch64 then true else null;
+
   # the `libv8_libplatform` target is _only_ built as a static library,
   # and is expected to be statically linked in when needed.
   # see the following link for further commentary:
diff --git a/pkgs/development/tools/build-managers/dub/default.nix b/pkgs/development/tools/build-managers/dub/default.nix
index 007ce5b07cde..89996b3d30dc 100644
--- a/pkgs/development/tools/build-managers/dub/default.nix
+++ b/pkgs/development/tools/build-managers/dub/default.nix
@@ -1,65 +1,96 @@
 { stdenv, fetchFromGitHub, curl, dmd, libevent, rsync }:
 
-stdenv.mkDerivation rec {
-  name = "dub-${version}";
-  version = "1.5.0";
-
-  src = fetchFromGitHub {
-    owner = "dlang";
-    repo = "dub";
-    rev = "v${version}";
-    sha256 = "0kmirx4ijhzirjwdqmnwqhngg38zdaydpvny2p0yj3afqgkj6vq5";
-  };
+let
 
-  postPatch = ''
-    # Avoid that the version file is overwritten
-    substituteInPlace build.sh \
-      --replace source/dub/version_.d /dev/null
+  dubBuild = stdenv.mkDerivation rec {
+    name = "dubBuild-${version}";
+    version = "1.6.0";
 
-    substituteInPlace build.sh \
-      --replace MACOSX_DEPLOYMENT_TARGET MACOSX_DEPLOYMENT_TARGET_
+    enableParallelBuilding = true;
 
-    patchShebangs build.sh
-    patchShebangs test
+    src = fetchFromGitHub {
+      owner = "dlang";
+      repo = "dub";
+      rev = "v${version}";
+      sha256 = "1xjr5pp263lbcd4harxy1ybh7q0kzj9iyy63ji6pn66fizrgm7zk";
+    };
 
-    # Remove unittest which is not working for now (upstream already fixed: https://github.com/dlang/dub/issues/1224)
-    rm test/interactive-remove.sh
+    postPatch = ''
+      # Avoid that the version file is overwritten
+      substituteInPlace build.sh \
+        --replace source/dub/version_.d /dev/null
 
-    # 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 ];
-  buildInputs = [ curl ];
+    nativeBuildInputs = [ dmd libevent rsync ];
+    buildInputs = [ curl ];
 
-  buildPhase = ''
-    export DMD=${dmd.out}/bin/dmd
-    ./build.sh
-  '';
+    buildPhase = ''
+      export DMD=${dmd.out}/bin/dmd
+      ./build.sh
+    '';
+
+    installPhase = ''
+      mkdir $out
+      mkdir $out/bin
+      cp bin/dub $out/bin
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Package and build manager for D applications and libraries";
+      homepage = http://code.dlang.org/;
+      license = licenses.mit;
+      maintainers = with maintainers; [ ThomasMader ];
+      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;
 
-  doCheck = false;
+    postPatch = dubBuild.postPatch;
 
-  checkPhase = ''
-      export DUB=$PWD/bin/dub
+    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
-    mkdir $out/bin
-    cp bin/dub $out/bin
+    cp -r --symbolic-link ${dubBuild}/* $out/
   '';
-
-  meta = with stdenv.lib; {
-    description = "Package and build manager for D applications and libraries";
-    homepage = http://code.dlang.org/;
-    license = licenses.mit;
-    maintainers = with maintainers; [ ThomasMader ];
-    platforms = platforms.unix;
-  };
 }