cabal-rpm 2.2.0 → 2.2.1
raw patch · 16 files changed
+818/−766 lines, 16 filesdep −http-conduitdep −old-localedep −optparse-applicativedep ~Cabaldep ~simple-cmd-argsdep ~time
Dependencies removed: http-conduit, old-locale, optparse-applicative, process
Dependency ranges changed: Cabal, simple-cmd-args, time
Files
- ChangeLog +0/−586
- ChangeLog.md +607/−0
- README.md +5/−3
- cabal-rpm.cabal +19/−17
- src/Commands/Depends.hs +1/−1
- src/Commands/Diff.hs +1/−1
- src/Commands/Refresh.hs +1/−1
- src/Commands/RpmBuild.hs +1/−1
- src/Commands/Spec.hs +39/−47
- src/Commands/Update.hs +16/−15
- src/Dependencies.hs +16/−13
- src/FileUtils.hs +1/−1
- src/Main.hs +6/−5
- src/PackageUtils.hs +103/−73
- src/Stackage.hs +1/−1
- src/Types.hs +1/−1
− ChangeLog
@@ -1,586 +0,0 @@-# 2.2.0 (2024-03-27)-- Dependencies excludedPkgs: add system-cxx-std-lib-- Dependencies: withGhcProfLibType to respect %with_ghc_prof for builddeps-- PackageUtils dependencySortCabals: do nothing if empty-- Snapshots: update stackage snapshots.json url-- Spec: usesOptparse, maybeGenerateBashCompletion, maybeGenerateManpage-- spec: add %{?haskell_setup}-- spec: define and use %ghc_major for --with-compiler-- spec: do not BR ghcX.Y-prof for standalone--# 2.1.5 (2023-11-10)-- bugfix: --flags should be optional!-- PackageUtils pkgSpecPkgData: error displaying an unparsable pkgid--# 2.1.4 (2023-11-03)-- spec --standalone should not create subpkgs (regression in 2.1.3)-- spec: when subpackaging include prof for main exec deps-- fix --flags parsing to actually work!-- PackageUtils bringTarball: create SOURCES/ earlier for new user--# 2.1.3 (2023-09-27)-- spec: implement recursive missing deps fully; use cabal-sort if available-- spec: also get the license of subpkgs now-- spec: optparse-simple also supports bash completions-- spec: simplify standalone %ghc_set_gcc_flags conditional-- Stackage: prefer stack list if available: should be faster-- Stackage: cache latest snapshots versions with code from stack-all-- update: be more careful about adding new revised .cabal--# 2.1.2 (2023-07-27, F39)-- PackageUtils checkForPkgCabalFile: check within BUILD dir-- PackageUtils patchSpec: drop problem code for showing patch -.rej-- Stackage: bump default to lts-21-- allow Cabal-3.10-- https for COPYING urls-- spec: add %autopatch if Patch's and no %patch-- spec: exclude missing deps from missing testsuite deps-- spec: revert from %autosetup to %setup-- spec: standalone should not use prof-- update: --old-stream option for subpackages-- update: invert gitBool check for local changes-- update: use wasrevised to control revision of old reference spec--# 2.1.1 (2023-03-27)-- spec: use %autosetup-- PackageUtils patchSpec: adding newline to stdin hangs patch--# 2.1.0 (2023-02-15)-- spec: list out ghc-*-prof BRs separately from ghc-*-devel-- spec: output SPDX license tags-- spec: for standalone f36+ cabal-install needs %ghc_set_gcc_flags-- spec: handle '.' paragraph separator lines in description-- spec: initial support for --with-ghc version to build with ghcX.Y-- spec: check if deps of missing deps available-- spec: for --standalone define %cabal_install for cabal-- Stackage: default to latest lts-20 stream-- refresh: build cabal-rpm in tempdir-- PackageUtils rpmbuild: no longer override _builddir, _rpmdir, _srcrpmdir-- PackageUtils tryUnpack: now into %_builddir-- PackageUtils patchSpec: show .rej if patch fails-- PackageUtils: handle tools like ghc-tags which are not a library-- always assume revised .cabal is wanted/used-- remove all the keep logic for tmpdir processing-- allow Cabal-3.8-- GH action: add 9.4 and bump actions versions-- Diff: use extra withTempDir-- simplify withTempDirectory with withCurrentDirectory--# 2.0.11.1 (2022-03-28)-- support building with Cabal 3.6--# 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--# 2.0.9 (2021-06-08)-- spec: doc requires ghc-filesystem-- spec: make %cabal_test conditional explicit-- refresh: fix installation of cabal-rpm-version with cabal install-- spec: tweak conditions for standalone sandbox (ie rhel8)--# 2.0.8 (2021-03-27)-- update: make sure krb ticket exists before uploading source-- spec: executable doc files now handled by ghc-rpm-macros-- move dos2unix for revised DOS .cabal from download to spec build time-- spec: do not enable testsuite for standalone package-- spec: also bash-completion for simple-cmd-args-- spec: for bash-completions use default not filenames-- Stackage: use lts-17-- pkgInstallMissing: also install ghc-rpm-macros--# 2.0.7 (2020-10-07)-- spec: setup bash completions for optparse-applicative-- spec: --ignore-missing to ignore deps not yet in hackage-- update: only commit revised if actual changes-- show rpmbuild mode-- spec --standalone updated for cabal-install 3 (f33+)--# 2.0.6 (2020-06-28) Fedora 33-- spec: use packager's name in %changelog-- spec: default package versions to Stackage LTS 16-- spec now also leaves newly prepped source tree around-- spec: handle testsuite tool deps separately-- spec, refresh, update: more care about whether to revise or not-- diff: ignore release field-- prep: be quiet-- spec: add a comment for missing testsuite deps-- only allow specifying major Stackage LTS versions (not minor):- for more progressive updating logic (lts-n -> lts-(n+1) -> nightly -> Hackage)-- spec: don't warn "spec exists" explicitly-- spec: take specified stream into account for subpackaging-- update: finally run prep to check update okay-- prep/srpm --verbose and local --quiet options-- spec: move chmod for docs to %prep-- spec: check existing .spec file for detecting dropped deps and executable deps-- update: also commit revised .cabal file when no update-- fix copying of cached tarballs (longstanding defect)--# 2.0.5.1 (2020-06-11)-- spec: fix grep breakage in 2.0.5 release-- refresh and update now leave newly prepped source tree around-- spec: dropped deprecated %post and %postun scriptlets--# 2.0.5 (2020-06-10)-- spec --tests flag to force enabling testsuite-- spec: fix permissions of extra-source-files-- update url for Fedora Haskell Packaging Guidelines (TristanCacqueray)-- make cabal update silent and check for 01-index-- support Cabal-3.2 ShortText (hekkaidekapus)-- use simple-cmd-args 0.1.6 for working subcommand help-- improve handling of update --stream for subpackaging-- bump latest Stackage to LTS 15-- spec: exclude deps dropped with cabal-tweak-drop-dep--# 2.0.4 (2020-02-27) Fedora 32-- update: also unbreak patching--# 2.0.3 (2020-02-24)-- refresh: unbreak to patch spec file-- spec: detect local revised .cabal file--# 2.0.2 (2020-02-20)-- drop %_devel compat macro-- default stream is now lts-14-- sort deps of subpackages-- metapkgs don't have prof or doc-- fix generation of subpackages for a new package-- update: logic reworked to reduce redundant downloads--# 2.0.1 (2020-02-06)-- quote macros in commented fields-- read --subpackage from spec header-- generate BRs for subpackages--# 2.0.0 (2020-01-16)-- major refactor to handle stream/pkgid more precisely and correctly- (hence major version bump due to behavior changes)- - eg can no longer specify both stream and pkg-ver-- check for package first in default LTS, then latest LTS, and Nightly,- before Hackage-- respect and read/write --standalone and --stream in spec header consistently- (note default LTS stream is not written to header)-- fix infinite loop for 'install'-- optionally use libcurl binding instead of former stackage-query fallback--# 1.0.3 (2019-12-31)-- define %_devel for f30 packaging compatibility-- missingdeps and builddep fixes-- --standalone: add BRs for deps of missing deps--# 1.0.2 (2019-12-09)-- allow newer time for ghc-8.8-- more type refactoring: PackageIdentifier, LibPkgType, RpmPackage- and some associated bugfixes--# 1.0.1 (2019-09-29)-- doc and prof subpackages for libraries-- reworked to use optparse-applicative (simple-cmd-args)-- default to Stackage LTS 13-- F31+ uses triggers for ghc-pkg recache-- wait 10^4s (< 3 hours) between cabal update's-- refactor using simple-cabal, PackageName and LibPkgType-- handle setup-depends-- diff: autodetect subpackaging-- diff (experimental): trim %changelog with bawolk/hsp if available-- drop pre-built manpage: use Makefile to build it--# 0.13.3 (2019-05-10)-- default stream to lts-12-- repoquery for missing deps' package .conf file to avoid modular ghc conflicts-- only --assumeyes for dnf install when not tty-- give up if more than one spec file-- fix handling unversioned update-- map cabal build-tool to cabal-install-- use tmpdir for tmp spec files and building missing deps-- finalPackageDescription for debugging Cabal-- use simple-cmd-0.1.3.1 for sudo fixes--# 0.13.2 (2019-04-09)-- include ANNOUNCE in docs-- if dependency parallel directory exists, don't check if installed-- fix buildDepends on Cabal-2.4-- new --standalone option for private packages built with cabal-install-- print --{missing,standalone,subpackage} options on spec file header line--# 0.13.1 (2019-02-27)-- update: fix rw git dir detection-- fix tarball downloading and copying of revised .cabal file-- show output (errors) when prepping source and prep in working dir-- include BUGS and CONTRIBUTING as docs-- need chrpath for subpackages-- move license dir to any common subpackage--# 0.13 (2019-02-18)-- improve license and doc filtering-- backup revised .cabal files-- fallback to spectool for source downloading-- drop selfdep-- common subpackage for binlib data files-- section dividers for sources, setup, build, install, and files-- only run "cabal update" if more than 10min old-- drop support for ghc-7.4.2--# 0.12.6 (2018-10-20)-- update: remove old revised .cabal-- convert revised .cabal file to unix format-- spec: support haskell-gi libraries-- most of SysCmd moved to simple-cmd library (new dep)-- can now download multiple source files-- use line-buffering for stdout-- always do cabal update-- support ghc_without_dynamic for static executables-- build with Cabal-2.4 (ghc-8.6)--# 0.12.5 (2018-07-29)-- update: more careful now with fuzz 1--- handle revised to non-revised--- improved for subpackaging-- improvements to revising of .cabal files--- place after any subpackages--- use revision when prep'ing and building-- use "fedpkg sources" to fetch current Fedora sources-- refresh: handle subpackages-- missing: better output for missing sub-deps-- do not put doc* in docs--# 0.12.4 (2018-05-31)-- now uses Hackage revisions of packages (using wget)-- spec --stream STREAM replaces --hackage-- disable https for ghc < 7.10--# 0.12.3 (2018-05-14)-- build: remove erroneous tarball check-- refresh: use cblrpm for old cabal-rpm--# 0.12.2 (2018-03-29)-- diff now supports CBLRPM_DIFF envvar to override "diff -u"-- try to build even when missing rpms deps not available-- package now builds with Cabal-2.2--# 0.12.1 (2018-02-20)-- new option --missing: comments out missing dependencies-- put license files in lib subpackage-- no longer append %_isa to C BuildRequires (#54)-- no longer leave leftover tmpdirs (#26)-- change 'cblrpm' to 'cabal-rpm' in documentation-- drop support for SCM snapshot releases--# 0.12 (2017-11-17)-- default to querying stackage.org directly via https-- fix stackage-query usage and suggest installing if missing-- run cabal update before cabal commands-- devel packages now provide doc subpackage for forward compatibility-- new --hackage option to get package version from Hackage not Stackage-- do not add .cabal files containing "doc" to docs-- silence mock rpmbuild -bs warnings about undefined %ghc_version-- allow building with ghc-8.2 and Cabal-2.0--# 0.11.2 (2017-07-31)-- fix cabal-rpm update --subpackage-- fix rpm installation when no sudo (#49)-- fix handling of no exposed modules (#50)-- fix license handling for selfdep binlib (#51)--# 0.11.1 (2017-03-13)-- support building meta (compat) packages-- invocation of optional stackage-query to update to LTS now works-- initial --subpackage support for %{subpkgs} of missing deps:- including downloading, but update is not properly implemented yet-- new %{pkgver} macro-- (+-+) absorbs extra space-- update no longer resets release for %{subpkgs}--# 0.11 (2017-01-27)-- refresh command now reads the cabal-rpm version header in the spec file and- installs that version of cabal-rpm under ~/.cblrpm/ and uses it to make patch-- diff and update now follow package-version args-- update tries to use stackage-query to check latest Stackage version- before falling back to latest Hackage-- update from Hackage now follows "Default available version"-- sync some changes from opensuse-haskell/cabal-rpm-- rename Setup to Options-- silence <$> import warnings--# 0.10.1 (2016-11-29)-- no longer need to remove License file by hand-- use new %ghc_fix_rpath-- include Contributors in docs-- warn about duplicate docs in datadir and remove them--# 0.10.0 (2016-07-27)-- rename executable and manpage back to 'cabal-rpm': more predictable-- explicit error for unknown command-- sort docs and include upstream changelogs and news-- add cabal-rpm version header line to spec files-- new highly experimental command to refresh spec files-- only add "ExclusiveArch: %{ghc_arches_with_ghci}" for RHEL/EPEL-- use revised Hackage .cabal files on SUSE (@peti)-- on SUSE add explicit requires for pkgconfig-- new --compiler option (@peti)-- new --distro option (@peti)-- new --strict option which fails when unresolved cdeps (@peti),- otherwise a warning is output-- update now shows diff-- use %cabal_test (@mimi1vx)-- no longer duplicate docs in datadir-- package datadir better-- for SUSE libs executables now go in the base package--# 0.9.11 (2016-05-06)-- build with Cabal-1.24--# 0.9.10 (2016-03-24)-- bugfixes- - update no longer tries to grep non-existent .git- - fix duplicate clibs-- fix build with ghc-8.0 (Cabal-1.23 and time-1.6)-- SuSE improvements: no disttag or rpmdev-bumpspec--# 0.9.9 (2016-01-25)-- couple of minor improvements for SUSE packaging--# 0.9.8 (2015-10-08)-- better %license logic-- fix handling of versions without '.'-- no duplicate test deps--# 0.9.7 (2015-08-28)-- only list buildable executables in spec file-- bring back 'build' as an alias for 'local'-- use %license macro-- do not warn about missing optional system programs--# 0.9.6 (2015-05-21)-- make "cabal list" quiet-- filter missing packages from repoquery--# 0.9.5.1 (2015-05-01)-- add old-locale Cabal flag to fix build on ghc-7.10--# 0.9.5 (2015-04-20)-- fix for dnf repoquery-- create SOURCES/ for tarball-- fixes for Cabal-1.22-- nogpgcheck for Fedora 22+-- warn about hidden backup spec files--# 0.9.4 (2015-02-17)-- use dnf if installed instead of yum for install and repoquery-- update now only commits changes and new source if git origin is ssh-- allow Cabal-1.22--# 0.9.3 (2015-02-05)-- make sure tarball destdir exists before copying-- improve output for listing missing packages-- update improvements: new-sources first, continue if patch fails, git commit changes-- spec: sort executables and use %pkg_name in %ghc_fix_dynamic_rpath-- drop the debuginfo handling for C files-- ignore emacs temp ".#pkgname.spec" files--# 0.9.2 (2014-12-18)-- lots of bug fixes-- improved missingdeps output-- use https for hackage URLs (codeblock)-- no longer override %_sourcedir, %_rpmdir, and %_srcrpmdir, unless git dir-- new "update" command to update spec to latest version-- use 'rpm --eval "%{?dist}"' to determine OS type-- fix build and warnings for Cabal 1.20-- use TMPDIR--# 0.9.1 (2014-08-26)-- missingdeps now lists missing dependencies recursively and outputs Hackage- package names rather than ghc-*-devel package names-- do not assume package order when testing if dependencies installed-- check ~/.cabal/packages/ exists before looking for tarballs-- pass actual exeNames to %ghc_fix_dynamic_rpath--# 0.9 (2014-07-17)-- reworked initial logic to make better use of existing spec files,- and prep source tree properly-- default to Library packaging instead of BinLib:- override with --binary which replaces --library-- prep src for version in existing spec file when building-- 'install' command now does local recursive rpmbuilding-- try "rpm -qf" and then rpmquery to resolve clib devel depends-- support SUSE packaging (thanks Jan Matějka)-- support RHEL5 packaging-- support Cabal-1.20-- improve output for 'depends' command-- no duplicate clibs deps-- include "cblrpm" in tempdir names-- use current dir name as a last guess of package name--# 0.8.11 (2014-05-17)-- build command renamed again from "rpm" to "local" (like fedpkg)-- use .spec file to determine pkg-ver when no .cabal file around-- automatically generate bcond for %check and add testsuite BRs- when testsuites available-- disable debuginfo explicitly when no c-sources in preparation for- ghc-rpm-macros no longer disabling debuginfo-- reset filemode of downloaded hackage tarballs to 0644:- workaround for cabal-install setting 0600-- include release again in initial changelog-- also pull in Cabal and ghc-rpm-macros when yum installing deps-- no longer depends on regex-compat-- some refactorings--# 0.8.10 (2014-03-03)-- diff command replaces cblrpm-diff script-- new missingdeps command-- replace use of rpmspec: no "rpmspec --srpm" on RHEL 5 and 6--# 0.8.9 (2014-02-10)-- bugfix for error handling dir with spec file-- cblrpm-diff arg is now optional--# 0.8.8 (2014-02-09)-- updated GPLv3 license headers-- use .spec file to determine package if no .cabal file (works with- or without arg)-- bugfix: install command now works even if some dependencies not packaged-- bugfix: do not re-copy cached tarball each time-- use new shorter hackage2 URL for packages-- capitalize start of summary and description-- filter @ and \ quotes in descriptions-- new prep command (like "rpmbuild -bp" or "fedpkg prep")-- new depends and requires commands list package depends or buildrequires-- new builddep command (like yum-buildep, but allows missing packages)-- notice for overwriting existing spec file with force option--# 0.8.7 (2013-12-31)-- new "install" command wrapping "cabal install"-- "build" command renamed to "rpm"-- sort devel Requires-- cblrpm-diff: allow package arg-- support copying tarball fetched from another remote-repo (Ricky Elrod)-- hlint cleanup-- support AGPL license in Cabal-1.18--# 0.8.6 (2013-10-04)-- check for _darcs or .git dir in package topdir not pwd--# 0.8.5 (2013-09-29)-- fix repoquery when a package update exists for C lib-- make cblrpm-diff quieter--# 0.8.4 (2013-09-28)-- use repoquery to determine extra C library dependencies-- quote "pkgconfig(foo)" for rpm query and yum install-- show sudo command before sudo password prompt appears-- exclude hsc2hs from build tool deps-- devel provides ghc-<pkg>-static-- drop release from initial changelog entry for packager to add an entry-- do not try to fetch tarball for a darcs or git source dir--# 0.8.3 (2013-07-12)-- only try to install missing dependencies-- for executables depending on own lib add BR chrpath and %ghc_fix_dynamic_rpath-- word-wrap generic descriptions-- map ffi to libffi-- move modules to toplevel-- Rpm module split into Spec and Build in Commands/--# 0.8.2 (2013-07-02)-- handle pkg-ver arg, and check cabal list is non-empty-- sort all generated deps-- use yum-builddep again to install deps-- copy tarball into cwd for rpmbuild-- warn about long synopsis rather than multiline-- wrap after end of sentence near end of line-- use _isa in requires ghc-<pkg>-- --version now outputs to stdout-- new --force flag to overwrite existing .spec file--# 0.8.1 (2013-06-14)-- word wrapping of descriptions-- use generic description for shared subpackage-- simplify logic for summary and description processing--# 0.8.0 (2013-05-31)-- new simplier revision to Fedora Packaging- - drop %common_summary and %common_description- - drop %ghc_package, %ghc_description, %ghc_devel_package,- %ghc_devel_description, %ghc_devel_post_postun, %ghc_files,- and %ghc_devel_requires-- check external programs available before use-- tweaks for ghc-7.6.3 and Cabal-1.16--# 0.7.1 (2013-03-22)-- add final full-stop to description if missing-- add ver-rel to initial changelog entry-- fix use of cblrpm-diff force lib option-- output warning when .spec already exists-- fix handling of package names that end in a digit-- output when trying a path-- map curl C dep to libcurl--# 0.7.0 (2013-01-22)-- cabal-rpm command renamed to cblrpm, and cabal-rpm-diff to cblrpm-diff-- cblrpm now has commands for spec, srpm, and build-- cblrpm will try to install packaged uninstalled depends with sudo yum install-- add %ghc_arches_with_ghci for hamlet dep-- cblrpm-diff supports -l-- cblrpm --version-- sort extralibs depends-- cleanup of unused options and help output--# 0.6.6 (2012-11-21)-- generate BRs and Req's for C libraries (extra-libraries)-- initial map for some C libs: libglut, libiw, libz, libX*-- generate BRs and Req's for pkgconfig-depends-- generate BRs for build-tools-- initial map for build-tools: gtk2hs-buildtools-- map LGPL-2.1 license to LGPLv2+ tag-- backup suffix changed from .cabal-rpm to .cblrpm-- don't mistake non-existent file in cwd for a package--# 0.6.5 (2012-11-01)-- drop hscolour BuildRequires-- simplify generated BuildRequires: drop version ranges for now,- exclude pkg self, base libs, and Cabal-- use ExclusiveArch ghc_arches_with_ghci for template-haskell dep-- replace --name option with --library to force Lib--# 0.6.4 (2012-09-25)-- add cabal-rpm-diff-- fix manpage generation--# 0.6.3 (2012-09-24)-- support tarball path argument-- use a temporary working dir for opening tarball or cabal unpack-- add a manpage--# 0.6.2 (2012-09-10)-- fix output of L/GPL version--# 0.6.1 (2012-07-25)-bugfixes:-- fix "cabal-rpm pkg" when other *pkg* packages exist in hackage-- always generate the extra docs list from the pkg src dir!-- now no backslash at end of common_description--# 0.6.0 (2012-07-24)-- updated to work with Cabal >= 1.10 and current cabal2spec style packaging- using currently actively used ghc-rpm-macros-- should generate haskell dependencies correctly and also summary and- description text-- some of the generic compiler supported was dropped for simplicity-- rpmbuild support will be re-introduced in a future version--# 0.5.1 and earlier (2007-2008) released by Bryan O'Sullivan-- should work with ghc-6.8---# Local Variables:-# mode: text-# End:
+ ChangeLog.md view
@@ -0,0 +1,607 @@+# 2.2.1 (2024-08-02)+- getBuildDir: handle new rpm-4.20 BUILD/n-v-build dir+- spec: --stream should be used first when determining stream+- spec: also output %haskell_setup when subpackaging+- spec: only autorelease if not subpackaging+- spec: change --tests to --no-tests to force disabling testsuite+- spec: don't reverse order independent subpkgs+- spec: only put --stream nightly or hackage into spec header line+- spec: set PATH in %check+- spec --standalone: drop cabal-install BR version and use %defined+- spec: simplify generated bash-completion and manpage+- spec: use %bash_completions_dir in filelist+- update: now checks .cabal revision number explicitly whether changed+- update: use fkinit instead of kinit+- repoquerying with dnf5: use --whatprovides and repoquery must be --quiet+- Dependencies: resolveLib now warns with name of missing library+- PackageUtils findDocsLicenses: ignore Haskell source files+- .cabal: add ghc-options (from hkgr) and drop redundant build-depends+- .cabal: need simple-cmd-args 0.1.7 to drop direct optparse-applicative dep+- .cabal: drop the old-time flag (for time < 1.5)++# 2.2.0 (2024-03-27)+- Dependencies excludedPkgs: add system-cxx-std-lib+- Dependencies: withGhcProfLibType to respect %with_ghc_prof for builddeps+- PackageUtils dependencySortCabals: do nothing if empty+- Snapshots: update stackage snapshots.json url+- Spec: usesOptparse, maybeGenerateBashCompletion, maybeGenerateManpage+- spec: add %{?haskell_setup}+- spec: define and use %ghc_major for --with-compiler+- spec: do not BR ghcX.Y-prof for standalone++# 2.1.5 (2023-11-10)+- bugfix: --flags should be optional!+- PackageUtils pkgSpecPkgData: error displaying an unparsable pkgid++# 2.1.4 (2023-11-03)+- spec --standalone should not create subpkgs (regression in 2.1.3)+- spec: when subpackaging include prof for main exec deps+- fix --flags parsing to actually work!+- PackageUtils bringTarball: create SOURCES/ earlier for new user++# 2.1.3 (2023-09-27)+- spec: implement recursive missing deps fully; use cabal-sort if available+- spec: also get the license of subpkgs now+- spec: optparse-simple also supports bash completions+- spec: simplify standalone %ghc_set_gcc_flags conditional+- Stackage: prefer stack list if available: should be faster+- Stackage: cache latest snapshots versions with code from stack-all+- update: be more careful about adding new revised .cabal++# 2.1.2 (2023-07-27, F39)+- PackageUtils checkForPkgCabalFile: check within BUILD dir+- PackageUtils patchSpec: drop problem code for showing patch -.rej+- Stackage: bump default to lts-21+- allow Cabal-3.10+- https for COPYING urls+- spec: add %autopatch if Patch's and no %patch+- spec: exclude missing deps from missing testsuite deps+- spec: revert from %autosetup to %setup+- spec: standalone should not use prof+- update: --old-stream option for subpackages+- update: invert gitBool check for local changes+- update: use wasrevised to control revision of old reference spec++# 2.1.1 (2023-03-27)+- spec: use %autosetup+- PackageUtils patchSpec: adding newline to stdin hangs patch++# 2.1.0 (2023-02-15)+- spec: list out ghc-*-prof BRs separately from ghc-*-devel+- spec: output SPDX license tags+- spec: for standalone f36+ cabal-install needs %ghc_set_gcc_flags+- spec: handle '.' paragraph separator lines in description+- spec: initial support for --with-ghc version to build with ghcX.Y+- spec: check if deps of missing deps available+- spec: for --standalone define %cabal_install for cabal+- Stackage: default to latest lts-20 stream+- refresh: build cabal-rpm in tempdir+- PackageUtils rpmbuild: no longer override _builddir, _rpmdir, _srcrpmdir+- PackageUtils tryUnpack: now into %_builddir+- PackageUtils patchSpec: show .rej if patch fails+- PackageUtils: handle tools like ghc-tags which are not a library+- always assume revised .cabal is wanted/used+- remove all the keep logic for tmpdir processing+- allow Cabal-3.8+- GH action: add 9.4 and bump actions versions+- Diff: use extra withTempDir+- simplify withTempDirectory with withCurrentDirectory++# 2.0.11.1 (2022-03-28)+- support building with Cabal 3.6++# 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++# 2.0.9 (2021-06-08)+- spec: doc requires ghc-filesystem+- spec: make %cabal_test conditional explicit+- refresh: fix installation of cabal-rpm-version with cabal install+- spec: tweak conditions for standalone sandbox (ie rhel8)++# 2.0.8 (2021-03-27)+- update: make sure krb ticket exists before uploading source+- spec: executable doc files now handled by ghc-rpm-macros+- move dos2unix for revised DOS .cabal from download to spec build time+- spec: do not enable testsuite for standalone package+- spec: also bash-completion for simple-cmd-args+- spec: for bash-completions use default not filenames+- Stackage: use lts-17+- pkgInstallMissing: also install ghc-rpm-macros++# 2.0.7 (2020-10-07)+- spec: setup bash completions for optparse-applicative+- spec: --ignore-missing to ignore deps not yet in hackage+- update: only commit revised if actual changes+- show rpmbuild mode+- spec --standalone updated for cabal-install 3 (f33+)++# 2.0.6 (2020-06-28) Fedora 33+- spec: use packager's name in %changelog+- spec: default package versions to Stackage LTS 16+- spec now also leaves newly prepped source tree around+- spec: handle testsuite tool deps separately+- spec, refresh, update: more care about whether to revise or not+- diff: ignore release field+- prep: be quiet+- spec: add a comment for missing testsuite deps+- only allow specifying major Stackage LTS versions (not minor):+ for more progressive updating logic (lts-n -> lts-(n+1) -> nightly -> Hackage)+- spec: don't warn "spec exists" explicitly+- spec: take specified stream into account for subpackaging+- update: finally run prep to check update okay+- prep/srpm --verbose and local --quiet options+- spec: move chmod for docs to %prep+- spec: check existing .spec file for detecting dropped deps and executable deps+- update: also commit revised .cabal file when no update+- fix copying of cached tarballs (longstanding defect)++# 2.0.5.1 (2020-06-11)+- spec: fix grep breakage in 2.0.5 release+- refresh and update now leave newly prepped source tree around+- spec: dropped deprecated %post and %postun scriptlets++# 2.0.5 (2020-06-10)+- spec --tests flag to force enabling testsuite+- spec: fix permissions of extra-source-files+- update url for Fedora Haskell Packaging Guidelines (TristanCacqueray)+- make cabal update silent and check for 01-index+- support Cabal-3.2 ShortText (hekkaidekapus)+- use simple-cmd-args 0.1.6 for working subcommand help+- improve handling of update --stream for subpackaging+- bump latest Stackage to LTS 15+- spec: exclude deps dropped with cabal-tweak-drop-dep++# 2.0.4 (2020-02-27) Fedora 32+- update: also unbreak patching++# 2.0.3 (2020-02-24)+- refresh: unbreak to patch spec file+- spec: detect local revised .cabal file++# 2.0.2 (2020-02-20)+- drop %_devel compat macro+- default stream is now lts-14+- sort deps of subpackages+- metapkgs don't have prof or doc+- fix generation of subpackages for a new package+- update: logic reworked to reduce redundant downloads++# 2.0.1 (2020-02-06)+- quote macros in commented fields+- read --subpackage from spec header+- generate BRs for subpackages++# 2.0.0 (2020-01-16)+- major refactor to handle stream/pkgid more precisely and correctly+ (hence major version bump due to behavior changes)+ - eg can no longer specify both stream and pkg-ver+- check for package first in default LTS, then latest LTS, and Nightly,+ before Hackage+- respect and read/write --standalone and --stream in spec header consistently+ (note default LTS stream is not written to header)+- fix infinite loop for 'install'+- optionally use libcurl binding instead of former stackage-query fallback++# 1.0.3 (2019-12-31)+- define %_devel for f30 packaging compatibility+- missingdeps and builddep fixes+- --standalone: add BRs for deps of missing deps++# 1.0.2 (2019-12-09)+- allow newer time for ghc-8.8+- more type refactoring: PackageIdentifier, LibPkgType, RpmPackage+ and some associated bugfixes++# 1.0.1 (2019-09-29)+- doc and prof subpackages for libraries+- reworked to use optparse-applicative (simple-cmd-args)+- default to Stackage LTS 13+- F31+ uses triggers for ghc-pkg recache+- wait 10^4s (< 3 hours) between cabal update's+- refactor using simple-cabal, PackageName and LibPkgType+- handle setup-depends+- diff: autodetect subpackaging+- diff (experimental): trim %changelog with bawolk/hsp if available+- drop pre-built manpage: use Makefile to build it++# 0.13.3 (2019-05-10)+- default stream to lts-12+- repoquery for missing deps' package .conf file to avoid modular ghc conflicts+- only --assumeyes for dnf install when not tty+- give up if more than one spec file+- fix handling unversioned update+- map cabal build-tool to cabal-install+- use tmpdir for tmp spec files and building missing deps+- finalPackageDescription for debugging Cabal+- use simple-cmd-0.1.3.1 for sudo fixes++# 0.13.2 (2019-04-09)+- include ANNOUNCE in docs+- if dependency parallel directory exists, don't check if installed+- fix buildDepends on Cabal-2.4+- new --standalone option for private packages built with cabal-install+- print --{missing,standalone,subpackage} options on spec file header line++# 0.13.1 (2019-02-27)+- update: fix rw git dir detection+- fix tarball downloading and copying of revised .cabal file+- show output (errors) when prepping source and prep in working dir+- include BUGS and CONTRIBUTING as docs+- need chrpath for subpackages+- move license dir to any common subpackage++# 0.13 (2019-02-18)+- improve license and doc filtering+- backup revised .cabal files+- fallback to spectool for source downloading+- drop selfdep+- common subpackage for binlib data files+- section dividers for sources, setup, build, install, and files+- only run "cabal update" if more than 10min old+- drop support for ghc-7.4.2++# 0.12.6 (2018-10-20)+- update: remove old revised .cabal+- convert revised .cabal file to unix format+- spec: support haskell-gi libraries+- most of SysCmd moved to simple-cmd library (new dep)+- can now download multiple source files+- use line-buffering for stdout+- always do cabal update+- support ghc_without_dynamic for static executables+- build with Cabal-2.4 (ghc-8.6)++# 0.12.5 (2018-07-29)+- update: more careful now with fuzz 1+-- handle revised to non-revised+-- improved for subpackaging+- improvements to revising of .cabal files+-- place after any subpackages+-- use revision when prep'ing and building+- use "fedpkg sources" to fetch current Fedora sources+- refresh: handle subpackages+- missing: better output for missing sub-deps+- do not put doc* in docs++# 0.12.4 (2018-05-31)+- now uses Hackage revisions of packages (using wget)+- spec --stream STREAM replaces --hackage+- disable https for ghc < 7.10++# 0.12.3 (2018-05-14)+- build: remove erroneous tarball check+- refresh: use cblrpm for old cabal-rpm++# 0.12.2 (2018-03-29)+- diff now supports CBLRPM_DIFF envvar to override "diff -u"+- try to build even when missing rpms deps not available+- package now builds with Cabal-2.2++# 0.12.1 (2018-02-20)+- new option --missing: comments out missing dependencies+- put license files in lib subpackage+- no longer append %_isa to C BuildRequires (#54)+- no longer leave leftover tmpdirs (#26)+- change 'cblrpm' to 'cabal-rpm' in documentation+- drop support for SCM snapshot releases++# 0.12 (2017-11-17)+- default to querying stackage.org directly via https+- fix stackage-query usage and suggest installing if missing+- run cabal update before cabal commands+- devel packages now provide doc subpackage for forward compatibility+- new --hackage option to get package version from Hackage not Stackage+- do not add .cabal files containing "doc" to docs+- silence mock rpmbuild -bs warnings about undefined %ghc_version+- allow building with ghc-8.2 and Cabal-2.0++# 0.11.2 (2017-07-31)+- fix cabal-rpm update --subpackage+- fix rpm installation when no sudo (#49)+- fix handling of no exposed modules (#50)+- fix license handling for selfdep binlib (#51)++# 0.11.1 (2017-03-13)+- support building meta (compat) packages+- invocation of optional stackage-query to update to LTS now works+- initial --subpackage support for %{subpkgs} of missing deps:+ including downloading, but update is not properly implemented yet+- new %{pkgver} macro+- (+-+) absorbs extra space+- update no longer resets release for %{subpkgs}++# 0.11 (2017-01-27)+- refresh command now reads the cabal-rpm version header in the spec file and+ installs that version of cabal-rpm under ~/.cblrpm/ and uses it to make patch+- diff and update now follow package-version args+- update tries to use stackage-query to check latest Stackage version+ before falling back to latest Hackage+- update from Hackage now follows "Default available version"+- sync some changes from opensuse-haskell/cabal-rpm+- rename Setup to Options+- silence <$> import warnings++# 0.10.1 (2016-11-29)+- no longer need to remove License file by hand+- use new %ghc_fix_rpath+- include Contributors in docs+- warn about duplicate docs in datadir and remove them++# 0.10.0 (2016-07-27)+- rename executable and manpage back to 'cabal-rpm': more predictable+- explicit error for unknown command+- sort docs and include upstream changelogs and news+- add cabal-rpm version header line to spec files+- new highly experimental command to refresh spec files+- only add "ExclusiveArch: %{ghc_arches_with_ghci}" for RHEL/EPEL+- use revised Hackage .cabal files on SUSE (@peti)+- on SUSE add explicit requires for pkgconfig+- new --compiler option (@peti)+- new --distro option (@peti)+- new --strict option which fails when unresolved cdeps (@peti),+ otherwise a warning is output+- update now shows diff+- use %cabal_test (@mimi1vx)+- no longer duplicate docs in datadir+- package datadir better+- for SUSE libs executables now go in the base package++# 0.9.11 (2016-05-06)+- build with Cabal-1.24++# 0.9.10 (2016-03-24)+- bugfixes+ - update no longer tries to grep non-existent .git+ - fix duplicate clibs+- fix build with ghc-8.0 (Cabal-1.23 and time-1.6)+- SuSE improvements: no disttag or rpmdev-bumpspec++# 0.9.9 (2016-01-25)+- couple of minor improvements for SUSE packaging++# 0.9.8 (2015-10-08)+- better %license logic+- fix handling of versions without '.'+- no duplicate test deps++# 0.9.7 (2015-08-28)+- only list buildable executables in spec file+- bring back 'build' as an alias for 'local'+- use %license macro+- do not warn about missing optional system programs++# 0.9.6 (2015-05-21)+- make "cabal list" quiet+- filter missing packages from repoquery++# 0.9.5.1 (2015-05-01)+- add old-locale Cabal flag to fix build on ghc-7.10++# 0.9.5 (2015-04-20)+- fix for dnf repoquery+- create SOURCES/ for tarball+- fixes for Cabal-1.22+- nogpgcheck for Fedora 22++- warn about hidden backup spec files++# 0.9.4 (2015-02-17)+- use dnf if installed instead of yum for install and repoquery+- update now only commits changes and new source if git origin is ssh+- allow Cabal-1.22++# 0.9.3 (2015-02-05)+- make sure tarball destdir exists before copying+- improve output for listing missing packages+- update improvements: new-sources first, continue if patch fails, git commit changes+- spec: sort executables and use %pkg_name in %ghc_fix_dynamic_rpath+- drop the debuginfo handling for C files+- ignore emacs temp ".#pkgname.spec" files++# 0.9.2 (2014-12-18)+- lots of bug fixes+- improved missingdeps output+- use https for hackage URLs (codeblock)+- no longer override %_sourcedir, %_rpmdir, and %_srcrpmdir, unless git dir+- new "update" command to update spec to latest version+- use 'rpm --eval "%{?dist}"' to determine OS type+- fix build and warnings for Cabal 1.20+- use TMPDIR++# 0.9.1 (2014-08-26)+- missingdeps now lists missing dependencies recursively and outputs Hackage+ package names rather than ghc-*-devel package names+- do not assume package order when testing if dependencies installed+- check ~/.cabal/packages/ exists before looking for tarballs+- pass actual exeNames to %ghc_fix_dynamic_rpath++# 0.9 (2014-07-17)+- reworked initial logic to make better use of existing spec files,+ and prep source tree properly+- default to Library packaging instead of BinLib:+ override with --binary which replaces --library+- prep src for version in existing spec file when building+- 'install' command now does local recursive rpmbuilding+- try "rpm -qf" and then rpmquery to resolve clib devel depends+- support SUSE packaging (thanks Jan Matějka)+- support RHEL5 packaging+- support Cabal-1.20+- improve output for 'depends' command+- no duplicate clibs deps+- include "cblrpm" in tempdir names+- use current dir name as a last guess of package name++# 0.8.11 (2014-05-17)+- build command renamed again from "rpm" to "local" (like fedpkg)+- use .spec file to determine pkg-ver when no .cabal file around+- automatically generate bcond for %check and add testsuite BRs+ when testsuites available+- disable debuginfo explicitly when no c-sources in preparation for+ ghc-rpm-macros no longer disabling debuginfo+- reset filemode of downloaded hackage tarballs to 0644:+ workaround for cabal-install setting 0600+- include release again in initial changelog+- also pull in Cabal and ghc-rpm-macros when yum installing deps+- no longer depends on regex-compat+- some refactorings++# 0.8.10 (2014-03-03)+- diff command replaces cblrpm-diff script+- new missingdeps command+- replace use of rpmspec: no "rpmspec --srpm" on RHEL 5 and 6++# 0.8.9 (2014-02-10)+- bugfix for error handling dir with spec file+- cblrpm-diff arg is now optional++# 0.8.8 (2014-02-09)+- updated GPLv3 license headers+- use .spec file to determine package if no .cabal file (works with+ or without arg)+- bugfix: install command now works even if some dependencies not packaged+- bugfix: do not re-copy cached tarball each time+- use new shorter hackage2 URL for packages+- capitalize start of summary and description+- filter @ and \ quotes in descriptions+- new prep command (like "rpmbuild -bp" or "fedpkg prep")+- new depends and requires commands list package depends or buildrequires+- new builddep command (like yum-buildep, but allows missing packages)+- notice for overwriting existing spec file with force option++# 0.8.7 (2013-12-31)+- new "install" command wrapping "cabal install"+- "build" command renamed to "rpm"+- sort devel Requires+- cblrpm-diff: allow package arg+- support copying tarball fetched from another remote-repo (Ricky Elrod)+- hlint cleanup+- support AGPL license in Cabal-1.18++# 0.8.6 (2013-10-04)+- check for _darcs or .git dir in package topdir not pwd++# 0.8.5 (2013-09-29)+- fix repoquery when a package update exists for C lib+- make cblrpm-diff quieter++# 0.8.4 (2013-09-28)+- use repoquery to determine extra C library dependencies+- quote "pkgconfig(foo)" for rpm query and yum install+- show sudo command before sudo password prompt appears+- exclude hsc2hs from build tool deps+- devel provides ghc-<pkg>-static+- drop release from initial changelog entry for packager to add an entry+- do not try to fetch tarball for a darcs or git source dir++# 0.8.3 (2013-07-12)+- only try to install missing dependencies+- for executables depending on own lib add BR chrpath and %ghc_fix_dynamic_rpath+- word-wrap generic descriptions+- map ffi to libffi+- move modules to toplevel+- Rpm module split into Spec and Build in Commands/++# 0.8.2 (2013-07-02)+- handle pkg-ver arg, and check cabal list is non-empty+- sort all generated deps+- use yum-builddep again to install deps+- copy tarball into cwd for rpmbuild+- warn about long synopsis rather than multiline+- wrap after end of sentence near end of line+- use _isa in requires ghc-<pkg>+- --version now outputs to stdout+- new --force flag to overwrite existing .spec file++# 0.8.1 (2013-06-14)+- word wrapping of descriptions+- use generic description for shared subpackage+- simplify logic for summary and description processing++# 0.8.0 (2013-05-31)+- new simplier revision to Fedora Packaging+ - drop %common_summary and %common_description+ - drop %ghc_package, %ghc_description, %ghc_devel_package,+ %ghc_devel_description, %ghc_devel_post_postun, %ghc_files,+ and %ghc_devel_requires+- check external programs available before use+- tweaks for ghc-7.6.3 and Cabal-1.16++# 0.7.1 (2013-03-22)+- add final full-stop to description if missing+- add ver-rel to initial changelog entry+- fix use of cblrpm-diff force lib option+- output warning when .spec already exists+- fix handling of package names that end in a digit+- output when trying a path+- map curl C dep to libcurl++# 0.7.0 (2013-01-22)+- cabal-rpm command renamed to cblrpm, and cabal-rpm-diff to cblrpm-diff+- cblrpm now has commands for spec, srpm, and build+- cblrpm will try to install packaged uninstalled depends with sudo yum install+- add %ghc_arches_with_ghci for hamlet dep+- cblrpm-diff supports -l+- cblrpm --version+- sort extralibs depends+- cleanup of unused options and help output++# 0.6.6 (2012-11-21)+- generate BRs and Req's for C libraries (extra-libraries)+- initial map for some C libs: libglut, libiw, libz, libX*+- generate BRs and Req's for pkgconfig-depends+- generate BRs for build-tools+- initial map for build-tools: gtk2hs-buildtools+- map LGPL-2.1 license to LGPLv2+ tag+- backup suffix changed from .cabal-rpm to .cblrpm+- don't mistake non-existent file in cwd for a package++# 0.6.5 (2012-11-01)+- drop hscolour BuildRequires+- simplify generated BuildRequires: drop version ranges for now,+ exclude pkg self, base libs, and Cabal+- use ExclusiveArch ghc_arches_with_ghci for template-haskell dep+- replace --name option with --library to force Lib++# 0.6.4 (2012-09-25)+- add cabal-rpm-diff+- fix manpage generation++# 0.6.3 (2012-09-24)+- support tarball path argument+- use a temporary working dir for opening tarball or cabal unpack+- add a manpage++# 0.6.2 (2012-09-10)+- fix output of L/GPL version++# 0.6.1 (2012-07-25)+bugfixes:+- fix "cabal-rpm pkg" when other *pkg* packages exist in hackage+- always generate the extra docs list from the pkg src dir!+- now no backslash at end of common_description++# 0.6.0 (2012-07-24)+- updated to work with Cabal >= 1.10 and current cabal2spec style packaging+ using currently actively used ghc-rpm-macros+- should generate haskell dependencies correctly and also summary and+ description text+- some of the generic compiler supported was dropped for simplicity+- rpmbuild support will be re-introduced in a future version++# 0.5.1 and earlier (2007-2008) released by Bryan O'Sullivan+- should work with ghc-6.8+++# Local Variables:+# mode: text+# End:
README.md view
@@ -59,7 +59,7 @@ $ cabal-rpm update -updates the package to the latest Hackage version+updates the package to the latest Stackage or Hackage version $ cabal-rpm refresh @@ -70,10 +70,12 @@ ## Help output `$ cabal-rpm --version`+ ```-2.2.0+2.2.1 ``` `$ cabal-rpm --help`+ ``` Tool to create RPM packages from Haskell Hackage/Stackage @@ -104,7 +106,7 @@ ## Installation cabal-rpm is packaged in Fedora and EPEL. -It currently needs at least ghc 8 or newer and Cabal 1.10 or later to build.+It currently needs at least ghc 8 or newer and Cabal 1.18 or later to build. The package is on Hackage. If you have cabal-install you can install simply with
cabal-rpm.cabal view
@@ -1,6 +1,6 @@ Cabal-version: 1.18 Name: cabal-rpm-Version: 2.2.0+Version: 2.2.1 Synopsis: RPM packaging tool for Haskell Cabal-based packages Description: This package provides a RPM packaging tool for Haskell Cabal-based@@ -27,7 +27,7 @@ 2012-2024 Jens Petersen <juhpetersen@gmail.com> Category: Distribution Build-type: Simple-Extra-doc-files: ChangeLog README.md TODO+Extra-doc-files: ChangeLog.md README.md TODO Tested-with: GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8,@@ -37,10 +37,6 @@ type: git location: https://github.com/juhp/cabal-rpm -Flag old-locale- Description: Use old-locale and time < 1.5- Default: False- Flag curl Description: Use curl library to query Stackage instead of http-client Default: False@@ -55,25 +51,18 @@ extra, filepath >= 1.4, http-query,- optparse-applicative,- process, simple-cabal >= 0.1.3, simple-cmd >= 0.2.3,- simple-cmd-args >= 0.1.6,+ simple-cmd-args >= 0.1.7,+ time >= 1.5, text, unix- if flag(old-locale)- Build-Depends: old-locale >= 1 && < 1.1,- time >= 1.2 && < 1.5- else- Build-Depends: time >= 1.5 if impl(ghc<8.0) Build-Depends: semigroups if impl(ghc >= 8.0) && !flag(curl) Build-Depends: bytestring, http-client >= 0.4.30,- http-client-tls,- http-conduit+ http-client-tls else Build-Depends: curl Cpp-options: -DCURL@@ -98,4 +87,17 @@ Types, Paths_cabal_rpm Hs-Source-Dirs: src- GHC-options: -fwarn-missing-signatures -Wall+ ghc-options: -fwarn-missing-signatures -Wall+ if impl(ghc >= 8.0)+ ghc-options: -Wcompat+ -Widentities+ -Wincomplete-uni-patterns+ -Wincomplete-record-updates+ -Wredundant-constraints+ if impl(ghc >= 8.2)+ ghc-options: -fhide-source-paths+ if impl(ghc >= 8.4)+ ghc-options: -Wmissing-export-lists+ -Wpartial-fields+ if impl(ghc >= 8.10)+ ghc-options: -Wunused-packages
src/Commands/Depends.hs view
@@ -38,7 +38,7 @@ depends :: Depends -> Flags -> Maybe PackageVersionSpecifier -> IO () depends action flags mpvs = do- pkgdata <- prepare flags mpvs+ pkgdata <- prepare flags Nothing mpvs let pkgDesc = packageDesc pkgdata case action of Depends -> do
src/Commands/Diff.hs view
@@ -36,7 +36,7 @@ diff :: Flags -> PackageType -> Maybe PackageVersionSpecifier -> IO () diff flags pkgtype mpvs = do- pkgdata <- prepare flags mpvs+ pkgdata <- prepare flags Nothing mpvs case specFilename pkgdata of Nothing -> error' "No (unique) .spec file in directory." Just spec -> do
src/Commands/Refresh.hs view
@@ -39,7 +39,7 @@ refresh :: Bool -> PackageType -> Maybe PackageVersionSpecifier -> IO () refresh dryrun pkgtype mpvs = do- pkgdata <- prepare [] mpvs+ pkgdata <- prepare [] Nothing mpvs case specFilename pkgdata of Nothing -> error' "No (unique) .spec file in directory." Just spec -> do
src/Commands/RpmBuild.hs view
@@ -36,7 +36,7 @@ rpmBuild :: RpmStage -> Bool -> Flags -> PackageType -> Bool -> Maybe PackageVersionSpecifier -> IO FilePath rpmBuild stage quiet flags pkgtype subpackage mpvs = do- pkgdata <- prepare flags mpvs+ pkgdata <- prepare flags Nothing mpvs when (stage == Binary) $ void $ pkgInstallMissing' pkgdata let pkgDesc = packageDesc pkgdata
src/Commands/Spec.hs view
@@ -31,7 +31,6 @@ import SimpleCabal (buildable, mkPackageName, PackageDescription (..), PackageIdentifier(..)) import SimpleCmd ((+-+), cmd, cmdLines, cmdMaybe, grep, grep_, removePrefix)-import Stackage (defaultLTS) import Types import Control.Monad.Extra@@ -44,7 +43,7 @@ import Data.List.Extra import Data.Maybe (isJust, isNothing, fromMaybe, fromJust) import Data.Time.Clock (getCurrentTime)-import Data.Time.Format (formatTime)+import Data.Time.Format (defaultTimeLocale, formatTime) import qualified Data.Version as V import Distribution.PackageDescription (@@ -66,11 +65,6 @@ import System.Directory (doesFileExist) import System.IO (IOMode (..), hClose, hPutStrLn, openFile)-#if MIN_VERSION_time(1,5,0)-import Data.Time.Format (defaultTimeLocale)-#else-import System.Locale (defaultTimeLocale)-#endif import System.FilePath (takeBaseName, (</>), (<.>)) import qualified Paths_cabal_rpm (version)@@ -90,8 +84,8 @@ -> PackageType -> Maybe (Maybe Stream) -> Maybe V.Version -> Maybe FilePath -> Maybe PackageVersionSpecifier -> IO FilePath-createSpecFile ignoreMissing verbose flags norevision testsuite force pkgtype subpkgStream mwithghc mdest mpvs = do- pkgdata <- prepare flags mpvs+createSpecFile ignoreMissing verbose flags norevision notestsuite force pkgtype subpkgStream mwithghc mdest mpvs = do+ pkgdata <- prepare flags Nothing mpvs let mspec = case pkgtype of SpecFile f -> Just f _ -> specFilename pkgdata@@ -180,15 +174,18 @@ when (maybe True realdir mdest) $ putStrLn pkgname - mstream <- case pvsStream =<< mpvs of- Just s -> return $ Just s- Nothing ->- case mpvs of- Just (PVPackageId _) -> return Nothing- _ -> case mspec of- Just spec ->- withSpecHead spec (return . fmap read . headerOption "--stream")- Nothing -> return Nothing+ mstream <- case subpkgStream of+ Just (Just stream) -> return $ Just stream+ _ ->+ case pvsStream =<< mpvs of+ Just s -> return $ Just s+ Nothing ->+ case mpvs of+ Just (PVPackageId _) -> return Nothing+ _ -> case mspec of+ Just spec ->+ withSpecHead spec (return . fmap read . headerOption "--stream")+ Nothing -> return Nothing h <- openFile outputFile WriteMode let putHdr hdr val = hPutStrLn h (hdr ++ ":" ++ padding hdr ++ val)@@ -201,7 +198,7 @@ subpkgParam lt = if binlib then "-n" +-+ ghc_name ++ "-%{name}" ++ pkgSuffix lt else show lt put $ "# generated by cabal-rpm-" ++ V.showVersion Paths_cabal_rpm.version- +-+ unwords (["--standalone" | standalone] ++ ["--stream " ++ showStream (fromJust mstream) | isJust mstream, mstream /= Just defaultLTS] ++ ["--subpackage" | subpackage])+ +-+ unwords (["--standalone" | standalone] ++ ["--stream " ++ showStream (fromJust mstream) | isJust mstream, mstream > Just LatestLTS] ++ ["--subpackage" | subpackage]) put "# https://docs.fedoraproject.org/en-US/packaging-guidelines/Haskell/" putNewline @@ -263,6 +260,7 @@ when hasLib $ do global "pkg_name" name global "pkgver" "%{pkg_name}-%{version}"+ when (hasLib || subpackage) $ do put "%{?haskell_setup}" putNewline @@ -276,7 +274,8 @@ deep <- recurseMissing flags mstream [] $ nub (subs ++ miss) --print deep return $ filter (\(d,_) -> pkgName d `notElem` droppedDeps) deep- subpkgsOrdered <- dependencySortCabals mspec $ map fst missingLibsLicenses+ let version = display $ pkgVersion pkgid+ subpkgsOrdered <- dependencySortCabals (pkgname ++ '-' : version) mspec $ map fst missingLibsLicenses --print subpkgs let subpkgs = sort subpkgsOrdered mkSubpkgMacro = packageMacro . display . pkgName@@ -294,15 +293,15 @@ let (testsuiteDeps,testsuiteTools) = testsuiteDependencies' pkgDesc unpkgedTestDeps <- filterM (notSrcOrInst . RpmHsLib Devel) testsuiteDeps let missTestDeps = unpkgedTestDeps \\ map pkgName subpkgs- let testable = notNull testsuiteDeps && not standalone && (null missTestDeps || testsuite) && isNothing mwithghc- if testable then do+ let testable = notNull testsuiteDeps && not standalone && null missTestDeps && not notestsuite && isNothing mwithghc+ if testable+ then do put "%bcond_without tests" putNewline- else unless (null testsuiteDeps || standalone) $ do+ else unless (null missTestDeps || standalone) $ do put $ "# testsuite missing deps: " ++ unwords (map display missTestDeps) putNewline- let version = display $ pkgVersion pkgid- release = "1"+ let release = "1" revised <- if norevision then return False@@ -322,7 +321,7 @@ putHdr "Name" (if binlib then "%{pkg_name}" else basename) putHdr "Version" version- if autorelease+ if autorelease && not subpackage then putHdr "Release" "%autorelease" else do when hasSubpkgs $@@ -388,7 +387,7 @@ putHdr "Requires" $ "%{name}-common" ++ versionRelease when (standalone || subpackage) $ do when standalone $- putHdr "BuildRequires" "cabal-install > 1.18"+ putHdr "BuildRequires" "cabal-install" unless (null subpkgs || ignoreMissing) $ do -- let deptype = if standalone then Devel else Prof when (isJust mwithghc) $@@ -514,7 +513,7 @@ if standalone then do global "cabal_install" "%{_bindir}/cabal" put "%cabal_install update"- put "%if 0%{?rhel} && 0%{?rhel} < 9"+ put "%if %{defined rhel} && 0%{?rhel} < 9" put "%cabal_install sandbox init" -- FIXME support mwithghc? put "%cabal_install install"@@ -531,7 +530,7 @@ put "# Begin cabal-rpm install" if standalone then do put "mkdir -p %{buildroot}%{_bindir}"- put "%if 0%{?fedora} || 0%{?rhel} >= 9"+ put "%if %{defined fedora} || 0%{?rhel} >= 9" put "%ghc_set_gcc_flags" put $ "%cabal_install install" +-+ (if isJust mwithghc then "-w ghc-%{ghc_major}" else "") +-+ "--install-method=copy --enable-executable-stripping --installdir=%{buildroot}%{_bindir}" put "%else"@@ -562,25 +561,16 @@ execNaming p = let pn = unUnqualComponentName p in if pn == name then "%{name}" else pn -- FIXME check for included file- maybeGenerateBashCompletion exn = do- put $ "outfile=%{buildroot}%{_datadir}/bash-completion/completions" </> exn- put "if [ ! -e $outfile ]; then"- put $ " " ++ "%{buildroot}%{_bindir}" </> exn +-+ "--bash-completion-script" +-+ exn +-+ "| sed s/filenames/default/ > $outfile"- put "else"- put " echo \"$outfile exists!\"; exit 1"- put "fi"+ maybeGenerateBashCompletion exn =+ put $ "%{buildroot}%{_bindir}" </> exn +-+ "--bash-completion-script" +-+ exn +-+ "| sed s/filenames/default/ >" +-+ "%{buildroot}%{bash_completions_dir}" </> exn -- FIXME check for included file- maybeGenerateManpage exn = do- put $ "outfile=%{buildroot}%{_mandir}/man1" </> exn <.> "1"- put "if [ ! -e $outfile ]; then"- put $ " help2man --no-info %{buildroot}%{_bindir}" </> exn +-+ "> $outfile"- put "else"- put " echo \"$outfile exists!\"; exit 1"- put "fi"+ maybeGenerateManpage exn =+ put $ "help2man --no-info %{buildroot}%{_bindir}" </> exn +-+ ">" +-+ "%{buildroot}%{_mandir}/man1" </> exn <.> "1" when usesOptparse $ do putNewline- put "mkdir -p %{buildroot}%{_datadir}/bash-completion/completions/"+ put "set noclobber"+ put "mkdir -p %{buildroot}%{bash_completions_dir}" -- FIXME convert to for loop mapM_ (maybeGenerateBashCompletion . execNaming) execs putNewline@@ -594,6 +584,8 @@ when testable $ do put "%check" put "%if %{with tests}"+ when hasExec $+ put "PATH=%{buildroot}%{_bindir}:$PATH" put "%cabal_test" put "%endif" sectionNewline@@ -613,7 +605,7 @@ unless (common || null datafiles) $ put $ "%{_datadir}" </> pkgver when usesOptparse $ do- mapM_ (put . ("%{_datadir}/bash-completion/completions" </>) . execNaming) execs+ mapM_ (put . ("%{bash_completions_dir}" </>) . execNaming) execs mapM_ (put . (\e -> "%{_mandir}/man1" </> e <.> "1*") . execNaming) execs put "# End cabal-rpm files" sectionNewline@@ -677,8 +669,8 @@ createSpecFile_ :: Bool -> Verbosity -> Flags -> Bool -> Bool -> PackageType -> Maybe (Maybe Stream) -> Maybe V.Version -> Maybe PackageVersionSpecifier -> IO ()-createSpecFile_ ignoreMissing verbose flags testsuite force pkgtype subpkgStream mwithghc mpvs =- void (createSpecFile ignoreMissing verbose flags False testsuite force pkgtype subpkgStream mwithghc Nothing mpvs)+createSpecFile_ ignoreMissing verbose flags notestsuite force pkgtype subpkgStream mwithghc mpvs =+ void (createSpecFile ignoreMissing verbose flags False notestsuite force pkgtype subpkgStream mwithghc Nothing mpvs) isBuildable :: Executable -> Bool isBuildable exe = buildable $ buildInfo exe
src/Commands/Update.hs view
@@ -29,12 +29,12 @@ import SimpleCabal (customFieldsPD, package, PackageIdentifier (..), showVersion) import SimpleCmd-import SimpleCmd.Git (gitBool, grepGitConfig, rwGitDir)+import SimpleCmd.Git (grepGitConfig, rwGitDir) #if !MIN_VERSION_base(4,8,0) import Control.Applicative ((<$>)) #endif import Control.Monad.Extra-import Data.List+import Data.List.Extra import Data.Maybe import Distribution.Text (display) import Distribution.Verbosity (silent)@@ -46,14 +46,14 @@ -- FIXME check kerberos before new-sources update :: Maybe Stream -> Maybe PackageVersionSpecifier -> IO () update moldstream mpvs = do- pkgdata <- pkgSpecPkgData [] (pvsPackage =<< mpvs)+ pkgdata <- pkgSpecPkgData [] Nothing (pvsPackage =<< mpvs) case specFilename pkgdata of Nothing -> error' "No (unique) .spec file in directory." Just spec -> do let pkgDesc = packageDesc pkgdata oldPkgId = package pkgDesc name = pkgName oldPkgId- wasrevised = isJust $ lookup "x-revision" (customFieldsPD pkgDesc)+ oldrev = read <$> lookup "x-revision" (customFieldsPD pkgDesc) (newPkgId, mstream) <- case mpvs of Nothing -> do@@ -91,12 +91,13 @@ newrev <- getRevisedCabal newPkgId when (newver == oldver) $ putStrLn "already latest version"- when (newrev || updated) $ do+ let revchange = oldrev /= newrev+ when (revchange || updated) $ do putStrLn $ display oldPkgId +-+ "current" subpkg <- grep_ "%{subpkgs}" spec -- FIXME should not update subpackage versions- curspec <- createSpecVersion oldPkgId spec wasrevised (if subpkg then Just moldstream else Nothing)- newspec <- createSpecVersion newPkgId spec True (if subpkg then Just mstream else Nothing)+ curspec <- createSpecVersion oldPkgId spec (isJust oldrev) (if subpkg then Just moldstream else Nothing)+ newspec <- createSpecVersion newPkgId spec (isJust newrev) (if subpkg then Just mstream else Nothing) currel <- getSpecField "Release" spec let suffix = "%{?dist}" defrelease = "1"@@ -132,9 +133,9 @@ when subpkg $ do shell_ $ "cat sources >>" +-+ "sources.cblrpm" renameFile "sources.cblrpm" "sources"- when wasrevised $+ when (isJust oldrev) $ cmd_ "git" ["rm", display oldPkgId <.> "cabal"]- when newrev $+ when (isJust newrev) $ cmd_ "git" ["add", display newPkgId <.> "cabal"] cmd_ "git" ["commit", "-a", "-m", if autochangelog@@ -142,11 +143,11 @@ ++ display newPkgId ++ "/changelog" else "update to" +-+ showVersion newver] else- when newrev $ do- if wasrevised- then cmd_ "git" ["commit", "-a", "-m", "refresh .cabal revision"]- else- unlessM (gitBool "diff-index" ["--quiet", "HEAD"]) $ do+ when revchange $ do+ putStrLn $ "revised:" +-+ show oldrev +-+ "->" +-+ show newrev+ if isJust oldrev+ then cmd_ "git" ["commit", "-a", "-m", "refresh .cabal revision"]+ else do cmd_ "git" ["add", display newPkgId <.> "cabal"] cmd_ "git" ["commit", "-a", "-m", "revise .cabal file"] rpmbuild True Prep spec@@ -168,5 +169,5 @@ else when (last krb == "(Expired)") $ do putStrLn $ unwords krb- cmd_ "kinit" [head krb]+ cmd_ "fkinit" [] putStrLn ""
src/Dependencies.hs view
@@ -128,18 +128,22 @@ let libsuffix = if lib64 then "64" else "" let lib_path = "/usr/lib" ++ libsuffix ++ "/lib" ++ lib <.> "so" libInst <- doesFileExist lib_path- if libInst+ mresult <-+ if libInst then rpmqueryFile Rpm lib_path else do- putStrLn $ "Running repoquery for" +-+ lib_path- rpmqueryFile Repoquery lib_path+ putStrLn $ "Running repoquery for" +-+ lib_path+ rpmqueryFile Repoquery lib_path+ when (isNothing mresult) $+ warning $ "could not resolve dependency" +-+ lib+ return mresult -- use repoquery or rpm -q to query which package provides file rpmqueryFile :: QueryBackend -> FilePath -> IO (Maybe String) rpmqueryFile backend file = do- let args = ["-q", "--qf=%{name}", "-f"]+ let args = ["--qf=%{name}", "--whatprovides"] out <- if backend == Rpm- then cmd "rpm" (args ++ [file])+ then cmd "rpm" ("-q" : args ++ [file]) else repoquery args file let pkgs = nub $ words out -- EL5 repoquery can return "No package provides <file>"@@ -166,10 +170,8 @@ let (deps, setup, tools', clibs', pkgcfgs) = dependencies pkgDesc excludedTools n = n `notElem` ["ghc", "hsc2hs", "perl"] tools = filter excludedTools $ nub $ map mapTools tools'- clibsWithErrors <- mapM resolveLib clibs'-- when (any isNothing clibsWithErrors) $- warning "could not resolve all clib dependencies"+ -- nothing provides libpthread.so+ clibsWithErrors <- mapM resolveLib $ delete "pthread" clibs' let clibs = catMaybes clibsWithErrors let showPkgCfg p = "pkgconfig(" ++ p ++ ")" return $ PackageDepends deps setup tools (nub clibs) (map showPkgCfg pkgcfgs)@@ -226,7 +228,8 @@ notSrcOrInst :: RpmPackage -> IO Bool notSrcOrInst pkg = do src <- doesDirectoryExist (".." </> showRpm (baseLibPackage pkg))- if src then return False+ if src+ then return False else notInstalled pkg where baseLibPackage :: RpmPackage -> RpmPackage@@ -267,7 +270,7 @@ pkgInstallMissing :: Flags -> Maybe PackageVersionSpecifier -> IO [PackageName] pkgInstallMissing flags mpvs = do- pkgdata <- prepare flags mpvs+ pkgdata <- prepare flags Nothing mpvs pkgInstallMissing' pkgdata pkgInstallMissing' :: PackageData -> IO [PackageName]@@ -342,7 +345,7 @@ if pkg `elem` map (pkgName . fst) already then return ([], Nothing) else do- pkgdata <- prepare flags (streamPkgToPVS mstream (Just (unversionedPkgId pkg)))+ pkgdata <- prepare flags Nothing (streamPkgToPVS mstream (Just (unversionedPkgId pkg))) let pkgdesc = packageDesc pkgdata missdeps <- missingPackages pkgdesc >>= filterM notAvail let pid = package pkgdesc@@ -367,7 +370,7 @@ packageDeps :: Flags -> PackageIdentifier -> IO [PackageName] packageDeps flags pid = do- pkgdata <- prepare flags (Just $ PVPackageId pid)+ pkgdata <- prepare flags Nothing (Just $ PVPackageId pid) let pkgDesc = packageDesc pkgdata (deps, setup, _, _, _) = dependencies pkgDesc return $ nub $ (deps ++ setup) \\ [pkgName pid]
src/FileUtils.hs view
@@ -31,7 +31,7 @@ #endif import Control.Exception (bracket) import Control.Monad (when)-import Data.List+import Data.List.Extra import Data.Maybe (isJust) import SimpleCmd import System.Directory (listDirectory,
src/Main.hs view
@@ -16,7 +16,7 @@ -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -module Main where+module Main (main) where #if !MIN_VERSION_base(4,13,0) import Control.Applicative ((<|>)@@ -30,7 +30,8 @@ import Distribution.Text (simpleParse) import Distribution.Verbosity (normal, silent) #if !MIN_VERSION_simple_cmd_args(0,1,7)-import Options.Applicative (maybeReader)+-- allows building with 0.1.6+--import Options.Applicative (maybeReader) #endif import System.IO (BufferMode(LineBuffering), hSetBuffering, stdout) @@ -62,7 +63,7 @@ <$> ignoreMissing <*> quietOpt <*> flags- <*> testsuite+ <*> notestsuite <*> force <*> pkgtype <*> fmap toSubpkgStream subpackage@@ -152,8 +153,8 @@ quietRpmbuild = switchWith 'q' "quiet" "Quiet rpmbuild output" verboseRpmbuild = flagWith True False 'v' "verbose" "Verbose rpmbuild output" - testsuite :: Parser Bool- testsuite = switchWith 'T' "tests" "Force enabling the test-suite (even if deps missing)"+ notestsuite :: Parser Bool+ notestsuite = switchWith 'T' "no-tests" "Disable test-suite (even if deps available)" force :: Parser Bool force = switchWith 'F' "force" "Force overwriting existing of any .spec file"
src/PackageUtils.hs view
@@ -38,6 +38,7 @@ readGlobalMacro ) where +import Data.Ord (comparing, Down(Down)) import FileUtils (assertFileNonEmpty, filesWithExtension, fileWithExtension, listDirectory', withTempDirectory) import SimpleCabal (finalPackageDescription, licenseFiles, mkPackageName,@@ -96,7 +97,8 @@ licenseNames = ["copying", "licence", "license"] likely :: [String] -> String -> Bool likely names name = any (`isPrefixOf` lower name) names- unlikely name = not $ any (`isSuffixOf` name) ["~", ".cabal"]+ unlikely name = not $ any (`isSuffixOf` name)+ ["~", ".cabal", ".hs", ".hi", ".o"] bringTarball :: PackageIdentifier -> Maybe FilePath -> IO () bringTarball pkgid mspec = do@@ -173,26 +175,37 @@ then getCurrentDirectory else fromJust <$> rpmEval "%{_sourcedir}" -getBuildDir :: IO FilePath-getBuildDir =- fromJust <$> rpmEval "%{_builddir}"+getBuildDir :: Maybe String -> IO FilePath+getBuildDir mnv = do+ builddir <- fromMaybe "" <$> rpmEval "%{_builddir}"+ rpmver <- dropPrefix "RPM version " <$> cmd "rpm" ["--version"]+ return $ builddir </>+ case mnv of+ Just nv ->+ if readVersion rpmver >= readVersion "4.19.91"+ then nv ++ "-build"+ else ""+ Nothing -> "" -getRevisedCabal :: PackageIdentifier -> IO Bool+getRevisedCabal :: PackageIdentifier -> IO (Maybe Int) getRevisedCabal pkgid = do let file = display (pkgName pkgid) <.> "cabal"+ srcdir <- getSourceDir withTempDirectory $ do -- FIXME use cabal-file dl <- cmdBool "wget" ["--quiet", "https://hackage.haskell.org/package" </> display pkgid </> file] if not dl- then return False+ then return Nothing else do- revised <- grep_ "^x-revision:" file- when revised $ do- dir <- getSourceDir- createDirectoryIfMissing True dir- -- renameFile can fail across fs devices- copyFile file $ dir </> display pkgid <.> "cabal"- return revised+ revised <- listToMaybe <$> grep "^x-revision:" file+ case fmap word1 revised of+ Nothing -> return Nothing+ Just (_,rev) -> do+ when (isJust revised) $ do+ createDirectoryIfMissing True srcdir+ -- renameFile can fail across fs devices+ copyFile file $ srcdir </> display pkgid <.> "cabal"+ return $ Just (read rev) data RpmStage = Binary | Source | Prep deriving Eq@@ -205,14 +218,14 @@ rpmbuild :: Bool -> RpmStage -> FilePath -> IO () rpmbuild quiet mode spec = do let rpmCmd = case mode of- Binary -> "a"- Source -> "s"- Prep -> "p"+ Binary -> 'a'+ Source -> 's'+ Prep -> 'p' cwd <- getCurrentDirectory gitDir <- isGitDir "." let rpmdirs_override = [ "--define="++ mcr +-+ cwd | gitDir, mcr <- ["_sourcedir"]]- let args = ["-b" ++ rpmCmd] ++ ["--nodeps" | mode == Prep] +++ let args = ["-b" ++ singleton rpmCmd] ++ ["--nodeps" | mode == Prep] ++ rpmdirs_override ++ [spec] if not quiet then cmd_ "rpmbuild" args@@ -231,6 +244,11 @@ rest = dropWhile (not . (prefix `isPrefixOf`)) ls in unlines (if null rest then tail ls else tail rest) +#if !MIN_VERSION_base(4,15,0)+ singleton :: Char -> String+ singleton c = [c]+#endif+ cabalUpdate :: IO () cabalUpdate = do home <- getEnv "HOME"@@ -267,9 +285,9 @@ cmd_ "cabal" (c:args) -tryUnpack :: PackageIdentifier -> IO FilePath-tryUnpack pkgid = do- builddir <- getBuildDir+tryUnpack :: Maybe String -> PackageIdentifier -> IO FilePath+tryUnpack mnv pkgid = do+ builddir <- getBuildDir mnv let dir = builddir </> display pkgid isdir <- doesDirectoryExist dir if isdir@@ -333,23 +351,25 @@ [] -> return Nothing _ -> error' "more than one cabal file found!" -checkForPkgCabalFile :: PackageIdentifier -> IO (Maybe FilePath)-checkForPkgCabalFile pkgid = do+checkForPkgCabalFile :: Maybe String -> PackageIdentifier+ -> IO (Maybe FilePath)+checkForPkgCabalFile mnv pkgid = do let pkg = pkgName pkgid cabalfile = display pkg <.> "cabal" pkgcabal <- doesFileExist cabalfile if pkgcabal then return $ Just cabalfile else do- builddir <- getBuildDir+ builddir <- getBuildDir mnv let dir = builddir </> display pkgid exists <- doesDirectoryExist dir if exists then fileWithExtension dir ".cabal" else return Nothing -pkgSpecPkgData :: Flags -> Maybe PackageName -> IO PackageData-pkgSpecPkgData flags mpkg = do+pkgSpecPkgData :: Flags -> Maybe String -> Maybe PackageName+ -> IO PackageData+pkgSpecPkgData flags mnv mpkg = do mspec <- checkForSpecFile mpkg case mspec of Just spec -> specPackageData spec@@ -361,12 +381,12 @@ return $ PackageData Nothing docs licenses pkgDesc Nothing -> case mpkg of- Just pkg -> prepStreamPkg flags Nothing defaultLTS pkg+ Just pkg -> prepStreamPkg flags mnv Nothing defaultLTS pkg Nothing -> do cwd <- getCurrentDirectory case simpleParse (takeFileName cwd) of Just pdir ->- prepare flags (streamPkgToPVS Nothing (Just pdir))+ prepare flags mnv (streamPkgToPVS Nothing (Just pdir)) Nothing -> error' "package not found for directory" where specPackageData :: FilePath -> IO PackageData@@ -380,26 +400,28 @@ cabalFromSpec specFile = do -- FIXME handle ghcX.Y havePkgname <- grep_ "%{pkg_name}" specFile- -- handle bin packages starting with ghc, like "ghc-tags"- namever <- (if havePkgname then removePrefix "ghc-" else id) . head- <$> rpmspec ["--srpm"] (Just "%{name}-%{version}") specFile+ -- FIXME handle bin packages starting with ghc, like "ghc-tags"+ nv <- head+ <$> rpmspec ["--srpm"] (Just "%{name}-%{version}") specFile+ let namever = (if havePkgname then removePrefix "ghc-" else id) nv case simpleParse namever of Nothing -> error' $ "pkgid could not be parsed:" +-+ namever- Just pkgid -> bringTarball pkgid (Just specFile)- builddir <- getBuildDir- let pkgsrcdir = builddir </> namever- dExists <- doesDirectoryExist pkgsrcdir- if dExists- then do- specTime <- modificationTime <$> getFileStatus specFile- dirTime <- accessTime <$> getFileStatus pkgsrcdir- when (specTime > dirTime) $ do- rpmbuild True Prep specFile- dExists' <- doesDirectoryExist pkgsrcdir- when dExists' $ cmd_ "touch" [pkgsrcdir]- else- rpmbuild True Prep specFile- tryFindPackageDesc pkgsrcdir+ Just pkgid -> do+ bringTarball pkgid (Just specFile)+ builddir <- getBuildDir $ Just nv+ let pkgsrcdir = builddir </> namever+ dExists <- doesDirectoryExist pkgsrcdir+ if dExists+ then do+ specTime <- modificationTime <$> getFileStatus specFile+ dirTime <- accessTime <$> getFileStatus pkgsrcdir+ when (specTime > dirTime) $ do+ rpmbuild True Prep specFile+ dExists' <- doesDirectoryExist pkgsrcdir+ when dExists' $ cmd_ "touch" [pkgsrcdir]+ else+ rpmbuild True Prep specFile+ tryFindPackageDesc pkgsrcdir -- findSpecFile :: PackageDescription -> RpmFlags -> IO (FilePath, Bool) -- findSpecFile pkgDesc flags = do@@ -415,39 +437,42 @@ , packageDesc :: PackageDescription } -prepPkgId :: Flags -> Maybe FilePath -> PackageIdentifier -> IO PackageData-prepPkgId flags mspec pkgid = do+prepPkgId :: Flags -> Maybe String -> Maybe FilePath+ -> PackageIdentifier -> IO PackageData+prepPkgId flags mnv mspec pkgid = do void $ getRevisedCabal pkgid- cabalfile <- tryUnpack pkgid+ cabalfile <- tryUnpack mnv pkgid (pkgDesc, docs, licenses) <- simplePackageDescription flags cabalfile return $ PackageData mspec docs licenses pkgDesc -prepStreamPkg :: Flags -> Maybe FilePath -> Stream -> PackageName- -> IO PackageData-prepStreamPkg flags mspec stream pkg = do+prepStreamPkg :: Flags -> Maybe String -> Maybe FilePath -> Stream+ -> PackageName -> IO PackageData+prepStreamPkg flags mnv mspec stream pkg = do pkgid <- latestPackage (Just stream) pkg- mcabal <- checkForPkgCabalFile pkgid+ mcabal <- checkForPkgCabalFile mnv pkgid case mcabal of Just cabalfile -> do (pkgDesc, docs, licenses) <- simplePackageDescription flags cabalfile return $ PackageData mspec docs licenses pkgDesc- Nothing -> prepPkgId flags mspec pkgid+ Nothing -> prepPkgId flags mnv mspec pkgid --- Nothing means package in cwd-prepare :: Flags -> Maybe PackageVersionSpecifier -> IO PackageData-prepare flags Nothing = pkgSpecPkgData flags Nothing+prepare :: Flags -> Maybe String+ -- Nothing means package in cwd+ -> Maybe PackageVersionSpecifier+ -> IO PackageData+prepare flags mnv Nothing = pkgSpecPkgData flags mnv Nothing -- Something implies either new packaging or some existing spec file in dir-prepare flags (Just pvs) =+prepare flags mpkgid (Just pvs) = case pvs of- PVPackageName pkg -> pkgSpecPkgData flags (Just pkg)+ PVPackageName pkg -> pkgSpecPkgData flags mpkgid (Just pkg) PVPackageId pkgid -> do mspec <- checkForSpecFile $ Just (pkgName pkgid)- mcabal <- checkForPkgCabalFile pkgid+ mcabal <- checkForPkgCabalFile mpkgid pkgid case mcabal of Just cabalfile -> do (pkgDesc, docs, licenses) <- simplePackageDescription flags cabalfile return $ PackageData mspec docs licenses pkgDesc- Nothing -> prepPkgId flags mspec pkgid+ Nothing -> prepPkgId flags mpkgid mspec pkgid PVStreamPackage stream Nothing -> do mspec <- checkForSpecFile Nothing case mspec of@@ -456,14 +481,14 @@ let trydir = simpleParse (takeFileName cwd) case trydir of Just pdir | pkgVersion pdir == nullVersion ->- prepare flags (streamPkgToPVS (Just stream) trydir)+ prepare flags mpkgid (streamPkgToPVS (Just stream) trydir) _ -> error' "package not found" Just spec -> do let pkg = mkPackageName $ removePrefix "ghc-" $ takeBaseName spec- prepStreamPkg flags (Just spec) stream pkg+ prepStreamPkg flags mpkgid (Just spec) stream pkg PVStreamPackage stream (Just pkg) -> do mspec <- checkForSpecFile (Just pkg)- prepStreamPkg flags mspec stream pkg+ prepStreamPkg flags mpkgid mspec stream pkg -- redundant mdir was earlier for update patchSpec :: Bool -> Maybe FilePath -> FilePath -> FilePath -> IO ()@@ -473,7 +498,7 @@ putStrLn diff unless dryrun $ do putStrLn ""- out <- cmdIgnoreErr "patch" opts diff+ out <- cmdIgnoreErr "patch" opts (diff ++ "\n") putStrLn out where opts = ["--fuzz=1"] ++ ["-p" ++ show n | let n = count '/' (removePrefix ".Cblrpm/" newspec)] ++ maybe [] (\ d -> ["-d", d]) mdir@@ -499,7 +524,8 @@ repoquery :: [String] -> String -> IO String repoquery args key = do havednf <- optionalProgram "dnf"- let (prog, subcmd) = if havednf then ("dnf", ["repoquery", "-q"]) else ("repoquery", [])+ -- --quiet needed to silence dnf5 unwanted stdout+ let (prog, subcmd) = if havednf then ("dnf", ["repoquery", "--quiet"]) else ("repoquery", []) sudo prog (subcmd ++ args ++ [key]) rpmInstall :: Bool -> [String] -> IO ()@@ -523,23 +549,27 @@ getSymbolicPath = id #endif -dependencySortCabals :: Maybe FilePath -> [PackageIdentifier]- -> IO [PackageIdentifier]-dependencySortCabals _ [] = return []-dependencySortCabals mspec pkgids = do+-- FIXME for rpm 4.20 %{builddir}+dependencySortCabals :: String -> Maybe FilePath+ -> [PackageIdentifier] -> IO [PackageIdentifier]+dependencySortCabals _ _ [] = return []+dependencySortCabals nv mspec pkgids = do cabalsort <- optionalProgram "cabal-sort" if cabalsort then do- forM_ pkgids $ prepare [] . Just . PVPackageId- builddir <- getBuildDir+ forM_ pkgids $ prepare [] (Just nv) . Just . PVPackageId+ builddir <- getBuildDir (Just nv) withCurrentDirectory builddir $ do -- pre-sort to stabilize sorting- sorted <- cmdLines "cabal-sort" (map (\pid -> showPkgId pid </> display (pkgName pid) <.> "cabal") $ sort pkgids)+ sorted <- cmdLines "cabal-sort" (map (\pid -> showPkgId pid </> display (pkgName pid) <.> "cabal") $ reverseSort pkgids) --print sorted return $ mapMaybe (simpleParse . takeDirectory) sorted else do- mapM_ (`bringTarball` mspec) pkgids+ mapM_ (`bringTarball` mspec) pkgids -- FIXME ? return pkgids+ where+ reverseSort :: Ord a => [a] -> [a]+ reverseSort = sortBy (comparing Down) readGlobalMacro :: String -> FilePath -> IO (Maybe String) readGlobalMacro macro spec = do
src/Stackage.hs view
@@ -44,7 +44,7 @@ import Types defaultLTS :: Stream-defaultLTS = LTS 21+defaultLTS = LTS 22 streamToMajorVer :: Stream -> MV.MajorVer streamToMajorVer (LTS n) = MV.LTS n
src/Types.hs view
@@ -32,7 +32,7 @@ ) where import Data.Char (isDigit {--, toLower--})-import Data.List+import Data.List.Extra import Data.Maybe (fromMaybe) #if !MIN_VERSION_base(4,11,0) import Data.Semigroup ((<>))