Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ghc for openSUSE:Factory checked in at 2025-08-06 14:33:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc (Old) and /work/SRC/openSUSE:Factory/.ghc.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc" Wed Aug 6 14:33:58 2025 rev:117 rq:1297797 version:9.12.2 Changes: -------- --- /work/SRC/openSUSE:Factory/ghc/ghc.changes 2025-08-03 13:38:10.813366206 +0200 +++ /work/SRC/openSUSE:Factory/.ghc.new.1085/ghc.changes 2025-08-06 14:35:17.621069881 +0200 @@ -1,0 +2,5 @@ +Mon Aug 4 20:57:07 UTC 2025 - Andreas Schwab <sch...@suse.de> + +- Cabal-absolute-datadir.patch: Set <pkgname_datadir> to an absolute path + +------------------------------------------------------------------- New: ---- Cabal-absolute-datadir.patch ----------(New B)---------- New: - Cabal-absolute-datadir.patch: Set <pkgname_datadir> to an absolute path ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc.spec ++++++ --- /var/tmp/diff_new_pack.M8df9T/_old 2025-08-06 14:35:20.325183773 +0200 +++ /var/tmp/diff_new_pack.M8df9T/_new 2025-08-06 14:35:20.325183773 +0200 @@ -87,6 +87,7 @@ Patch1: ghc-gen_contents_index-haddock-path.patch # https://ghc.haskell.org/trac/ghc/ticket/15689 Patch2: ghc-Cabal-install-PATH-warning.patch +Patch3: Cabal-absolute-datadir.patch Patch200: ghc-hadrian-s390x-rts--qg.patch Patch400: gnu23-hp2ps.patch @@ -297,6 +298,9 @@ %setup -q %patch -P 1 -p1 %patch -P 2 -p1 +cd libraries/Cabal +%patch -P 3 -p1 +cd ../.. %ifarch ppc64le s390x %patch -P 200 -p1 ++++++ Cabal-absolute-datadir.patch ++++++ >From 1f8f9fd08fb90bd94668ac8a81c94e179fc8ab86 Mon Sep 17 00:00:00 2001 From: Matthew Pickering <matthewtpicker...@gmail.com> Date: Fri, 14 Mar 2025 12:55:51 +0000 Subject: [PATCH] Set <pkgname_datadir> to an absolute path Ticket #10717 points out that the <pkgname>_datadir environment variable should be set to an absolute path since the test executables may change directory during their invocation. This is easily fixed by using the absoluteWorkingDirLBI function, which was introduced in 027bddfcdf3ba298376c60be1ccf664ebc394cec, Fixes #10717 --- Cabal/src/Distribution/Simple/Bench.hs | 2 + Cabal/src/Distribution/Simple/Build.hs | 50 ++++++++++--------- Cabal/src/Distribution/Simple/Haddock.hs | 3 +- Cabal/src/Distribution/Simple/Test.hs | 2 + cabal-install/src/Distribution/Client/Run.hs | 3 ++ .../DataDirSetupTest/cabal.cabal.out | 13 +++++ .../PackageTests/DataDirSetupTest/cabal.out | 13 +++++ changelog.d/pr-10830.md | 10 ++++ 8 files changed, 72 insertions(+), 24 deletions(-) create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out create mode 100644 cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out create mode 100644 changelog.d/pr-10830.md diff --git a/Cabal/src/Distribution/Simple/Bench.hs b/Cabal/src/Distribution/Simple/Bench.hs index 78f169f25..c4b4dbd2f 100644 --- a/Cabal/src/Distribution/Simple/Bench.hs +++ b/Cabal/src/Distribution/Simple/Bench.hs @@ -56,6 +56,7 @@ bench -- ^ flags sent to benchmark -> IO () bench args pkg_descr lbi flags = do + curDir <- LBI.absoluteWorkingDirLBI lbi let verbosity = fromFlag $ benchmarkVerbosity flags benchmarkNames = args pkgBenchmarks = PD.benchmarks pkg_descr @@ -71,6 +72,7 @@ bench args pkg_descr lbi flags = do { -- Include any build-tool-depends on build tools internal to the current package. LBI.withPrograms = addInternalBuildTools + curDir pkg_descr lbi (benchmarkBuildInfo bm) diff --git a/Cabal/src/Distribution/Simple/Build.hs b/Cabal/src/Distribution/Simple/Build.hs index 0ebd51e48..647480d35 100644 --- a/Cabal/src/Distribution/Simple/Build.hs +++ b/Cabal/src/Distribution/Simple/Build.hs @@ -187,13 +187,15 @@ build_setupHooks -- dumped. dumpBuildInfo verbosity distPref (configDumpBuildInfo (configFlags lbi)) pkg_descr lbi flags + curDir <- absoluteWorkingDirLBI lbi + -- Now do the actual building (\f -> foldM_ f (installedPkgs lbi) componentsToBuild) $ \index target -> do let comp = targetComponent target clbi = targetCLBI target bi = componentBuildInfo comp -- Include any build-tool-depends on build tools internal to the current package. - progs' = addInternalBuildTools pkg_descr lbi bi (withPrograms lbi) + progs' = addInternalBuildTools curDir pkg_descr lbi bi (withPrograms lbi) lbi' = lbi { withPrograms = progs' @@ -375,17 +377,20 @@ repl_setupHooks internalPackageDB <- createInternalPackageDB verbosity lbi distPref - let lbiForComponent comp lbi' = - lbi' - { withPackageDB = withPackageDB lbi ++ [internalPackageDB] - , withPrograms = - -- Include any build-tool-depends on build tools internal to the current package. - addInternalBuildTools - pkg_descr - lbi' - (componentBuildInfo comp) - (withPrograms lbi') - } + let lbiForComponent comp lbi' = do + curDir <- absoluteWorkingDirLBI lbi' + return $ + lbi' + { withPackageDB = withPackageDB lbi' ++ [internalPackageDB] + , withPrograms = + -- Include any build-tool-depends on build tools internal to the current package. + addInternalBuildTools + curDir + pkg_descr + lbi' + (componentBuildInfo comp) + (withPrograms lbi') + } runPreBuildHooks :: LocalBuildInfo -> TargetInfo -> IO () runPreBuildHooks lbi2 tgt = let inputs = @@ -403,7 +408,7 @@ repl_setupHooks [ do let clbi = targetCLBI subtarget comp = targetComponent subtarget - lbi' = lbiForComponent comp lbi + lbi' <- lbiForComponent comp lbi preBuildComponent runPreBuildHooks verbosity lbi' subtarget buildComponent (mempty{buildCommonFlags = mempty{setupVerbosity = toFlag verbosity}}) @@ -420,7 +425,7 @@ repl_setupHooks -- REPL for target components let clbi = targetCLBI target comp = targetComponent target - lbi' = lbiForComponent comp lbi + lbi' <- lbiForComponent comp lbi preBuildComponent runPreBuildHooks verbosity lbi' target replComponent flags verbosity pkg_descr lbi' suffixHandlers comp clbi distPref @@ -925,12 +930,13 @@ createInternalPackageDB verbosity lbi distPref = do -- 'progOverrideEnv', so that any programs configured from now on will be -- able to invoke these build tools. addInternalBuildTools - :: PackageDescription + :: AbsolutePath (Dir Pkg) + -> PackageDescription -> LocalBuildInfo -> BuildInfo -> ProgramDb -> ProgramDb -addInternalBuildTools pkg lbi bi progs = +addInternalBuildTools pwd pkg lbi bi progs = prependProgramSearchPathNoLogging internalToolPaths [pkgDataDirVar] @@ -949,13 +955,11 @@ addInternalBuildTools pkg lbi bi progs = buildDir lbi </> makeRelativePathEx (toolName' </> toolName' <.> exeExtension (hostPlatform lbi)) ] - mbWorkDir = mbWorkDirLBI lbi - rawDataDir = dataDir pkg - dataDirPath - | null $ getSymbolicPath rawDataDir = - interpretSymbolicPath mbWorkDir sameDirectory - | otherwise = - interpretSymbolicPath mbWorkDir rawDataDir + + -- This is an absolute path, so if a process changes directory, it can still + -- find the datadir (#10717) + dataDirPath :: FilePath + dataDirPath = interpretSymbolicPathAbsolute pwd (dataDir pkg) -- TODO: build separate libs in separate dirs so that we can build -- multiple libs, e.g. for 'LibTest' library-style test suites diff --git a/Cabal/src/Distribution/Simple/Haddock.hs b/Cabal/src/Distribution/Simple/Haddock.hs index ee2b88e76..5c534c01d 100644 --- a/Cabal/src/Distribution/Simple/Haddock.hs +++ b/Cabal/src/Distribution/Simple/Haddock.hs @@ -331,12 +331,13 @@ haddock_setupHooks createInternalPackageDB verbosity lbi (flag $ setupDistPref . haddockCommonFlags) (\f -> foldM_ f (installedPkgs lbi) targets') $ \index target -> do + curDir <- absoluteWorkingDirLBI lbi let component = targetComponent target clbi = targetCLBI target bi = componentBuildInfo component -- Include any build-tool-depends on build tools internal to the current package. - progs' = addInternalBuildTools pkg_descr lbi bi (withPrograms lbi) + progs' = addInternalBuildTools curDir pkg_descr lbi bi (withPrograms lbi) lbi' = lbi { withPrograms = progs' diff --git a/Cabal/src/Distribution/Simple/Test.hs b/Cabal/src/Distribution/Simple/Test.hs index 5b7a6daa7..57107eef6 100644 --- a/Cabal/src/Distribution/Simple/Test.hs +++ b/Cabal/src/Distribution/Simple/Test.hs @@ -70,6 +70,7 @@ test -- ^ flags sent to test -> IO () test args pkg_descr lbi0 flags = do + curDir <- LBI.absoluteWorkingDirLBI lbi0 let common = testCommonFlags flags verbosity = fromFlag $ setupVerbosity common distPref = fromFlag $ setupDistPref common @@ -96,6 +97,7 @@ test args pkg_descr lbi0 flags = do { withPrograms = -- Include any build-tool-depends on build tools internal to the current package. addInternalBuildTools + curDir pkg_descr lbi (PD.testBuildInfo suite) diff --git a/cabal-install/src/Distribution/Client/Run.hs b/cabal-install/src/Distribution/Client/Run.hs index 88671a9f5..1dd9db32c 100644 --- a/cabal-install/src/Distribution/Client/Run.hs +++ b/cabal-install/src/Distribution/Client/Run.hs @@ -35,6 +35,7 @@ import Distribution.Simple.Flag (fromFlag) import Distribution.Simple.LocalBuildInfo ( ComponentName (..) , LocalBuildInfo (..) + , absoluteWorkingDirLBI , buildDir , depLibraryPaths , interpretSymbolicPathLBI @@ -142,6 +143,7 @@ splitRunArgs verbosity lbi args = -- | Run a given executable. run :: Verbosity -> LocalBuildInfo -> Executable -> [String] -> IO () run verbosity lbi exe exeArgs = do + curDir <- absoluteWorkingDirLBI lbi let distPref = fromFlag $ configDistPref $ configFlags lbi buildPref = buildDir lbi pkg_descr = localPkgDescr lbi @@ -154,6 +156,7 @@ run verbosity lbi exe exeArgs = do , -- Include any build-tool-depends on build tools internal to the current package. withPrograms = addInternalBuildTools + curDir pkg_descr lbi (buildInfo exe) diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out new file mode 100644 index 000000000..f1e923b5c --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.cabal.out @@ -0,0 +1,13 @@ +# Setup configure +Configuring datadir-test-0.1.0.0... +# Setup build +Preprocessing library for datadir-test-0.1.0.0... +Building library for datadir-test-0.1.0.0... +Preprocessing test suite 'datadir-test' for datadir-test-0.1.0.0... +Building test suite 'datadir-test' for datadir-test-0.1.0.0... +# Setup test +Running 1 test suites... +Test suite datadir-test: RUNNING... +Test suite datadir-test: PASS +Test suite logged to: cabal.cabal.dist/work/dist/test/datadir-test-0.1.0.0-datadir-test.log +1 of 1 test suites (1 of 1 test cases) passed. diff --git a/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out new file mode 100644 index 000000000..eadbc3aea --- /dev/null +++ b/cabal-testsuite/PackageTests/DataDirSetupTest/cabal.out @@ -0,0 +1,13 @@ +# Setup configure +Configuring datadir-test-0.1.0.0... +# Setup build +Preprocessing library for datadir-test-0.1.0.0... +Building library for datadir-test-0.1.0.0... +Preprocessing test suite 'datadir-test' for datadir-test-0.1.0.0... +Building test suite 'datadir-test' for datadir-test-0.1.0.0... +# Setup test +Running 1 test suites... +Test suite datadir-test: RUNNING... +Test suite datadir-test: PASS +Test suite logged to: cabal.dist/work/dist/test/datadir-test-0.1.0.0-datadir-test.log +1 of 1 test suites (1 of 1 test cases) passed. diff --git a/changelog.d/pr-10830.md b/changelog.d/pr-10830.md new file mode 100644 index 000000000..9e7876144 --- /dev/null +++ b/changelog.d/pr-10830.md @@ -0,0 +1,10 @@ +--- +synopsis: Set <pkgname>_datadir to an absolute path when running tests +packages: [Cabal] +prs: 10828 +issues: [10717] +--- + +Fix a regression where `<pkgname>_datadir` was set to a relative path. This +caused issues when running testsuites which changed the working directory and +accessed datafiles. -- 2.50.1