diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2020-11-28 15:15:03 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2020-11-28 15:15:03 -0500 | 
| commit | 2e34620551b30c099cacc386ba9127f0bd04f77c (patch) | |
| tree | 4a1ba8b6ec3f23b8b78412d0c6742cff399b25e0 /nixEnv/nixDevEnv | |
| parent | nix derivation, dub & dub2nix using ldc2 1.24.0 ok (diff) | |
directory nixEnv (renamed from nixDevEnv)
Diffstat (limited to 'nixEnv/nixDevEnv')
| -rw-r--r-- | nixEnv/nixDevEnv/dub/mkDub-dmd.nix | 121 | ||||
| -rw-r--r-- | nixEnv/nixDevEnv/dub/mkDub-ldc.nix | 121 | ||||
| -rw-r--r-- | nixEnv/nixDevEnv/overlays/ldcVersion.nix | 15 | ||||
| -rw-r--r-- | nixEnv/nixDevEnv/shells/packages-ldc.nix | 14 | ||||
| -rw-r--r-- | nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix | 12 | ||||
| -rw-r--r-- | nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix | 14 | ||||
| -rw-r--r-- | nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix | 5 | ||||
| -rw-r--r-- | nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix | 7 | 
8 files changed, 309 insertions, 0 deletions
| diff --git a/nixEnv/nixDevEnv/dub/mkDub-dmd.nix b/nixEnv/nixDevEnv/dub/mkDub-dmd.nix new file mode 100644 index 0000000..a35f2d5 --- /dev/null +++ b/nixEnv/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 --build=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/nixEnv/nixDevEnv/dub/mkDub-ldc.nix b/nixEnv/nixDevEnv/dub/mkDub-ldc.nix new file mode 100644 index 0000000..a9cbb82 --- /dev/null +++ b/nixEnv/nixDevEnv/dub/mkDub-ldc.nix @@ -0,0 +1,121 @@ +{ pkgs ? import <nixpkgs> {}, +  stdenv ? pkgs.stdenv, +  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 = [ 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 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 = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; +    disallowedReferences = disallowedReferences deps; + +    passthru = passthru // { +      inherit dub ldc 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 + +      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/nixEnv/nixDevEnv/overlays/ldcVersion.nix b/nixEnv/nixDevEnv/overlays/ldcVersion.nix new file mode 100644 index 0000000..5bc7f7a --- /dev/null +++ b/nixEnv/nixDevEnv/overlays/ldcVersion.nix @@ -0,0 +1,15 @@ +self: super: rec { +  ldc = super.ldc.overrideAttrs(oldAttrs: rec { +    pname   = "ldc"; +    version = "1.24.0"; +    sha256  = "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx"; +    name = "${pname}-${version}"; +    src = super.fetchurl { +      url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"; +      sha256 = sha256; +    }; +    postUnpack = '' +      patchShebangs . +    ''; +  }); +} diff --git a/nixEnv/nixDevEnv/shells/packages-ldc.nix b/nixEnv/nixDevEnv/shells/packages-ldc.nix new file mode 100644 index 0000000..bcef059 --- /dev/null +++ b/nixEnv/nixDevEnv/shells/packages-ldc.nix @@ -0,0 +1,14 @@ +{ pkgs ? import <nixpkgs> {} }: +let +  dub2nix-src = fetchTarball { +    url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; +  }; +  dub2nix = (import dub2nix-src) { inherit pkgs; }; +in +with pkgs; [ +  nix +  ldc +  sqlite +  nix-prefetch-git +  validatePkgConfig +] diff --git a/nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix b/nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix new file mode 100644 index 0000000..7f16efe --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix @@ -0,0 +1,12 @@ +{ pkgs ? import <nixpkgs> {} }: +pkgs.mkShell { +  buildInputs = with pkgs; [ +    nix +    dub +    dmd +    rdmd +    sqlite +    dub2nix +    nix-prefetch-git +  ]; +} diff --git a/nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix b/nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix new file mode 100644 index 0000000..334aece --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix @@ -0,0 +1,14 @@ +{ pkgs ? import <nixpkgs> +  { overlays = [ ]; } +}: +pkgs.mkShell { +  buildInputs = with pkgs; [ +    nix +    dub +    dmd +    rdmd +    sqlite +    dub2nix +    nix-prefetch-git +  ]; +} diff --git a/nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix b/nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix new file mode 100644 index 0000000..0a6aa9a --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix @@ -0,0 +1,5 @@ +{ pkgs ? import <nixpkgs> {} }: +pkgs.mkShell { +  buildInputs = with pkgs; +  [ (import ./packages-ldc.nix { inherit pkgs; }) ]; +} diff --git a/nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix b/nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix new file mode 100644 index 0000000..1c9c092 --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix @@ -0,0 +1,7 @@ +{ pkgs ? import <nixpkgs> { +  overlays = [ (import ../overlays/ldcVersion.nix) ]; +} }: +pkgs.mkShell { +  buildInputs = with pkgs; +  [ (import ./packages-ldc.nix { inherit pkgs; }) ]; +} | 
