haskellPackages.ghcWithHoogle: add passthru.hoogle
Package sets built with `haskellPackages.ghcWithHoogle` provide a Hoogle executable which points to a Hoogle database, but there's no way to programmatically access the derivation containing the Hoogle database from the package set. This adds a `passthru.hoogle` attribute to package sets built with `haskellPackages.ghcWithHoogle`, and a `passthru.database` helper to derivations built with `haskellPackages.hoogleWithPackages`.
This commit is contained in:
parent
7650c61104
commit
03c44317c8
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
COMMAND=$1
|
COMMAND=$1
|
||||||
shift
|
shift
|
||||||
exec @hoogle@/bin/hoogle "$COMMAND" --database @out@/share/doc/hoogle/default.hoo "$@"
|
exec @hoogle@/bin/hoogle "$COMMAND" --database @database@ "$@"
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
buildPackages,
|
buildPackages,
|
||||||
haskellPackages,
|
haskellPackages,
|
||||||
writeText,
|
writeText,
|
||||||
|
runCommand,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
# This argument is a function which selects a list of Haskell packages from any
|
# This argument is a function which selects a list of Haskell packages from any
|
||||||
@ -40,8 +41,11 @@ let
|
|||||||
# we grab the doc outputs
|
# we grab the doc outputs
|
||||||
(map (lib.getOutput "doc") packages);
|
(map (lib.getOutput "doc") packages);
|
||||||
|
|
||||||
|
# Hoogle database path, relative to `$out`.
|
||||||
|
databasePath = "share/doc/hoogle/default.hoo";
|
||||||
|
|
||||||
in
|
in
|
||||||
buildPackages.stdenv.mkDerivation {
|
buildPackages.stdenv.mkDerivation (finalAttrs: {
|
||||||
name = "hoogle-with-packages";
|
name = "hoogle-with-packages";
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
ghc
|
ghc
|
||||||
@ -101,8 +105,10 @@ buildPackages.stdenv.mkDerivation {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
databasePath="$out/"${lib.escapeShellArg databasePath}
|
||||||
|
|
||||||
echo building hoogle database
|
echo building hoogle database
|
||||||
hoogle generate --database $out/share/doc/hoogle/default.hoo --local=$out/share/doc/hoogle
|
hoogle generate --database "$databasePath" --local=$out/share/doc/hoogle
|
||||||
|
|
||||||
echo building haddock index
|
echo building haddock index
|
||||||
# adapted from GHC's gen_contents_index
|
# adapted from GHC's gen_contents_index
|
||||||
@ -122,13 +128,23 @@ buildPackages.stdenv.mkDerivation {
|
|||||||
echo finishing up
|
echo finishing up
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
substitute ${wrapper} $out/bin/hoogle \
|
substitute ${wrapper} $out/bin/hoogle \
|
||||||
--subst-var out --subst-var-by shell ${stdenv.shell} \
|
--subst-var-by shell ${stdenv.shell} \
|
||||||
|
--subst-var-by database "$databasePath" \
|
||||||
--subst-var-by hoogle ${hoogle}
|
--subst-var-by hoogle ${hoogle}
|
||||||
chmod +x $out/bin/hoogle
|
chmod +x $out/bin/hoogle
|
||||||
'';
|
'';
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
isHaskellLibrary = false; # for the filter in ./with-packages-wrapper.nix
|
isHaskellLibrary = false; # for the filter in ./with-packages-wrapper.nix
|
||||||
|
|
||||||
|
# The path to the Hoogle database.
|
||||||
|
database = "${finalAttrs.finalPackage}/${databasePath}";
|
||||||
|
|
||||||
|
tests.can-search-database = runCommand "can-search-database" { } ''
|
||||||
|
# This succeeds even if no results are found, but `Prelude.map` should
|
||||||
|
# always be available.
|
||||||
|
${finalAttrs.finalPackage}/bin/hoogle search Prelude.map > $out
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
@ -137,4 +153,4 @@ buildPackages.stdenv.mkDerivation {
|
|||||||
hydraPlatforms = with lib.platforms; none;
|
hydraPlatforms = with lib.platforms; none;
|
||||||
maintainers = with lib.maintainers; [ ttuegel ];
|
maintainers = with lib.maintainers; [ ttuegel ];
|
||||||
};
|
};
|
||||||
}
|
})
|
||||||
|
|||||||
@ -47,9 +47,9 @@ selectPackages:
|
|||||||
let
|
let
|
||||||
inherit (haskellPackages) llvmPackages ghc;
|
inherit (haskellPackages) llvmPackages ghc;
|
||||||
|
|
||||||
packages =
|
hoogleWithPackages' = if withHoogle then hoogleWithPackages selectPackages else null;
|
||||||
selectPackages haskellPackages
|
|
||||||
++ lib.optional withHoogle (hoogleWithPackages selectPackages);
|
packages = selectPackages haskellPackages ++ [ hoogleWithPackages' ];
|
||||||
|
|
||||||
isGhcjs = ghc.isGhcjs or false;
|
isGhcjs = ghc.isGhcjs or false;
|
||||||
isHaLVM = ghc.isHaLVM or false;
|
isHaLVM = ghc.isHaLVM or false;
|
||||||
@ -202,6 +202,8 @@ else
|
|||||||
passthru = {
|
passthru = {
|
||||||
inherit (ghc) version meta;
|
inherit (ghc) version meta;
|
||||||
|
|
||||||
|
hoogle = hoogleWithPackages';
|
||||||
|
|
||||||
# Inform users about backwards incompatibilities with <= 21.05
|
# Inform users about backwards incompatibilities with <= 21.05
|
||||||
override =
|
override =
|
||||||
_:
|
_:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user