summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/dub/default.nix
diff options
context:
space:
mode:
authorThomas Mader <thomas.mader@gmail.com>2017-11-25 19:27:49 +0100
committerThomas Mader <thomas.mader@gmail.com>2017-12-03 02:52:04 +0100
commit48dcf2620db10104110053a43209aa18913d4731 (patch)
tree36a23331d12f52254a45370bbe3b638b452f138a /pkgs/development/tools/build-managers/dub/default.nix
parent52333332655be7b053279503de212f13586c88d1 (diff)
dub: 1.5.0 -> 1.6.0
- Enable unittests by using a fixed-output derivation
- Remove substitutions because they are fixed upstream now
Diffstat (limited to 'pkgs/development/tools/build-managers/dub/default.nix')
-rw-r--r--pkgs/development/tools/build-managers/dub/default.nix121
1 files changed, 76 insertions, 45 deletions
diff --git a/pkgs/development/tools/build-managers/dub/default.nix b/pkgs/development/tools/build-managers/dub/default.nix
index 007ce5b07cde8..89996b3d30dcb 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;
-  };
 }