From e3624e86aeda7eaf4f16560f50602639ea60fffe Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph.amissah@gmail.com>
Date: Wed, 4 Dec 2024 23:26:20 -0500
Subject: nix build, dub, take account of nixpkgs build changes

---
 org/dlang-nix-flakes.org | 95 +++++++++++++++++++++++++++++-------------------
 1 file changed, 57 insertions(+), 38 deletions(-)

(limited to 'org')

diff --git a/org/dlang-nix-flakes.org b/org/dlang-nix-flakes.org
index 9e12692..7211649 100644
--- a/org/dlang-nix-flakes.org
+++ b/org/dlang-nix-flakes.org
@@ -464,17 +464,16 @@ direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${Nix
           inherit shell;
           inherit devEnv;
           buildInputs = [sqlite];
-          nativeBuildInputs = [dub ldc gnumake]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ];
+          nativeBuildInputs = [gnumake dub ldc];
+          preBuild = ''
+            export DCn=ldmd2
+            export DC=$(type -P $DCn || echo "")
+            if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi
+          '';
           buildPhase = ''
             runHook preBuild
-            for DC_ in dmd ldmd2 ldc2 gdc gdmd; do
-              echo "- check for D compiler $DC_"
-              DC=$(type -P $DC_ || echo "")
-              if [ ! "$DC" == "" ]; then break; fi
-            done
-            if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi
-            echo "$DC_ used as D compiler to build $pname"
-            dub build --cache=local --compiler=$DC --build=$DC_ --combined --skip-registry=all
+            echo "$DCn used as D compiler to build $pname"
+            dub build --cache=local --compiler=$DC --build=$DCn --combined --skip-registry=all
             runHook postBuild
           '';
           inherit checkPhase;
@@ -580,7 +579,6 @@ direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${Nix
 #+HEADER: :tangle "../shell.nix"
 #+HEADER: :tangle-mode (identity #o755)
 #+HEADER: :shebang "#!/usr/bin/env -S nix-shell --pure\n#!nix-shell -i bash"
-#+HEADER: :noweb yes
 #+BEGIN_SRC nix
 {pkgs-nix ? import <nixpkgs> {}}:
 with pkgs-nix;
@@ -1596,11 +1594,24 @@ sha256-kTHRaAKG7cAGb4IE/NGHWaZ8t7ZceKj03l6E8wLzJzs=
 
 #+HEADER: :tangle "../nix-overlays/dub/default.nix"
 #+BEGIN_SRC nix
-{ lib, stdenv, fetchFromGitHub, curl, libevent, rsync, ldc, dcompiler ? ldc }:
+import ./package.nix
+#+END_SRC
+
+#+HEADER: :tangle "../nix-overlays/dub/package.nix"
+#+BEGIN_SRC nix
+{ lib
+, stdenv
+, fetchFromGitHub
+, curl
+, <<dcompiler>>
+, dcompiler ? <<dcompiler>>
+, libevent
+, rsync
+}:
 
 assert dcompiler != null;
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "dub";
   version = "<<dub_version>>";
 
@@ -1609,30 +1620,21 @@ stdenv.mkDerivation rec {
   src = fetchFromGitHub {
     owner = "dlang";
     repo = "dub";
-    rev = "v${version}";
-    sha256 = "<<dub_hash>>";
+    rev = "v${finalAttrs.version}";
+    hash = "<<dub_hash>>";
   };
 
-  #postUnpack = ''
-  #  patchShebangs .
-  #'';
-
-  dubvar = "\\$DUB";
   postPatch = ''
     patchShebangs test
-
-    # Can be removed with https://github.com/dlang/dub/pull/1368
-    substituteInPlace test/fetchzip.sh \
-        --replace "dub remove" "\"${dubvar}\" remove"
   '';
 
   nativeBuildInputs = [ dcompiler libevent rsync ];
   buildInputs = [ curl ];
 
-  buildPhase = ''
-    for DC_ in dmd ldmd2 gdmd; do
-      echo "... check for D compiler $DC_ ..."
-      export DC=$(type -P $DC_ || echo "")
+  preBuild = ''
+    for DCn in dmd ldmd2 gdmd; do
+      echo "... check for D compiler $DCn ..."
+      export DC=$(type -P $DCn || echo "")
       if [ ! "$DC" == "" ]; then
         break
       fi
@@ -1640,17 +1642,21 @@ stdenv.mkDerivation rec {
     if [ "$DC" == "" ]; then
       exit "Error: could not find D compiler"
     fi
-    echo "$DC_ found and used as D compiler in buildPhase for $pname"
-    $DC ./build.d
-    ./build
+    echo "$DCn found and used as D compiler in buildPhase for $pname"
   '';
 
-  doCheck = !stdenv.isDarwin;
+  buildPhase = ''
+    runHook preBuild
+    $DC -run ./build.d
+    runHook postBuild
+  '';
+
+  doCheck = !stdenv.hostPlatform.isDarwin;
 
   checkPhase = ''
+    runHook preCheck
     export DUB=$NIX_BUILD_TOP/source/bin/dub
     export PATH=$PATH:$NIX_BUILD_TOP/source/bin/
-    #export DC=${dcompiler.out}/bin/${if dcompiler.pname=="ldc" then "ldc2" else dcompiler.pname}
     if [ "$DC" == "" ]; then
       exit "Error: could not find D compiler"
     fi
@@ -1658,8 +1664,7 @@ stdenv.mkDerivation rec {
     export HOME=$TMP
 
     rm -rf test/issue502-root-import
-    rm -rf test/dpath-variable
-    #rm test/dpath-variable.sh
+    rm -r test/dpath-variable # requires execution of dpath-variable.sh
     rm -rf test/git-dependency
     rm -rf test/use-c-sources # added to build v1.33.0
     rm -rf test/pr2642-cache-db # added to build v1.34.0
@@ -1667,21 +1672,35 @@ stdenv.mkDerivation rec {
     rm -rf test/pr2647-build-deep # added to build v1.36.0
 
     ./test/run-unittest.sh
+    runHook postCheck
   '';
 
   installPhase = ''
-    mkdir -p $out/bin
-    cp bin/dub $out/bin
+    runHook preInstall
+    install -Dm755 bin/dub $out/bin/dub
+    runHook postInstall
   '';
 
   meta = with lib; {
-    description = "Package and build manager for D applications and libraries";
+    description = "Package and build manager for D programs and libraries";
     homepage = "https://code.dlang.org/";
     license = licenses.mit;
+    mainProgram = "dub";
     maintainers = with maintainers; [ jtbx ];
     platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
   };
-}
+})
+#+END_SRC
+
+*** dcompiler SET
+
+#+NAME: dcompiler
+#+BEGIN_SRC nix
+ldc
+#+END_SRC
+
+#+BEGIN_SRC nix
+dmd
 #+END_SRC
 
 *** versions SET
-- 
cgit v1.2.3