summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerthalion <9erthalion6@gmail.com>2019-04-05 22:01:52 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-04-16 15:40:36 -0400
commit57eb5bc61317e5cdf1fd5745036e443037a37451 (patch)
tree6397f09d8c0947903f7f3b3eb3a41ea890890a34
parentbe05bd8168b0ea65d63dc0093a5c8781a2528500 (diff)
downloadhaskell-57eb5bc61317e5cdf1fd5745036e443037a37451.tar.gz
Show dynamic object files (#16062)
Closes #16062. When -dynamic-too is specified, reflect that in the progress message, like: $ ghc Main.hs -dynamic-too [1 of 1] Compiling Lib ( Main.hs, Main.o, Main.dyn_o ) instead of: $ ghc Main.hs -dynamic-too [1 of 1] Compiling Lib ( Main.hs, Main.o )
-rw-r--r--compiler/main/DynFlags.hs11
-rw-r--r--compiler/main/HscTypes.hs29
-rw-r--r--testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs1
-rw-r--r--testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile16
-rw-r--r--testsuite/tests/driver/dynamicToo/dynamicToo006/all.T2
-rw-r--r--testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout2
-rw-r--r--testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr4
7 files changed, 51 insertions, 14 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index dc12879776..786deccf3c 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -41,6 +41,7 @@ module DynFlags (
whenGeneratingDynamicToo, ifGeneratingDynamicToo,
whenCannotGenerateDynamicToo,
dynamicTooMkDynamicDynFlags,
+ dynamicOutputFile,
DynFlags(..),
FlagSpec(..),
HasDynFlags(..), ContainsDynFlags(..),
@@ -1823,6 +1824,12 @@ dynamicTooMkDynamicDynFlags dflags0
dflags4 = gopt_unset dflags3 Opt_BuildDynamicToo
in dflags4
+-- | Compute the path of the dynamic object corresponding to an object file.
+dynamicOutputFile :: DynFlags -> FilePath -> FilePath
+dynamicOutputFile dflags outputFile = dynOut outputFile
+ where
+ dynOut = flip addExtension (dynObjectSuf dflags) . dropExtension
+
-----------------------------------------------------------------------------
-- | Used by 'GHC.runGhc' to partially initialize a new 'DynFlags' value
@@ -2772,11 +2779,11 @@ parseDynamicFlagsFull activeFlags cmdline dflags0 args = do
let chooseOutput
| isJust (outputFile dflags3) -- Only iff user specified -o ...
, not (isJust (dynOutputFile dflags3)) -- but not -dyno
- = return $ dflags3 { dynOutputFile = Just $ dynOut (fromJust $ outputFile dflags3) }
+ = return $ dflags3 { dynOutputFile = Just $ dynamicOutputFile dflags3 outFile }
| otherwise
= return dflags3
where
- dynOut = flip addExtension (dynObjectSuf dflags3) . dropExtension
+ outFile = fromJust $ outputFile dflags3
dflags4 <- ifGeneratingDynamicToo dflags3 chooseOutput (return dflags3)
let (dflags5, consistency_warnings) = makeDynFlagsConsistent dflags4
diff --git a/compiler/main/HscTypes.hs b/compiler/main/HscTypes.hs
index f4306f3d16..8c41f9b9fc 100644
--- a/compiler/main/HscTypes.hs
+++ b/compiler/main/HscTypes.hs
@@ -2805,6 +2805,9 @@ msHsFilePath ms = expectJust "msHsFilePath" (ml_hs_file (ms_location ms))
msHiFilePath ms = ml_hi_file (ms_location ms)
msObjFilePath ms = ml_obj_file (ms_location ms)
+msDynObjFilePath :: ModSummary -> DynFlags -> FilePath
+msDynObjFilePath ms dflags = dynamicOutputFile dflags (msObjFilePath ms)
+
-- | Did this 'ModSummary' originate from a hs-boot file?
isBootSummary :: ModSummary -> Bool
isBootSummary ms = ms_hsc_src ms == HsBootFile
@@ -2824,20 +2827,26 @@ showModMsg :: DynFlags -> HscTarget -> Bool -> ModSummary -> String
showModMsg dflags target recomp mod_summary = showSDoc dflags $
if gopt Opt_HideSourcePaths dflags
then text mod_str
- else hsep
+ else hsep $
[ text (mod_str ++ replicate (max 0 (16 - length mod_str)) ' ')
, char '('
, text (op $ msHsFilePath mod_summary) <> char ','
- , case target of
- HscInterpreted | recomp -> text "interpreted"
- HscNothing -> text "nothing"
- _ -> text (op $ msObjFilePath mod_summary)
- , char ')'
- ]
+ ] ++
+ if gopt Opt_BuildDynamicToo dflags
+ then [ text obj_file <> char ','
+ , text dyn_file
+ , char ')'
+ ]
+ else [ text obj_file, char ')' ]
where
- op = normalise
- mod = moduleName (ms_mod mod_summary)
- mod_str = showPpr dflags mod ++ hscSourceString (ms_hsc_src mod_summary)
+ op = normalise
+ mod = moduleName (ms_mod mod_summary)
+ mod_str = showPpr dflags mod ++ hscSourceString (ms_hsc_src mod_summary)
+ dyn_file = op $ msDynObjFilePath mod_summary dflags
+ obj_file = case target of
+ HscInterpreted | recomp -> "interpreted"
+ HscNothing -> "nothing"
+ _ -> (op $ msObjFilePath mod_summary)
{-
************************************************************************
diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs b/testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs
new file mode 100644
index 0000000000..aab8d3ce7a
--- /dev/null
+++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs
@@ -0,0 +1 @@
+main = print "a"
diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile b/testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile
new file mode 100644
index 0000000000..b78fc4aa8f
--- /dev/null
+++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile
@@ -0,0 +1,16 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+clean:
+ rm -f *.o
+ rm -f *.hi
+ rm -f Main
+
+# check that the compilation progress message will contain
+# *.dyn_o file with -dynamic-too
+main:
+ rm -f *.o
+ rm -f *.hi
+ rm -f Main
+ '$(TEST_HC)' $(TEST_HC_OPTS) -dynamic-too Main.hs
diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/all.T b/testsuite/tests/driver/dynamicToo/dynamicToo006/all.T
new file mode 100644
index 0000000000..c9e1b52f4e
--- /dev/null
+++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/all.T
@@ -0,0 +1,2 @@
+test('dynamicToo006', [normalise_slashes, extra_files(['Main.hs'])],
+ run_command, ['$MAKE -s main --no-print-director'])
diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout b/testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout
new file mode 100644
index 0000000000..5c33cb2e7a
--- /dev/null
+++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout
@@ -0,0 +1,2 @@
+[1 of 1] Compiling Main ( Main.hs, Main.o, Main.dyn_o )
+Linking Main ...
diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr
index c76996f5b8..e5593d57e9 100644
--- a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr
+++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr
@@ -1,5 +1,5 @@
-[1 of 2] Compiling UnsafeInfered02_A ( UnsafeInfered02_A.hs, UnsafeInfered02_A.o )
-[2 of 2] Compiling UnsafeInfered02 ( UnsafeInfered02.hs, UnsafeInfered02.o )
+[1 of 2] Compiling UnsafeInfered02_A ( UnsafeInfered02_A.hs, UnsafeInfered02_A.o, UnsafeInfered02_A.dyn_o )
+[2 of 2] Compiling UnsafeInfered02 ( UnsafeInfered02.hs, UnsafeInfered02.o, UnsafeInfered02.dyn_o )
UnsafeInfered02.hs:4:1: error:
UnsafeInfered02_A: Can't be safely imported!