FIX BUILD with ghc-6.4.x
[ghc-hetmet.git] / utils / ghc-pkg / Main.hs
index 416ecc1..936b309 100644 (file)
@@ -48,8 +48,13 @@ import System.Exit ( exitWith, ExitCode(..) )
 import System.Environment ( getArgs, getProgName, getEnv )
 import System.IO
 import System.IO.Error (try)
-import Data.List ( isPrefixOf, isSuffixOf, isInfixOf, intersperse, sortBy, nub,
+import Data.List ( isPrefixOf, isSuffixOf, intersperse, sortBy, nub,
                    unfoldr, break )
+#if __GLASGOW_HASKELL__ > 604
+import Data.List ( isInfixOf )
+#else
+import Data.List ( tails )
+#endif
 import Control.Concurrent
 
 #ifdef mingw32_HOST_OS
@@ -720,11 +725,16 @@ missingPackageDeps :: InstalledPackageInfo
                    -> [PackageIdentifier]
 missingPackageDeps pkg pkg_map =
   [ d | d <- depends pkg, isNothing (lookup d pkg_map)] ++
-  [ d | d <- depends pkg, Just p <- return (lookup d pkg_map), isBrokenPackage p pkg_map]
+  [ d | d <- depends pkg, Just p <- return (lookup d pkg_map), 
+                          isBrokenPackage p pkg_map]
 
 isBrokenPackage :: InstalledPackageInfo -> [(PackageIdentifier, InstalledPackageInfo)] -> Bool
-isBrokenPackage pkg pkg_map = not . null $ missingPackageDeps pkg pkg_map
-
+isBrokenPackage pkg pkg_map
+   = not . null $ missingPackageDeps pkg (filter notme pkg_map)
+   where notme (p,ipi) = package pkg /= p
+        -- remove p from the database when we invoke missingPackageDeps,
+        -- because we want mutually recursive groups of package to show up
+        -- as broken. (#1750)
 
 -- -----------------------------------------------------------------------------
 -- Manipulating package.conf files
@@ -1058,3 +1068,8 @@ installSignalHandlers = do
 #else
   return () -- nothing
 #endif
+
+#if __GLASGOW_HASKELL__ <= 604
+isInfixOf               :: (Eq a) => [a] -> [a] -> Bool
+isInfixOf needle haystack = any (isPrefixOf needle) (tails haystack)
+#endif