|
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