diff --git a/cabal2spec.cabal b/cabal2spec.cabal
--- a/cabal2spec.cabal
+++ b/cabal2spec.cabal
@@ -1,5 +1,5 @@
 name:               cabal2spec
-version:            2.7.1
+version:            2.8.0
 synopsis:           Convert Cabal files into rpm spec files
 description:        Convert
                     Cabal files into a
@@ -14,7 +14,7 @@
 license-file:       LICENSE
 author:             Peter Simons, Bryan O'Sullivan, Jens Petersen
 maintainer:         simons@cryp.to
-tested-with:        GHC == 9.2.8 || == 9.4.8 || == 9.6.4 || == 9.8.2
+tested-with:        GHC == 9.2.8 || == 9.4.8 || == 9.6.7 || == 9.8.4 || == 9.10.2 || == 9.12.2
 category:           Distribution
 homepage:           https://github.com/peti/cabal2spec
 build-type:         Simple
@@ -30,7 +30,7 @@
 library
   exposed-modules:  Cabal2Spec
   hs-source-dirs:   src
-  build-depends:    base > 4.12 && < 5, Cabal >= 3.8 && < 3.11, filepath, time >= 1.5
+  build-depends:    base > 4.12 && < 5, Cabal >= 3.14 && < 3.15, filepath, time >= 1.5
   default-language: Haskell2010
 
 executable cabal2spec
diff --git a/src/Cabal2Spec.hs b/src/Cabal2Spec.hs
--- a/src/Cabal2Spec.hs
+++ b/src/Cabal2Spec.hs
@@ -15,7 +15,7 @@
 import Distribution.System
 import Distribution.Text
 import Distribution.Types.ComponentRequestedSpec
-import Distribution.Utils.Path ( getSymbolicPath )
+import Distribution.Utils.Path ( getSymbolicPath, makeSymbolicPath )
 import Distribution.Utils.ShortText ( fromShortText )
 import Distribution.Verbosity
 import Distribution.Version
@@ -29,7 +29,7 @@
 cabal2spec :: Platform -> CompilerId -> FlagAssignment -> ForceBinary -> RunTests -> Maybe CopyrightYear
            -> FilePath -> FilePath -> IO ()
 cabal2spec platform compilerId flags forceBinary runTests copyrightYear cabalFile specFile = do
-  gpd <- readGenericPackageDescription silent cabalFile
+  gpd <- readGenericPackageDescription silent Nothing (makeSymbolicPath cabalFile)
   case finalizePD flags requestedComponents (const True) platform (unknownCompilerInfo compilerId NoAbiTag) [] gpd of
     Left missing -> fail ("finalizePD: " ++ show missing)
     Right (pd,_) -> createSpecFile specFile pd forceBinary runTests flags copyrightYear
@@ -231,8 +231,8 @@
   let licensefiles = map getSymbolicPath (licenseFiles pkgDesc)
 
   -- remove docs from datafiles (#38)
-  docsUnfiltered <- fmap sort (findDocs (extraSrcFiles pkgDesc ++ extraDocFiles pkgDesc) licensefiles)
-  let datafiles = dataFiles pkgDesc
+  docsUnfiltered <- fmap sort (findDocs (map getSymbolicPath (extraSrcFiles pkgDesc) ++ map getSymbolicPath (extraDocFiles pkgDesc)) licensefiles)
+  let datafiles = map getSymbolicPath (dataFiles pkgDesc)
       dupdocs   = docsUnfiltered `intersect` datafiles
       docs      = docsUnfiltered \\ datafiles
   unless (null dupdocs) $
@@ -260,8 +260,8 @@
 
   let listDataFiles = unless (null (dataFiles pkgDesc)) $ do
                         put ("%dir %{_datadir}/" ++ pkg_name ++ "-%{version}")
-                        mapM_ (put . (("%dir %{_datadir}/" ++ pkg_name ++ "-%{version}/")++) . avoidSquareBrackets) (sort (listDirs (dataFiles pkgDesc)))
-                        mapM_ (put . (("%{_datadir}/" ++ pkg_name ++ "-%{version}/")++) . avoidSquareBrackets) (sort (dataFiles pkgDesc))
+                        mapM_ (put . (("%dir %{_datadir}/" ++ pkg_name ++ "-%{version}/")++) . avoidSquareBrackets) (sort (listDirs (map getSymbolicPath (dataFiles pkgDesc))))
+                        mapM_ (put . (("%{_datadir}/" ++ pkg_name ++ "-%{version}/")++) . avoidSquareBrackets) (sort (map getSymbolicPath (dataFiles pkgDesc)))
 
       listDirs :: [FilePath] -> [FilePath]
       listDirs = nub . concatMap (map joinPath . drop 1 . inits) . nub . map init . filter (\p -> length p > 1) . map splitDirectories
