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
GHC
Commits
21bfb816
Commit
21bfb816
authored
Dec 30, 2014
by
Andrey Mokhov
Browse files
Implement more arguments for ghc -M.
parent
96dec4ae
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/Oracles.hs
View file @
21bfb816
...
...
@@ -136,7 +136,7 @@ argOption opt = do
data
Flag
=
LaxDeps
|
DynamicGhcPrograms
|
GhcWithInterpreter
|
HsColourSrcs
|
GccIsClang
|
GccLt46
|
CrossCompiling
|
Validating
|
PlatformSupportsSharedLibs
|
WindowsHost
|
WindowsHost
|
SupportsPackageKey
test
::
Flag
->
Action
Bool
test
GhcWithInterpreter
=
do
...
...
@@ -161,12 +161,13 @@ test WindowsHost = do
test
flag
=
do
(
key
,
defaultValue
)
<-
return
$
case
flag
of
LaxDeps
->
(
"lax-dependencies"
,
False
)
-- TODO: move flags to a separate file
DynamicGhcPrograms
->
(
"dynamic-ghc-programs"
,
False
)
GccIsClang
->
(
"gcc-is-clang"
,
False
)
GccLt46
->
(
"gcc-lt-46"
,
False
)
CrossCompiling
->
(
"cross-compiling"
,
False
)
Validating
->
(
"validating"
,
False
)
LaxDeps
->
(
"lax-dependencies"
,
False
)
-- TODO: move flags to a separate file
DynamicGhcPrograms
->
(
"dynamic-ghc-programs"
,
False
)
GccIsClang
->
(
"gcc-is-clang"
,
False
)
GccLt46
->
(
"gcc-lt-46"
,
False
)
CrossCompiling
->
(
"cross-compiling"
,
False
)
Validating
->
(
"validating"
,
False
)
SupportsPackageKey
->
(
"supports-package-key"
,
False
)
let
defaultString
=
if
defaultValue
then
"YES"
else
"NO"
value
<-
askConfigWithDefault
key
$
do
putLoud
$
"
\n
Flag '"
-- TODO: Give the warning *only once* per key
...
...
@@ -264,13 +265,14 @@ packagaDataOptionWithDefault file key defaultAction = do
Just
value
->
return
value
Nothing
->
defaultAction
data
PackageDataKey
=
Modules
|
SrcDirs
data
PackageDataKey
=
Modules
|
SrcDirs
|
PackageKey
packagaDataOption
::
FilePath
->
PackageDataKey
->
Action
String
packagaDataOption
file
key
=
do
let
keyName
=
replaceIf
isSlash
'_'
$
takeDirectory
file
++
case
key
of
Modules
->
"_MODULES"
SrcDirs
->
"_HS_SRC_DIRS"
let
keyName
=
replaceIf
isSlash
'_'
$
takeDirectory
file
++
"_"
++
case
key
of
Modules
->
"MODULES"
SrcDirs
->
"HS_SRC_DIRS"
-- TODO: add "." as a default?
PackageKey
->
"PACKAGE_KEY"
packagaDataOptionWithDefault
file
keyName
$
error
$
"
\n
Cannot find key '"
++
keyName
++
"' in "
++
file
++
"."
...
...
src/Package.hs
View file @
21bfb816
...
...
@@ -161,7 +161,6 @@ buildPackageData pkg @ (Package name path _) (stage, dist, settings) =
,
arg
[
path
</>
dist
</>
"inplace-pkg-config"
]
]
-- "inplace/bin/ghc-stage1.exe" -M -static -H32m -O -this-package-key deeps_FT5iVCELxOr62eHY0nbvnU -hide-all-packages -i -ilibraries/deepseq/. -ilibraries/deepseq/dist-install/build -ilibraries/deepseq/dist-install/build/autogen -Ilibraries/deepseq/dist-install/build -Ilibraries/deepseq/dist-install/build/autogen -Ilibraries/deepseq/. -optP-include -optPlibraries/deepseq/dist-install/build/autogen/cabal_macros.h -package-key array_3w0nMK0JfaFJPpLFn2yWAJ -package-key base_469rOtLAqwTGFEOGWxSUiQ -package-key ghcpr_FgrV6cgh2JHBlbcx1OSlwt -Wall -XHaskell2010 -O2 -no-user-package-db -rtsopts -odir libraries/deepseq/dist-install/build -hidir libraries/deepseq/dist-install/build -stubdir libraries/deepseq/dist-install/build -dep-makefile libraries/deepseq/dist-install/build/.depend-v-p.haskell.tmp -dep-suffix "" -dep-suffix "p_" -include-pkg-deps libraries/deepseq/./Control/DeepSeq.hs
-- $1_$2_$3_MOST_DIR_HC_OPTS = \
-- $$($1_$2_$3_MOST_HC_OPTS) \
...
...
@@ -186,6 +185,8 @@ buildPackageData pkg @ (Package name path _) (stage, dist, settings) =
-- done
-- endif
-- "inplace/bin/ghc-stage1.exe" -M -static -H32m -O -this-package-key deeps_FT5iVCELxOr62eHY0nbvnU -hide-all-packages -i -ilibraries/deepseq/. -ilibraries/deepseq/dist-install/build -ilibraries/deepseq/dist-install/build/autogen -Ilibraries/deepseq/dist-install/build -Ilibraries/deepseq/dist-install/build/autogen -Ilibraries/deepseq/. -optP-include -optPlibraries/deepseq/dist-install/build/autogen/cabal_macros.h -package-key array_3w0nMK0JfaFJPpLFn2yWAJ -package-key base_469rOtLAqwTGFEOGWxSUiQ -package-key ghcpr_FgrV6cgh2JHBlbcx1OSlwt -Wall -XHaskell2010 -O2 -no-user-package-db -rtsopts -odir libraries/deepseq/dist-install/build -hidir libraries/deepseq/dist-install/build -stubdir libraries/deepseq/dist-install/build -dep-makefile libraries/deepseq/dist-install/build/.depend-v-p.haskell.tmp -dep-suffix "" -dep-suffix "p_" -include-pkg-deps libraries/deepseq/./Control/DeepSeq.hs
-- $1_$2_$3_MOST_HC_OPTS = \
-- $$(WAY_$3_HC_OPTS) \
-- $$(CONF_HC_OPTS) \
...
...
@@ -213,24 +214,39 @@ buildPackageData pkg @ (Package name path _) (stage, dist, settings) =
-- $$(SRC_HC_WARNING_OPTS) \
-- $$(EXTRA_HC_OPTS)
-- TODO: double-check that ignoring $1_$2_HS_SRC_DIRS is safe
-- Options CONF_HC_OPTS and
-- TODO: double-check that ignoring SrcDirs ($1_$2_HS_SRC_DIRS) is safe
-- TODO: add $1_HC_OPTS
-- TODO: check that the package is not a program ($1_$2_PROG == "")
-- TODO: handle empty $1_PACKAGE
-- Option CONF_HC_OPTS is skipped
buildPackageDeps
::
Package
->
TodoItem
->
Rules
()
buildPackageDeps
pkg
@
(
Package
name
path
_
)
(
stage
,
dist
,
settings
)
=
let
buildDir
=
path
</>
dist
in
(
buildDir
</>
"build"
</>
name
<.>
"m"
)
%>
\
out
->
do
let
pkgData
=
buildDir
</>
"package-data.mk"
autogen
=
dist
</>
"build"
</>
"autogen"
mods
<-
words
<$>
packagaDataOption
pkgData
Modules
let
pkgData
=
buildDir
</>
"package-data.mk"
autogen
=
dist
</>
"build"
</>
"autogen"
mods
<-
words
<$>
packagaDataOption
pkgData
Modules
srcDirs
<-
words
<$>
packagaDataOption
pkgData
SrcDirs
src
<-
getDirectoryFiles
""
$
do
start
<-
map
(
replaceEq
'.'
'/'
)
mods
end
<-
[
".hs"
,
".lhs"
]
return
$
path
++
"//"
++
start
++
end
packageKey
<-
packagaDataOption
pkgData
PackageKey
run
(
Ghc
stage
)
$
mconcat
[
arg
[
"-M"
]
,
wayHcOpts
vanilla
-- TODO: is this needed? shall we run GHC -M multiple times?
,
splitArgs
$
argOption
SrcHcOpts
,
when
(
stage
==
Stage0
)
$
arg
[
"-package-db libraries/bootstrapping.conf"
]
,
when
(
not
SupportsPackageKey
&&
stage
==
Stage0
)
$
arg
[
"-package-name"
]
,
when
(
SupportsPackageKey
||
stage
/=
Stage0
)
$
arg
[
"-this-package-key"
]
,
arg
[
packageKey
]
,
arg
[
"-hide-all-packages"
]
,
arg
$
map
(
\
d
->
"-i"
++
path
++
"/"
++
d
)
srcDirs
,
arg
$
do
prefix
<-
[
"-i"
,
"-I"
]
suffix
<-
[
"build"
,
"build/autogen"
]
return
$
prefix
++
path
</>
dist
</>
suffix
,
arg
[
"-dep-makefile"
,
out
,
"-dep-suffix"
,
""
,
"-include-pkg-deps"
]
,
arg
[
unwords
src
]
]
...
...
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