[commit: ghc] master: Don't require -hide-all-packages for MIN_VERSION_* macros (e9c2555)

git at git.haskell.org git at git.haskell.org
Wed Mar 30 20:47:01 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/e9c2555ac666912f7dff56448ced4bfa06d14e76/ghc

>---------------------------------------------------------------

commit e9c2555ac666912f7dff56448ced4bfa06d14e76
Author: Thomas Miedema <thomasmiedema at gmail.com>
Date:   Wed Mar 30 21:43:51 2016 +0200

    Don't require -hide-all-packages for MIN_VERSION_* macros
    
    Define MIN_VERSION_pkgname and VERSION_pkgname macros for all exposed
    packages, without requiring -hide-all-packages.
    
    See #10970 comment 7-10 for discussion.
    
    Reviewers: duncan, ezyang, bgamari, austin
    
    Reviewed By: ezyang
    
    Subscribers: hvr, rwbarton
    
    Differential Revision: https://phabricator.haskell.org/D1869
    
    GHC Trac Issues: #10970


>---------------------------------------------------------------

e9c2555ac666912f7dff56448ced4bfa06d14e76
 compiler/main/DriverPipeline.hs       | 15 ++++++++-------
 docs/users_guide/phases.rst           |  6 ++----
 testsuite/tests/driver/T10970a.hs     |  8 --------
 testsuite/tests/driver/T10970a.stdout |  2 --
 testsuite/tests/driver/T3389.hs       |  4 ++--
 testsuite/tests/driver/all.T          |  3 +--
 6 files changed, 13 insertions(+), 25 deletions(-)

diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
index 1991bd3..bc9c19b 100644
--- a/compiler/main/DriverPipeline.hs
+++ b/compiler/main/DriverPipeline.hs
@@ -2056,13 +2056,14 @@ doCpp dflags raw input_fn output_fn = do
     let uids = explicitPackages (pkgState dflags)
         pkgs = catMaybes (map (lookupPackage dflags) uids)
     mb_macro_include <-
-        -- Only generate if we have (1) we have set -hide-all-packages
-        -- (so we don't generate a HUGE macro file of things we don't
-        -- care about but are exposed) and (2) we actually have packages
-        -- to write macros for!
-        if gopt Opt_HideAllPackages dflags && not (null pkgs)
+        if not (null pkgs)
             then do macro_stub <- newTempName dflags "h"
                     writeFile macro_stub (generatePackageVersionMacros pkgs)
+                    -- Include version macros for every *exposed* package.
+                    -- Without -hide-all-packages and with a package database
+                    -- size of 1000 packages, it takes cpp an estimated 2
+                    -- milliseconds to process this file. See Trac #10970
+                    -- comment 8.
                     return [SysTools.FileOption "-include" macro_stub]
             else return []
 
@@ -2110,8 +2111,8 @@ getBackendDefs _ =
 
 generatePackageVersionMacros :: [PackageConfig] -> String
 generatePackageVersionMacros pkgs = concat
-  [ "/* package " ++ sourcePackageIdString pkg ++ " */\n"
-  ++ generateMacros "" pkgname version
+  -- Do not add any C-style comments. See Trac #3389.
+  [ generateMacros "" pkgname version
   | pkg <- pkgs
   , let version = packageVersion pkg
         pkgname = map fixchar (packageNameString pkg)
diff --git a/docs/users_guide/phases.rst b/docs/users_guide/phases.rst
index ed05add..0c3b59f 100644
--- a/docs/users_guide/phases.rst
+++ b/docs/users_guide/phases.rst
@@ -313,16 +313,14 @@ defined by your local GHC installation, the following trick is useful:
 
 ``VERSION_pkgname``
     This macro is available starting GHC 8.0.  It is defined for every
-    exposed package, but only if the ``-hide-all-packages`` flag
-    is set.  This macro expands to a string recording the
+    exposed package. This macro expands to a string recording the
     version of ``pkgname`` that is exposed for module import.
     It is identical in behavior to the ``VERSION_pkgname`` macros
     that Cabal defines.
 
 ``MIN_VERSION_pkgname(x,y,z)``
     This macro is available starting GHC 8.0.  It is defined for every
-    exposed package, but only if the ``-hide-all-packages`` flag
-    is set. This macro is provided for convenience to write CPP
+    exposed package. This macro is provided for convenience to write CPP
     conditionals testing if a package version is ``x.y.z`` or
     less.  It is identical in behavior to the ``MIN_VERSION_pkgname``
     macros that Cabal defines.
diff --git a/testsuite/tests/driver/T10970a.hs b/testsuite/tests/driver/T10970a.hs
deleted file mode 100644
index 8e7aa60..0000000
--- a/testsuite/tests/driver/T10970a.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-{-# LANGUAGE CPP #-}
-main = do
-#ifndef VERSION_containers
-    putStrLn "OK"
-#endif
-#ifndef MIN_VERSION_base
-    putStrLn "OK"
-#endif
diff --git a/testsuite/tests/driver/T10970a.stdout b/testsuite/tests/driver/T10970a.stdout
deleted file mode 100644
index 2c94e48..0000000
--- a/testsuite/tests/driver/T10970a.stdout
+++ /dev/null
@@ -1,2 +0,0 @@
-OK
-OK
diff --git a/testsuite/tests/driver/T3389.hs b/testsuite/tests/driver/T3389.hs
index c6a5666..e574fc4 100644
--- a/testsuite/tests/driver/T3389.hs
+++ b/testsuite/tests/driver/T3389.hs
@@ -6,7 +6,7 @@
 
 main :: IO ()
 main = putStrLn [A,
--- /*
+-- CPP treats this as the beginning of a multiline C-style comment: /usr/local/*
                  'b',
--- */
+-- And */ close it. By passing `-optP -C` we tell CPP not to delete it.
                  'c']
diff --git a/testsuite/tests/driver/all.T b/testsuite/tests/driver/all.T
index 2798dd5..23aeb99 100644
--- a/testsuite/tests/driver/all.T
+++ b/testsuite/tests/driver/all.T
@@ -468,8 +468,7 @@ test('T365',
 test('T9360a', normal, run_command, ['{compiler} --interactive -e "" -ignore-dot-ghci'])
 test('T9360b', normal, run_command, ['{compiler} -e "" --interactive -ignore-dot-ghci'])
 
-test('T10970', normal, compile_and_run, ['-hide-all-packages -package base -package containers'])
-test('T10970a', normal, compile_and_run, [''])
+test('T10970', normal, compile_and_run, [''])
 test('T4931', normal, compile_and_run, [''])
 test('T11182', normal, compile_and_run, [''])
 test('T11381', normal, compile_fail, [''])



More information about the ghc-commits mailing list