packages feed

cabal-rpm 2.0.10 → 2.0.11

raw patch · 8 files changed

+109/−59 lines, 8 files

Files

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