1+ {-# LANGUAGE CPP #-}
12{-# LANGUAGE DeriveGeneric #-}
23{-# LANGUAGE RecordWildCards #-}
34{-# LANGUAGE BangPatterns #-}
@@ -51,30 +52,39 @@ import Distribution.Package
5152 , Package (.. ), packageVersion , packageName )
5253import Distribution.Types.Dependency
5354import Distribution.Simple.PackageIndex (InstalledPackageIndex )
54- import qualified Distribution.PackageDescription.Parse as PackageDesc.Parse
5555import Distribution.PackageDescription
5656 ( GenericPackageDescription )
57- import Distribution.PackageDescription.Parse
58- ( parsePackageDescription )
5957import Distribution.Simple.Compiler
6058 ( Compiler , PackageDBStack )
6159import Distribution.Simple.Program
6260 ( ProgramDb )
6361import qualified Distribution.Simple.Configure as Configure
6462 ( getInstalledPackages , getInstalledPackagesMonitorFiles )
65- import Distribution.ParseUtils
66- ( ParseResult (.. ) )
6763import Distribution.Version
6864 ( mkVersion , intersectVersionRanges )
6965import Distribution.Text
7066 ( display , simpleParse )
7167import Distribution.Verbosity
7268 ( Verbosity , normal , lessVerbose )
7369import Distribution.Simple.Utils
74- ( die , warn , info , fromUTF8 , ignoreBOM )
70+ ( die , warn , info )
7571import Distribution.Client.Setup
7672 ( RepoContext (.. ) )
7773
74+ #ifdef CABAL_PARSEC
75+ import Distribution.PackageDescription.Parsec
76+ ( parseGenericPackageDescriptionMaybe )
77+ import qualified Distribution.PackageDescription.Parsec as PackageDesc.Parse
78+ #else
79+ import Distribution.ParseUtils
80+ ( ParseResult (.. ) )
81+ import Distribution.PackageDescription.Parse
82+ ( parseGenericPackageDescription )
83+ import Distribution.Simple.Utils
84+ ( fromUTF8 , ignoreBOM )
85+ import qualified Distribution.PackageDescription.Parse as PackageDesc.Parse
86+ #endif
87+
7888import Distribution.Solver.Types.PackageIndex (PackageIndex )
7989import qualified Distribution.Solver.Types.PackageIndex as PackageIndex
8090import Distribution.Solver.Types.SourcePackage
@@ -434,12 +444,20 @@ extractPkg entry blockNo = case Tar.entryContent entry of
434444 Just ver -> Just . return $ Just (NormalPackage pkgid descr content blockNo)
435445 where
436446 pkgid = PackageIdentifier (mkPackageName pkgname) ver
437- parsed = parsePackageDescription . ignoreBOM . fromUTF8 . BS.Char8. unpack
447+ #ifdef CABAL_PARSEC
448+ parsed = parseGenericPackageDescriptionMaybe (BS. toStrict content)
449+ descr = case parsed of
450+ Just d -> d
451+ Nothing -> error $ " Couldn't read cabal file "
452+ ++ show fileName
453+ #else
454+ parsed = parseGenericPackageDescription . ignoreBOM . fromUTF8 . BS.Char8. unpack
438455 $ content
439456 descr = case parsed of
440457 ParseOk _ d -> d
441458 _ -> error $ " Couldn't read cabal file "
442459 ++ show fileName
460+ #endif
443461 _ -> Nothing
444462 _ -> Nothing
445463
@@ -451,7 +469,7 @@ extractPkg entry blockNo = case Tar.entryContent entry of
451469 result <- if not dirExists then return Nothing
452470 else do
453471 cabalFile <- tryFindAddSourcePackageDesc path " Error reading package index."
454- descr <- PackageDesc.Parse. readPackageDescription normal cabalFile
472+ descr <- PackageDesc.Parse. readGenericPackageDescription normal cabalFile
455473 return . Just $ BuildTreeRef (refTypeFromTypeCode typeCode) (packageId descr)
456474 descr path blockNo
457475 return result
@@ -674,7 +692,7 @@ packageListFromCache mkPkg hnd Cache{..} mode = accum mempty [] mempty cacheEntr
674692 path <- liftM byteStringToFilePath . getEntryContent $ blockno
675693 pkg <- do let err = " Error reading package index from cache."
676694 file <- tryFindAddSourcePackageDesc path err
677- PackageDesc.Parse. readPackageDescription normal file
695+ PackageDesc.Parse. readGenericPackageDescription normal file
678696 let srcpkg = mkPkg (BuildTreeRef refType (packageId pkg) pkg path blockno)
679697 accum srcpkgs (srcpkg: btrs) prefs entries
680698
@@ -693,9 +711,15 @@ packageListFromCache mkPkg hnd Cache{..} mode = accum mempty [] mempty cacheEntr
693711
694712 readPackageDescription :: ByteString -> IO GenericPackageDescription
695713 readPackageDescription content =
696- case parsePackageDescription . ignoreBOM . fromUTF8 . BS.Char8. unpack $ content of
714+ #ifdef CABAL_PARSEC
715+ case parseGenericPackageDescriptionMaybe (BS. toStrict content) of
716+ Just gpd -> return gpd
717+ Nothing -> interror " failed to parse .cabal file"
718+ #else
719+ case parseGenericPackageDescription . ignoreBOM . fromUTF8 . BS.Char8. unpack $ content of
697720 ParseOk _ d -> return d
698721 _ -> interror " failed to parse .cabal file"
722+ #endif
699723
700724 interror msg = die $ " internal error when reading package index: " ++ msg
701725 ++ " The package index or index cache is probably "
0 commit comments