add-dependent-file 0.0.1 → 0.0.2
raw patch · 3 files changed
+29/−9 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- add-dependent-file.cabal +1/−1
- changelog.md +3/−0
- src/AddDependentFile.hs +25/−8
add-dependent-file.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: add-dependent-file-version: 0.0.1+version: 0.0.2 synopsis: Safer TH addDependentFile wrapper description: The library provides a safer wrapper around
changelog.md view
@@ -1,4 +1,7 @@ # add-dependent-file changelog +## Version 0.0.2 2026-03-30+ * fix cabal discoverability in WASM backend+ ## Version 0.0.1 2026-02-26 * init
src/AddDependentFile.hs view
@@ -9,6 +9,7 @@ import Control.Monad ( unless ) import Control.Monad.IO.Class ( MonadIO(..) ) import Data.ByteString qualified as BS+import Data.List qualified as L import Distribution.PackageDescription.Configuration ( flattenPackageDescription ) import Distribution.Simple.PackageDescription ( readGenericPackageDescription ) import Distribution.Types.PackageDescription ( PackageDescription(extraSrcFiles) )@@ -19,7 +20,7 @@ ( Q, location, reportError, Loc(loc_package), runIO ) import Language.Haskell.TH.Syntax qualified as TH import Prelude-import System.Directory (makeAbsolute)+import System.Directory (listDirectory, makeAbsolute) import System.FilePath ( (</>), addTrailingPathSeparator ) import Text.Regex ( mkRegex, subRegex ) @@ -35,16 +36,29 @@ flattenPackageDescription <$> liftIO (readGenericPackageDescription verbose Nothing (makeSymbolicPath cabPath)) stripInplace :: String -> String-stripInplace pn = subRegex massagePackageName pn "\\1.cabal"+stripInplace pn = subRegex massagePackageName pn "\\1" where massagePackageName = mkRegex- "^([A-Z_a-z0-9-]+)[-]([0-9]+[.])+[0-9]+[-]([A-Za-z0-9]{10,}|inplace)(-test)?$"+ "^([A-Z_a-z0-9-]+)[-]([0-9]+[.])+[0-9]+.*$" -findCabalFile :: Q FilePath+findCabalFile :: Q (Either String FilePath) findCabalFile = do- cabalFileName <- stripInplace . loc_package <$> location- (</> cabalFileName) <$> getPackageRoot+ cabalFileNamePrefix <- stripInplace . loc_package <$> location+ let cabalFileP fp =+ cabalFileNamePrefix `L.isPrefixOf` fp && ".cabal" `L.isSuffixOf` fp+ pkgDir <- getPackageRoot+ do+ pkgDirEntries <- filter cabalFileP <$> runIO (listDirectory pkgDir)+ case pkgDirEntries of+ [] ->+ pure . Left $ "No cabal file with prefix [" <> cabalFileNamePrefix+ <> "] in [" <> pkgDir <> "]"+ [cfn] ->+ pure . pure $ pkgDir </> cfn+ _ ->+ pure . Left $ "Multiple cabal files with prefix [" <> cabalFileNamePrefix+ <> "] in [" <> pkgDir <> "]: " <> show pkgDirEntries assertCabalExtraSourceContains :: FilePath -> FilePath -> Q () assertCabalExtraSourceContains fp cabalFile = do@@ -64,10 +78,13 @@ if isAbsoluteOnAnyPlatform p then do pRelativeToCabal <- (`stripCommonPrefix` p) . addTrailingPathSeparator <$> getPackageRoot- assertCabalExtraSourceContains pRelativeToCabal =<< findCabalFile+ findCabalFile >>= \case+ Left e -> reportError e+ Right cf ->+ assertCabalExtraSourceContains pRelativeToCabal cf TH.addDependentFile p else- reportError $ "addDependentFile got [" <> p <> "] that is not an absolute path"+ reportError $ "addDependentFile got [" <> p <> "] that is not an absolute path" -- | Besides 'addDependentFile' checks, it enusures that consumed content is not changed addDependentFile' :: FilePath -> BS.ByteString -> Q ()