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 /org | |
| parent | spine info update (diff) | |
project nix shell(s)
Diffstat (limited to 'org')
| -rw-r--r-- | org/spine_build_scaffold.org | 339 | 
1 files changed, 292 insertions, 47 deletions
| 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 { | 
