diff options
Diffstat (limited to 'pkgs/development/libraries/haskell/hoogle')
3 files changed, 163 insertions, 12 deletions
diff --git a/pkgs/development/libraries/haskell/hoogle/default.nix b/pkgs/development/libraries/haskell/hoogle/default.nix index 498e71d06d1e..bda89829d68c 100644 --- a/pkgs/development/libraries/haskell/hoogle/default.nix +++ b/pkgs/development/libraries/haskell/hoogle/default.nix @@ -1,29 +1,29 @@ +# This file was auto-generated by cabal2nix. Please do NOT edit manually! + { cabal, aeson, binary, blazeBuilder, Cabal, caseInsensitive -, cmdargs, conduit, deepseq, filepath, haskellSrcExts, hspec -, hspecExpectations, httpTypes, HUnit, parsec, random, safe -, systemFileio, tagsoup, text, time, transformers, uniplate, wai -, warp +, cmdargs, conduit, deepseq, filepath, haskellSrcExts, httpTypes +, parsec, QuickCheck, random, resourcet, safe, shake, tagsoup, text +, time, transformers, uniplate, vector, vectorAlgorithms, wai, warp }: cabal.mkDerivation (self: { pname = "hoogle"; - version = "4.2.23"; - sha256 = "1ykjf0w6c3pzsrzdhxs53nxj84aj2px3gpfc8f53dmgqv3wkyii7"; + version = "4.2.34"; + sha256 = "0vldc7s3nq70jxmnxdzlfrlwg0pxw0lq1lcd53klj2ksjkqhm5jg"; isLibrary = true; isExecutable = true; buildDepends = [ aeson binary blazeBuilder Cabal caseInsensitive cmdargs conduit - deepseq filepath haskellSrcExts httpTypes parsec random safe - tagsoup text time transformers uniplate wai warp - ]; - testDepends = [ - conduit hspec hspecExpectations HUnit systemFileio transformers + deepseq filepath haskellSrcExts httpTypes parsec QuickCheck random + resourcet safe shake tagsoup text time transformers uniplate vector + vectorAlgorithms wai warp ]; + testDepends = [ filepath ]; + testTarget = "--test-option=--no-net"; meta = { homepage = "http://www.haskell.org/hoogle/"; description = "Haskell API Search"; license = self.stdenv.lib.licenses.bsd3; platforms = self.ghc.meta.platforms; - maintainers = [ self.stdenv.lib.maintainers.andres ]; }; }) diff --git a/pkgs/development/libraries/haskell/hoogle/hoogle-local.diff b/pkgs/development/libraries/haskell/hoogle/hoogle-local.diff new file mode 100644 index 000000000000..df507c5a4705 --- /dev/null +++ b/pkgs/development/libraries/haskell/hoogle/hoogle-local.diff @@ -0,0 +1,28 @@ +diff --git a/src/CmdLine/All.hs b/src/CmdLine/All.hs +index 94b1d48..f41f270 100644 +--- a/src/CmdLine/All.hs ++++ b/src/CmdLine/All.hs +@@ -86,8 +86,10 @@ guessLocal = do + ghc <- findExecutable "ghc" + home <- getHomeDirectory + lib <- getLibDir ++ path <- lookup "HOOGLE_DOC_PATH" <$> getEnvironment + let xs = [takeDirectory (takeDirectory lib) </> "doc" {- Windows, installed with Cabal -} ] ++ + [takeDirectory (takeDirectory ghc) </> "doc/html/libraries" | Just ghc <- [ghc] {- Windows, installed by GHC -} ] ++ ++ maybeToList path ++ + [home </> ".cabal/share/doc" {- Linux -} ] + filterM doesDirectoryExist xs + +diff --git a/src/Hoogle/Language/Haskell.hs b/src/Hoogle/Language/Haskell.hs +index b037f11..f2ac047 100644 +--- a/src/Hoogle/Language/Haskell.hs ++++ b/src/Hoogle/Language/Haskell.hs +@@ -112,7 +112,7 @@ setPriority pkg mod x = x{itemPriority = pri} + + setModuleURL (Just pkg) _ x | itemLevel x == 1 = x{itemURL=if null $ itemURL x then f $ itemName x else itemURL x} + where f xs = if "http://hackage.haskell.org/package/" `isPrefixOf` itemURL pkg +- then "http://hackage.haskell.org/packages/archive/" ++ itemName pkg ++ "/latest/doc/html/" ++ file ++ then "http://hackage.haskell.org/package/" ++ itemName pkg ++ "/docs/" ++ file + else takeDirectory (itemURL pkg) ++ "/" ++ file + where file = reps '.' '-' xs ++ ".html" + setModuleURL _ _ x = x diff --git a/pkgs/development/libraries/haskell/hoogle/local.nix b/pkgs/development/libraries/haskell/hoogle/local.nix new file mode 100644 index 000000000000..490898a75b20 --- /dev/null +++ b/pkgs/development/libraries/haskell/hoogle/local.nix @@ -0,0 +1,123 @@ +# Install not only the Hoogle library and executable, but also a local Hoogle +# database which provides "Source" links to all specified 'packages' -- or the +# current Haskell Platform if no custom package set is provided. +# +# It is intended to be used in config.nix similarly to: +# +# { packageOverrides = pkgs: rec { +# +# haskellPackages = +# let callPackage = pkgs.lib.callPackageWith haskellPackages; +# in pkgs.recurseIntoAttrs (pkgs.haskellPackages.override { +# extraPrefs = self: { +# hoogleLocal = pkgs.haskellPackages.hoogleLocal.override { +# packages = with pkgs.haskellPackages; [ +# mmorph +# monadControl +# ] +# }; +# }; +# }); +# }} +# +# This will build mmorph and monadControl, and have the hoogle installation +# refer to their documentation via symlink so they are not garbage collected. + +{ cabal, aeson, binary, blazeBuilder, Cabal, caseInsensitive +, cmdargs, conduit, deepseq, filepath, haskellSrcExts, httpTypes +, parsec, QuickCheck, random, resourcet, safe, shake, tagsoup, text +, time, transformers, uniplate, vector, vectorAlgorithms, wai, warp +, fetchurl + +, parallel, perl, wget, rehoo, haskellPlatform +, packages ? haskellPlatform.propagatedUserEnvPkgs +}: + +cabal.mkDerivation (self: rec { + pname = "hoogle"; + version = "4.2.32"; + sha256 = "1rhr7xh4x9fgflcszbsl176r8jq6rm81bwzmbz73f3pa1zf1v0zc"; + isLibrary = true; + isExecutable = true; + buildInputs = [self.ghc Cabal] ++ self.extraBuildInputs + ++ [ parallel perl wget rehoo ] ++ packages; + buildDepends = [ + aeson binary blazeBuilder Cabal caseInsensitive cmdargs conduit + deepseq filepath haskellSrcExts httpTypes parsec QuickCheck random + resourcet safe shake tagsoup text time transformers uniplate vector + vectorAlgorithms wai warp + ]; + testDepends = [ filepath ]; + testTarget = "--test-option=--no-net"; + + # The tests will fail because of the added documentation. + doCheck = false; + patches = [ ./hoogle-local.diff + (fetchurl { url = "https://github.com/ndmitchell/hoogle/commit/5fc294f2b5412fda107c7700f4d833b52f26184c.diff"; + sha256 = "1fn52g90p2jsy87gf5rqrcg49s8hfwway5hi4v9i2rpg5mzxaq3i"; }) + ]; + + docPackages = packages; + + postInstall = '' + if [ -z "$docPackages" ]; then + echo "ERROR: The packages attribute has not been set" + exit 1 + fi + + mkdir -p $out/share/hoogle/doc + export HOOGLE_DOC_PATH=$out/share/hoogle/doc + + cd $out/share/hoogle + + function import_dbs() { + find $1 -name '*.txt' \ + | parallel -j$NIX_BUILD_CORES 'cp -p {} .; perl -i -pe "print \"\@url file://{//}/index.html\n\" if /^\@version/;" {/}; $out/bin/hoogle convert {/}' + } + + for i in $docPackages; do + import_dbs $i/share/doc + ln -sf $i/share/doc/*-ghc-*/* $out/share/hoogle/doc 2> /dev/null \ + || ln -sf $i/share/doc/* $out/share/hoogle/doc + done + + import_dbs ${self.ghc}/share/doc/ghc*/html/libraries + ln -sf ${self.ghc}/share/doc/ghc*/html/libraries/* $out/share/hoogle/doc + + unset http_proxy + unset ftp_proxy + + chmod 644 *.hoo *.txt + $out/bin/hoogle data -d $PWD --redownload -l $(echo *.txt | sed 's/\.txt//g') + PATH=$out/bin:$PATH ${rehoo}/bin/rehoo -j4 -c64 . + + rm -fr downloads *.txt *.dep + mv default.hoo x || exit 0 + rm -f *.hoo + mv x default.hoo || exit 1 + + if [ ! -f default.hoo ]; then + echo "Unable to build the default Hoogle database" + exit 1 + fi + + mv $out/bin/hoogle $out/bin/.hoogle-wrapped + cat - > $out/bin/hoogle <<EOF + #! ${self.stdenv.shell} + COMMAND=\$1 + shift + HOOGLE_DOC_PATH=$out/share/hoogle/doc exec $out/bin/.hoogle-wrapped \$COMMAND -d $out/share/hoogle "\$@" + EOF + chmod +x $out/bin/hoogle + ''; + + meta = { + homepage = "http://www.haskell.org/hoogle/"; + description = "Haskell API Search"; + license = self.stdenv.lib.licenses.bsd3; + platforms = self.ghc.meta.platforms; + maintainers = [ self.stdenv.lib.maintainers.jwiegley ]; + hydraPlatforms = self.stdenv.lib.platforms.none; + broken = true; + }; +}) |