diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index b9172939f2cd6a1e95a6817ff110664f9acd0179..2842cb2ecd894ac4206f63cf0f66816649e01122 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -35,6 +35,9 @@ separate compilation of C-- and ASM source files (#6033). * Setting `debug-info` now implies `library-stripping: False` and `executable-stripping: False) ([#2702](https://github.com/haskell/cabal/issues/2702)) + * `Setup.hs copy` and `install` now work in the presence of + `data-files` that use `**` syntax + ([#6125](https://github.com/haskell/cabal/issues/6125)). ---- diff --git a/Cabal/Distribution/Simple/Install.hs b/Cabal/Distribution/Simple/Install.hs index 4ecd80beb168b6f66eed3602cebb7f3f583c3426..5dc45924d01e6fbf4d07d59edc167df8af860364 100644 --- a/Cabal/Distribution/Simple/Install.hs +++ b/Cabal/Distribution/Simple/Install.hs @@ -223,17 +223,17 @@ copyComponent _ _ _ (CTest _) _ _ = return () -- installDataFiles :: Verbosity -> PackageDescription -> FilePath -> IO () installDataFiles verbosity pkg_descr destDataDir = - flip traverse_ (dataFiles pkg_descr) $ \ file -> do + flip traverse_ (dataFiles pkg_descr) $ \ glob -> do let srcDataDirRaw = dataDir pkg_descr srcDataDir = if null srcDataDirRaw then "." else srcDataDirRaw - files <- matchDirFileGlob verbosity (specVersion pkg_descr) srcDataDir file - let dir = takeDirectory file - createDirectoryIfMissingVerbose verbosity True (destDataDir </> dir) - sequence_ [ installOrdinaryFile verbosity (srcDataDir </> file') - (destDataDir </> file') - | file' <- files ] + files <- matchDirFileGlob verbosity (specVersion pkg_descr) srcDataDir glob + for_ files $ \ file' -> do + let src = srcDataDir </> file' + dst = destDataDir </> file' + createDirectoryIfMissingVerbose verbosity True (takeDirectory dst) + installOrdinaryFile verbosity src dst -- | Install the files listed in install-includes for a library -- diff --git a/cabal-testsuite/PackageTests/Regression/T6125/Main.hs b/cabal-testsuite/PackageTests/Regression/T6125/Main.hs new file mode 100644 index 0000000000000000000000000000000000000000..b3549c2fe3d794dddfdf687ed1163ff5302f20e8 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T6125/Main.hs @@ -0,0 +1 @@ +main = return () diff --git a/cabal-testsuite/PackageTests/Regression/T6125/data/foo/bar.html b/cabal-testsuite/PackageTests/Regression/T6125/data/foo/bar.html new file mode 100644 index 0000000000000000000000000000000000000000..99fd1d469d9c8b81291de9cea58da18631c07157 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T6125/data/foo/bar.html @@ -0,0 +1 @@ +<!DOCTYPE html>Some random data. diff --git a/cabal-testsuite/PackageTests/Regression/T6125/myprog.cabal b/cabal-testsuite/PackageTests/Regression/T6125/myprog.cabal new file mode 100644 index 0000000000000000000000000000000000000000..935cdb8b8c3ba9bd1afd2cfd5300dd316db9e516 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T6125/myprog.cabal @@ -0,0 +1,9 @@ +cabal-version: 2.4 +name: myprog +version: 0 +data-files: data/**/*.html + +executable myprog + build-depends: base + main-is: Main.hs + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Regression/T6125/setup.cabal.out b/cabal-testsuite/PackageTests/Regression/T6125/setup.cabal.out new file mode 100644 index 0000000000000000000000000000000000000000..64e8312ccddeb35814d6a79d6a93a137afab9e3a --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T6125/setup.cabal.out @@ -0,0 +1,9 @@ +# Setup configure +Resolving dependencies... +Configuring myprog-0... +# Setup build +Preprocessing executable 'myprog' for myprog-0.. +Building executable 'myprog' for myprog-0.. +# Setup copy +Installing executable myprog in <PATH> +Warning: The directory <ROOT>/setup.cabal.dist/usr/bin is not in the system search path. diff --git a/cabal-testsuite/PackageTests/Regression/T6125/setup.out b/cabal-testsuite/PackageTests/Regression/T6125/setup.out new file mode 100644 index 0000000000000000000000000000000000000000..b982a76eccdf43a05b484559e397b866437067ed --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T6125/setup.out @@ -0,0 +1,8 @@ +# Setup configure +Configuring myprog-0... +# Setup build +Preprocessing executable 'myprog' for myprog-0.. +Building executable 'myprog' for myprog-0.. +# Setup copy +Installing executable myprog in <PATH> +Warning: The directory <ROOT>/setup.dist/usr/bin is not in the system search path. diff --git a/cabal-testsuite/PackageTests/Regression/T6125/setup.test.hs b/cabal-testsuite/PackageTests/Regression/T6125/setup.test.hs new file mode 100644 index 0000000000000000000000000000000000000000..aeb2587e70c28cec947c3c0381dda5eed4389ab8 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T6125/setup.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude +main = setupAndCabalTest $ do + withPackageDb $ do + setup "configure" [] + setup "build" ["myprog"] + setup "copy" ["myprog"]