diff options
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; }) ]; +} |