From 1b93023235e57c2b0a237ea770563ac36196b51d Mon Sep 17 00:00:00 2001 From: Henk-Jan van Tuyl <hjgtuyl@chello.nl> Date: Sun, 1 Mar 2015 22:48:33 +0100 Subject: [PATCH] Added checks to see if files and directories exist This is for fields "extra-source-files", "data-files", "extra-doc-files", "c-sources" and "js-sources" See https://github.com/haskell/cabal/issues/1531 --- .../Distribution/PackageDescription/Check.hs | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/Cabal/Distribution/PackageDescription/Check.hs b/Cabal/Distribution/PackageDescription/Check.hs index be4e94a2d2..b1b32817b7 100644 --- a/Cabal/Distribution/PackageDescription/Check.hs +++ b/Cabal/Distribution/PackageDescription/Check.hs @@ -1379,30 +1379,36 @@ checkPackageContent :: Monad m => CheckPackageContentOps m -> PackageDescription -> m [PackageCheck] checkPackageContent ops pkg = do - licenseErrors <- checkLicensesExist ops pkg setupError <- checkSetupExists ops pkg configureError <- checkConfigureExists ops pkg localPathErrors <- checkLocalPathsExist ops pkg vcsLocation <- checkMissingVcsInfo ops pkg + fileExistsError <- checkFilesExist ops pkg - return $ licenseErrors - ++ catMaybes [setupError, configureError] + return $ + catMaybes [setupError, configureError] ++ localPathErrors ++ vcsLocation - -checkLicensesExist :: Monad m => CheckPackageContentOps m - -> PackageDescription - -> m [PackageCheck] -checkLicensesExist ops pkg = do - exists <- mapM (doesFileExist ops) (licenseFiles pkg) - return - [ PackageBuildWarning $ - "The '" ++ fieldname ++ "' field refers to the file " - ++ quote file ++ " which does not exist." - | (file, False) <- zip (licenseFiles pkg) exists ] - where - fieldname | length (licenseFiles pkg) == 1 = "license-file" - | otherwise = "license-files" + ++ fileExistsError + +checkFilesExist :: Monad m => CheckPackageContentOps m + -> PackageDescription + -> m [PackageCheck] +checkFilesExist ops pkg = do + let filess = [ (files, kind) + | (files, kind) <- + [ (files, "license-file") | files <- licenseFiles pkg ] + ++ [ (files, "extra-source-files") | files <- extraSrcFiles pkg ] + ++ [ (files, "data-files") | files <- dataFiles pkg ] + ++ [ (files, "extra-doc-files") | files <- extraDocFiles pkg ] + ] + + missing <- filterM (liftM not . doesFileExist ops . fst) filess + return [ PackageBuildWarning { + explanation = quote (kind ++ ": " ++ file) + ++ " file does not exist." + } + | (file, kind) <- missing ] checkSetupExists :: Monad m => CheckPackageContentOps m -> PackageDescription @@ -1432,9 +1438,12 @@ checkLocalPathsExist ops pkg = do let dirs = [ (dir, kind) | bi <- allBuildInfo pkg , (dir, kind) <- - [ (dir, "extra-lib-dirs") | dir <- extraLibDirs bi ] - ++ [ (dir, "include-dirs") | dir <- includeDirs bi ] - ++ [ (dir, "hs-source-dirs") | dir <- hsSourceDirs bi ] + [ (dir, "extra-lib-dirs") | dir <- extraLibDirs bi ] + ++ [ (dir, "include-dirs") | dir <- includeDirs bi ] + ++ [ (dir, "hs-source-dirs") | dir <- hsSourceDirs bi ] + ++ [ (dir, "c-sources") | dir <- cSources bi ] + ++ [ (dir, "js-sources") | dir <- jsSources bi ] + , isRelative dir ] missing <- filterM (liftM not . doesDirectoryExist ops . fst) dirs return [ PackageBuildWarning { -- GitLab