packages feed

rpmbuild-order 0.4.12 → 0.4.13

raw patch · 11 files changed

+72/−39 lines, 11 filesdep +safePVP ok

version bump matches the API change (PVP)

Dependencies added: safe

API changes (from Hackage documentation)

Files

ChangeLog.md view
@@ -1,3 +1,8 @@+# 0.4.13 (2025-11-10)+- ProvReqs: handle cmake directories as used by KDE (#5)+- ProvReqs: create python3dist dynamic provides (#6)+- depsGraphDeps bugfix: include the packages within the deps graphs+ # 0.4.12 (2024-08-04) - fix ordering of rust crates and rubygems   by mapping their dynamic BRs to package names
README.md view
@@ -14,7 +14,7 @@ `$ rpmbuild-order --version`  ```-0.4.12+0.4.13 ``` `$ rpmbuild-order --help` @@ -30,7 +30,7 @@   --version                Show version  Available commands:-  sort                     sort packages+  sort                     sort packages in build order   deps                     sort dependencies in neighbouring package dirs   rdeps                    sort dependents in neighbouring package dirs   layers                   ordered output of dependency layers
rpmbuild-order.cabal view
@@ -1,12 +1,12 @@ Name:             rpmbuild-order-Version:          0.4.12+Version:          0.4.13 License:          BSD3 License-File:     LICENSE Author:           Jens Petersen <petersen@redhat.com>,                   Henning Thielemann <haskell@henning-thielemann.de> Maintainer:       Jens Petersen <petersen@redhat.com> Copyright:        2010-2018  Henning Thielemann,-                  2018-2024 Jens Petersen <petersen@redhat.com>+                  2018-2025 Jens Petersen <petersen@redhat.com> Category:         Distribution Homepage:         https://github.com/juhp/rpmbuild-order Bug-reports:      https://github.com/juhp/rpmbuild-order/issues@@ -80,6 +80,7 @@                  fgl >= 5.5.4,                  graphviz,                  regex-tdfa,+                 safe,                  simple-cmd >= 0.2.3   HS-Source-Dirs:      src   default-language:    Haskell2010
src/Distribution/RPM/Build/Graph.hs view
@@ -432,8 +432,13 @@   unlessM (and <$> mapM doesDirectoryExist pkgs) $     errorWithoutStackTrace "Please use package directory paths"   -- filter out dotfiles-  createGraph3 ignoredBRs rpmopts verbose lenient (not rev) mdir (filter (\d -> d `notElem` excludedPkgs && head d /= '.') deps) >>=+  createGraph3 ignoredBRs rpmopts verbose lenient (not rev) mdir+    (filter (\d -> d `notElem` excludedPkgs && not ("." `isPrefixOf` d)) $ pkgsAndDeps pkgs deps) >>=     createGraph2 rpmopts verbose lenient True mdir . dependencyNodes pkgs+  where+    pkgsAndDeps [] ds = ds+    pkgsAndDeps (p:ps) ds =+      pkgsAndDeps ps $ if p `elem` ds then ds else p : ds  -- | Used to control the output from sortGraph data Components = Parallel -- ^ separate independent stacks
src/Distribution/RPM/Build/ProvReqs.hs view
@@ -13,6 +13,7 @@ import qualified Data.CaseInsensitive as CI import Data.List.Extra import Data.Maybe (mapMaybe)+import Safe (headMay) import SimpleCmd (cmdFull, cmdLines, cmdStdErr, egrep_, error',                   grep, warning, (+-+)) import SimpleCmd.Git (isGitDir)@@ -47,40 +48,41 @@     case mcontent of       Nothing -> return Nothing       Just content ->-        let pkg = takeBaseName spec-        in fmap Just <$> extractMetadata pkg ([],[]) $ lines content+        fmap Just <$> extractMetadata ([],[]) $ lines content   where-    extractMetadata :: FilePath -> ([String],[String]) -> [String]+    pkg = takeBaseName spec++    extractMetadata :: ([String],[String]) -> [String]                     -> IO ([String],[String])-    extractMetadata _ (provs,brs) [] =+    extractMetadata (provs,brs) [] =       return (provs, mapMaybe simplifyDep brs)-    extractMetadata pkg acc@(provs,brs) (l:ls) =+    extractMetadata acc@(provs,brs) (l:ls) =       case words l of-        [] -> extractMetadata pkg acc ls+        [] -> extractMetadata acc ls         [w]           | w =~ ("^/usr/(lib(64)?|share)/pkgconfig/.*\\.pc" :: String) ->               let pc = metaName "pkgconfig" $ takeBaseName w-              in extractMetadata pkg (pc : provs, brs) ls-          | w =~ ("^/usr/(lib(64)?|share)/cmake/[^/]*$" :: String) ->-              let p = takeFileName w+              in extractMetadata (pc : provs, brs) ls+          | w =~ ("^/usr/(lib(64)?|share)/cmake/[^/]*/?$" :: String) ->+              let p = takeFileName $ dropTrailingPathSeparator w                   cm = map (metaName "cmake") $                        if lower p == p then [p] else [p, lower p]-              in extractMetadata pkg (provs ++ cm, brs) ls-          | otherwise -> extractMetadata pkg acc ls+              in extractMetadata (provs ++ cm, brs) ls+          | otherwise -> extractMetadata acc ls         (w:w':ws) ->             case CI.mk w of               "BuildRequires:" ->                 -- FIXME could be more than one package: parse ws-                extractMetadata pkg (provs, w':brs) ls-              "Name:" -> extractMetadata pkg (w' : provs, brs) ls-              "Provides:" -> extractMetadata pkg (w' : provs, brs) ls+                extractMetadata (provs, w':brs) ls+              "Name:" -> extractMetadata (w' : provs, brs) ls+              "Provides:" -> extractMetadata (w' : provs, brs) ls               "%package" ->                 let subpkg =                       if null ws                       then pkg ++ '-' : w'                       else last ws-                in extractMetadata pkg (subpkg : provs, brs) ls-              _ -> extractMetadata pkg acc ls+                in extractMetadata (subpkg : provs, brs) ls+              _ -> extractMetadata acc ls      rpmspecParse :: IO (Maybe String)     rpmspecParse = do@@ -91,24 +93,30 @@         else if lenient then return Nothing else exitFailure      dynProvides :: IO [String]-    dynProvides =-      if "golang-" `isPrefixOf` takeBaseName spec-      then do-        macro <- grep "%global goipath" spec-        return $-          case macro of-            [def] -> ["golang(" ++ last (words def) ++ ")"]-            _ -> error' $ "failed to find %goipath in" +-+ spec-      else return []+    dynProvides+      | "python-" `isPrefixOf` pkg = do+          let dist = dropPrefix "python-" pkg+          return ["python3dist(" ++ dist ++ ")"]+      | "golang-" `isPrefixOf` pkg = do+          macro <- grep "%global goipath" spec+          return $+            case macro of+              [def] -> ["golang(" ++ last (words def) ++ ")"]+              _ -> error' $ "failed to find %goipath in" +-+ spec+      | otherwise = return []      simplifyDep br =-      case (head . words) br of-        '(':dep -> simplifyDep dep-        dep -> case splitOn "(" (dropSuffix ")" dep) of-          ("rpmlib":_) -> Nothing-          ("crate":[crate]) -> Just $ "rust-" ++ replace "/" "+" crate ++ "-devel"-          ("rubygem":[gem]) -> Just $ "rubygem-" ++ gem-          _ -> Just dep+      case (headMay . words) br of+        Nothing -> Nothing+        Just pri ->+          case pri of+            '(':dep -> simplifyDep dep+            dep ->+              case splitOn "(" (dropSuffix ")" dep) of+                ("rpmlib":_) -> Nothing+                ("crate":[crate]) -> Just $ "rust-" ++ replace "/" "+" crate ++ "-devel"+                ("rubygem":[gem]) -> Just $ "rubygem-" ++ gem+                _ -> Just dep  rpmspecDynBuildRequires :: FilePath -> IO [String] rpmspecDynBuildRequires spec =@@ -139,7 +147,7 @@   (ok, out, err) <- cmdFull "rpmspec" (["-q", "--provides"] ++ rpmopts ++ [spec]) ""   unless (null err) $ warning err   if ok-    then return $ map (head . words) $ lines out+    then return $ map (fst . word1) $ lines out     else if lenient then return [] else exitFailure  metaName :: String -> String -> String
src/Main.hs view
@@ -28,7 +28,7 @@   simpleCmdArgs (Just version) "Order packages by build dependencies"   "Sort package sources (spec files) in build dependency order" $   subcommands-  [ Subcommand "sort" "sort packages" $+  [ Subcommand "sort" "sort packages in build order" $     sortPackages <$> rpmOpts <*> verboseOpt <*> lenientOpt <*> componentsOpt <*> subdirOpt <*> pkgArgs   , Subcommand "deps" "sort dependencies in neighbouring package dirs" $     depsPackages False <$> rpmOpts <*> verboseOpt <*> excludeOpts <*> ignoredBRopts <*> lenientOpt <*> combineOpt <*> subdirOpt <*> pkgArgs
test/pkgs/A/A.spec view
@@ -14,6 +14,10 @@ %description -n C-A A support for C +%files++%files -n C-A+ %changelog * Wed Jul 29 13:38:27 +08 2020 Jens Petersen <petersen@redhat.com> -
test/pkgs/B/B.spec view
@@ -22,6 +22,8 @@  %files +%files devel+ %changelog * Wed Jul 29 13:38:27 +08 2020 Jens Petersen <petersen@redhat.com> -
test/pkgs/cmake/A/A.spec view
@@ -8,6 +8,8 @@ %description Test package A pkgconfig +%files+ %changelog * Wed Jul 29 13:38:27 +08 2020 Jens Petersen <petersen@redhat.com> -
test/pkgs/dynbr/A/A.spec view
@@ -16,6 +16,10 @@ %description -n C-A A support for C +%files++%files -n C-A+ %changelog * Wed Jul 29 13:38:27 +08 2020 Jens Petersen <petersen@redhat.com> -
test/pkgs/pkgconf/A/A.spec view
@@ -8,6 +8,8 @@ %description Test package A pkgconfig +%files+ %changelog * Wed Jul 29 13:38:27 +08 2020 Jens Petersen <petersen@redhat.com> -