Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Glasgow Haskell Compiler
Packages
Cabal
Commits
c621a78a
Commit
c621a78a
authored
Jan 26, 2017
by
Oleg Grenrus
Committed by
GitHub
Jan 26, 2017
Browse files
Merge pull request #4235 from phadej/cabal-install-parsec-2
parsec for cabal-install
parents
4d08a8ab
b27aa253
Changes
18
Hide whitespace changes
Inline
Side-by-side
Cabal/Distribution/PackageDescription/Parse.hs
View file @
c621a78a
...
...
@@ -19,6 +19,10 @@
module
Distribution.PackageDescription.Parse
(
-- * Package descriptions
readGenericPackageDescription
,
parseGenericPackageDescription
,
-- ** Deprecated names
readPackageDescription
,
parsePackageDescription
,
...
...
@@ -592,10 +596,14 @@ readHookedBuildInfo :: Verbosity -> FilePath -> IO HookedBuildInfo
readHookedBuildInfo
=
readAndParseFile
withFileContents
parseHookedBuildInfo
-- |Parse the given package file.
readPackageDescription
::
Verbosity
->
FilePath
->
IO
GenericPackageDescription
readPackageDescription
=
readAndParseFile
withUTF8FileContents
parsePackageDescription
readPackageDescription
=
readGenericPackageDescription
{-# DEPRECATED readPackageDescription "Use readGenericPackageDescription, old name is missleading." #-}
-- | Parse the given package file.
readGenericPackageDescription
::
Verbosity
->
FilePath
->
IO
GenericPackageDescription
readGenericPackageDescription
=
readAndParseFile
withUTF8FileContents
parseGenericPackageDescription
stanzas
::
[
Field
]
->
[[
Field
]]
stanzas
[]
=
[]
...
...
@@ -713,12 +721,16 @@ skipField = modify tail
--FIXME: this should take a ByteString, not a String. We have to be able to
-- decode UTF8 and handle the BOM.
parsePackageDescription
::
String
->
ParseResult
GenericPackageDescription
parsePackageDescription
=
parseGenericPackageDescription
{-# DEPRECATED parsePackageDescription "Use parseGenericPackageDescription, old name is missleading" #-}
-- | Parses the given file into a 'GenericPackageDescription'.
--
-- In Cabal 1.2 the syntax for package descriptions was changed to a format
-- with sections and possibly indented property descriptions.
parsePackageDescription
::
String
->
ParseResult
GenericPackageDescription
parsePackageDescription
file
=
do
parse
Generic
PackageDescription
::
String
->
ParseResult
GenericPackageDescription
parse
Generic
PackageDescription
file
=
do
-- This function is quite complex because it needs to be able to parse
-- both pre-Cabal-1.2 and post-Cabal-1.2 files. Additionally, it contains
...
...
Cabal/Distribution/PackageDescription/Parsec.hs
View file @
c621a78a
...
...
@@ -19,9 +19,11 @@ module Distribution.PackageDescription.Parsec (
-- * Package descriptions
readGenericPackageDescription
,
parseGenericPackageDescription
,
parseGenericPackageDescriptionMaybe
,
-- ** Parsing
ParseResult
,
runParseResult
,
-- ** Supplementary build information
-- readHookedBuildInfo,
...
...
@@ -105,6 +107,13 @@ parseGenericPackageDescription bs = case readFields' bs of
-- TODO: better marshalling of errors
Left
perr
->
parseFatalFailure
(
Position
0
0
)
(
show
perr
)
-- | 'Maybe' variant of 'parseGenericPackageDescription'
parseGenericPackageDescriptionMaybe
::
BS
.
ByteString
->
Maybe
GenericPackageDescription
parseGenericPackageDescriptionMaybe
=
trdOf3
.
runParseResult
.
parseGenericPackageDescription
where
trdOf3
(
_
,
_
,
x
)
=
x
runFieldParser
::
FieldParser
a
->
[
FieldLine
Position
]
->
ParseResult
a
runFieldParser
p
ls
=
runFieldParser'
pos
p
=<<
fieldlinesToString
pos
ls
where
...
...
Cabal/Distribution/Simple.hs
View file @
c621a78a
...
...
@@ -237,10 +237,8 @@ confPkgDescr hooks verbosity mb_path = do
Just
path
->
return
path
#
ifdef
CABAL_PARSEC
info
verbosity
"Using Parsec parser"
descr
<-
readGenericPackageDescription
verbosity
pdfile
#
else
descr
<-
readPackageDescription
verbosity
pdfile
#
endif
descr
<-
readGenericPackageDescription
verbosity
pdfile
return
(
Just
pdfile
,
descr
)
buildAction
::
UserHooks
->
BuildFlags
->
Args
->
IO
()
...
...
Cabal/tests/ParserHackageTests.hs
View file @
c621a78a
...
...
@@ -30,7 +30,6 @@ import qualified Distribution.PackageDescription.Parse as ReadP
import
qualified
Distribution.PackageDescription.Parsec
as
Parsec
import
qualified
Distribution.Parsec.Parser
as
Parsec
import
qualified
Distribution.Parsec.Types.Common
as
Parsec
import
qualified
Distribution.Parsec.Types.ParseResult
as
Parsec
import
qualified
Distribution.ParseUtils
as
ReadP
import
qualified
Distribution.Compat.DList
as
DList
...
...
@@ -97,7 +96,7 @@ compareTest pfx fpath bsl
let
str
=
ignoreBOM
$
fromUTF8LBS
bsl
putStrLn
$
"::: "
++
fpath
(
readp
,
readpWarnings
)
<-
case
ReadP
.
parsePackageDescription
str
of
(
readp
,
readpWarnings
)
<-
case
ReadP
.
parse
Generic
PackageDescription
str
of
ReadP
.
ParseOk
ws
x
->
return
(
x
,
ws
)
ReadP
.
ParseFailed
err
->
print
err
>>
exitFailure
traverse_
(
putStrLn
.
ReadP
.
showPWarning
fpath
)
readpWarnings
...
...
@@ -155,7 +154,7 @@ compareTest pfx fpath bsl
parseReadpTest
::
FilePath
->
BSL
.
ByteString
->
IO
()
parseReadpTest
fpath
bsl
=
when
(
not
$
any
(
$
fpath
)
problematicFiles
)
$
do
let
str
=
fromUTF8LBS
bsl
case
ReadP
.
parsePackageDescription
str
of
case
ReadP
.
parse
Generic
PackageDescription
str
of
ReadP
.
ParseOk
_
_
->
return
()
ReadP
.
ParseFailed
err
->
print
err
>>
exitFailure
...
...
cabal-install/Distribution/Client/Check.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
-- Module : Distribution.Client.Check
...
...
@@ -17,8 +18,12 @@ module Distribution.Client.Check (
import
Control.Monad
(
when
,
unless
)
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readGenericPackageDescription
)
#
endif
import
Distribution.PackageDescription.Check
import
Distribution.PackageDescription.Configuration
(
flattenPackageDescription
)
...
...
@@ -30,7 +35,7 @@ import Distribution.Simple.Utils
check
::
Verbosity
->
IO
Bool
check
verbosity
=
do
pdfile
<-
defaultPackageDesc
verbosity
ppd
<-
readPackageDescription
verbosity
pdfile
ppd
<-
read
Generic
PackageDescription
verbosity
pdfile
-- flatten the generic package description into a regular package
-- description
-- TODO: this may give more warnings than it should give;
...
...
cabal-install/Distribution/Client/Configure.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
-- Module : Distribution.Client.Configure
...
...
@@ -67,8 +68,13 @@ import Distribution.Package
import
Distribution.Types.Dependency
(
Dependency
(
..
),
thisPackageVersion
)
import
qualified
Distribution.PackageDescription
as
PkgDesc
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
(
readGenericPackageDescription
)
#
endif
import
Distribution.PackageDescription.Configuration
(
finalizePD
)
import
Distribution.Version
...
...
@@ -296,7 +302,7 @@ planLocalPackage :: Verbosity -> Compiler
->
IO
(
Progress
String
String
SolverInstallPlan
)
planLocalPackage
verbosity
comp
platform
configFlags
configExFlags
installedPkgIndex
(
SourcePackageDb
_
packagePrefs
)
pkgConfigDb
=
do
pkg
<-
readPackageDescription
verbosity
=<<
pkg
<-
read
Generic
PackageDescription
verbosity
=<<
case
flagToMaybe
(
configCabalFilePath
configFlags
)
of
Nothing
->
defaultPackageDesc
verbosity
Just
fp
->
return
fp
...
...
cabal-install/Distribution/Client/GenBounds.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
-- Module : Distribution.Client.GenBounds
...
...
@@ -28,8 +29,13 @@ import Distribution.PackageDescription
(
buildDepends
)
import
Distribution.PackageDescription.Configuration
(
finalizePD
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
(
readGenericPackageDescription
)
#
endif
import
Distribution.Types.ComponentRequestedSpec
(
defaultComponentRequestedSpec
)
import
Distribution.Types.Dependency
...
...
@@ -109,7 +115,7 @@ genBounds verbosity packageDBs repoCtxt comp platform progdb mSandboxPkgInfo
cwd
<-
getCurrentDirectory
path
<-
tryFindPackageDesc
cwd
gpd
<-
readPackageDescription
verbosity
path
gpd
<-
read
Generic
PackageDescription
verbosity
path
-- NB: We don't enable tests or benchmarks, since often they
-- don't really have useful bounds.
let
epd
=
finalizePD
[]
defaultComponentRequestedSpec
...
...
cabal-install/Distribution/Client/IndexUtils.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE BangPatterns #-}
...
...
@@ -51,19 +52,14 @@ import Distribution.Package
,
Package
(
..
),
packageVersion
,
packageName
)
import
Distribution.Types.Dependency
import
Distribution.Simple.PackageIndex
(
InstalledPackageIndex
)
import
qualified
Distribution.PackageDescription.Parse
as
PackageDesc.Parse
import
Distribution.PackageDescription
(
GenericPackageDescription
)
import
Distribution.PackageDescription.Parse
(
parsePackageDescription
)
import
Distribution.Simple.Compiler
(
Compiler
,
PackageDBStack
)
import
Distribution.Simple.Program
(
ProgramDb
)
import
qualified
Distribution.Simple.Configure
as
Configure
(
getInstalledPackages
,
getInstalledPackagesMonitorFiles
)
import
Distribution.ParseUtils
(
ParseResult
(
..
)
)
import
Distribution.Version
(
mkVersion
,
intersectVersionRanges
)
import
Distribution.Text
...
...
@@ -71,10 +67,24 @@ import Distribution.Text
import
Distribution.Verbosity
(
Verbosity
,
normal
,
lessVerbose
)
import
Distribution.Simple.Utils
(
die
,
warn
,
info
,
fromUTF8
,
ignoreBOM
)
(
die
,
warn
,
info
)
import
Distribution.Client.Setup
(
RepoContext
(
..
)
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
parseGenericPackageDescriptionMaybe
)
import
qualified
Distribution.PackageDescription.Parsec
as
PackageDesc.Parse
#
else
import
Distribution.ParseUtils
(
ParseResult
(
..
)
)
import
Distribution.PackageDescription.Parse
(
parseGenericPackageDescription
)
import
Distribution.Simple.Utils
(
fromUTF8
,
ignoreBOM
)
import
qualified
Distribution.PackageDescription.Parse
as
PackageDesc.Parse
#
endif
import
Distribution.Solver.Types.PackageIndex
(
PackageIndex
)
import
qualified
Distribution.Solver.Types.PackageIndex
as
PackageIndex
import
Distribution.Solver.Types.SourcePackage
...
...
@@ -434,12 +444,20 @@ extractPkg entry blockNo = case Tar.entryContent entry of
Just
ver
->
Just
.
return
$
Just
(
NormalPackage
pkgid
descr
content
blockNo
)
where
pkgid
=
PackageIdentifier
(
mkPackageName
pkgname
)
ver
parsed
=
parsePackageDescription
.
ignoreBOM
.
fromUTF8
.
BS
.
Char8
.
unpack
#
ifdef
CABAL_PARSEC
parsed
=
parseGenericPackageDescriptionMaybe
(
BS
.
toStrict
content
)
descr
=
case
parsed
of
Just
d
->
d
Nothing
->
error
$
"Couldn't read cabal file "
++
show
fileName
#
else
parsed
=
parseGenericPackageDescription
.
ignoreBOM
.
fromUTF8
.
BS
.
Char8
.
unpack
$
content
descr
=
case
parsed
of
ParseOk
_
d
->
d
_
->
error
$
"Couldn't read cabal file "
++
show
fileName
#
endif
_
->
Nothing
_
->
Nothing
...
...
@@ -451,7 +469,7 @@ extractPkg entry blockNo = case Tar.entryContent entry of
result
<-
if
not
dirExists
then
return
Nothing
else
do
cabalFile
<-
tryFindAddSourcePackageDesc
path
"Error reading package index."
descr
<-
PackageDesc
.
Parse
.
readPackageDescription
normal
cabalFile
descr
<-
PackageDesc
.
Parse
.
read
Generic
PackageDescription
normal
cabalFile
return
.
Just
$
BuildTreeRef
(
refTypeFromTypeCode
typeCode
)
(
packageId
descr
)
descr
path
blockNo
return
result
...
...
@@ -674,7 +692,7 @@ packageListFromCache mkPkg hnd Cache{..} mode = accum mempty [] mempty cacheEntr
path
<-
liftM
byteStringToFilePath
.
getEntryContent
$
blockno
pkg
<-
do
let
err
=
"Error reading package index from cache."
file
<-
tryFindAddSourcePackageDesc
path
err
PackageDesc
.
Parse
.
readPackageDescription
normal
file
PackageDesc
.
Parse
.
read
Generic
PackageDescription
normal
file
let
srcpkg
=
mkPkg
(
BuildTreeRef
refType
(
packageId
pkg
)
pkg
path
blockno
)
accum
srcpkgs
(
srcpkg
:
btrs
)
prefs
entries
...
...
@@ -693,9 +711,15 @@ packageListFromCache mkPkg hnd Cache{..} mode = accum mempty [] mempty cacheEntr
readPackageDescription
::
ByteString
->
IO
GenericPackageDescription
readPackageDescription
content
=
case
parsePackageDescription
.
ignoreBOM
.
fromUTF8
.
BS
.
Char8
.
unpack
$
content
of
#
ifdef
CABAL_PARSEC
case
parseGenericPackageDescriptionMaybe
(
BS
.
toStrict
content
)
of
Just
gpd
->
return
gpd
Nothing
->
interror
"failed to parse .cabal file"
#
else
case
parseGenericPackageDescription
.
ignoreBOM
.
fromUTF8
.
BS
.
Char8
.
unpack
$
content
of
ParseOk
_
d
->
return
d
_
->
interror
"failed to parse .cabal file"
#
endif
interror
msg
=
die
$
"internal error when reading package index: "
++
msg
++
"The package index or index cache is probably "
...
...
cabal-install/Distribution/Client/Outdated.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
-- Module : Distribution.Client.Outdated
...
...
@@ -28,8 +29,6 @@ import Distribution.Client.Sandbox.PackageEnvironment
import
Distribution.Package
(
PackageName
,
packageVersion
)
import
Distribution.PackageDescription
(
buildDepends
)
import
Distribution.PackageDescription.Configuration
(
finalizePD
)
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
import
Distribution.Simple.Compiler
(
Compiler
,
compilerInfo
)
import
Distribution.Simple.Setup
(
fromFlagOrDefault
)
import
Distribution.Simple.Utils
...
...
@@ -43,6 +42,13 @@ import Distribution.Verbosity (Verbosity, silent)
import
Distribution.Version
(
Version
,
LowerBound
(
..
),
UpperBound
(
..
)
,
asVersionIntervals
,
majorBoundVersion
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readGenericPackageDescription
)
#
endif
import
qualified
Data.Set
as
S
import
System.Directory
(
getCurrentDirectory
)
...
...
@@ -134,7 +140,7 @@ depsFromPkgDesc :: Verbosity -> Compiler -> Platform -> IO [Dependency]
depsFromPkgDesc
verbosity
comp
platform
=
do
cwd
<-
getCurrentDirectory
path
<-
tryFindPackageDesc
cwd
gpd
<-
readPackageDescription
verbosity
path
gpd
<-
read
Generic
PackageDescription
verbosity
path
let
cinfo
=
compilerInfo
comp
epd
=
finalizePD
[]
(
ComponentRequestedSpec
True
True
)
(
const
True
)
platform
cinfo
[]
gpd
...
...
cabal-install/Distribution/Client/ProjectConfig.hs
View file @
c621a78a
...
...
@@ -76,8 +76,13 @@ import Distribution.System
(
Platform
)
import
Distribution.PackageDescription
(
SourceRepo
(
..
)
)
#
if
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
(
readGenericPackageDescription
)
#
endif
import
Distribution.Simple.Compiler
(
Compiler
,
compilerInfo
)
import
Distribution.Simple.Program
...
...
@@ -867,7 +872,7 @@ readSourcePackage verbosity (ProjectPackageLocalCabalFile cabalFile) =
readSourcePackage
verbosity
(
ProjectPackageLocalDirectory
dir
cabalFile
)
=
do
monitorFiles
[
monitorFileHashed
cabalFile
]
root
<-
askRoot
pkgdesc
<-
liftIO
$
readPackageDescription
verbosity
(
root
</>
cabalFile
)
pkgdesc
<-
liftIO
$
read
Generic
PackageDescription
verbosity
(
root
</>
cabalFile
)
return
SourcePackage
{
packageInfoId
=
packageId
pkgdesc
,
packageDescription
=
pkgdesc
,
...
...
cabal-install/Distribution/Client/Sandbox.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
-----------------------------------------------------------------------------
-- |
...
...
@@ -79,7 +80,11 @@ import Distribution.Client.Utils ( inDir, tryCanonicalizePath
,
tryFindAddSourcePackageDesc
)
import
Distribution.PackageDescription.Configuration
(
flattenPackageDescription
)
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readGenericPackageDescription
)
#
endif
import
Distribution.Simple.Compiler
(
Compiler
(
..
),
PackageDB
(
..
)
)
import
Distribution.Simple.Configure
(
configCompilerAuxEx
,
getPackageDBContents
...
...
@@ -436,7 +441,7 @@ sandboxAddSourceSnapshot verbosity buildTreeRefs sandboxDir pkgEnv = do
pkgs
<-
forM
buildTreeRefs
$
\
buildTreeRef
->
inDir
(
Just
buildTreeRef
)
$
return
.
flattenPackageDescription
=<<
readPackageDescription
verbosity
=<<
read
Generic
PackageDescription
verbosity
=<<
defaultPackageDesc
verbosity
-- Copy the package sources to "snapshots/$PKGNAME-$VERSION-tmp". If
...
...
@@ -735,7 +740,7 @@ withSandboxPackageInfo verbosity configFlags globalFlags
let
err
=
"Error reading sandbox package information."
-- Get the package descriptions for all add-source deps.
depsCabalFiles
<-
mapM
(
flip
tryFindAddSourcePackageDesc
err
)
buildTreeRefs
depsPkgDescs
<-
mapM
(
readPackageDescription
verbosity
)
depsCabalFiles
depsPkgDescs
<-
mapM
(
read
Generic
PackageDescription
verbosity
)
depsCabalFiles
let
depsMap
=
M
.
fromList
(
zip
buildTreeRefs
depsPkgDescs
)
isInstalled
pkgid
=
not
.
null
.
InstalledPackageIndex
.
lookupSourcePackageId
installedPkgIndex
$
pkgid
...
...
cabal-install/Distribution/Client/SetupWrapper.hs
View file @
c621a78a
...
...
@@ -39,8 +39,13 @@ import Distribution.PackageDescription
(
GenericPackageDescription
(
packageDescription
)
,
PackageDescription
(
..
),
specVersion
,
BuildType
(
..
),
knownBuildTypes
,
defaultRenaming
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
(
readGenericPackageDescription
)
#
endif
import
Distribution.Simple.Configure
(
configCompilerEx
)
import
Distribution.Compiler
...
...
@@ -302,7 +307,7 @@ getSetup verbosity options mpkg = do
}
where
getPkg
=
tryFindPackageDesc
(
fromMaybe
"."
(
useWorkingDir
options
))
>>=
readPackageDescription
verbosity
>>=
read
Generic
PackageDescription
verbosity
>>=
return
.
packageDescription
checkBuildType
(
UnknownBuildType
name
)
=
...
...
cabal-install/Distribution/Client/SrcDist.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
{-# LANGUAGE NondecreasingIndentation #-}
{-# LANGUAGE FlexibleContexts #-}
-- Implements the \"@.\/cabal sdist@\" command, which creates a source
...
...
@@ -19,8 +20,13 @@ import Distribution.PackageDescription
(
PackageDescription
)
import
Distribution.PackageDescription.Configuration
(
flattenPackageDescription
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
(
readGenericPackageDescription
)
#
endif
import
Distribution.Simple.Utils
(
createDirectoryIfMissingVerbose
,
defaultPackageDesc
,
warn
,
die
,
notice
,
withTempDirectory
)
...
...
@@ -51,7 +57,7 @@ import Control.Exception (IOException, evaluate)
sdist
::
SDistFlags
->
SDistExFlags
->
IO
()
sdist
flags
exflags
=
do
pkg
<-
liftM
flattenPackageDescription
(
readPackageDescription
verbosity
=<<
defaultPackageDesc
verbosity
)
(
read
Generic
PackageDescription
verbosity
=<<
defaultPackageDesc
verbosity
)
let
withDir
::
(
FilePath
->
IO
a
)
->
IO
a
withDir
=
if
not
needMakeArchive
then
\
f
->
f
tmpTargetDir
else
withTempDirectory
verbosity
tmpTargetDir
"sdist."
...
...
@@ -156,7 +162,7 @@ allPackageSourceFiles verbosity setupOpts0 packageDir = do
pkg
<-
do
let
err
=
"Error reading source files of package."
desc
<-
tryFindAddSourcePackageDesc
packageDir
err
flattenPackageDescription
`
fmap
`
readPackageDescription
verbosity
desc
flattenPackageDescription
`
fmap
`
read
Generic
PackageDescription
verbosity
desc
globalTmp
<-
getTemporaryDirectory
withTempDirectory
verbosity
globalTmp
"cabal-list-sources."
$
\
tempDir
->
do
let
file
=
tempDir
</>
"cabal-sdist-list-sources"
...
...
cabal-install/Distribution/Client/Targets.hs
View file @
c621a78a
{-# LANGUAGE CPP #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable #-}
...
...
@@ -81,22 +82,30 @@ import Distribution.Client.GlobalFlags
import
Distribution.PackageDescription
(
GenericPackageDescription
,
parseFlagAssignment
)
import
Distribution.PackageDescription.Parse
(
readPackageDescription
,
parsePackageDescription
,
ParseResult
(
..
)
)
import
Distribution.Version
(
nullVersion
,
thisVersion
,
anyVersion
,
isAnyVersion
)
import
Distribution.Text
(
Text
(
..
),
display
)
import
Distribution.Verbosity
(
Verbosity
)
import
Distribution.Simple.Utils
(
die
,
warn
,
fromUTF8
,
lowercase
,
ignoreBOM
)
(
die
,
warn
,
lowercase
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
,
parseGenericPackageDescriptionMaybe
)
#
else
import
Distribution.PackageDescription.Parse
(
readGenericPackageDescription
,
parseGenericPackageDescription
,
ParseResult
(
..
)
)
import
Distribution.Simple.Utils
(
fromUTF8
,
ignoreBOM
)
import
qualified
Data.ByteString.Lazy.Char8
as
BS.Char8
#
endif
-- import Data.List ( find, nub )
import
Data.Either
(
partitionEithers
)
import
qualified
Data.Map
as
Map
import
qualified
Data.ByteString.Lazy
as
BS
import
qualified
Data.ByteString.Lazy.Char8
as
BS.Char8
import
qualified
Distribution.Client.GZipUtils
as
GZipUtils
import
Control.Monad
(
mapM
)
import
qualified
Distribution.Compat.ReadP
as
Parse
...
...
@@ -483,7 +492,7 @@ readPackageTarget verbosity = traverse modifyLocation
LocalUnpackedPackage
dir
->
do
pkg
<-
tryFindPackageDesc
dir
(
localPackageError
dir
)
>>=
readPackageDescription
verbosity
read
Generic
PackageDescription
verbosity
return
$
SourcePackage
{
packageInfoId
=
packageId
pkg
,
packageDescription
=
pkg
,
...
...
@@ -549,11 +558,15 @@ readPackageTarget verbosity = traverse modifyLocation
_
->
False
parsePackageDescription'
::
BS
.
ByteString
->
Maybe
GenericPackageDescription
#
ifdef
CABAL_PARSEC
parsePackageDescription'
bs
=
parseGenericPackageDescriptionMaybe
(
BS
.
toStrict
bs
)
#
else
parsePackageDescription'
content
=
case
parsePackageDescription
.
ignoreBOM
.
fromUTF8
.
BS
.
Char8
.
unpack
$
content
of
case
parse
Generic
PackageDescription
.
ignoreBOM
.
fromUTF8
.
BS
.
Char8
.
unpack
$
content
of
ParseOk
_
pkg
->
Just
pkg
_
->
Nothing
#
endif
-- ------------------------------------------------------------
-- * Checking package targets
...
...
cabal-install/Main.hs
View file @
c621a78a
...
...
@@ -135,8 +135,12 @@ import Distribution.Client.Utils (determineNumJobs
import
Distribution.Package
(
packageId
)
import
Distribution.PackageDescription
(
BuildType
(
..
),
Executable
(
..
),
buildable
)
import
Distribution.PackageDescription.Parse
(
readPackageDescription
)
#
ifdef
CABAL_PARSEC
import
Distribution.PackageDescription.Parsec
(
readGenericPackageDescription
)
#
else
import
Distribution.PackageDescription.Parse
(
readGenericPackageDescription
)
#
endif
import
Distribution.PackageDescription.PrettyPrint
(
writeGenericPackageDescription
)
import
qualified
Distribution.Simple
as
Simple
...
...
@@ -985,7 +989,7 @@ formatAction verbosityFlag extraArgs _globalFlags = do
[]
->
do
cwd
<-
getCurrentDirectory
tryFindPackageDesc
cwd
(
p
:
_
)
->
return
p
pkgDesc
<-
readPackageDescription
verbosity
path
pkgDesc
<-
read
Generic
PackageDescription
verbosity
path
-- Uses 'writeFileAtomic' under the hood.
writeGenericPackageDescription
path
pkgDesc
...
...
cabal-install/cabal-install.cabal
View file @
c621a78a
...
...
@@ -194,6 +194,11 @@ Flag debug-tracetree
description: Compile in support for tracetree (used to debug the solver)
default: False
flag parsec
description: Use parsec parser. This requires 'Cabal' library built with its parsec flag enabled.
default: False
manual: True
executable cabal
main-is: Main.hs
ghc-options: -Wall -fwarn-tabs -rtsopts
...
...
@@ -405,6 +410,9 @@ executable cabal
cpp-options: -DDEBUG_TRACETREE
build-depends: tracetree >= 0.1 && < 0.2
if flag(parsec)
cpp-options: -DCABAL_PARSEC
default-language: Haskell2010
-- Small, fast running tests.
...
...
cabal-testsuite/Test/Cabal/Prelude.hs
View file @
c621a78a
...
...
@@ -139,7 +139,7 @@ setup' cmd args = do
then
runProgramM
cabalProgram
full_args
else
do
pdfile
<-
liftIO
$
tryFindPackageDesc
(
testCurrentDir
env
)
pdesc
<-
liftIO
$
readPackageDescription
(
testVerbosity
env
)
pdfile
pdesc
<-
liftIO
$
read
Generic
PackageDescription
(
testVerbosity
env
)
pdfile
if
buildType
(
packageDescription
pdesc
)
==
Just
Simple
then
runM
(
testSetupPath
env
)
full_args
-- Run the Custom script!
...
...
stack.yaml
View file @
c621a78a
...
...
@@ -53,6 +53,10 @@ extra-deps:
-
vector-0.12.0.0
-
zlib-0.6.1.1
flags
:
Cabal
:
parsec
:
true
cabal-install
:
parsec
:
true
time-locale-compat
:
old-locale
:
false
nix
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment