Skip to content

Commit a974a21

Browse files
committed
Split-off and re-export installFileGlob
This commit exposes installFileGlob as a generally useful part of the API which users might want to call, e.g. in their custom Setup scripts.
1 parent b216b99 commit a974a21

File tree

1 file changed

+34
-17
lines changed

1 file changed

+34
-17
lines changed

Cabal/src/Distribution/Simple/Install.hs

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818
-- compiler-specific functions to do the rest.
1919
module Distribution.Simple.Install
2020
( install
21+
, installFileGlob
2122
) where
2223

2324
import Distribution.Compat.Prelude
2425
import Prelude ()
2526

27+
import Distribution.CabalSpecVersion (CabalSpecVersion)
28+
2629
import Distribution.Types.ExecutableScope
2730
import Distribution.Types.ForeignLib
2831
import Distribution.Types.LocalBuildInfo
@@ -290,23 +293,37 @@ installDataFiles
290293
-> SymbolicPath Pkg (Dir DataDir)
291294
-> IO ()
292295
installDataFiles verbosity mbWorkDir pkg_descr destDataDir =
293-
flip traverse_ (dataFiles pkg_descr) $ \glob -> do
294-
let srcDataDirRaw = getSymbolicPath $ dataDir pkg_descr
295-
srcDataDir :: Maybe (SymbolicPath CWD (Dir DataDir))
296-
srcDataDir
297-
| null srcDataDirRaw =
298-
Nothing
299-
| isAbsoluteOnAnyPlatform srcDataDirRaw =
300-
Just $ makeSymbolicPath srcDataDirRaw
301-
| otherwise =
302-
Just $ fromMaybe sameDirectory mbWorkDir </> makeRelativePathEx srcDataDirRaw
303-
i = interpretSymbolicPath mbWorkDir -- See Note [Symbolic paths] in Distribution.Utils.Path
304-
files <- matchDirFileGlob verbosity (specVersion pkg_descr) srcDataDir glob
305-
for_ files $ \file' -> do
306-
let src = i (dataDir pkg_descr </> file')
307-
dst = i (destDataDir </> file')
308-
createDirectoryIfMissingVerbose verbosity True (takeDirectory dst)
309-
installOrdinaryFile verbosity src dst
296+
traverse_
297+
(installFileGlob verbosity (specVersion pkg_descr) mbWorkDir (srcDataDir, destDataDir))
298+
(dataFiles pkg_descr)
299+
where
300+
srcDataDirRaw = getSymbolicPath $ dataDir pkg_descr
301+
srcDataDir :: Maybe (SymbolicPath CWD (Dir DataDir))
302+
srcDataDir
303+
| null srcDataDirRaw =
304+
Nothing
305+
| isAbsoluteOnAnyPlatform srcDataDirRaw =
306+
Just $ makeSymbolicPath srcDataDirRaw
307+
| otherwise =
308+
Just $ fromMaybe sameDirectory mbWorkDir </> makeRelativePathEx srcDataDirRaw
309+
310+
-- | Install the files specified by the given glob pattern.
311+
installFileGlob
312+
:: Verbosity
313+
-> CabalSpecVersion
314+
-> Maybe (SymbolicPath CWD (Dir Pkg))
315+
-> (Maybe (SymbolicPath CWD (Dir DataDir)), SymbolicPath Pkg (Dir DataDir))
316+
-- ^ @(src_dir, dest_dir)@
317+
-> RelativePath DataDir File
318+
-- ^ file glob pattern
319+
-> IO ()
320+
installFileGlob verbosity spec_version mbWorkDir (srcDir, destDir) glob = do
321+
files <- matchDirFileGlob verbosity spec_version srcDir glob
322+
for_ files $ \file' -> do
323+
let src = getSymbolicPath (fromMaybe sameDirectory srcDir </> file')
324+
dst = interpretSymbolicPath mbWorkDir (destDir </> file')
325+
createDirectoryIfMissingVerbose verbosity True (takeDirectory dst)
326+
installOrdinaryFile verbosity src dst
310327

311328
-- | Install the files listed in install-includes for a library
312329
installIncludeFiles :: Verbosity -> BuildInfo -> LocalBuildInfo -> FilePath -> FilePath -> IO ()

0 commit comments

Comments
 (0)