|
18 | 18 | -- compiler-specific functions to do the rest.
|
19 | 19 | module Distribution.Simple.Install
|
20 | 20 | ( install
|
| 21 | + , installFileGlob |
21 | 22 | ) where
|
22 | 23 |
|
23 | 24 | import Distribution.Compat.Prelude
|
24 | 25 | import Prelude ()
|
25 | 26 |
|
| 27 | +import Distribution.CabalSpecVersion (CabalSpecVersion) |
| 28 | + |
26 | 29 | import Distribution.Types.ExecutableScope
|
27 | 30 | import Distribution.Types.ForeignLib
|
28 | 31 | import Distribution.Types.LocalBuildInfo
|
@@ -290,23 +293,37 @@ installDataFiles
|
290 | 293 | -> SymbolicPath Pkg (Dir DataDir)
|
291 | 294 | -> IO ()
|
292 | 295 | 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 |
310 | 327 |
|
311 | 328 | -- | Install the files listed in install-includes for a library
|
312 | 329 | installIncludeFiles :: Verbosity -> BuildInfo -> LocalBuildInfo -> FilePath -> FilePath -> IO ()
|
|
0 commit comments