Hello community, here is the log from the commit of package cabal-rpm for openSUSE:Factory checked in at 2016-10-19 13:02:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cabal-rpm (Old) and /work/SRC/openSUSE:Factory/.cabal-rpm.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cabal-rpm" Changes: -------- --- /work/SRC/openSUSE:Factory/cabal-rpm/cabal-rpm.changes 2016-07-21 07:59:56.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.cabal-rpm.new/cabal-rpm.changes 2016-10-19 13:02:20.000000000 +0200 @@ -1,0 +2,5 @@ +Thu Sep 15 07:00:41 UTC 2016 - psim...@suse.com + +- Update to version 0.10.0 revision 0 with cabal2obs. + +------------------------------------------------------------------- Old: ---- cabal-rpm-0.9.11.tar.gz New: ---- cabal-rpm-0.10.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cabal-rpm.spec ++++++ --- /var/tmp/diff_new_pack.P2TBd8/_old 2016-10-19 13:02:21.000000000 +0200 +++ /var/tmp/diff_new_pack.P2TBd8/_new 2016-10-19 13:02:21.000000000 +0200 @@ -17,7 +17,7 @@ Name: cabal-rpm -Version: 0.9.11 +Version: 0.10.0 Release: 0 Summary: RPM packaging tool for Haskell Cabal-based packages License: GPL-3.0+ @@ -25,7 +25,6 @@ Url: https://hackage.haskell.org/package/%{name} Source0: https://hackage.haskell.org/package/%{name}-%{version}/%{name}-%{version}.tar.gz BuildRequires: ghc-Cabal-devel -# Begin cabal-rpm deps: BuildRequires: ghc-directory-devel BuildRequires: ghc-filepath-devel BuildRequires: ghc-old-locale-devel @@ -37,7 +36,6 @@ Recommends: ghc Recommends: yum-utils BuildRoot: %{_tmppath}/%{name}-%{version}-build -# End cabal-rpm deps %description This package provides a RPM packaging tool for Haskell Cabal-based packages. @@ -52,22 +50,18 @@ %prep %setup -q - %build %ghc_bin_build -install -p -m 0644 -D man/cblrpm.1 %{buildroot}%{_mandir}/man1/cblrpm.1 - - %install %ghc_bin_install - +install -p -m 0644 -D man/cabal-rpm.1 %{buildroot}%{_mandir}/man1/cabal-rpm.1 %files %defattr(-,root,root,-) %doc COPYING %doc ChangeLog README.md -%{_bindir}/cblrpm -%{_mandir}/man1/cblrpm.1* +%{_bindir}/%{name} +%{_mandir}/man1/cabal-rpm.1* %changelog ++++++ cabal-rpm-0.9.11.tar.gz -> cabal-rpm-0.10.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/ChangeLog new/cabal-rpm-0.10.0/ChangeLog --- old/cabal-rpm-0.9.11/ChangeLog 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/ChangeLog 2016-07-27 13:15:19.000000000 +0200 @@ -1,3 +1,22 @@ +* 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 missing cdeps (@peti), + otherwise a warning is not output +- update now shows the generated patch +- 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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/cabal-rpm.cabal new/cabal-rpm-0.10.0/cabal-rpm.cabal --- old/cabal-rpm-0.9.11/cabal-rpm.cabal 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/cabal-rpm.cabal 2016-07-27 13:15:19.000000000 +0200 @@ -1,5 +1,5 @@ Name: cabal-rpm -Version: 0.9.11 +Version: 0.10.0 Synopsis: RPM packaging tool for Haskell Cabal-based packages Description: This package provides a RPM packaging tool for Haskell Cabal-based packages. @@ -20,8 +20,10 @@ 2012-2016 Jens Petersen <peter...@fedoraproject.org> Category: Distribution Build-type: Simple -Extra-source-files: README.md ChangeLog man/cblrpm.1.md man/cblrpm.1 +Extra-source-files: README.md ChangeLog man/cabal-rpm.1.md man/cabal-rpm.1 Cabal-version: >=1.6 +Tested-with: GHC == 7.0.4, GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4, + GHC == 7.10.3, GHC == 8.0.1 source-repository head type: git @@ -31,7 +33,7 @@ Description: Use old-locale and time < 1.5 Default: True -Executable cblrpm +Executable cabal-rpm Main-is: Main.hs Build-depends: base < 5, Cabal > 1.10 && < 1.25, @@ -49,9 +51,11 @@ Commands.Diff, Commands.Install, Commands.RpmBuild, + Commands.Refresh, Commands.Spec, Commands.Update, Dependencies, + Distro, FileUtils, PackageUtils, Setup, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/man/cabal-rpm.1 new/cabal-rpm-0.10.0/man/cabal-rpm.1 --- old/cabal-rpm-0.9.11/man/cabal-rpm.1 1970-01-01 01:00:00.000000000 +0100 +++ new/cabal-rpm-0.10.0/man/cabal-rpm.1 2016-07-27 13:15:19.000000000 +0200 @@ -0,0 +1,115 @@ +.\" Automatically generated by Pandoc 1.17.2 +.\" +.TH "CBLRPM" "1" "2013\-01\-21" "" "" +.hy +.SH NAME +.PP +cblrpm \- a RPM packaging tool for Haskell Cabal packages +.SH SYNOPSIS +.PP +cblrpm [\f[I]options\f[]] spec [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] local [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] srpm [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] prep [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] builddep [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] install [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] depends [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] requires [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] missingdeps [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] diff [\f[I]path\-or\-pkg\f[]] cblrpm +[\f[I]options\f[]] update [\f[I]path\-or\-pkg\f[]] +.SH DESCRIPTION +.PP +cblrpm generates RPM packages and .spec files from Haskell Cabal +package. +.PP +If no \f[I]path\-or\-pkg\f[] is specified, cblrpm looks for a .spec or +.cabal file in the current directory. +Otherwise, it will look for \f[I]path\-or\-pkg\f[]. +If the argument is a directory then it will look there for a .spec or +.cabal file. +If the argument is a path to a .cabal file then it will use it. +Otherwise if there is no \[aq]/\[aq] in the argument and it does not +exist then cblrpm will try to unpack the package and use its .cabal +file. +cblrpm uses a temporary directory for unpackaging tarballs or packages. +cblrpm then parses the .cabal file and uses it to generate a .spec file +that can be built. +.PP +If a .spec already exists, cblrpm outputs to .spec.cblrpm instead. +.SH OPTIONS +.TP +.B \-h, \-\-help +Show the help text. +.RS +.RE +.TP +.B \-b, \-\-binary +Force the base package name to be the Hackage package name. +.RS +.RE +.TP +.B \-f \f[I]FLAGS\f[], \-\-flags=\f[I]FLAGS\f[] +Override one or more Cabal build configuration flags. +.RS +.RE +.TP +.B \-\-release=\f[I]RELEASE\f[] +Override the release number in the .spec file. +.RS +.RE +.TP +.B \-v \f[I]N\f[], \-\-verbose=\f[I]N\f[] +Set verbosity to \f[I]N\f[]. +.RS +.RE +.TP +.B \-\-version=\f[I]VERSION\f[] +Override the version number in the .spec file. +.RS +.RE +.SH EXAMPLES +.PP +Below CMD can be one of: spec, srpm, prep, local, install, diff, +builddep, depends, requires, missingdeps, update +.PP +Do CMD for the package in current directory: +.IP +.nf +\f[C] +cblrpm\ CMD +\f[] +.fi +.PP +Do CMD for package (directory or package name): +.IP +.nf +\f[C] +cblrpm\ CMD\ [package] +\f[] +.fi +.PP +Do CMD for package\-version (directory or package name): +.IP +.nf +\f[C] +cblrpm\ CMD\ [package\-version] +\f[] +.fi +.PP +Do CMD on a .cabal file: +.IP +.nf +\f[C] +cblrpm\ CMD\ path/to/some.cabal +\f[] +.fi +.SH HISTORY +.PP +Cabal\-rpm was originally written by Bryan O\[aq]Sullivan in 2007\-2008 +and resurrected by Jens Petersen in 2012 to replace cabal2spec. +.SH SEE ALSO +.PP +<http://github.com/juhp/cabal-rpm/> +.SH AUTHORS +This manpage was written by Jens Petersen. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/man/cabal-rpm.1.md new/cabal-rpm-0.10.0/man/cabal-rpm.1.md --- old/cabal-rpm-0.9.11/man/cabal-rpm.1.md 1970-01-01 01:00:00.000000000 +0100 +++ new/cabal-rpm-0.10.0/man/cabal-rpm.1.md 2016-07-27 13:15:19.000000000 +0200 @@ -0,0 +1,81 @@ +% CBLRPM(1) +% This manpage was written by Jens Petersen +% 2013-01-21 + +# NAME +cblrpm - a RPM packaging tool for Haskell Cabal packages + +# SYNOPSIS +cblrpm [*options*] spec [*path-or-pkg*] +cblrpm [*options*] local [*path-or-pkg*] +cblrpm [*options*] srpm [*path-or-pkg*] +cblrpm [*options*] prep [*path-or-pkg*] +cblrpm [*options*] builddep [*path-or-pkg*] +cblrpm [*options*] install [*path-or-pkg*] +cblrpm [*options*] depends [*path-or-pkg*] +cblrpm [*options*] requires [*path-or-pkg*] +cblrpm [*options*] missingdeps [*path-or-pkg*] +cblrpm [*options*] diff [*path-or-pkg*] +cblrpm [*options*] update [*path-or-pkg*] + +# DESCRIPTION +cblrpm generates RPM packages and .spec files from Haskell Cabal package. + +If no *path-or-pkg* is specified, cblrpm looks for a .spec or .cabal file +in the current directory. Otherwise, it will look for *path-or-pkg*. If +the argument is a directory then it will look there for a .spec or .cabal file. +If the argument is a path to a .cabal file then it will use it. +Otherwise if there is no '/' in the argument and it does not exist +then cblrpm will try to unpack the package and use its .cabal file. +cblrpm uses a temporary directory for unpackaging tarballs or packages. +cblrpm then parses the .cabal file and uses it to generate a .spec file +that can be built. + +If a <PKG>.spec already exists, cblrpm outputs to <PKG>.spec.cblrpm instead. + +# OPTIONS +-h, --help +: Show the help text. + +-b, --binary +: Force the base package name to be the Hackage package name. + +-f *FLAGS*, --flags=*FLAGS* +: Override one or more Cabal build configuration flags. + +--release=*RELEASE* +: Override the release number in the .spec file. + +-v *N*, --verbose=*N* +: Set verbosity to *N*. + +--version=*VERSION* +: Override the version number in the .spec file. + +# EXAMPLES +Below CMD can be one of: + spec, srpm, prep, local, install, diff, builddep, depends, requires, + missingdeps, update + +Do CMD for the package in current directory: + + cblrpm CMD + +Do CMD for package (directory or package name): + + cblrpm CMD [package] + +Do CMD for package-version (directory or package name): + + cblrpm CMD [package-version] + +Do CMD on a .cabal file: + + cblrpm CMD path/to/some.cabal + +# HISTORY +Cabal-rpm was originally written by Bryan O'Sullivan in 2007-2008 +and resurrected by Jens Petersen in 2012 to replace cabal2spec. + +# SEE ALSO +<http://github.com/juhp/cabal-rpm/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/man/cblrpm.1 new/cabal-rpm-0.10.0/man/cblrpm.1 --- old/cabal-rpm-0.9.11/man/cblrpm.1 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/man/cblrpm.1 1970-01-01 01:00:00.000000000 +0100 @@ -1,103 +0,0 @@ -.TH "CBLRPM" "1" "2013\-01\-21" "" "" -.SH NAME -.PP -cblrpm \- a RPM packaging tool for Haskell Cabal packages -.SH SYNOPSIS -.PP -cblrpm [\f[I]options\f[]] spec [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] local [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] srpm [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] prep [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] builddep [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] install [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] depends [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] requires [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] missingdeps [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] diff [\f[I]path\-or\-pkg\f[]] cblrpm -[\f[I]options\f[]] update [\f[I]path\-or\-pkg\f[]] -.SH DESCRIPTION -.PP -cblrpm generates RPM packages and .spec files from Haskell Cabal -package. -.PP -If no \f[I]path\-or\-pkg\f[] is specified, cblrpm looks for a .spec or -.cabal file in the current directory. -Otherwise, it will look for \f[I]path\-or\-pkg\f[]. -If the argument is a directory then it will look there for a .spec or -.cabal file. -If the argument is a path to a .cabal file then it will use it. -Otherwise if there is no \[aq]/\[aq] in the argument and it does not -exist then cblrpm will try to unpack the package and use its .cabal -file. -cblrpm uses a temporary directory for unpackaging tarballs or packages. -cblrpm then parses the .cabal file and uses it to generate a .spec file -that can be built. -.PP -If a .spec already exists, cblrpm outputs to .spec.cblrpm instead. -.SH OPTIONS -.TP -.B \-h, \-\-help -Show the help text. -.RS -.RE -.TP -.B \-b, \-\-binary -Force the base package name to be the Hackage package name. -.RS -.RE -.PP -\-f \f[I]FLAGS\f[], \-\-flags=\f[I]FLAGS\f[] : Override one or more -Cabal build configuration flags. -.PP -\-\-release=\f[I]RELEASE\f[] : Override the release number in the .spec -file. -.PP -\-v \f[I]N\f[], \-\-verbose=\f[I]N\f[] : Set verbosity to \f[I]N\f[]. -.PP -\-\-version=\f[I]VERSION\f[] : Override the version number in the .spec -file. -.SH EXAMPLES -.PP -Below CMD can be one of: spec, srpm, prep, local, install, diff, -builddep, depends, requires, missingdeps, update -.PP -Do CMD for the package in current directory: -.IP -.nf -\f[C] -cblrpm\ CMD -\f[] -.fi -.PP -Do CMD for package (directory or package name): -.IP -.nf -\f[C] -cblrpm\ CMD\ [package] -\f[] -.fi -.PP -Do CMD for package\-version (directory or package name): -.IP -.nf -\f[C] -cblrpm\ CMD\ [package\-version] -\f[] -.fi -.PP -Do CMD on a .cabal file: -.IP -.nf -\f[C] -cblrpm\ CMD\ path/to/some.cabal -\f[] -.fi -.SH HISTORY -.PP -Cabal\-rpm was originally written by Bryan O\[aq]Sullivan in 2007\-2008 -and resurrected by Jens Petersen in 2012 to replace cabal2spec. -.SH SEE ALSO -.PP -<http://github.com/juhp/cabal-rpm/> -.SH AUTHORS -This manpage was written by Jens Petersen. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/man/cblrpm.1.md new/cabal-rpm-0.10.0/man/cblrpm.1.md --- old/cabal-rpm-0.9.11/man/cblrpm.1.md 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/man/cblrpm.1.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,81 +0,0 @@ -% CBLRPM(1) -% This manpage was written by Jens Petersen -% 2013-01-21 - -# NAME -cblrpm - a RPM packaging tool for Haskell Cabal packages - -# SYNOPSIS -cblrpm [*options*] spec [*path-or-pkg*] -cblrpm [*options*] local [*path-or-pkg*] -cblrpm [*options*] srpm [*path-or-pkg*] -cblrpm [*options*] prep [*path-or-pkg*] -cblrpm [*options*] builddep [*path-or-pkg*] -cblrpm [*options*] install [*path-or-pkg*] -cblrpm [*options*] depends [*path-or-pkg*] -cblrpm [*options*] requires [*path-or-pkg*] -cblrpm [*options*] missingdeps [*path-or-pkg*] -cblrpm [*options*] diff [*path-or-pkg*] -cblrpm [*options*] update [*path-or-pkg*] - -# DESCRIPTION -cblrpm generates RPM packages and .spec files from Haskell Cabal package. - -If no *path-or-pkg* is specified, cblrpm looks for a .spec or .cabal file -in the current directory. Otherwise, it will look for *path-or-pkg*. If -the argument is a directory then it will look there for a .spec or .cabal file. -If the argument is a path to a .cabal file then it will use it. -Otherwise if there is no '/' in the argument and it does not exist -then cblrpm will try to unpack the package and use its .cabal file. -cblrpm uses a temporary directory for unpackaging tarballs or packages. -cblrpm then parses the .cabal file and uses it to generate a .spec file -that can be built. - -If a <PKG>.spec already exists, cblrpm outputs to <PKG>.spec.cblrpm instead. - -# OPTIONS --h, --help -: Show the help text. - --b, --binary -: Force the base package name to be the Hackage package name. - --f *FLAGS*, --flags=*FLAGS* -: Override one or more Cabal build configuration flags. - ---release=*RELEASE* -: Override the release number in the .spec file. - --v *N*, --verbose=*N* -: Set verbosity to *N*. - ---version=*VERSION* -: Override the version number in the .spec file. - -# EXAMPLES -Below CMD can be one of: - spec, srpm, prep, local, install, diff, builddep, depends, requires, - missingdeps, update - -Do CMD for the package in current directory: - - cblrpm CMD - -Do CMD for package (directory or package name): - - cblrpm CMD [package] - -Do CMD for package-version (directory or package name): - - cblrpm CMD [package-version] - -Do CMD on a .cabal file: - - cblrpm CMD path/to/some.cabal - -# HISTORY -Cabal-rpm was originally written by Bryan O'Sullivan in 2007-2008 -and resurrected by Jens Petersen in 2012 to replace cabal2spec. - -# SEE ALSO -<http://github.com/juhp/cabal-rpm/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Commands/Depends.hs new/cabal-rpm-0.10.0/src/Commands/Depends.hs --- old/cabal-rpm-0.9.11/src/Commands/Depends.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/Commands/Depends.hs 2016-07-27 13:15:19.000000000 +0200 @@ -39,7 +39,7 @@ let pkgcfgs' = map (++ ".pc") pkgcfgs mapM_ putStrLn $ deps ++ tools ++ clibs' ++ pkgcfgs' Requires -> do - (deps, tools, clibs, pkgcfgs, _) <- packageDependencies pkgDesc + (deps, tools, clibs, pkgcfgs, _) <- packageDependencies False pkgDesc mapM_ putStrLn $ sort $ deps ++ tools ++ clibs ++ pkgcfgs Missing -> do miss <- missingPackages pkgDesc >>= filterM notAvail diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Commands/Refresh.hs new/cabal-rpm-0.10.0/src/Commands/Refresh.hs --- old/cabal-rpm-0.9.11/src/Commands/Refresh.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/cabal-rpm-0.10.0/src/Commands/Refresh.hs 2016-07-27 13:15:19.000000000 +0200 @@ -0,0 +1,44 @@ +-- | +-- Module : Commands.Refresh +-- Copyright : (C) 2016 Jens Petersen +-- +-- Maintainer : Jens Petersen <peter...@fedoraproject.org> +-- +-- Explanation: refresh spec file to newer cabal-rpm + +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. + +module Commands.Refresh ( + refresh + ) where + +import Commands.Spec (createSpecFile) +import PackageUtils (PackageData (..)) +import Setup (RpmFlags (..)) +import SysCmd (cmd_, shell, (+-+)) + +import Distribution.Simple.Utils (die) + +refresh :: PackageData -> RpmFlags -> IO () +refresh pkgdata flags = + case specFilename pkgdata of + Nothing -> die "No (unique) .spec file in directory." + Just spec -> do + -- FIXME: later this should read the cabal-rpm version header line + oldspec <- createOldSpec "0.9.6" spec + newspec <- createSpecFile pkgdata flags Nothing + shell $ "diff -u2 -I \"- spec file generated by cabal-rpm\" -I \"Fedora Haskell SIG <hask...@lists.fedoraproject.org>\"" +-+ oldspec +-+ newspec +-+ "| sed -e 's/.cblrpm//' | patch" +-+ "|| :" +-- setCurrentDirectory cwd +-- when rwGit $ +-- cmd_ "git" ["commit", "-a", "-m", "update to" +-+ newver] + where + createOldSpec :: String -> String -> IO FilePath + createOldSpec crVer spec = do + cmd_ ("cabal-rpm-" ++ crVer) ["spec"] + let backup = spec ++ ".cblrpm" + backup' = backup ++ "-" ++ crVer + cmd_ "mv" [backup, backup'] + return backup' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Commands/RpmBuild.hs new/cabal-rpm-0.10.0/src/Commands/RpmBuild.hs --- old/cabal-rpm-0.9.11/src/Commands/RpmBuild.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/Commands/RpmBuild.hs 2016-07-27 13:15:19.000000000 +0200 @@ -33,7 +33,7 @@ --import Distribution.Version (VersionRange, foldVersionRange') -import System.Directory (doesFileExist) +import System.Directory (copyFile, doesFileExist) import System.FilePath (takeDirectory, (</>)) -- autoreconf :: Verbosity -> PackageDescription -> IO () @@ -75,6 +75,14 @@ error "No tarball for source repo" copyTarball name version False srcdir + + let revision = maybe (0::Int) read (lookup "x-revision" (customFieldsPD pkgDesc)) + cabalFile = srcdir </> show revision ++ ".cabal" + + cabalFileExists <- doesFileExist cabalFile + unless cabalFileExists $ + copyFile cabalPath cabalFile + rpmbuild stage False Nothing specFile return specFile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Commands/Spec.hs new/cabal-rpm-0.10.0/src/Commands/Spec.hs --- old/cabal-rpm-0.9.11/src/Commands/Spec.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/Commands/Spec.hs 2016-07-27 13:15:19.000000000 +0200 @@ -17,19 +17,21 @@ -- (at your option) any later version. module Commands.Spec ( - createSpecFile, createSpecFile_, detectDistro, Distro(..) + createSpecFile, createSpecFile_ ) where import Dependencies (notInstalled, packageDependencies, showDep, testsuiteDependencies) +import Distro (Distro(..), detectDistro) import PackageUtils (getPkgName, isScmDir, PackageData (..), packageName, packageVersion) import Setup (RpmFlags (..)) -import SysCmd ((+-+), cmd) +import SysCmd ((+-+)) +import Control.Applicative ((<$>)) import Control.Monad (filterM, unless, void, when) import Data.Char (toLower, toUpper) -import Data.List (groupBy, intercalate, isPrefixOf, isSuffixOf, +import Data.List (groupBy, intercalate, intersect, isPrefixOf, isSuffixOf, sort, (\\)) import Data.Maybe (fromMaybe) import Data.Time.Clock (getCurrentTime) @@ -46,7 +48,7 @@ --import Distribution.Version (VersionRange, foldVersionRange') -import System.Directory (doesFileExist, getDirectoryContents) +import System.Directory (copyFile, doesFileExist, getDirectoryContents) import System.IO (IOMode (..), hClose, hPutStrLn, openFile) #if defined(MIN_VERSION_time) && MIN_VERSION_time(1,5,0) import Data.Time.Format (defaultTimeLocale) @@ -91,7 +93,7 @@ hasExecPkg = binlib || (hasExec && not hasLib) -- run commands before opening file to prevent empty file on error -- maybe shell commands should be in a monad or something - (deps, tools, clibs, pkgcfgs, selfdep) <- packageDependencies pkgDesc + (deps, tools, clibs, pkgcfgs, selfdep) <- packageDependencies (rpmStrict flags) pkgDesc let testsuiteDeps = testsuiteDependencies pkgDesc name missTestDeps <- filterM notInstalled testsuiteDeps @@ -113,7 +115,8 @@ ghcPkg = if binlib then "-n ghc-%{name}" else "" ghcPkgDevel = if binlib then "-n ghc-%{name}-devel" else "devel" - distro <- detectDistro + put $ "# generated by cabal-rpm-" ++ showVersion Paths_cabal_rpm.version + distro <- fromMaybe detectDistro (return <$> rpmDistribution flags) if distro /= SUSE then put "# https://fedoraproject.org/wiki/Packaging:Haskell" else do @@ -180,6 +183,7 @@ defRelease <- defaultRelease cabalPath distro let version = packageVersion pkg release = fromMaybe defRelease (rpmRelease flags) + revision = show $ maybe (0::Int) read (lookup "x-revision" (customFieldsPD pkgDesc)) putHdr "Name" (if binlib then "%{pkg_name}" else basename) putHdr "Version" version putHdr "Release" $ release ++ (if distro == SUSE then [] else "%{?dist}") @@ -194,6 +198,10 @@ putHdr "License" $ (showLicense distro . license) pkgDesc putHdr "Url" $ "https://hackage.haskell.org/package/" ++ pkg_name putHdr "Source0" $ "https://hackage.haskell.org/package/" ++ pkg_name ++ "-%{version}/" ++ pkg_name ++ "-%{version}.tar.gz" + when (revision /= "0") $ + if distro == SUSE + then putHdr "Source1" $ "https://hackage.haskell.org/package/" ++ pkg_name ++ "-%{version}/revision/" ++ revision ++ ".cabal" + else putStrLn "Warning: this is a revised .cabal file" case distro of Fedora -> return () _ -> putHdr "BuildRoot" "%{_tmppath}/%{name}-%{version}-build" @@ -207,7 +215,8 @@ unless (null $ alldeps ++ extraTestDeps) $ do put "# Begin cabal-rpm deps:" mapM_ (putHdr "BuildRequires") alldeps - when (distro /= SUSE && + -- for ghc < 7.8 + when (distro `notElem` [Fedora, SUSE] && any (\ d -> d `elem` map showDep ["template-haskell", "hamlet"]) deps) $ putHdr "ExclusiveArch" "%{ghc_arches_with_ghci}" unless (null extraTestDeps) $ do @@ -250,7 +259,7 @@ putHdr "Requires" $ (if binlib then "ghc-%{name}" else "%{name}") ++ isa +-+ "= %{version}-%{release}" unless (null $ clibs ++ pkgcfgs) $ do put "# Begin cabal-rpm deps:" - mapM_ (putHdr "Requires") $ sort $ map (++ isa) clibs ++ pkgcfgs + mapM_ (putHdr "Requires") $ sort $ map (++ isa) clibs ++ pkgcfgs ++ ["pkgconfig" | distro == SUSE, not $ null pkgcfgs] put "# End cabal-rpm deps" putNewline put $ "%description" +-+ ghcPkgDevel @@ -259,6 +268,12 @@ put "%prep" put $ "%setup -q" ++ (if pkgname /= name then " -n %{pkg_name}-%{version}" else "") + when (distro == SUSE && revision /= "0") $ do + let revised = revision ++ ".cabal" + put $ "cp -p %{SOURCE1}" +-+ pkg_name ++ ".cabal" + copied <- doesFileExist revised + unless copied $ + copyFile cabalPath revised putNewline putNewline @@ -289,14 +304,22 @@ 1 -> head licensefiles _ -> "{" ++ intercalate "," licensefiles ++ "}" + -- remove docs from datafiles (#38) + docs <- sort <$> findDocs cabalPath licensefiles + let datafiles = dataFiles pkgDesc + dupdocs = docs `intersect` datafiles + unless (null dupdocs) $ + put $ "rm %{buildroot}%{_datadir}/" ++ pkg_name ++ "-%{version}/" ++ + case length dupdocs of + 1 -> head dupdocs + _ -> "{" ++ intercalate "," dupdocs ++ "}" + putNewline putNewline unless (null testsuiteDeps) $ do put "%check" - put "%if %{with tests}" - put "%cabal test" - put "%endif" + put "%cabal_test" putNewline putNewline @@ -310,8 +333,6 @@ put $ "%postun" +-+ ghcPkgDevel putInstallScript - docs <- findDocs cabalPath licensefiles - let license_macro = if distro == Fedora then "%license" else "%doc" when hasExecPkg $ do @@ -324,8 +345,8 @@ put $ "%doc" +-+ unwords docs mapM_ (\ p -> put $ "%{_bindir}/" ++ (if p == name then "%{name}" else p)) execs - unless (null (dataFiles pkgDesc)) $ - put "%{_datadir}/%{name}-%{version}" + unless (null datafiles) $ + put $ "%{_datadir}/" ++ pkg_name ++ "-%{version}" putNewline putNewline @@ -336,16 +357,17 @@ put $ "%files" +-+ ghcPkg +-+ baseFiles when (distro /= Fedora) $ put "%defattr(-,root,root,-)" mapM_ (\ l -> put $ license_macro +-+ l) licensefiles - -- be strict for now --- unless (null (dataFiles pkgDesc) || binlib) $ --- put "%{_datadir}/%{pkg_name}-%{version}" + when (not binlib && distro == SUSE) $ + mapM_ (\ p -> put $ "%{_bindir}/" ++ (if p == name then "%{pkg_name}" else p)) execs + unless (null datafiles || binlib) $ + put $ "%{_datadir}/" ++ pkg_name ++ "-%{version}" putNewline putNewline put $ "%files" +-+ ghcPkgDevel +-+ develFiles when (distro /= Fedora) $ put "%defattr(-,root,root,-)" unless (null docs) $ put $ "%doc" +-+ unwords docs - unless binlib $ + when (not binlib && distro /= SUSE) $ mapM_ (\ p -> put $ "%{_bindir}/" ++ (if p == name then "%{pkg_name}" else p)) execs putNewline putNewline @@ -374,8 +396,8 @@ return $ if null licensefiles then docs else filter unlikely $ filter (`notElem` licensefiles) docs - where names = ["author", "copying", "doc", "example", "licence", "license", - "readme", "todo"] + where names = ["author", "changelog", "changes", "copying", "doc", "example", "licence", + "license", "news", "readme", "todo"] likely name = let lowerName = map toLower name in any (`isPrefixOf` lowerName) names unlikely name = not $ any (`isSuffixOf` name) ["~"] @@ -411,6 +433,7 @@ showLicense _ (AGPL (Just ver)) = "AGPLv" ++ showVersion ver #endif #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,20,0) +showLicense SUSE BSD2 = "BSD-2-Clause" showLicense _ BSD2 = "BSD" showLicense _ (MPL ver) = "MPLv" ++ showVersion ver #endif @@ -419,11 +442,6 @@ showLicense _ UnspecifiedLicense = "Unspecified license!" #endif --- from http://stackoverflow.com/questions/930675/functional-paragraphs --- using split would be: map unlines . (Data.List.Split.splitWhen null) -paragraphs :: [String] -> [String] -paragraphs = map (unlines . filter (not . null)) . groupBy (const $ not . null) - -- http://rosettacode.org/wiki/Word_wrap#Haskell wordwrap :: Int -> String -> String wordwrap maxlen = wrap_ 0 False . words @@ -441,15 +459,8 @@ formatParagraphs :: String -> [String] formatParagraphs = map (wordwrap 79) . paragraphs . lines - -data Distro = Fedora | RHEL5 | SUSE deriving (Eq) - --- for now assume Fedora if no /etc/SuSE-release -detectDistro :: IO Distro -detectDistro = do - suse <- doesFileExist "/etc/SuSE-release" - if suse then return SUSE - else do - dist <- cmd "rpm" ["--eval", "%{?dist}"] - -- RHEL5 does not have macros.dist - return $ if null dist || dist == ".el5" then RHEL5 else Fedora + where + -- from http://stackoverflow.com/questions/930675/functional-paragraphs + -- using split would be: map unlines . (Data.List.Split.splitWhen null) + paragraphs :: [String] -> [String] + paragraphs = map (unlines . filter (not . null)) . groupBy (const $ not . null) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Commands/Update.hs new/cabal-rpm-0.10.0/src/Commands/Update.hs --- old/cabal-rpm-0.9.11/src/Commands/Update.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/Commands/Update.hs 2016-07-27 13:15:19.000000000 +0200 @@ -16,17 +16,18 @@ update ) where -import Commands.Spec (createSpecFile, detectDistro, Distro(..)) +import Commands.Spec (createSpecFile) +import Distro (detectDistro, Distro(..)) import FileUtils (withTempDirectory) import PackageUtils (PackageData (..), bringTarball, isGitDir, latestPkg, packageName, packageVersion, prepare, removePrefix) import Setup (RpmFlags (..)) -import SysCmd (cmd_, cmdBool, shell, (+-+)) - +import SysCmd (cmd_, cmdBool, cmdIgnoreErr, (+-+)) +import Control.Applicative ((<$>)) import Control.Monad (when) import Distribution.PackageDescription (PackageDescription (..)) import Distribution.Simple.Utils (die) - +import Data.Maybe (fromMaybe) import System.Directory (createDirectory, getCurrentDirectory, setCurrentDirectory) @@ -51,9 +52,12 @@ withTempDirectory $ \cwd -> do curspec <- createSpecVersion current spec newspec <- createSpecVersion latest spec - shell $ "diff -u1 -I \"- spec file generated by cabal-rpm\" -I \"Fedora Haskell SIG <hask...@lists.fedoraproject.org>\"" +-+ curspec +-+ newspec +-+ "| patch -d" +-+ cwd +-+ "-p1" +-+ "|| :" + patch <- cmdIgnoreErr "diff" ["-u2", "-I - spec file generated by cabal-rpm", "-I Fedora Haskell SIG <hask...@lists.fedoraproject.org>", curspec, newspec] "" + putStrLn patch + out <- cmdIgnoreErr "patch" ["-d", cwd, "-p1" ] patch + putStrLn out setCurrentDirectory cwd - distro <- detectDistro + distro <- fromMaybe detectDistro (return <$> rpmDistribution flags) let suffix = if distro == SUSE then "" else "%{?dist}" cmd_ "sed" ["-i", "-e s/^\\(Release: \\).*/\\10" ++ suffix ++ "/", spec] let newver = removePrefix (name ++ "-") latest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Dependencies.hs new/cabal-rpm-0.10.0/src/Dependencies.hs --- old/cabal-rpm-0.9.11/src/Dependencies.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/Dependencies.hs 2016-07-27 13:15:19.000000000 +0200 @@ -26,10 +26,10 @@ import SysCmd (cmd, cmdBool, repoquery, (+-+)) import Control.Applicative ((<$>)) -import Control.Monad (filterM) +import Control.Monad (filterM, when) import Data.List (delete, nub) -import Data.Maybe (catMaybes) +import Data.Maybe (catMaybes, isNothing) import Distribution.Package (Dependency (..), PackageName (..)) import Distribution.PackageDescription (PackageDescription (..), @@ -103,10 +103,11 @@ warning :: String -> IO () warning s = hPutStrLn stderr $ "Warning:" +-+ s -packageDependencies :: PackageDescription -- ^pkg description +packageDependencies :: Bool -- ^strict mode: True means abort on unknown dependencies + -> PackageDescription -- ^pkg description -> IO ([String], [String], [String], [String], Bool) -- ^depends, tools, c-libs, pkgcfg, selfdep -packageDependencies pkgDesc = do +packageDependencies strict pkgDesc = do (deps, tools', clibs', pkgcfgs, selfdep) <- dependencies pkgDesc let excludedTools n = n `notElem` ["ghc", "hsc2hs", "perl"] mapTools "gtk2hsC2hs" = "gtk2hs-buildtools" @@ -115,7 +116,12 @@ mapTools tool = tool chrpath = ["chrpath" | selfdep] tools = filter excludedTools $ nub $ map mapTools tools' ++ chrpath - clibs <- catMaybes <$> mapM resolveLib clibs' + clibsWithErrors <- mapM resolveLib clibs' + when (any isNothing clibsWithErrors) $ + if strict + then fail "cannot resolve all clib dependencies" + else putStrLn "Warning: could not resolve all clib dependencies" + let clibs = catMaybes clibsWithErrors let showPkgCfg p = "pkgconfig(" ++ p ++ ")" return (map showDep deps, tools, nub clibs, map showPkgCfg pkgcfgs, selfdep) @@ -127,7 +133,7 @@ missingPackages :: PackageDescription -> IO [String] missingPackages pkgDesc = do - (deps, tools, clibs, pkgcfgs, _) <- packageDependencies pkgDesc + (deps, tools, clibs, pkgcfgs, _) <- packageDependencies False pkgDesc pcpkgs <- mapM derefPkg pkgcfgs filterM notInstalled $ deps ++ ["ghc-Cabal-devel", "ghc-rpm-macros"] ++ tools ++ clibs ++ pcpkgs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Distro.hs new/cabal-rpm-0.10.0/src/Distro.hs --- old/cabal-rpm-0.9.11/src/Distro.hs 1970-01-01 01:00:00.000000000 +0100 +++ new/cabal-rpm-0.10.0/src/Distro.hs 2016-07-27 13:15:19.000000000 +0200 @@ -0,0 +1,42 @@ +-- | +-- Module : Distro +-- Copyright : (C) 2016 Jens Petersen +-- +-- Maintainer : Jens Petersen <peter...@fedoraproject.org> +-- +-- Types and utility functions to represent different RPM-based distributions. + +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. + +module Distro ( + detectDistro, parseDistroName, readDistroName, Distro(..) + ) where + +import SysCmd (cmd) +import Data.Maybe (fromMaybe) +import Data.Char (toLower) + +data Distro = Fedora | RHEL5 | SUSE deriving (Show, Eq) + +detectDistro :: IO Distro +detectDistro = do + suseVersion <- cmd "rpm" ["--eval", "%{?suse_version}"] + if null suseVersion then do + dist <- cmd "rpm" ["--eval", "%{?dist}"] + -- RHEL5 does not have macros.dist + return $ if null dist || dist == ".el5" then RHEL5 else Fedora + else return SUSE + +parseDistroName :: String -> Maybe Distro +parseDistroName x = lookup (map toLower x) known + where + known = [ ("suse", SUSE) + , ("fedora", Fedora) + , ("rhel5", RHEL5) + ] + +readDistroName :: String -> Distro +readDistroName s = fromMaybe (error $ "unrecognized distribution name " ++ show s) (parseDistroName s) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Main.hs new/cabal-rpm-0.10.0/src/Main.hs --- old/cabal-rpm-0.9.11/src/Main.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/Main.hs 2016-07-27 13:15:19.000000000 +0200 @@ -19,6 +19,7 @@ import Commands.Depends (depends, Depends (..)) import Commands.Diff (diff) import Commands.Install (install) +import Commands.Refresh (refresh) import Commands.RpmBuild (rpmBuild_) import Commands.Spec (createSpecFile_) import Commands.Update (update) @@ -46,6 +47,7 @@ "diff" -> diff pkgdata opts "install" -> install pkgdata opts "depends" -> depends pkgdata Depends + "refresh" -> refresh pkgdata opts "requires" -> depends pkgdata Requires "missingdeps" -> depends pkgdata Missing "update" -> update pkgdata opts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/PackageUtils.hs new/cabal-rpm-0.10.0/src/PackageUtils.hs --- old/cabal-rpm-0.9.11/src/PackageUtils.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/PackageUtils.hs 2016-07-27 13:15:19.000000000 +0200 @@ -45,7 +45,7 @@ import Data.Maybe (fromMaybe, isJust) import Data.Version (showVersion) -import Distribution.Compiler (CompilerFlavor (..)) +import Distribution.Compiler import Distribution.Package (PackageIdentifier (..), PackageName (..)) import Distribution.PackageDescription (PackageDescription (..), @@ -96,19 +96,28 @@ simplePackageDescription path opts = do let verbose = rpmVerbosity opts genPkgDesc <- readPackageDescription verbose path + compiler <- case rpmCompilerId opts of + Just cid -> return +#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0) + (unknownCompilerInfo cid NoAbiTag) +#else + cid +#endif + Nothing -> do #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,18,0) - (compiler, _, _) <- configCompilerEx + (compiler, _, _) <- configCompilerEx #else - (compiler, _) <- configCompiler + (compiler, _) <- configCompiler #endif - (Just GHC) Nothing Nothing defaultProgramConfiguration verbose - case finalizePackageDescription (rpmConfigurationsFlags opts) - (const True) (Platform buildArch buildOS) + (Just GHC) Nothing Nothing defaultProgramConfiguration verbose #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0) - (compilerInfo compiler) + return (compilerInfo compiler) #else - (compilerId compiler) + return (compilerId compiler) #endif + case finalizePackageDescription (rpmConfigurationsFlags opts) + (const True) (Platform buildArch buildOS) + compiler [] genPkgDesc of Left e -> die $ "finalize failed: " ++ show e Right (pd, _) -> return pd @@ -215,7 +224,7 @@ cmd_ "cabal" ["unpack", "-v0", pkgver] pth <- findPackageDesc' pkgver setCurrentDirectory cwd - return (tmpdir ++ "/" ++ pth, Just tmpdir) + return (tmpdir </> pth, Just tmpdir) latestPkg :: String -> IO String latestPkg pkg = do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/Setup.hs new/cabal-rpm-0.10.0/src/Setup.hs --- old/cabal-rpm-0.9.11/src/Setup.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/Setup.hs 2016-07-27 13:15:19.000000000 +0200 @@ -23,9 +23,11 @@ import Control.Monad (unless, when) import Data.Char (toLower) -import Data.Maybe (listToMaybe) +import Data.Maybe (listToMaybe, fromMaybe) import Data.Version (showVersion) +import Distribution.Compiler (CompilerId) +import Distribution.Text (simpleParse) import Distribution.PackageDescription (FlagName (..)) import Distribution.ReadE (readEOrFail) import Distribution.Verbosity (Verbosity, flagToVerbosity, normal, @@ -37,6 +39,7 @@ import System.Exit (ExitCode (..), exitSuccess, exitWith) import System.IO (Handle, hPutStrLn, stderr, stdout) +import Distro (Distro(..), readDistroName) import Paths_cabal_rpm (version) import SysCmd ((+-+)) @@ -45,7 +48,10 @@ , rpmForce :: Bool , rpmHelp :: Bool , rpmBinary :: Bool + , rpmStrict :: Bool , rpmRelease :: Maybe String + , rpmCompilerId :: Maybe CompilerId + , rpmDistribution :: Maybe Distro , rpmVerbosity :: Verbosity , rpmVersion :: Bool } @@ -57,7 +63,10 @@ , rpmForce = False , rpmHelp = False , rpmBinary = False + , rpmStrict = False , rpmRelease = Nothing + , rpmCompilerId = Nothing + , rpmDistribution = Nothing , rpmVerbosity = normal , rpmVersion = False } @@ -76,8 +85,14 @@ "Set given flags in Cabal conditionals", Option "" ["force"] (NoArg (\x -> x { rpmForce = True })) "Overwrite existing spec file.", + Option "" ["strict"] (NoArg (\x -> x { rpmStrict = True })) + "Fail rather than produce an incomplete spec file.", Option "" ["release"] (ReqArg (\rel x -> x { rpmRelease = Just rel }) "RELEASE") "Override the default package release", + Option "" ["compiler"] (ReqArg (\cid x -> x { rpmCompilerId = Just (parseCompilerId cid) }) "COMPILER-ID") + "Finalize Cabal files targetting the given compiler version", + Option "" ["distro"] (ReqArg (\did x -> x { rpmDistribution = Just (readDistroName did) }) "DISTRO") + "Choose the distribution generated spec files will target", Option "v" ["verbose"] (ReqArg (\verb x -> x { rpmVerbosity = readEOrFail flagToVerbosity verb }) "n") "Change build verbosity", Option "V" ["version"] (NoArg (\x -> x { rpmVersion = True })) @@ -114,6 +129,10 @@ ++ "Options:" hPutStrLn h (usageInfo info options) +parseCompilerId :: String -> CompilerId +parseCompilerId x = fromMaybe err (simpleParse x) + where err = error (show x ++ " is not a valid compiler id") + parseArgs :: [String] -> IO (RpmFlags, String, Maybe String) parseArgs args = do let (os, args', unknown, errs) = getOpt' Permute options args @@ -128,7 +147,11 @@ error $ unlines errs unless (null unknown) $ error $ "Unrecognised options:" +-+ unwords unknown - when (null args' || notElem (head args') ["builddep", "depends", "diff", "install", "missingdeps", "prep", "requires", "spec", "srpm", "build", "local", "rpm", "update"]) $ do + when (null args') $ do + printHelp stderr + exitWith (ExitFailure 1) + when (head args' `notElem` ["builddep", "depends", "diff", "install", "missingdeps", "prep", "requires", "spec", "srpm", "build", "local", "rpm", "update", "refresh"]) $ do + hPutStrLn stderr $ "Unknown command:" +-+ head args' printHelp stderr exitWith (ExitFailure 1) when (length args' > 2) $ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cabal-rpm-0.9.11/src/SysCmd.hs new/cabal-rpm-0.10.0/src/SysCmd.hs --- old/cabal-rpm-0.9.11/src/SysCmd.hs 2016-05-06 13:31:16.000000000 +0200 +++ new/cabal-rpm-0.10.0/src/SysCmd.hs 2016-07-27 13:15:19.000000000 +0200 @@ -18,6 +18,7 @@ cmd, cmd_, cmdBool, + cmdIgnoreErr, cmdQuiet, cmdSilent, pkgInstall, @@ -123,6 +124,11 @@ requireProgram c removeTrailingNewline <$> readProcess c args "" +cmdIgnoreErr :: FilePath -> [String] -> String -> IO String +cmdIgnoreErr c args input = do + (_exit, out, _err) <- readProcessWithExitCode c args input + return out + removeTrailingNewline :: String -> String removeTrailingNewline "" = "" removeTrailingNewline str =