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 | 
