Skip to content

Commit 7913b3f

Browse files
committed
support GHC-9.12 in setup scripts
1 parent 6f20066 commit 7913b3f

File tree

2 files changed

+72
-33
lines changed

2 files changed

+72
-33
lines changed

Setup.hs

+35-14
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ import Distribution.Simple.BuildPaths
110110
import Distribution.Simple.LocalBuildInfo
111111
import Distribution.Simple.PackageIndex
112112
import Distribution.Simple.Setup
113+
import Distribution.Simple.Utils (createDirectoryIfMissingVerbose)
113114
import Distribution.Text
114115
import Distribution.Utils.Path
115116
import Distribution.Utils.ShortText
@@ -128,10 +129,17 @@ import Data.Monoid
128129
import Prelude hiding (readFile, writeFile)
129130

130131
import System.Directory
131-
(canonicalizePath, createDirectoryIfMissing, doesDirectoryExist,
132-
doesFileExist, getCurrentDirectory)
132+
( canonicalizePath
133+
, doesDirectoryExist
134+
, doesFileExist
135+
, getCurrentDirectory
136+
)
133137
import System.Exit (ExitCode(ExitSuccess))
138+
#if MIN_VERSION_Cabal(3,14,0)
139+
import System.FilePath (isDrive, takeDirectory)
140+
#else
134141
import System.FilePath (isDrive, takeDirectory, (</>))
142+
#endif
135143

136144
-- | Include this function when your setup doesn't contain any
137145
-- extra functionality.
@@ -162,6 +170,11 @@ mkPkgInfoModules hooks = hooks
162170
prettyLicense :: I.InstalledPackageInfo -> String
163171
prettyLicense = either prettyShow prettyShow . I.license
164172

173+
#if !MIN_VERSION_Cabal(3,14,0)
174+
interpretSymbolicPath :: Maybe () -> FilePath -> FilePath
175+
interpretSymbolicPath _ p = p
176+
#endif
177+
165178
-- -------------------------------------------------------------------------- --
166179
-- Cabal 2.0
167180

@@ -173,28 +186,31 @@ mkPkgInfoModulesPostConf
173186
-> LocalBuildInfo
174187
-> IO ()
175188
mkPkgInfoModulesPostConf hook args flags pkgDesc bInfo = do
176-
mapM_ (updatePkgInfoModule pkgDesc bInfo) $ Graph.toList $ componentGraph bInfo
189+
mapM_ (updatePkgInfoModule pkgDesc bInfo flags) $ Graph.toList $ componentGraph bInfo
177190
hook args flags pkgDesc bInfo
178191

179-
updatePkgInfoModule :: PackageDescription -> LocalBuildInfo -> ComponentLocalBuildInfo -> IO ()
180-
updatePkgInfoModule pkgDesc bInfo clbInfo = do
181-
createDirectoryIfMissing True dirName
192+
updatePkgInfoModule
193+
:: PackageDescription
194+
-> LocalBuildInfo
195+
-> ConfigFlags
196+
-> ComponentLocalBuildInfo
197+
-> IO ()
198+
updatePkgInfoModule pkgDesc bInfo flags clbInfo = do
199+
createDirectoryIfMissingVerbose verbosity True dirName
182200
moduleBytes <- pkgInfoModule moduleName cName pkgDesc bInfo
183201
updateFile fileName moduleBytes
184202

185203
-- legacy module
186204
legacyModuleBytes <- pkgInfoModule legacyModuleName cName pkgDesc bInfo
187205
updateFile legacyFileName legacyModuleBytes
188-
189206
where
190-
dirName = autogenComponentModulesDir bInfo clbInfo
207+
verbosity = fromFlag $ configVerbosity flags
208+
dirName = interpretSymbolicPath Nothing $ autogenComponentModulesDir bInfo clbInfo
191209
cName = unUnqualComponentName <$> componentNameString (componentLocalName clbInfo)
192-
193210
moduleName = pkgInfoModuleName
194-
fileName = dirName ++ "/" ++ moduleName ++ ".hs"
195-
211+
fileName = dirName </> moduleName <> ".hs"
196212
legacyModuleName = legacyPkgInfoModuleName cName
197-
legacyFileName = dirName ++ "/" ++ legacyModuleName ++ ".hs"
213+
legacyFileName = dirName </> legacyModuleName <> ".hs"
198214

199215
-- -------------------------------------------------------------------------- --
200216
-- Generate PkgInfo Module
@@ -214,7 +230,7 @@ updateFile fileName content = do
214230

215231
legacyPkgInfoModuleName :: Maybe String -> String
216232
legacyPkgInfoModuleName Nothing = "PkgInfo"
217-
legacyPkgInfoModuleName (Just cn) = "PkgInfo_" ++ map tr cn
233+
legacyPkgInfoModuleName (Just cn) = "PkgInfo_" <> map tr cn
218234
where
219235
tr '-' = '_'
220236
tr c = c
@@ -236,7 +252,12 @@ getVCS = getCurrentDirectory >>= getVcsOfDir
236252
then return Nothing
237253
else getVcsOfDir (takeDirectory canonicDir)
238254

239-
pkgInfoModule :: String -> Maybe String -> PackageDescription -> LocalBuildInfo -> IO B.ByteString
255+
pkgInfoModule
256+
:: String
257+
-> Maybe String
258+
-> PackageDescription
259+
-> LocalBuildInfo
260+
-> IO B.ByteString
240261
pkgInfoModule moduleName cName pkgDesc bInfo = do
241262
(tag, revision, branch) <- getVCS >>= \case
242263
Just Mercurial -> hgInfo

src/Configuration/Utils/Setup.hs

+37-19
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ import Distribution.Simple.BuildPaths
110110
import Distribution.Simple.LocalBuildInfo
111111
import Distribution.Simple.PackageIndex
112112
import Distribution.Simple.Setup
113+
import Distribution.Simple.Utils (createDirectoryIfMissingVerbose)
113114
import Distribution.Text
114115
import Distribution.Utils.Path
115116
import Distribution.Utils.ShortText
@@ -128,10 +129,17 @@ import Data.Monoid
128129
import Prelude hiding (readFile, writeFile)
129130

130131
import System.Directory
131-
(canonicalizePath, createDirectoryIfMissing, doesDirectoryExist,
132-
doesFileExist, getCurrentDirectory)
132+
( canonicalizePath
133+
, doesDirectoryExist
134+
, doesFileExist
135+
, getCurrentDirectory
136+
)
133137
import System.Exit (ExitCode(ExitSuccess))
138+
#if MIN_VERSION_Cabal(3,14,0)
139+
import System.FilePath (isDrive, takeDirectory)
140+
#else
134141
import System.FilePath (isDrive, takeDirectory, (</>))
142+
#endif
135143

136144
-- | Include this function when your setup doesn't contain any
137145
-- extra functionality.
@@ -162,8 +170,10 @@ mkPkgInfoModules hooks = hooks
162170
prettyLicense :: I.InstalledPackageInfo -> String
163171
prettyLicense = either prettyShow prettyShow . I.license
164172

165-
ft :: ShortText -> String
166-
ft = fromShortText
173+
#if !MIN_VERSION_Cabal(3,14,0)
174+
interpretSymbolicPath :: Maybe () -> FilePath -> FilePath
175+
interpretSymbolicPath _ p = p
176+
#endif
167177

168178
-- -------------------------------------------------------------------------- --
169179
-- Cabal 2.0
@@ -176,28 +186,31 @@ mkPkgInfoModulesPostConf
176186
-> LocalBuildInfo
177187
-> IO ()
178188
mkPkgInfoModulesPostConf hook args flags pkgDesc bInfo = do
179-
mapM_ (updatePkgInfoModule pkgDesc bInfo) $ Graph.toList $ componentGraph bInfo
189+
mapM_ (updatePkgInfoModule pkgDesc bInfo flags) $ Graph.toList $ componentGraph bInfo
180190
hook args flags pkgDesc bInfo
181191

182-
updatePkgInfoModule :: PackageDescription -> LocalBuildInfo -> ComponentLocalBuildInfo -> IO ()
183-
updatePkgInfoModule pkgDesc bInfo clbInfo = do
184-
createDirectoryIfMissing True dirName
192+
updatePkgInfoModule
193+
:: PackageDescription
194+
-> LocalBuildInfo
195+
-> ConfigFlags
196+
-> ComponentLocalBuildInfo
197+
-> IO ()
198+
updatePkgInfoModule pkgDesc bInfo flags clbInfo = do
199+
createDirectoryIfMissingVerbose verbosity True dirName
185200
moduleBytes <- pkgInfoModule moduleName cName pkgDesc bInfo
186201
updateFile fileName moduleBytes
187202

188203
-- legacy module
189204
legacyModuleBytes <- pkgInfoModule legacyModuleName cName pkgDesc bInfo
190205
updateFile legacyFileName legacyModuleBytes
191-
192206
where
193-
dirName = autogenComponentModulesDir bInfo clbInfo
207+
verbosity = fromFlag $ configVerbosity flags
208+
dirName = interpretSymbolicPath Nothing $ autogenComponentModulesDir bInfo clbInfo
194209
cName = unUnqualComponentName <$> componentNameString (componentLocalName clbInfo)
195-
196210
moduleName = pkgInfoModuleName
197-
fileName = dirName ++ "/" ++ moduleName ++ ".hs"
198-
211+
fileName = dirName </> moduleName <> ".hs"
199212
legacyModuleName = legacyPkgInfoModuleName cName
200-
legacyFileName = dirName ++ "/" ++ legacyModuleName ++ ".hs"
213+
legacyFileName = dirName </> legacyModuleName <> ".hs"
201214

202215
-- -------------------------------------------------------------------------- --
203216
-- Generate PkgInfo Module
@@ -217,7 +230,7 @@ updateFile fileName content = do
217230

218231
legacyPkgInfoModuleName :: Maybe String -> String
219232
legacyPkgInfoModuleName Nothing = "PkgInfo"
220-
legacyPkgInfoModuleName (Just cn) = "PkgInfo_" ++ map tr cn
233+
legacyPkgInfoModuleName (Just cn) = "PkgInfo_" <> map tr cn
221234
where
222235
tr '-' = '_'
223236
tr c = c
@@ -239,7 +252,12 @@ getVCS = getCurrentDirectory >>= getVcsOfDir
239252
then return Nothing
240253
else getVcsOfDir (takeDirectory canonicDir)
241254

242-
pkgInfoModule :: String -> Maybe String -> PackageDescription -> LocalBuildInfo -> IO B.ByteString
255+
pkgInfoModule
256+
:: String
257+
-> Maybe String
258+
-> PackageDescription
259+
-> LocalBuildInfo
260+
-> IO B.ByteString
243261
pkgInfoModule moduleName cName pkgDesc bInfo = do
244262
(tag, revision, branch) <- getVCS >>= \case
245263
Just Mercurial -> hgInfo
@@ -302,10 +320,10 @@ pkgInfoModule moduleName cName pkgDesc bInfo = do
302320
, " copyright = " <> (pack . show . copyright) pkgDesc
303321
, ""
304322
, " author :: IsString a => a"
305-
, " author = \"" <> (pack . ft . author) pkgDesc <> "\""
323+
, " author = \"" <> (pack . fromShortText . author) pkgDesc <> "\""
306324
, ""
307325
, " homepage :: IsString a => a"
308-
, " homepage = \"" <> (pack . ft . homepage) pkgDesc <> "\""
326+
, " homepage = \"" <> (pack . fromShortText . homepage) pkgDesc <> "\""
309327
, ""
310328
, " package :: IsString a => a"
311329
, " package = \"" <> (pack . display . package) pkgDesc <> "\""
@@ -397,4 +415,4 @@ pkgIdWithLicense a = (display . packageId) a
397415
++ (if cr /= "" then ", " ++ cr else "")
398416
++ "]"
399417
where
400-
cr = (unwords . words . ft . I.copyright) a
418+
cr = (unwords . words . fromShortText . I.copyright) a

0 commit comments

Comments
 (0)