summary refs log tree commit diff
path: root/pkgs/development/libraries/haskell/hoogle
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries/haskell/hoogle')
-rw-r--r--pkgs/development/libraries/haskell/hoogle/default.nix24
-rw-r--r--pkgs/development/libraries/haskell/hoogle/hoogle-local.diff28
-rw-r--r--pkgs/development/libraries/haskell/hoogle/local.nix123
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;
+  };
+})