Loading pkgs/development/compilers/idris2/build-idris.nix +47 −29 Original line number Diff line number Diff line { stdenv, lib, idris2, makeWrapper { stdenv, lib, idris2, makeBinaryWrapper, }: # Usage: let # pkg = idris2Packages.buildIdris { Loading @@ -11,49 +15,57 @@ # bin = pkg.executable; # } # { src , ipkgName , version ? "unversioned" , idrisLibraries # Other libraries built with buildIdris , ... }@attrs: { src, ipkgName, version ? "unversioned", idrisLibraries, # Other libraries built with buildIdris ... }@attrs: let # loop over idrisLibraries and normalize them by turning any that are # direct outputs of the buildIdris function into the `.library {}` # property. idrisLibraryLibs = map (idrisLib: if lib.isDerivation idrisLib then idrisLib else if builtins.isFunction idrisLib then idrisLib {} else if (builtins.isAttrs idrisLib && idrisLib ? "library") then idrisLib.library {} else throw "Found an Idris2 library dependency that was not the result of the buildIdris function" idrisLibraryLibs = map ( idrisLib: if lib.isDerivation idrisLib then idrisLib else if builtins.isFunction idrisLib then idrisLib { } else if (builtins.isAttrs idrisLib && idrisLib ? "library") then idrisLib.library { } else throw "Found an Idris2 library dependency that was not the result of the buildIdris function" ) idrisLibraries; propagate = libs: lib.unique (lib.concatMap (nextLib: [nextLib] ++ nextLib.propagatedIdrisLibraries) libs); propagate = libs: lib.unique (lib.concatMap (nextLib: [ nextLib ] ++ nextLib.propagatedIdrisLibraries) libs); ipkgFileName = ipkgName + ".ipkg"; idrName = "idris2-${idris2.version}"; libSuffix = "lib/${idrName}"; propagatedIdrisLibraries = propagate idrisLibraryLibs; libDirs = (lib.makeSearchPath libSuffix propagatedIdrisLibraries) + ":${idris2}/${idrName}"; libDirs = (lib.makeSearchPath libSuffix propagatedIdrisLibraries) + ":${idris2}/${idrName}"; supportDir = "${idris2}/${idrName}/lib"; drvAttrs = builtins.removeAttrs attrs [ "ipkgName" "idrisLibraries" ]; derivation = stdenv.mkDerivation (finalAttrs: drvAttrs // { derivation = stdenv.mkDerivation ( finalAttrs: drvAttrs // { pname = ipkgName; inherit version; src = src; nativeBuildInputs = [ idris2 makeWrapper ] ++ attrs.nativeBuildInputs or []; nativeBuildInputs = [ idris2 makeBinaryWrapper ] ++ attrs.nativeBuildInputs or [ ]; buildInputs = propagatedIdrisLibraries ++ attrs.buildInputs or [ ]; IDRIS2_PACKAGE_PATH = libDirs; env.IDRIS2_PACKAGE_PATH = libDirs; buildPhase = '' runHook preBuild Loading @@ -63,15 +75,16 @@ let passthru = { inherit propagatedIdrisLibraries; }; } // (attrs.passthru or { }); shellHook = '' export IDRIS2_PACKAGE_PATH="${finalAttrs.IDRIS2_PACKAGE_PATH}" export IDRIS2_PACKAGE_PATH="${finalAttrs.env.IDRIS2_PACKAGE_PATH}" ''; } ); in { in { executable = derivation.overrideAttrs { installPhase = '' runHook preInstall Loading @@ -97,9 +110,14 @@ in { ''; }; library = { withSource ? false }: let installCmd = if withSource then "--install-with-src" else "--install"; in derivation.overrideAttrs { library = { withSource ? false, }: let installCmd = if withSource then "--install-with-src" else "--install"; in derivation.overrideAttrs { installPhase = '' runHook preInstall mkdir -p $out/${libSuffix} Loading pkgs/development/compilers/idris2/default.nix +3 −16 Original line number Diff line number Diff line { callPackage , idris2Packages }: let in { { callPackage }: { idris2 = callPackage ./idris2.nix { }; idris2Api = callPackage ./idris2-api.nix { }; idris2Lsp = callPackage ./idris2-lsp.nix { }; buildIdris = callPackage ./build-idris.nix { }; idris2Api = (idris2Packages.buildIdris { inherit (idris2Packages.idris2) src version; ipkgName = "idris2api"; idrisLibraries = [ ]; preBuild = '' export IDRIS2_PREFIX=$out/lib make src/IdrisPaths.idr ''; }).library; } pkgs/development/compilers/idris2/idris2-api.nix 0 → 100644 +22 −0 Original line number Diff line number Diff line { lib, idris2Packages }: let inherit (idris2Packages) idris2 buildIdris; apiPkg = buildIdris { inherit (idris2) src version; ipkgName = "idris2api"; idrisLibraries = [ ]; preBuild = '' export IDRIS2_PREFIX=$out/lib make src/IdrisPaths.idr ''; meta = { description = "Idris2 Compiler API Library"; homepage = "https://github.com/idris-lang/Idris2"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ mattpolzin ]; inherit (idris2.meta) platforms; }; }; in apiPkg.library { } pkgs/development/compilers/idris2/idris2-lsp.nix +30 −19 Original line number Diff line number Diff line { lib, fetchFromGitHub, idris2Packages, makeWrapper }: { lib, fetchFromGitHub, idris2Packages, makeWrapper, }: let globalLibraries = let globalLibraries = let idrName = "idris2-${idris2Packages.idris2.version}"; libSuffix = "lib/${idrName}"; in [ in [ "\\$HOME/.nix-profile/lib/${idrName}" "/run/current-system/sw/lib/${idrName}" "${idris2Packages.idris2}/${idrName}" Loading Loading @@ -33,7 +40,10 @@ let rev = "a77ef2d563418925aa274fa29f06880dde43f4ec"; hash = "sha256-zjfVfkpiQS9AdmTfq0hYRSelJq5Caa9VGTuFLtSvl5o="; }; idrisLibraries = [idris2Api lspLib]; idrisLibraries = [ idris2Api lspLib ]; nativeBuildInputs = [ makeWrapper ]; postInstall = '' Loading @@ -49,4 +59,5 @@ let maintainers = with maintainers; [ mattpolzin ]; }; }; in lspPkg.executable in lspPkg.executable pkgs/development/compilers/idris2/idris2.nix +74 −56 Original line number Diff line number Diff line # Almost 1:1 copy of idris2's nix/package.nix. Some work done in their flake.nix # we do here instead. { stdenv , lib , chez , chez-racket , clang , gmp , fetchFromGitHub , makeWrapper , gambit , nodejs , zsh , callPackage { stdenv, lib, chez, chez-racket, clang, gmp, fetchFromGitHub, makeWrapper, gambit, nodejs, zsh, callPackage, }: # NOTICE: An `idris2WithPackages` is available at: https://github.com/claymager/idris2-pkgs let platformChez = if (stdenv.system == "x86_64-linux") || (lib.versionAtLeast chez.version "10.0.0") then if (stdenv.system == "x86_64-linux") || (lib.versionAtLeast chez.version "10.0.0") then chez else chez-racket; in stdenv.mkDerivation rec { in stdenv.mkDerivation rec { pname = "idris2"; version = "0.7.0"; Loading @@ -35,27 +36,39 @@ in stdenv.mkDerivation rec { }; strictDeps = true; nativeBuildInputs = [ makeWrapper clang platformChez ] ++ lib.optionals stdenv.isDarwin [ zsh ]; buildInputs = [ platformChez gmp ]; nativeBuildInputs = [ makeWrapper clang platformChez ] ++ lib.optionals stdenv.isDarwin [ zsh ]; buildInputs = [ platformChez gmp ]; prePatch = '' patchShebangs --build tests ''; makeFlags = [ "PREFIX=$(out)" ] ++ lib.optional stdenv.isDarwin "OS="; makeFlags = [ "PREFIX=$(out)" ] ++ lib.optional stdenv.isDarwin "OS="; # The name of the main executable of pkgs.chez is `scheme` buildFlags = [ "bootstrap" "SCHEME=scheme" ]; buildFlags = [ "bootstrap" "SCHEME=scheme" ]; checkTarget = "test"; nativeCheckInputs = [ gambit nodejs ]; # racket ]; nativeCheckInputs = [ gambit nodejs ]; # racket ]; checkFlags = [ "INTERACTIVE=" ]; # TODO: Move this into its own derivation, such that this can be changed # without having to recompile idris2 every time. postInstall = let postInstall = let name = "${pname}-${version}"; globalLibraries = [ "\\$HOME/.nix-profile/lib/${name}" Loading @@ -63,7 +76,8 @@ in stdenv.mkDerivation rec { "$out/${name}" ]; globalLibrariesPath = builtins.concatStringsSep ":" globalLibraries; in '' in '' # Remove existing idris2 wrapper that sets incorrect LD_LIBRARY_PATH rm $out/bin/idris2 # The only thing we need from idris2_app is the actual binary Loading Loading @@ -94,7 +108,11 @@ in stdenv.mkDerivation rec { mainProgram = "idris2"; homepage = "https://github.com/idris-lang/Idris2"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ fabianhjr wchresta mattpolzin ]; maintainers = with lib.maintainers; [ fabianhjr wchresta mattpolzin ]; inherit (chez.meta) platforms; }; } Loading
pkgs/development/compilers/idris2/build-idris.nix +47 −29 Original line number Diff line number Diff line { stdenv, lib, idris2, makeWrapper { stdenv, lib, idris2, makeBinaryWrapper, }: # Usage: let # pkg = idris2Packages.buildIdris { Loading @@ -11,49 +15,57 @@ # bin = pkg.executable; # } # { src , ipkgName , version ? "unversioned" , idrisLibraries # Other libraries built with buildIdris , ... }@attrs: { src, ipkgName, version ? "unversioned", idrisLibraries, # Other libraries built with buildIdris ... }@attrs: let # loop over idrisLibraries and normalize them by turning any that are # direct outputs of the buildIdris function into the `.library {}` # property. idrisLibraryLibs = map (idrisLib: if lib.isDerivation idrisLib then idrisLib else if builtins.isFunction idrisLib then idrisLib {} else if (builtins.isAttrs idrisLib && idrisLib ? "library") then idrisLib.library {} else throw "Found an Idris2 library dependency that was not the result of the buildIdris function" idrisLibraryLibs = map ( idrisLib: if lib.isDerivation idrisLib then idrisLib else if builtins.isFunction idrisLib then idrisLib { } else if (builtins.isAttrs idrisLib && idrisLib ? "library") then idrisLib.library { } else throw "Found an Idris2 library dependency that was not the result of the buildIdris function" ) idrisLibraries; propagate = libs: lib.unique (lib.concatMap (nextLib: [nextLib] ++ nextLib.propagatedIdrisLibraries) libs); propagate = libs: lib.unique (lib.concatMap (nextLib: [ nextLib ] ++ nextLib.propagatedIdrisLibraries) libs); ipkgFileName = ipkgName + ".ipkg"; idrName = "idris2-${idris2.version}"; libSuffix = "lib/${idrName}"; propagatedIdrisLibraries = propagate idrisLibraryLibs; libDirs = (lib.makeSearchPath libSuffix propagatedIdrisLibraries) + ":${idris2}/${idrName}"; libDirs = (lib.makeSearchPath libSuffix propagatedIdrisLibraries) + ":${idris2}/${idrName}"; supportDir = "${idris2}/${idrName}/lib"; drvAttrs = builtins.removeAttrs attrs [ "ipkgName" "idrisLibraries" ]; derivation = stdenv.mkDerivation (finalAttrs: drvAttrs // { derivation = stdenv.mkDerivation ( finalAttrs: drvAttrs // { pname = ipkgName; inherit version; src = src; nativeBuildInputs = [ idris2 makeWrapper ] ++ attrs.nativeBuildInputs or []; nativeBuildInputs = [ idris2 makeBinaryWrapper ] ++ attrs.nativeBuildInputs or [ ]; buildInputs = propagatedIdrisLibraries ++ attrs.buildInputs or [ ]; IDRIS2_PACKAGE_PATH = libDirs; env.IDRIS2_PACKAGE_PATH = libDirs; buildPhase = '' runHook preBuild Loading @@ -63,15 +75,16 @@ let passthru = { inherit propagatedIdrisLibraries; }; } // (attrs.passthru or { }); shellHook = '' export IDRIS2_PACKAGE_PATH="${finalAttrs.IDRIS2_PACKAGE_PATH}" export IDRIS2_PACKAGE_PATH="${finalAttrs.env.IDRIS2_PACKAGE_PATH}" ''; } ); in { in { executable = derivation.overrideAttrs { installPhase = '' runHook preInstall Loading @@ -97,9 +110,14 @@ in { ''; }; library = { withSource ? false }: let installCmd = if withSource then "--install-with-src" else "--install"; in derivation.overrideAttrs { library = { withSource ? false, }: let installCmd = if withSource then "--install-with-src" else "--install"; in derivation.overrideAttrs { installPhase = '' runHook preInstall mkdir -p $out/${libSuffix} Loading
pkgs/development/compilers/idris2/default.nix +3 −16 Original line number Diff line number Diff line { callPackage , idris2Packages }: let in { { callPackage }: { idris2 = callPackage ./idris2.nix { }; idris2Api = callPackage ./idris2-api.nix { }; idris2Lsp = callPackage ./idris2-lsp.nix { }; buildIdris = callPackage ./build-idris.nix { }; idris2Api = (idris2Packages.buildIdris { inherit (idris2Packages.idris2) src version; ipkgName = "idris2api"; idrisLibraries = [ ]; preBuild = '' export IDRIS2_PREFIX=$out/lib make src/IdrisPaths.idr ''; }).library; }
pkgs/development/compilers/idris2/idris2-api.nix 0 → 100644 +22 −0 Original line number Diff line number Diff line { lib, idris2Packages }: let inherit (idris2Packages) idris2 buildIdris; apiPkg = buildIdris { inherit (idris2) src version; ipkgName = "idris2api"; idrisLibraries = [ ]; preBuild = '' export IDRIS2_PREFIX=$out/lib make src/IdrisPaths.idr ''; meta = { description = "Idris2 Compiler API Library"; homepage = "https://github.com/idris-lang/Idris2"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ mattpolzin ]; inherit (idris2.meta) platforms; }; }; in apiPkg.library { }
pkgs/development/compilers/idris2/idris2-lsp.nix +30 −19 Original line number Diff line number Diff line { lib, fetchFromGitHub, idris2Packages, makeWrapper }: { lib, fetchFromGitHub, idris2Packages, makeWrapper, }: let globalLibraries = let globalLibraries = let idrName = "idris2-${idris2Packages.idris2.version}"; libSuffix = "lib/${idrName}"; in [ in [ "\\$HOME/.nix-profile/lib/${idrName}" "/run/current-system/sw/lib/${idrName}" "${idris2Packages.idris2}/${idrName}" Loading Loading @@ -33,7 +40,10 @@ let rev = "a77ef2d563418925aa274fa29f06880dde43f4ec"; hash = "sha256-zjfVfkpiQS9AdmTfq0hYRSelJq5Caa9VGTuFLtSvl5o="; }; idrisLibraries = [idris2Api lspLib]; idrisLibraries = [ idris2Api lspLib ]; nativeBuildInputs = [ makeWrapper ]; postInstall = '' Loading @@ -49,4 +59,5 @@ let maintainers = with maintainers; [ mattpolzin ]; }; }; in lspPkg.executable in lspPkg.executable
pkgs/development/compilers/idris2/idris2.nix +74 −56 Original line number Diff line number Diff line # Almost 1:1 copy of idris2's nix/package.nix. Some work done in their flake.nix # we do here instead. { stdenv , lib , chez , chez-racket , clang , gmp , fetchFromGitHub , makeWrapper , gambit , nodejs , zsh , callPackage { stdenv, lib, chez, chez-racket, clang, gmp, fetchFromGitHub, makeWrapper, gambit, nodejs, zsh, callPackage, }: # NOTICE: An `idris2WithPackages` is available at: https://github.com/claymager/idris2-pkgs let platformChez = if (stdenv.system == "x86_64-linux") || (lib.versionAtLeast chez.version "10.0.0") then if (stdenv.system == "x86_64-linux") || (lib.versionAtLeast chez.version "10.0.0") then chez else chez-racket; in stdenv.mkDerivation rec { in stdenv.mkDerivation rec { pname = "idris2"; version = "0.7.0"; Loading @@ -35,27 +36,39 @@ in stdenv.mkDerivation rec { }; strictDeps = true; nativeBuildInputs = [ makeWrapper clang platformChez ] ++ lib.optionals stdenv.isDarwin [ zsh ]; buildInputs = [ platformChez gmp ]; nativeBuildInputs = [ makeWrapper clang platformChez ] ++ lib.optionals stdenv.isDarwin [ zsh ]; buildInputs = [ platformChez gmp ]; prePatch = '' patchShebangs --build tests ''; makeFlags = [ "PREFIX=$(out)" ] ++ lib.optional stdenv.isDarwin "OS="; makeFlags = [ "PREFIX=$(out)" ] ++ lib.optional stdenv.isDarwin "OS="; # The name of the main executable of pkgs.chez is `scheme` buildFlags = [ "bootstrap" "SCHEME=scheme" ]; buildFlags = [ "bootstrap" "SCHEME=scheme" ]; checkTarget = "test"; nativeCheckInputs = [ gambit nodejs ]; # racket ]; nativeCheckInputs = [ gambit nodejs ]; # racket ]; checkFlags = [ "INTERACTIVE=" ]; # TODO: Move this into its own derivation, such that this can be changed # without having to recompile idris2 every time. postInstall = let postInstall = let name = "${pname}-${version}"; globalLibraries = [ "\\$HOME/.nix-profile/lib/${name}" Loading @@ -63,7 +76,8 @@ in stdenv.mkDerivation rec { "$out/${name}" ]; globalLibrariesPath = builtins.concatStringsSep ":" globalLibraries; in '' in '' # Remove existing idris2 wrapper that sets incorrect LD_LIBRARY_PATH rm $out/bin/idris2 # The only thing we need from idris2_app is the actual binary Loading Loading @@ -94,7 +108,11 @@ in stdenv.mkDerivation rec { mainProgram = "idris2"; homepage = "https://github.com/idris-lang/Idris2"; license = lib.licenses.bsd3; maintainers = with lib.maintainers; [ fabianhjr wchresta mattpolzin ]; maintainers = with lib.maintainers; [ fabianhjr wchresta mattpolzin ]; inherit (chez.meta) platforms; }; }