diff options
author | Ralph Amissah <ralph.amissah@gmail.com> | 2020-10-19 13:38:37 -0400 |
---|---|---|
committer | Ralph Amissah <ralph.amissah@gmail.com> | 2020-10-20 12:12:28 -0400 |
commit | 109d32b1183717ac19ee2109abb41177bf9e71ff (patch) | |
tree | 3e45be8dd66e6e4e7f86469dcf4d225bdc9ce55f | |
parent | spine info update (diff) |
project nix shell(s)
-rw-r--r-- | dub.selections.json | 4 | ||||
-rw-r--r-- | makefile | 20 | ||||
l---------[-rw-r--r--] | mkDub.nix | 126 | ||||
-rw-r--r-- | nixDevEnv/dub/mkDub-dmd.nix | 121 | ||||
-rw-r--r-- | nixDevEnv/dub/mkDub-ldc.nix | 125 | ||||
-rw-r--r-- | nixDevEnv/shells/shell-dmd-verNix.nix (renamed from nixDevEnv/shells/dmd.nix) | 4 | ||||
-rw-r--r-- | nixDevEnv/shells/shell-dmd-verUser.nix | 19 | ||||
-rw-r--r-- | nixDevEnv/shells/shell-ldc-verNix.nix | 19 | ||||
-rw-r--r-- | nixDevEnv/shells/shell-ldc-verUser.nix (renamed from nixDevEnv/shells/ldc.nix) | 6 | ||||
-rw-r--r-- | org/spine_build_scaffold.org | 339 | ||||
l---------[-rw-r--r--] | shell.nix | 22 |
11 files changed, 606 insertions, 199 deletions
diff --git a/dub.selections.json b/dub.selections.json index 5e87b49..a4bd018 100644 --- a/dub.selections.json +++ b/dub.selections.json @@ -1,8 +1,8 @@ { "fileVersion": 1, "versions": { - "d2sqlite3": "0.18.3", - "dyaml": "0.8.2", + "d2sqlite3": "0.19.1", + "dyaml": "0.8.3", "imageformats": "7.0.2", "tinyendian": "0.2.0" } @@ -534,6 +534,26 @@ tangle_maker: (setq-local org-src-preserve-indentation t) \ (org-babel-tangle) \ (kill-buffer)) '($$ORGFILES)))" 2>&1 +nixsh_dmd_nixpkg: + ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; +nixsh_dmd_user: + ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; +nixsh_ldc_nixpkg: + ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; +nixsh_ldc_user: + ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; gitsnapshot: distclean tangle git commit -a .PHONY : all build rebuild debug release \ diff --git a/mkDub.nix b/mkDub.nix index 8fe20a3..f3b6966 100644..120000 --- a/mkDub.nix +++ b/mkDub.nix @@ -1,125 +1 @@ -{ pkgs ? import <nixpkgs> {}, - stdenv ? pkgs.stdenv, - rdmd ? pkgs.rdmd, - #dmd ? pkgs.dmd, - #gcc ? pkgs.gcc, - ldc ? pkgs.ldc, - dub ? pkgs.dub -}: - -with stdenv; -let - # Filter function to remove the .dub package folder from src - filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( - type == "directory" && baseName == ".dub" - ); - - # Convert a GIT rev string (tag) to a simple semver version - rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; - - dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; - - # Fetch a dependency (source only for now) - fromDub = dubDep: mkDerivation rec { - name = "${src.name}-${version}"; - version = rev-to-version dubDep.fetch.rev; - nativeBuildInputs = [ rdmd ldc dub ]; - src = dep2src dubDep; - - buildPhase = '' - runHook preBuild - export HOME=$PWD - dub build -b=release - runHook postBuild - ''; - - # outputs = [ "lib" ]; - - # installPhase = '' - # runHook preInstall - # mkdir -p $out/bin - # runHook postInstall - # ''; - }; - - # Adds a local package directory (e.g. a git repository) to Dub - dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; - - # The target output of the Dub package - targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; - - # Remove reference to build tools and library sources - disallowedReferences = deps: [ ldc rdmd dub ] ++ builtins.map dep2src deps; - - removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; - -in { - inherit fromDub; - - mkDubDerivation = lib.makeOverridable ({ - src, - nativeBuildInputs ? [], - dubJSON ? src + "/dub.json", - selections ? src + "/dub.selections.nix", - deps ? import selections, - passthru ? {}, - package ? lib.importJSON dubJSON, - ... - } @ attrs: stdenv.mkDerivation (attrs // { - - pname = package.name; - - nativeBuildInputs = [ rdmd ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; - disallowedReferences = disallowedReferences deps; - - passthru = passthru // { - inherit dub ldc rdmd pkgs; - }; - - src = lib.cleanSourceWith { - filter = filterDub; - src = lib.cleanSource src; - }; - - preFixup = '' - find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true - ''; - - buildPhase = '' - runHook preBuild - - export HOME=$PWD - ${lib.concatMapStringsSep "\n" dub-add-local deps} - dub build --compiler=ldc2 --build=release --combined --skip-registry=all - #dub build -b optimize -b inline --combined --skip-registry=all - - runHook postBuild - ''; - - checkPhase = '' - runHook preCheck - - export HOME=$PWD - ${lib.concatMapStringsSep "\n" dub-add-local deps} - dub test --combined --skip-registry=all - - runHook postCheck - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - cp -r "${targetOf package}" $out/bin - - runHook postInstall - ''; - - meta = lib.optionalAttrs (package ? description) { - description = package.description; - } // attrs.meta or {}; - } // lib.optionalAttrs (!(attrs ? version)) { - # Use name from dub.json, unless pname and version are specified - name = package.name; - })); -} +nixDevEnv/dub/mkDub-ldc.nix
\ No newline at end of file diff --git a/nixDevEnv/dub/mkDub-dmd.nix b/nixDevEnv/dub/mkDub-dmd.nix new file mode 100644 index 0000000..2600d30 --- /dev/null +++ b/nixDevEnv/dub/mkDub-dmd.nix @@ -0,0 +1,121 @@ +{ pkgs ? import <nixpkgs> {}, + stdenv ? pkgs.stdenv, + rdmd ? pkgs.rdmd, + dmd ? pkgs.dmd, + dub ? pkgs.dub }: + +with stdenv; +let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ rdmd dmd dub ]; + src = dep2src dubDep; + + buildPhase = '' + runHook preBuild + export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + + # outputs = [ "lib" ]; + + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + + # Remove reference to build tools and library sources + disallowedReferences = deps: [ dmd rdmd dub ] ++ builtins.map dep2src deps; + + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + +in { + inherit fromDub; + + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + + pname = package.name; + + nativeBuildInputs = [ rdmd dmd dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + + passthru = passthru // { + inherit dub dmd rdmd pkgs; + }; + + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + + buildPhase = '' + runHook preBuild + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build -b release --combined --skip-registry=all + + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub test --combined --skip-registry=all + + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + + runHook postInstall + ''; + + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); +} diff --git a/nixDevEnv/dub/mkDub-ldc.nix b/nixDevEnv/dub/mkDub-ldc.nix new file mode 100644 index 0000000..8fe20a3 --- /dev/null +++ b/nixDevEnv/dub/mkDub-ldc.nix @@ -0,0 +1,125 @@ +{ pkgs ? import <nixpkgs> {}, + stdenv ? pkgs.stdenv, + rdmd ? pkgs.rdmd, + #dmd ? pkgs.dmd, + #gcc ? pkgs.gcc, + ldc ? pkgs.ldc, + dub ? pkgs.dub +}: + +with stdenv; +let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ rdmd ldc dub ]; + src = dep2src dubDep; + + buildPhase = '' + runHook preBuild + export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + + # outputs = [ "lib" ]; + + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + + # Remove reference to build tools and library sources + disallowedReferences = deps: [ ldc rdmd dub ] ++ builtins.map dep2src deps; + + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + +in { + inherit fromDub; + + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + + pname = package.name; + + nativeBuildInputs = [ rdmd ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + + passthru = passthru // { + inherit dub ldc rdmd pkgs; + }; + + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + + buildPhase = '' + runHook preBuild + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build --compiler=ldc2 --build=release --combined --skip-registry=all + #dub build -b optimize -b inline --combined --skip-registry=all + + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub test --combined --skip-registry=all + + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + + runHook postInstall + ''; + + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); +} diff --git a/nixDevEnv/shells/dmd.nix b/nixDevEnv/shells/shell-dmd-verNix.nix index 0c68cc0..a673c35 100644 --- a/nixDevEnv/shells/dmd.nix +++ b/nixDevEnv/shells/shell-dmd-verNix.nix @@ -1,4 +1,6 @@ -{ pkgs ? import <nixpkgs> { overlays = []; } }: +{ pkgs ? import <nixpkgs> + { overlays = [ ]; } +}: let dub2nix-src = fetchTarball { url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; diff --git a/nixDevEnv/shells/shell-dmd-verUser.nix b/nixDevEnv/shells/shell-dmd-verUser.nix new file mode 100644 index 0000000..a673c35 --- /dev/null +++ b/nixDevEnv/shells/shell-dmd-verUser.nix @@ -0,0 +1,19 @@ +{ pkgs ? import <nixpkgs> + { overlays = [ ]; } +}: +let + dub2nix-src = fetchTarball { + url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; + }; + dub2nix = (import dub2nix-src) { inherit pkgs; }; +in pkgs.mkShell { + buildInputs = with pkgs; [ + nix + dub + dmd + rdmd + sqlite + dub2nix + nix-prefetch-git + ]; +} diff --git a/nixDevEnv/shells/shell-ldc-verNix.nix b/nixDevEnv/shells/shell-ldc-verNix.nix new file mode 100644 index 0000000..094bfa7 --- /dev/null +++ b/nixDevEnv/shells/shell-ldc-verNix.nix @@ -0,0 +1,19 @@ +{ pkgs ? import <nixpkgs> + { overlays = [ ]; } +}: +let + dub2nix-src = fetchTarball { + url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; + }; + dub2nix = (import dub2nix-src) { inherit pkgs; }; +in pkgs.mkShell { + buildInputs = with pkgs; [ + nix + dub + ldc + rdmd + sqlite + dub2nix + nix-prefetch-git + ]; +} diff --git a/nixDevEnv/shells/ldc.nix b/nixDevEnv/shells/shell-ldc-verUser.nix index 31cfcfb..8035327 100644 --- a/nixDevEnv/shells/ldc.nix +++ b/nixDevEnv/shells/shell-ldc-verUser.nix @@ -1,6 +1,6 @@ -{ pkgs ? import <nixpkgs> { - overlays = [ - (import ./nixDevEnv/overlays/ldcVersion.nix) +{ pkgs ? import <nixpkgs> + { overlays = [ + (import ../overlays/ldcVersion.nix) ]; } }: let diff --git a/org/spine_build_scaffold.org b/org/spine_build_scaffold.org index 4470d00..55d74a2 100644 --- a/org/spine_build_scaffold.org +++ b/org/spine_build_scaffold.org @@ -70,6 +70,7 @@ <<makefile_testrun_12>> <<makefile_tangle_0>> <<makefile_tangle_1>> +<<makefile_nix_project_shell>> <<makefile_git_snapshot>> <<makefile_phony>> #+END_SRC @@ -945,6 +946,30 @@ tangle_maker: (kill-buffer)) '($$ORGFILES)))" 2>&1 #+END_SRC +#+NAME: makefile_nix_project_shell +#+BEGIN_SRC makefile +nixsh_dmd_nixpkg: + ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; +nixsh_dmd_user: + ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; +nixsh_ldc_nixpkg: + ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; +nixsh_ldc_user: + ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix; \ + ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ + nix-shell; +#+END_SRC + *** git snapshot #+NAME: makefile_git_snapshot @@ -1623,6 +1648,11 @@ tinyendian_dep = declare_dependency( #+END_SRC * nix + +- default.nix +- shell.nix +- dub2.nix + ** dub2nix notes (from author (Lionello Lunesu) email reply, 2020-10-12) - https://github.com/lionello/dub2nix @@ -1713,70 +1743,157 @@ fi #+END_SRC ** shells shell.nix -*** nix-shell shell.nix +*** dmd shell -#+BEGIN_SRC nix :tangle ../shell.nix -<<nix_shell_with_compiler_ldc>> -#+END_SRC +- ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix +- ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix -*** ldc shell +- ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix + +**** nixpkg + +- ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix +- ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix -#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/ldc.nix -<<nix_shell_with_compiler_ldc>> +#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-dmd-verNix.nix +{ pkgs ? import <nixpkgs> + <<nix_shell_overlay_none>> +}: +let + <<nix_shell_dub2nix>> +in pkgs.mkShell { + <<nix_shell_buildInputs_dmd>> +} #+END_SRC -#+NAME: nix_shell_with_compiler_ldc -#+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> { - overlays = [ - (import ./nixDevEnv/overlays/ldcVersion.nix) - ]; } +**** user + +- ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix +- ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix + +#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-dmd-verUser.nix +{ pkgs ? import <nixpkgs> + <<nix_shell_overlay_user_version_dmd>> }: let - dub2nix-src = fetchTarball { - url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; - }; - dub2nix = (import dub2nix-src) { inherit pkgs; }; + <<nix_shell_dub2nix>> in pkgs.mkShell { - buildInputs = with pkgs; [ - nix - dub - ldc - rdmd - sqlite - dub2nix - nix-prefetch-git - ]; + <<nix_shell_buildInputs_dmd>> } #+END_SRC -*** dmd shell +*** ldc shell + +- ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix +- ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix + +- ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix + +**** nixpkg -#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/dmd.nix -<<nix_shell_with_compiler_dmd>> +- ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix +- ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix + +#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-ldc-verNix.nix +{ pkgs ? import <nixpkgs> + <<nix_shell_overlay_none>> +}: +let + <<nix_shell_dub2nix>> +in pkgs.mkShell { + <<nix_shell_buildInputs_ldc>> +} #+END_SRC -#+NAME: nix_shell_with_compiler_dmd -#+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> { overlays = []; } }: +**** user + +- ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix +- ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix + +#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-ldc-verUser.nix +{ pkgs ? import <nixpkgs> + <<nix_shell_overlay_user_version_ldc>> +}: let - dub2nix-src = fetchTarball { - url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; - }; - dub2nix = (import dub2nix-src) { inherit pkgs; }; + <<nix_shell_dub2nix>> in pkgs.mkShell { - buildInputs = with pkgs; [ - nix - dub - dmd - rdmd - sqlite - dub2nix - nix-prefetch-git - ]; + <<nix_shell_buildInputs_ldc>> } #+END_SRC +*** parts +**** dub2nix + +#+NAME: nix_shell_dub2nix +#+BEGIN_SRC nix +dub2nix-src = fetchTarball { + url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; +}; +dub2nix = (import dub2nix-src) { inherit pkgs; }; +#+END_SRC + +**** overlays + +#+NAME: nix_shell_overlay_none +#+BEGIN_SRC nix +{ overlays = [ ]; } +#+END_SRC + +***** (import ./nixDevEnv/overlays/dmdVersion.nix) + +no working overlay, default none: + +#+NAME: nix_shell_overlay_user_version_dmd +#+BEGIN_SRC nix +{ overlays = [ ]; } +#+END_SRC + +use if working overlay: + +#+BEGIN_SRC nix +{ overlays = [ + (import ../overlays/dmdVersion.nix) +]; } +#+END_SRC + +***** (import ./nixDevEnv/overlays/ldcVersion.nix) + +#+NAME: nix_shell_overlay_user_version_ldc +#+BEGIN_SRC nix +{ overlays = [ + (import ../overlays/ldcVersion.nix) +]; } +#+END_SRC + + +**** build inputs + +#+NAME: nix_shell_buildInputs_dmd +#+BEGIN_SRC nix +buildInputs = with pkgs; [ + nix + dub + dmd + rdmd + sqlite + dub2nix + nix-prefetch-git +]; +#+END_SRC + +#+NAME: nix_shell_buildInputs_ldc +#+BEGIN_SRC nix +buildInputs = with pkgs; [ + nix + dub + ldc + rdmd + sqlite + dub2nix + nix-prefetch-git +]; +#+END_SRC + *** dmd & ldc #+NAME: nix_shell_with_compilers_dmd_and_ldc @@ -1843,7 +1960,135 @@ Get current mkDub.nix from the dub2nix project: aria2c https://raw.githubusercontent.com/lionello/dub2nix/master/mkDub.nix #+END_SRC -#+BEGIN_SRC nix :tangle ../mkDub.nix +*** mkDub dmd + +#+BEGIN_SRC nix :tangle ../nixDevEnv/dub/mkDub-dmd.nix +{ pkgs ? import <nixpkgs> {}, + stdenv ? pkgs.stdenv, + rdmd ? pkgs.rdmd, + dmd ? pkgs.dmd, + dub ? pkgs.dub }: + +with stdenv; +let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ rdmd dmd dub ]; + src = dep2src dubDep; + + buildPhase = '' + runHook preBuild + export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + + # outputs = [ "lib" ]; + + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + + # Remove reference to build tools and library sources + disallowedReferences = deps: [ dmd rdmd dub ] ++ builtins.map dep2src deps; + + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + +in { + inherit fromDub; + + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + + pname = package.name; + + nativeBuildInputs = [ rdmd dmd dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + + passthru = passthru // { + inherit dub dmd rdmd pkgs; + }; + + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + + buildPhase = '' + runHook preBuild + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build -b release --combined --skip-registry=all + + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub test --combined --skip-registry=all + + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + + runHook postInstall + ''; + + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); +} +#+END_SRC + +*** mkDub ldc + +#+BEGIN_SRC nix :tangle ../nixDevEnv/dub/mkDub-ldc.nix { pkgs ? import <nixpkgs> {}, stdenv ? pkgs.stdenv, rdmd ? pkgs.rdmd, @@ -1995,7 +2240,7 @@ self: super: rec { **** dmdVersion.nix overlay -no working overlay +no working overlay, tangle to work on #+BEGIN_SRC nix :NO-tangle ../nixDevEnv/overlays/dmdVersion.nix self: super: rec { diff --git a/shell.nix b/shell.nix index 31cfcfb..fa9f1e2 100644..120000 --- a/shell.nix +++ b/shell.nix @@ -1,21 +1 @@ -{ pkgs ? import <nixpkgs> { - overlays = [ - (import ./nixDevEnv/overlays/ldcVersion.nix) - ]; } -}: -let - dub2nix-src = fetchTarball { - url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; - }; - dub2nix = (import dub2nix-src) { inherit pkgs; }; -in pkgs.mkShell { - buildInputs = with pkgs; [ - nix - dub - ldc - rdmd - sqlite - dub2nix - nix-prefetch-git - ]; -} +nixDevEnv/shells/shell-ldc-verUser.nix
\ No newline at end of file |