cabal-rpm 2.0.10 → 2.0.11
raw patch · 8 files changed
+109/−59 lines, 8 files
Files
- ChangeLog +11/−5
- TODO +2/−0
- cabal-rpm.cabal +5/−4
- src/Commands/Diff.hs +2/−0
- src/Commands/Spec.hs +41/−24
- src/Commands/Update.hs +14/−5
- src/Dependencies.hs +14/−9
- src/PackageUtils.hs +20/−12
ChangeLog view
@@ -1,9 +1,15 @@+# 2.0.11 (2022-03-13)+- take build-tool-depends into account+- 'spec','update': detect %autorelease and preserve %autochangelog+- 'spec --standalone': strip executable+- support %_builddir+ # 2.0.10 (2021-08-14)-* pkgSpecPkgData: try allowing versioned dir-* update: only output old version if upgrading-* stack: use final lts17-* Stackage: bump to LTS 18-* Spec: drop %ghc_fix_rpath for subpkgs+- pkgSpecPkgData: try allowing versioned dir+- update: only output old version if upgrading+- stack: use final lts17+- Stackage: bump to LTS 18+- Spec: drop %ghc_fix_rpath for subpkgs # 2.0.9 (2021-06-08) - spec: doc requires ghc-filesystem
TODO view
@@ -14,6 +14,8 @@ - in container/clean install: cblrpm local HsOpenSSL fails: cabal-rpm: HsOpenSSL-0.11.4.17: getDirectoryContents:openDirStream: does not exist (No such file or directory) +- update: if package becomes meta add obsoletes for base/prof packages+ - choose use latest minor PVP release compatible with older lts stream? - missingdeps should warn about subpackaged deps - installmissing' only installs libs
cabal-rpm.cabal view
@@ -1,5 +1,5 @@ Name: cabal-rpm-Version: 2.0.10+Version: 2.0.11 Synopsis: RPM packaging tool for Haskell Cabal-based packages Description: This package provides a RPM packaging tool for Haskell Cabal-based packages.@@ -16,10 +16,11 @@ Bug-reports: https://github.com/juhp/cabal-rpm/issues License: GPL-3 License-file: COPYING-Author: Jens Petersen <juhpetersen@gmail.com>, Bryan O'Sullivan <bos@serpentine.com>+Author: Jens Petersen <juhpetersen@gmail.com>,+ Bryan O'Sullivan <bos@serpentine.com> Maintainer: Jens Petersen <petersen@fedoraproject.org> Copyright: 2007-2008 Bryan O'Sullivan <bos@serpentine.com>,- 2012-2021 Jens Petersen <juhpetersen@gmail.com>+ 2012-2022 Jens Petersen <juhpetersen@gmail.com> Category: Distribution Build-type: Simple Extra-doc-files: ChangeLog README.md TODO@@ -27,7 +28,7 @@ Cabal-version: 1.18 Tested-with: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4,- GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.2+ GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.5 source-repository head type: git
src/Commands/Diff.hs view
@@ -50,6 +50,8 @@ editSpecField "Release" (currel ++ suffix) speccblrpm diffcmd <- words <$> getEnvDefault "CBLRPM_DIFF" "diff -u" out <- dropChangelog <$> pipe (head diffcmd, tail diffcmd ++ [spec, speccblrpm])+ ---- was for %autorelease:+ -- out <- pipe (head diffcmd, tail diffcmd ++ [spec, speccblrpm]) ("sed", ["-e", "s%" ++ speccblrpm ++ "%" ++ spec <.> "cblrpm" ++ "%"]) unless (null out) $ putStrLn out
src/Commands/Spec.hs view
@@ -111,16 +111,21 @@ pkgid = package pkgDesc name = display $ pkgName pkgid + mspecExists <-+ case mspec of+ Nothing -> return Nothing+ Just spec -> do+ exists <- doesFileExist spec+ return $+ if exists+ then Just spec+ else Nothing+ standalone <- if pkgtype == StandalonePkg then return True else- case mspec of- Nothing -> return False- Just spec -> do- specExists <- doesFileExist spec- if specExists then- withSpecHead spec $ return . ("--standalone" `elem`)- else return False+ ifJust mspecExists $ \spec ->+ withSpecHead spec $ return . ("--standalone" `elem`) subpackage <- if isJust subpkgStream@@ -131,14 +136,16 @@ return False else return True else- case mspec of- Nothing -> return False- Just spec -> do- specExists <- doesFileExist spec- if specExists then- withSpecHead spec $ return . ("--subpackage" `elem`)- else return False+ ifJust mspecExists $ \spec ->+ withSpecHead spec $ return . ("--subpackage" `elem`) + autorelease <-+ ifJust mspecExists $+ grep_ "^Release: %autorelease"+ autochangelog <-+ ifJust mspecExists $+ grep_ "^%autochangelog"+ let hasExec = hasExes pkgDesc hasLib = hasLibs pkgDesc hasLibPkg = hasLib && not standalone@@ -292,9 +299,12 @@ putHdr "Name" (if binlib then "%{pkg_name}" else basename) putHdr "Version" version- when hasSubpkgs $- put "# can only be reset when all subpkgs bumped"- putHdr "Release" $ release ++ "%{?dist}"+ if autorelease+ then putHdr "Release" "%autorelease"+ else do+ when hasSubpkgs $+ put "# can only be reset when all subpkgs bumped"+ putHdr "Release" $ release ++ "%{?dist}" putHdr "Summary" summary putNewline #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)@@ -337,7 +347,7 @@ let testDeps = testsuiteDeps \\ (mkPackageName "Cabal" : (buildDeps pkgdeps ++ setupDeps pkgdeps)) when (testable && notNull testDeps) $ do put "%if %{with tests}"- mapM_ (putHdr "BuildRequires") $ (sort . map showRpm) (map (RpmHsLib Devel) testDeps ++ map RpmOther testsuiteTools)+ mapM_ (putHdr "BuildRequires") $ (sort . map showRpm) (map (RpmHsLib Devel) testDeps ++ map RpmOther (testsuiteTools \\ toolDeps pkgdeps)) put "%endif" let common = binlib && datafiles /= [] && not standalone@@ -477,7 +487,7 @@ if standalone then do put "mkdir -p %{buildroot}%{_bindir}" put "%if 0%{?fedora} >= 33 || 0%{?rhel} > 8"- put "cabal install --install-method=copy --installdir=%{buildroot}%{_bindir}"+ put "cabal install --install-method=copy --enable-executable-stripping --installdir=%{buildroot}%{_bindir}" put "%else" put "for i in .cabal-sandbox/bin/*; do" put "strip -s -o %{buildroot}%{_bindir}/$(basename $i) $i"@@ -585,11 +595,14 @@ sectionNewline put "%changelog"- now <- getCurrentTime- let date = formatTime defaultTimeLocale "%a %b %e %Y" now- packager <- fromMaybe "Fedora Haskell SIG <haskell@lists.fedoraproject.org>" <$> cmdMaybe "rpmdev-packager" []- put $ "*" +-+ date +-+ packager ++ " - " ++ version ++ "-" ++ release- put $ "- spec file generated by cabal-rpm-" ++ V.showVersion Paths_cabal_rpm.version+ if autochangelog+ then put "%autochangelog"+ else do+ now <- getCurrentTime+ let date = formatTime defaultTimeLocale "%a %b %e %Y" now+ packager <- fromMaybe "Fedora Haskell SIG <haskell@lists.fedoraproject.org>" <$> cmdMaybe "rpmdev-packager" []+ put $ "*" +-+ date +-+ packager ++ " - " ++ version ++ "-" ++ release+ put $ "- spec file generated by cabal-rpm-" ++ V.showVersion Paths_cabal_rpm.version hClose h return outputFile @@ -699,3 +712,7 @@ notNull :: [a] -> Bool notNull = not . null #endif++ifJust :: Maybe a -> (a -> IO Bool) -> IO Bool+ifJust Nothing _ = return False+ifJust (Just x) act = act x
src/Commands/Update.hs view
@@ -107,20 +107,25 @@ currel <- getSpecField "Release" spec let suffix = "%{?dist}" defrelease = "1"- editSpecField "Release" (defrelease ++ suffix) spec+ autorelease <- grep_ "^Release: %autorelease" spec+ unless autorelease $ do+ editSpecField "Release" (defrelease ++ suffix) spec patchSpec False Nothing curspec newspec ver' <- readVersion <$> getSpecField "Version" spec when (ver' /= newver) $ editSpecField "Version" (showVersion newver) spec- if updated && not subpkg+ unless autorelease $+ if updated && not subpkg then editSpecField "Release" (defrelease ++ suffix) spec else editSpecField "Release" (currel ++ suffix) spec rwGit <- rwGitDir+ autochangelog <- grep_ "^%autochangelog" spec when updated $ do -- FIXME reset when all subpkgs updated- unless subpkg $+ unless (subpkg || autorelease) $ editSpecField "Release" ("0" ++ suffix) spec- cmd_ "rpmdev-bumpspec" ["-c", "update to" +-+ showVersion newver, spec]+ unless autochangelog $+ cmd_ "rpmdev-bumpspec" ["-c", "https://hackage.haskell.org/package/" ++ display newPkgId ++ "/changelog" , spec] when (rwGit && subpkg) $ do cmd_ "cp" ["-p", "sources", "sources.cblrpm"] cmd_ "sed" ["-i", "/" ++ display oldPkgId <.> "tar.gz" ++ "/d", "sources.cblrpm"]@@ -138,7 +143,11 @@ when newrev $ cmd_ "git" ["add", display newPkgId <.> "cabal"] if updated then- cmd_ "git" ["commit", "-a", "-m", "update to" +-+ showVersion newver]+ cmd_ "git" ["commit", "-a", "-m",+ if autochangelog+ then "https://hackage.haskell.org/package/"+ ++ display newPkgId ++ "/changelog"+ else "update to" +-+ showVersion newver] else when newrev $ whenM (gitBool "diff-index" ["--quiet", "HEAD"]) $
src/Dependencies.hs view
@@ -91,12 +91,24 @@ [ bi | exe <- executables pkgDesc , let bi = buildInfo exe ] tools = nub $ map exeDepName (concatMap buildTools buildinfo)+ toolDeps' = concatMap buildToolDepends' buildinfo pkgcfgs = nub $ map pkgcfgDepName $ concatMap pkgconfigDepends buildinfo clibs = nub $ concatMap extraLibs buildinfo stdcpp = "stdc++" cpp = ["gcc-c++" | stdcpp `elem` clibs]- in (deps, setup \\ (mkPackageName "Cabal" : deps), delete (display self) tools ++ cpp, clibs \\ ["m", stdcpp], pkgcfgs)+ in (deps, setup \\ (mkPackageName "Cabal" : deps), delete (display self) tools ++ cpp ++ toolDeps', clibs \\ ["m", stdcpp], pkgcfgs) +buildToolDepends' :: BuildInfo -> [String]+#if MIN_VERSION_Cabal(2,0,0)+buildToolDepends' buildinfo =+ map prettyShow $ buildToolDepends buildinfo+ where+ prettyShow (ExeDependency pn _ _) = unPackageName pn+#else+buildToolDepends' _ =+ []+#endif+ data QueryBackend = Rpm | Repoquery deriving Eq resolveLib :: String -> IO (Maybe String)@@ -167,14 +179,7 @@ where tests = map testBuildInfo $ testSuites pkgDesc testTools = map exeDepName $ concatMap buildTools tests- testToolDeps =-#if MIN_VERSION_Cabal(2,0,0)- map prettyShow $ concatMap buildToolDepends tests-- prettyShow (ExeDependency pn _ _) = unPackageName pn-#else- []-#endif+ testToolDeps = concatMap buildToolDepends' tests missingPackages :: PackageDescription -> IO [RpmPackage] missingPackages pkgDesc = do
src/PackageUtils.hs view
@@ -36,7 +36,7 @@ ) where import FileUtils (assertFileNonEmpty, filesWithExtension, fileWithExtension,- listDirectory', mktempdir, withCurrentDirectory,+ listDirectory', mktempdir, withTempDirectory) import SimpleCabal (finalPackageDescription, licenseFiles, mkPackageName, PackageDescription, PackageIdentifier(..), PackageName,@@ -70,11 +70,7 @@ import Distribution.Text (display, simpleParse) -import System.Directory (copyFile, createDirectoryIfMissing, doesDirectoryExist,- doesFileExist, getCurrentDirectory,- getModificationTime,- removeDirectoryRecursive, renameFile,- setCurrentDirectory)+import System.Directory import System.Environment (getEnv) import System.FilePath import System.IO (hIsTerminalDevice, stdout)@@ -88,6 +84,8 @@ (docs, licensefiles) <- findDocsLicenses (dropFileName cabalfile) final return (final, docs, licensefiles) +-- FIXME only include (doc) files listed in the .cabal file+-- eg ChangeLog.md may exist but not dist packaged findDocsLicenses :: FilePath -> PackageDescription -> IO ([FilePath], [FilePath]) findDocsLicenses dir pkgDesc = do contents <- listDirectory' dir@@ -179,6 +177,13 @@ then getCurrentDirectory else fromJust <$> rpmEval "%{_sourcedir}" +getBuildDir :: IO FilePath+getBuildDir = do+ git <- isGitDir "."+ if git+ then getCurrentDirectory+ else fromJust <$> rpmEval "%{_builddir}"+ getRevisedCabal :: PackageIdentifier -> IO Bool getRevisedCabal pkgid = do let file = display (pkgName pkgid) <.> "cabal"@@ -191,7 +196,8 @@ else do revised <- grep_ "x-revision" file when revised $- renameFile file $ dir </> display pkgid <.> "cabal"+ -- renameFile can fail across fs devices+ copyFile file $ dir </> display pkgid <.> "cabal" return revised data RpmStage = Binary | Source | Prep@@ -394,18 +400,20 @@ case simpleParse namever of Nothing -> error "pkgid could not be parsed" Just pkgid -> bringTarball pkgid revise (Just specFile)- dExists <- doesDirectoryExist namever+ builddir <- getBuildDir+ let pkgsrcdir = builddir </> namever+ dExists <- doesDirectoryExist pkgsrcdir if dExists then do specTime <- modificationTime <$> getFileStatus specFile- dirTime <- accessTime <$> getFileStatus namever+ dirTime <- accessTime <$> getFileStatus pkgsrcdir when (specTime > dirTime) $ do rpmbuild True Prep specFile- dExists' <- doesDirectoryExist namever- when dExists' $ cmd_ "touch" [namever]+ dExists' <- doesDirectoryExist pkgsrcdir+ when dExists' $ cmd_ "touch" [pkgsrcdir] else rpmbuild True Prep specFile- tryFindPackageDesc namever+ tryFindPackageDesc pkgsrcdir -- findSpecFile :: PackageDescription -> RpmFlags -> IO (FilePath, Bool) -- findSpecFile pkgDesc flags = do