Hello community,

here is the log from the commit of package cabal-rpm for openSUSE:Factory 
checked in at 2017-03-14 10:03:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cabal-rpm (Old)
 and      /work/SRC/openSUSE:Factory/.cabal-rpm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "cabal-rpm"

Tue Mar 14 10:03:59 2017 rev:17 rq:461519 version:0.11

Changes:
--------
--- /work/SRC/openSUSE:Factory/cabal-rpm/cabal-rpm.changes      2017-01-12 
15:46:31.390429581 +0100
+++ /work/SRC/openSUSE:Factory/.cabal-rpm.new/cabal-rpm.changes 2017-03-14 
10:04:00.205987484 +0100
@@ -1,0 +2,5 @@
+Sun Feb 12 14:20:27 UTC 2017 - psim...@suse.com
+
+- Update to version 0.11 with cabal2obs.
+
+-------------------------------------------------------------------

Old:
----
  cabal-rpm-0.10.1.tar.gz

New:
----
  cabal-rpm-0.11.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ cabal-rpm.spec ++++++
--- /var/tmp/diff_new_pack.boT1Tq/_old  2017-03-14 10:04:00.805902537 +0100
+++ /var/tmp/diff_new_pack.boT1Tq/_new  2017-03-14 10:04:00.809901970 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package cabal-rpm
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           cabal-rpm
-Version:        0.10.1
+Version:        0.11
 Release:        0
 Summary:        RPM packaging tool for Haskell Cabal-based packages
 License:        GPL-3.0+
@@ -44,8 +44,9 @@
 It can rpmbuild packages, yum/dnf install their dependencies, prep packages,
 and install them. There are commands to list package dependencies and missing
 dependencies. The diff command compares the current spec file with a freshly
-generated one and the update command updates the spec file to latest version
-from Hackage.
+generated one, the update command updates the spec file to latest version from
+Hackage, and the refresh command updates the spec file to the current cabal-rpm
+packaging.
 
 %prep
 %setup -q

++++++ cabal-rpm-0.10.1.tar.gz -> cabal-rpm-0.11.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/ChangeLog 
new/cabal-rpm-0.11/ChangeLog
--- old/cabal-rpm-0.10.1/ChangeLog      2016-11-29 02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/ChangeLog        2017-01-27 14:18:23.000000000 +0100
@@ -1,3 +1,14 @@
+* 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/README.md 
new/cabal-rpm-0.11/README.md
--- old/cabal-rpm-0.10.1/README.md      2016-11-29 02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/README.md        2017-01-27 14:18:23.000000000 +0100
@@ -18,8 +18,7 @@
 
 ## Requirements
 cabal-rpm assumes you are using ghc-rpm-macros for Haskell RPM packaging.
-It currently needs Cabal 1.10 or later to build (ie ghc7),
-but it should not be hard to patch it to build at least for ghc-6.12.
+It currently needs Cabal 1.10 or later to build (ie ghc 7 or later).
 
 ## Installation
 The package is on Hackage. If you have cabal-install (part of Haskell Platform)
@@ -30,37 +29,52 @@
 ## Usage
 To create a `.spec` file for a Haskell src package in the current dir:
 
-    $ cblrpm spec
+    $ cabal-rpm spec
 
 or directly on a `.cabal` file:
 
-    $ cblrpm spec path/to/mypkg.cabal
+    $ cabal-rpm spec path/to/mypkg.cabal
 
 or on a package source dir:
 
-    $ cblrpm spec mypkg-0.1
+    $ cabal-rpm spec mypkg-0.1
 
 You can also package directly from hackage:
 
-    $ cblrpm srpm somepkg
+    $ cabal-rpm srpm somepkg
 
 or
 
-    $ cblrpm local somepkg-0.1
+    $ cabal-rpm local somepkg-0.1
 
-will unpack the (latest) 'somepkg' package from hackage
+will unpack 'somepkg-0.1' from hackage
 (if the dir does not exist, otherwise it uses the existing dir),
 create a spec file for it, and build it.
 
-cblrpm creates `.spec` files in the current dir
+cabal-rpm creates `.spec` files in the current dir
 and if a `.spec` file already exists it will append `.cblrpm`
 to the generated filename to avoid overwriting an existing file.
 
-    $ cblrpm install [pkg][-ver]
+    $ cabal-rpm install [pkg][-ver]
 
 will yum/dnf install available missing dependencies and
 run "cabal install" to build the package.
 
+    $ cabal-rpm diff
+
+diffs the current spec file with a freshly generated spec file.
+
+    $ cabal-rpm update
+
+updates the package to the latest Hackage version
+
+    $ cabal-rpm refresh
+
+updates the spec file to the current cabal-rpm packaging.
+
+There are more commands: prep, builddep, depends, requires, missingdeps.
+See the manpage or help output for more details.
+
 ## Development
 The latest source code is available from: https://github.com/juhp/cabal-rpm
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/cabal-rpm.cabal 
new/cabal-rpm-0.11/cabal-rpm.cabal
--- old/cabal-rpm-0.10.1/cabal-rpm.cabal        2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/cabal-rpm.cabal  2017-01-27 14:18:23.000000000 +0100
@@ -1,5 +1,5 @@
 Name:                cabal-rpm
-Version:             0.10.1
+Version:             0.11
 Synopsis:            RPM packaging tool for Haskell Cabal-based packages
 Description:
     This package provides a RPM packaging tool for Haskell Cabal-based 
packages.
@@ -8,16 +8,17 @@
     It can rpmbuild packages, yum/dnf install their dependencies, prep 
packages,
     and install them. There are commands to list package dependencies and
     missing dependencies. The diff command compares the current spec file
-    with a freshly generated one and the update command updates the spec file
-    to latest version from Hackage.
+    with a freshly generated one, the update command updates the spec file
+    to latest version from Hackage, and the refresh command updates the
+    spec file to the current cabal-rpm packaging.
 Homepage:            https://github.com/juhp/cabal-rpm
 Bug-reports:         https://github.com/juhp/cabal-rpm/issues
 License:             GPL-3
 License-file:        COPYING
 Author:              Jens Petersen <j...@community.haskell.org>, Bryan 
O'Sullivan <b...@serpentine.com>
-Maintainer:          Jens Petersen <peter...@fedoraproject.org>
+Maintainer:          Jens Petersen <juhpeter...@gmail.com>
 Copyright:           2007-2008 Bryan O'Sullivan <b...@serpentine.com>,
-                     2012-2016 Jens Petersen <peter...@fedoraproject.org>
+                     2012-2017 Jens Petersen <peter...@fedoraproject.org>
 Category:            Distribution
 Build-type:          Simple
 Extra-source-files:  README.md ChangeLog man/cabal-rpm.1.md man/cabal-rpm.1
@@ -57,8 +58,8 @@
         Dependencies,
         Distro,
         FileUtils,
+        Options,
         PackageUtils,
-        Setup,
         SysCmd
     Hs-Source-Dirs:     src
     GHC-options:        -fwarn-missing-signatures -Wall
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/man/cabal-rpm.1 
new/cabal-rpm-0.11/man/cabal-rpm.1
--- old/cabal-rpm-0.10.1/man/cabal-rpm.1        2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/man/cabal-rpm.1  2017-01-27 14:18:23.000000000 +0100
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 1.17.2
+.\" Automatically generated by Pandoc 1.19.1
 .\"
 .TH "CBLRPM" "1" "2013\-01\-21" "" ""
 .hy
@@ -17,17 +17,18 @@
 [\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[]]
+[\f[I]options\f[]] update [\f[I]path\-or\-pkg\f[]] cblrpm
+[\f[I]options\f[]] refresh [\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.
+\&.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.
+\&.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
@@ -71,7 +72,7 @@
 .SH EXAMPLES
 .PP
 Below CMD can be one of: spec, srpm, prep, local, install, diff,
-builddep, depends, requires, missingdeps, update
+builddep, depends, requires, missingdeps, update, refresh
 .PP
 Do CMD for the package in current directory:
 .IP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/man/cabal-rpm.1.md 
new/cabal-rpm-0.11/man/cabal-rpm.1.md
--- old/cabal-rpm-0.10.1/man/cabal-rpm.1.md     2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/man/cabal-rpm.1.md       2017-01-27 14:18:23.000000000 
+0100
@@ -17,6 +17,7 @@
 cblrpm [*options*] missingdeps [*path-or-pkg*]
 cblrpm [*options*] diff [*path-or-pkg*]
 cblrpm [*options*] update [*path-or-pkg*]
+cblrpm [*options*] refresh [*path-or-pkg*]
 
 # DESCRIPTION
 cblrpm generates RPM packages and .spec files from Haskell Cabal package.
@@ -55,7 +56,7 @@
 # EXAMPLES
 Below CMD can be one of:
     spec, srpm, prep, local, install, diff, builddep, depends, requires,
-    missingdeps, update
+    missingdeps, update, refresh
 
 Do CMD for the package in current directory:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Commands/Depends.hs 
new/cabal-rpm-0.11/src/Commands/Depends.hs
--- old/cabal-rpm-0.10.1/src/Commands/Depends.hs        2016-11-29 
02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/src/Commands/Depends.hs  2017-01-27 14:18:23.000000000 
+0100
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Commands.Depends
--- Copyright   :  (C) 2014-2015 Jens Petersen
+-- Copyright   :  (C) 2014-2017 Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -18,11 +18,14 @@
     ) where
 
 import Dependencies (dependencies, missingPackages, packageDependencies)
+import Options (quiet)
 import PackageUtils (PackageData (..), prepare, stripPkgDevel)
-import Setup (quiet)
 import SysCmd (repoquery, (+-+))
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
 import Control.Applicative ((<$>))
+#endif
 import Control.Monad (filterM, unless, void)
 import Data.List (nub, sort, (\\))
 import System.Directory (removeDirectoryRecursive)
@@ -65,7 +68,7 @@
 
 missingDepsPkg :: String -> IO [String]
 missingDepsPkg pkg = do
-  pkgdata <- prepare (Just pkg) quiet
+  pkgdata <- prepare quiet (Just pkg)
   maybe (return ()) removeDirectoryRecursive $ workingDir pkgdata
   missingPackages (packageDesc pkgdata) >>= filterM notAvail
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Commands/Diff.hs 
new/cabal-rpm-0.11/src/Commands/Diff.hs
--- old/cabal-rpm-0.10.1/src/Commands/Diff.hs   2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/src/Commands/Diff.hs     2017-01-27 14:18:23.000000000 
+0100
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Commands.Diff
--- Copyright   :  (C) 2014  Jens Petersen
+-- Copyright   :  (C) 2014,2017  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -18,21 +18,24 @@
   ) where
 
 import Commands.Spec (createSpecFile)
-import FileUtils (mktempdir)
-import PackageUtils (PackageData (..))
-import Setup (RpmFlags (..))
+import FileUtils (mktempdir, withCurrentDirectory)
+import Options (RpmFlags (..))
+import PackageUtils (PackageData (..), prepare)
 import SysCmd ((+-+), shell)
 
+import Data.Maybe (isNothing)
 import Distribution.Simple.Utils (die)
 
 import System.Directory (removeDirectoryRecursive)
 
-diff :: PackageData -> RpmFlags -> IO ()
-diff pkgdata flags =
+diff :: PackageData -> RpmFlags -> Maybe String -> IO ()
+diff pkgdata flags mpkg =
   case specFilename pkgdata of
     Nothing -> die "No (unique) .spec file in directory."
     Just spec -> do
       tmpdir <- mktempdir
-      speccblrpm <- createSpecFile pkgdata flags (Just tmpdir)
+      pd <- if isNothing mpkg then return pkgdata
+            else withCurrentDirectory tmpdir $ prepare flags mpkg
+      speccblrpm <- createSpecFile pd flags (Just tmpdir)
       shell $ "diff" +-+ "-u" +-+ spec +-+ speccblrpm +-+ "| sed -e s%" ++ 
speccblrpm ++ "%" ++ spec ++ ".cblrpm" ++ "%"
       removeDirectoryRecursive tmpdir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Commands/Install.hs 
new/cabal-rpm-0.11/src/Commands/Install.hs
--- old/cabal-rpm-0.10.1/src/Commands/Install.hs        2016-11-29 
02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/src/Commands/Install.hs  2017-01-27 14:18:23.000000000 
+0100
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Commands.Install
--- Copyright   :  (C) 2012-2015 Jens Petersen
+-- Copyright   :  (C) 2012-2016 Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -19,11 +19,14 @@
 
 import Commands.RpmBuild (rpmBuild)
 import Dependencies (missingPackages, notInstalled)
+import Options (RpmFlags (..))
 import PackageUtils (PackageData (..), RpmStage (..), stripPkgDevel)
-import Setup (RpmFlags (..))
 import SysCmd (cmd, cmd_, pkgInstall, rpmInstall, (+-+))
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
 import Control.Applicative ((<$>))
+#endif
 import Control.Monad (unless, when)
 import System.FilePath ((</>))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Commands/Refresh.hs 
new/cabal-rpm-0.11/src/Commands/Refresh.hs
--- old/cabal-rpm-0.10.1/src/Commands/Refresh.hs        2016-11-29 
02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/src/Commands/Refresh.hs  2017-01-27 14:18:23.000000000 
+0100
@@ -16,29 +16,67 @@
   ) where
 
 import Commands.Spec (createSpecFile)
-import PackageUtils (PackageData (..))
-import Setup (RpmFlags (..))
-import SysCmd (cmd_, shell, (+-+))
+import FileUtils (withTempDirectory)
+import Options (RpmFlags (..))
+import PackageUtils (PackageData (..), removePrefix)
+import SysCmd (cmd_, optionalProgram, shell, (+-+))
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
+import Control.Applicative ((<$>))
+#endif
+import Control.Monad (unless)
+import Data.List (isPrefixOf)
 import Distribution.Simple.Utils (die)
+import System.Directory (copyFile, createDirectoryIfMissing, doesFileExist,
+                         setCurrentDirectory)
+import System.Environment (getEnv)
+import System.FilePath ((</>))
 
 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" +-+ "|| :"
+      first <- head . lines <$> readFile spec
+      if "# generated by cabal-rpm-" `isPrefixOf` first
+        then do
+        let cblrpmver = removePrefix "# generated by cabal-rpm-" first
+        oldspec <- createOldSpec cblrpmver 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" +-+ "|| :"
+        else putStrLn $ "No cabal-rpm header line in" +-+ spec
 --          setCurrentDirectory cwd
 --          when rwGit $
 --            cmd_ "git" ["commit", "-a", "-m", "update to" +-+ newver]
   where
-    createOldSpec :: String -> String -> IO FilePath
+    createOldSpec :: String -> FilePath -> IO FilePath
     createOldSpec crVer spec = do
-      cmd_ ("cabal-rpm-" ++ crVer) ["spec"]
+      cblrpmVersion crVer
       let backup = spec ++ ".cblrpm"
           backup' = backup ++ "-" ++ crVer
       cmd_ "mv" [backup, backup']
       return backup'
+
+    cblrpmVersion :: String -> IO ()
+    cblrpmVersion crver = do
+      let cblrpmver = "cabal-rpm-" ++ crver
+      inpath <- optionalProgram cblrpmver
+      if inpath
+        then cmd_ cblrpmver ["spec"]
+        else do
+        home <- getEnv "HOME"
+        let bindir = home </> ".cblrpm/versions/"
+        haveExe <- doesFileExist $ bindir </> cblrpmver
+        unless haveExe $
+          withTempDirectory $ \cwd -> do
+          cmd_ "cabal" ["unpack", cblrpmver]
+          setCurrentDirectory cblrpmver
+          cmd_ "cabal" ["configure"]
+          cmd_ "cabal" ["build"]
+          createDirectoryIfMissing True bindir
+          let bin = "dist/build/cabal-rpm/cabal-rpm"
+          cmd_ "strip" [bin]
+          copyFile bin $ bindir </> cblrpmver
+          setCurrentDirectory cwd
+        cmd_ (bindir </> cblrpmver) ["spec"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Commands/RpmBuild.hs 
new/cabal-rpm-0.11/src/Commands/RpmBuild.hs
--- old/cabal-rpm-0.10.1/src/Commands/RpmBuild.hs       2016-11-29 
02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/src/Commands/RpmBuild.hs 2017-01-27 14:18:23.000000000 
+0100
@@ -1,7 +1,7 @@
 -- |
 -- Module      :  Commands.RpmBuild
 -- Copyright   :  (C) 2007-2008  Bryan O'Sullivan
---                (C) 2012-2015  Jens Petersen
+--                (C) 2012-2016  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -21,9 +21,9 @@
 
 import Commands.Spec (createSpecFile)
 import Dependencies (missingPackages)
+import Options (RpmFlags (..))
 import PackageUtils (copyTarball, isScmDir, PackageData (..), packageName,
                      packageVersion, rpmbuild, RpmStage (..))
-import Setup (RpmFlags (..))
 import SysCmd (cmd, pkgInstall, (+-+))
 
 --import Control.Exception (bracket)
@@ -33,7 +33,7 @@
 
 --import Distribution.Version (VersionRange, foldVersionRange')
 
-import System.Directory (copyFile, doesFileExist)
+import System.Directory (doesFileExist)
 import System.FilePath (takeDirectory, (</>))
 
 -- autoreconf :: Verbosity -> PackageDescription -> IO ()
@@ -76,13 +76,6 @@
 
     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.10.1/src/Commands/Spec.hs 
new/cabal-rpm-0.11/src/Commands/Spec.hs
--- old/cabal-rpm-0.10.1/src/Commands/Spec.hs   2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/src/Commands/Spec.hs     2017-01-27 14:18:23.000000000 
+0100
@@ -23,12 +23,15 @@
 import Dependencies (notInstalled, packageDependencies, showDep,
                      testsuiteDependencies)
 import Distro (Distro(..), detectDistro)
+import Options (RpmFlags (..))
 import PackageUtils (getPkgName, isScmDir, PackageData (..),
                      packageName, packageVersion)
-import Setup (RpmFlags (..))
 import SysCmd ((+-+))
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
 import Control.Applicative ((<$>))
+#endif
 import Control.Monad    (filterM, unless, void, when)
 import Data.Char        (toLower, toUpper)
 import Data.List        (groupBy, intercalate, intersect, isPrefixOf, 
isSuffixOf,
@@ -43,12 +46,12 @@
 import Distribution.Simple.Utils (notice, warn)
 
 import Distribution.PackageDescription (BuildInfo (..), PackageDescription 
(..),
-                                        Executable (..),
+                                        Executable (..), FlagName (..),
                                         exeName, hasExes, hasLibs)
 
 --import Distribution.Version (VersionRange, foldVersionRange')
 
-import System.Directory (copyFile, doesFileExist, getDirectoryContents)
+import System.Directory (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)
@@ -110,6 +113,7 @@
   let putHdr hdr val = hPutStrLn h (hdr ++ ":" ++ padding hdr ++ val)
       padding hdr = replicate (14 - length hdr) ' ' ++ " "
       putNewline = hPutStrLn h ""
+      sectionNewline = putNewline >> putNewline
       put = hPutStrLn h
       putDef v s = put $ "%global" +-+ v +-+ s
       ghcPkg = if binlib then "-n ghc-%{name}" else ""
@@ -189,8 +193,7 @@
   putHdr "Release" $ release ++ (if distro == SUSE then [] else "%{?dist}")
   putHdr "Summary" summary
   case distro of
-    SUSE -> putHdr "Group" (if binlib then "Development/Languages/Other"
-                            else "System/Libraries")
+    SUSE -> putHdr "Group" "Development/Languages/Other"
     RHEL5 -> putHdr "Group" (if binlib then "Development/Languages"
                             else "System Environment/Libraries")
     _ -> return ()
@@ -200,7 +203,7 @@
   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"
+    then putHdr "Source1" $ "https://hackage.haskell.org/package/"; ++ pkg_name 
++ "-%{version}/revision/" ++ revision ++ ".cabal#/" ++ pkg_name ++ ".cabal"
     else putStrLn "Warning: this is a revised .cabal file"
   case distro of
     Fedora -> return ()
@@ -268,20 +271,17 @@
 
   put "%prep"
   put $ "%setup -q" ++ (if pkgname /= name then " -n %{pkg_name}-%{version}" 
else "")
-  when (distro == SUSE && revision /= "0") $ do
-    let revised = revision ++ ".cabal"
+  when (distro == SUSE && revision /= "0") $
     put $ "cp -p %{SOURCE1}" +-+ pkg_name ++ ".cabal"
-    copied <- doesFileExist revised
-    unless copied $
-      copyFile cabalPath revised
-  putNewline
-  putNewline
+  sectionNewline
 
   put "%build"
+  when (distro == SUSE && rpmConfigurationsFlags flags /= []) $ do
+    let cabalFlags = [ "-f" ++ (if b then "" else "-") ++ n | (FlagName n, b) 
<- rpmConfigurationsFlags flags ]
+    put $ "%define cabal_configure_options " ++ unwords cabalFlags
   let pkgType = if hasLib then "lib" else "bin"
   put $ "%ghc_" ++ pkgType ++ "_build"
-  putNewline
-  putNewline
+  sectionNewline
 
   put "%install"
   put $ "%ghc_" ++ pkgType ++ "_install"
@@ -302,6 +302,7 @@
   let datafiles = dataFiles pkgDesc
       dupdocs = docs `intersect` datafiles
   unless (null dupdocs) $ do
+    putNewline
     putStrLn $ "Warning: doc files found in datadir:" +-+ unwords dupdocs
     unless (distro == SUSE) $
       put $ "rm %{buildroot}%{_datadir}/" ++ pkg_name ++ "-%{version}/" ++
@@ -309,24 +310,21 @@
            1 -> head dupdocs
            _ -> "{" ++ intercalate "," dupdocs ++ "}"
 
-  putNewline
-  putNewline
+  sectionNewline
 
   unless (null testsuiteDeps) $ do
     put "%check"
     put "%cabal_test"
-    putNewline
-    putNewline
+    sectionNewline
 
   when hasLib $ do
-    let putInstallScript = do
-          put "%ghc_pkg_recache"
-          putNewline
-          putNewline
     put $ "%post" +-+ ghcPkgDevel
-    putInstallScript
+    put "%ghc_pkg_recache"
+    sectionNewline
+
     put $ "%postun" +-+ ghcPkgDevel
-    putInstallScript
+    put "%ghc_pkg_recache"
+    sectionNewline
 
   let license_macro = if distro == Fedora then "%license" else "%doc"
   let execs = sort $ map exeName $ filter isBuildable $ executables pkgDesc
@@ -339,13 +337,11 @@
     mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
     unless (null docs) $
       put $ "%doc" +-+ unwords docs
-
     mapM_ (\ p -> put $ "%{_bindir}/" ++ (if p == name then "%{name}" else p)) 
execs
     unless (null datafiles) $
       put $ "%{_datadir}/" ++ pkg_name ++ "-%{version}"
 
-    putNewline
-    putNewline
+    sectionNewline
 
   when hasLib $ do
     let baseFiles = if binlib then "-f ghc-%{name}.files" else "-f 
%{name}.files"
@@ -353,20 +349,18 @@
     put $ "%files" +-+ ghcPkg +-+ baseFiles
     when (distro /= Fedora) $ put "%defattr(-,root,root,-)"
     mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
-    when (not binlib && distro == SUSE) $
+    when (distro == SUSE && not binlib) $
       mapM_ (\ p -> put $ "%{_bindir}/" ++ (if p == name then "%{pkg_name}" 
else p)) execs
     unless (null datafiles || binlib) $
       put $ "%{_datadir}/" ++ pkg_name ++ "-%{version}"
-    putNewline
-    putNewline
+    sectionNewline
     put $ "%files" +-+ ghcPkgDevel +-+  develFiles
     when (distro /= Fedora) $ put "%defattr(-,root,root,-)"
     unless (null docs) $
       put $ "%doc" +-+ unwords docs
-    when (not binlib && distro /= SUSE) $
+    when (distro /= SUSE && not binlib) $
       mapM_ (\ p -> put $ "%{_bindir}/" ++ (if p == name then "%{pkg_name}" 
else p)) execs
-    putNewline
-    putNewline
+    sectionNewline
 
   put "%changelog"
   unless (distro == SUSE) $ do
@@ -421,7 +415,7 @@
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,16,0)
 showLicense SUSE (Apache Nothing) = "Apache-2.0"
 showLicense _    (Apache Nothing) = "ASL ?"
-showLicense SUSE (Apache (Just ver)) = "Apache-" +-+ showVersion ver
+showLicense SUSE (Apache (Just ver)) = "Apache-" ++ showVersion ver
 showLicense _    (Apache (Just ver)) = "ASL" +-+ showVersion ver
 #endif
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,18,0)
@@ -431,6 +425,7 @@
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,20,0)
 showLicense SUSE BSD2 = "BSD-2-Clause"
 showLicense _ BSD2 = "BSD"
+showLicense SUSE (MPL ver) = "MPL-" ++ showVersion ver
 showLicense _ (MPL ver) = "MPLv" ++ showVersion ver
 #endif
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Commands/Update.hs 
new/cabal-rpm-0.11/src/Commands/Update.hs
--- old/cabal-rpm-0.10.1/src/Commands/Update.hs 2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/src/Commands/Update.hs   2017-01-27 14:18:23.000000000 
+0100
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Commands.Update
--- Copyright   :  (C) 2014-2016  Jens Petersen
+-- Copyright   :  (C) 2014-2017  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -19,11 +19,14 @@
 import Commands.Spec (createSpecFile)
 import Distro (detectDistro, Distro(..))
 import FileUtils (withTempDirectory)
-import PackageUtils (PackageData (..), bringTarball, isGitDir, latestPkg,
+import Options (RpmFlags (..))
+import PackageUtils (PackageData (..), bringTarball, isGitDir, latestPackage,
                      packageName, packageVersion, prepare, removePrefix)
-import Setup (RpmFlags (..))
 import SysCmd (cmd_, cmdBool, cmdIgnoreErr, (+-+))
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
 import Control.Applicative ((<$>))
+#endif
 import Control.Monad (when)
 import Distribution.PackageDescription (PackageDescription (..))
 import Distribution.Simple.Utils (die)
@@ -31,8 +34,8 @@
 import System.Directory (createDirectory, getCurrentDirectory,
                          setCurrentDirectory)
 
-update :: PackageData -> RpmFlags -> IO ()
-update pkgdata flags =
+update :: PackageData -> RpmFlags -> Maybe String -> IO ()
+update pkgdata flags mpkgver =
   case specFilename pkgdata of
     Nothing -> die "No (unique) .spec file in directory."
     Just spec -> do
@@ -40,9 +43,11 @@
           name = packageName pkg
           ver = packageVersion pkg
           current = name ++ "-" ++ ver
-      latest <- latestPkg name
+      latest <- case mpkgver of
+                  Just pv -> return pv
+                  Nothing -> latestPackage name
       if current == latest
-        then error $ current +-+ "is latest version."
+        then error $ current +-+ "is already latest version."
         else do
         bringTarball latest
         gitDir <- getCurrentDirectory >>= isGitDir
@@ -69,7 +74,7 @@
   where
     createSpecVersion :: String -> String -> IO FilePath
     createSpecVersion ver spec = do
-      pkgdata' <- prepare (Just ver) flags
+      pkgdata' <- prepare flags (Just ver)
       let pkgdata'' = pkgdata' { specFilename = Just spec }
       createDirectory ver
       createSpecFile pkgdata'' flags (Just ver)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Dependencies.hs 
new/cabal-rpm-0.11/src/Dependencies.hs
--- old/cabal-rpm-0.10.1/src/Dependencies.hs    2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/src/Dependencies.hs      2017-01-27 14:18:23.000000000 
+0100
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 -- |
 -- Module      :  Dependencies
 -- Copyright   :  (C) 2012-2016  Jens Petersen
@@ -25,7 +27,10 @@
 import PackageUtils (packageName)
 import SysCmd (cmd, cmdBool, repoquery, (+-+))
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
 import Control.Applicative ((<$>))
+#endif
 import Control.Monad (filterM, when)
 
 import Data.List (delete, nub)
@@ -36,7 +41,11 @@
                                         allBuildInfo,
                                         BuildInfo (..),
                                         TestSuite (..),
-                                        hasExes)
+                                        hasExes, 
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,24,0)
+                                        setupDepends
+#endif
+                                        )
 import System.Directory (doesDirectoryExist, doesFileExist)
 import System.IO (hPutStrLn, stderr)
 
@@ -46,8 +55,12 @@
 -- returns list of deps and whether package is self-dependent
 buildDependencies :: PackageDescription -> String -> ([String], Bool)
 buildDependencies pkgDesc self =
-  let deps = nub $ map depName (buildDepends pkgDesc) in
-  (filter excludedPkgs (delete self deps), self `elem` deps && hasExes pkgDesc)
+  let deps = nub $ map depName (buildDepends pkgDesc)
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,24,0)
+                   ++ (maybe [] (map depName . setupDepends) (setupBuildInfo 
pkgDesc))
+#endif
+  in
+    (filter excludedPkgs (delete self deps), self `elem` deps && hasExes 
pkgDesc)
 
 depName :: Dependency -> String
 depName (Dependency (PackageName n) _) = n
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/FileUtils.hs 
new/cabal-rpm-0.11/src/FileUtils.hs
--- old/cabal-rpm-0.10.1/src/FileUtils.hs       2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/src/FileUtils.hs 2017-01-27 14:18:23.000000000 +0100
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  FileUtils
--- Copyright   :  (C) 2014  Jens Petersen
+-- Copyright   :  (C) 2014, 2016-2017  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -20,11 +20,15 @@
   fileWithExtension_,
   getDirectoryContents_,
   mktempdir,
+  withCurrentDirectory,
   withTempDirectory) where
 
 import SysCmd (cmd)
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
 import Control.Applicative ((<$>))
+#endif
 import Control.Exception (bracket)
 import Data.List (isPrefixOf)
 import Data.Maybe (isJust)
@@ -68,3 +72,10 @@
 getDirectoryContents_ :: FilePath -> IO [FilePath]
 getDirectoryContents_ dir =
   filter (not . isPrefixOf ".") <$> getDirectoryContents dir
+
+-- from directory-1.2.3.0
+withCurrentDirectory :: FilePath -> IO a -> IO a
+withCurrentDirectory dir action =
+  bracket getCurrentDirectory setCurrentDirectory $ \ _ -> do
+    setCurrentDirectory dir
+    action
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Main.hs 
new/cabal-rpm-0.11/src/Main.hs
--- old/cabal-rpm-0.10.1/src/Main.hs    2016-11-29 02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/src/Main.hs      2017-01-27 14:18:23.000000000 +0100
@@ -1,7 +1,7 @@
 -- |
 -- Module      :  Main
 -- Copyright   :  (C) 2007  Bryan O'Sullivan
---                (C) 2012-2014  Jens Petersen
+--                (C) 2012-2017  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -24,8 +24,8 @@
 import Commands.Spec (createSpecFile_)
 import Commands.Update (update)
 
+import Options (parseArgs)
 import PackageUtils (prepare, PackageData (..), RpmStage (..))
-import Setup (parseArgs)
 
 import Control.Exception (bracket)
 import System.Directory (removeDirectoryRecursive)
@@ -34,7 +34,7 @@
 main :: IO ()
 main = do
   (opts, cmd, mpkg) <- getArgs >>= parseArgs
-  bracket (prepare mpkg opts)
+  bracket (prepare opts mpkg)
     (maybe (return ()) removeDirectoryRecursive . workingDir)
     (\pkgdata ->
       case cmd of
@@ -44,13 +44,13 @@
         "local"       -> rpmBuild_ pkgdata opts Binary
         "build"       -> rpmBuild_ pkgdata opts Binary
         "builddep"    -> rpmBuild_ pkgdata opts BuildDep
-        "diff"        -> diff pkgdata opts
+        "diff"        -> diff pkgdata opts mpkg
         "install"     -> install pkgdata opts
         "depends"     -> depends pkgdata Depends
         "refresh"     -> refresh pkgdata opts
         "requires"    -> depends pkgdata Requires
         "missingdeps" -> depends pkgdata Missing
-        "update"      -> update pkgdata opts
+        "update"      -> update pkgdata opts mpkg
         "rpm"         -> do
           putStrLn "* Warning the 'rpm' command has been renamed to 'local':"
           putStrLn "* this alias may be removed in a future release."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Options.hs 
new/cabal-rpm-0.11/src/Options.hs
--- old/cabal-rpm-0.10.1/src/Options.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/cabal-rpm-0.11/src/Options.hs   2017-01-27 14:18:23.000000000 +0100
@@ -0,0 +1,158 @@
+-- |
+-- Module      :  Options
+-- Copyright   :  (C) 2007-2008  Bryan O'Sullivan
+--                (C) 2012-2016  Jens Petersen
+--
+-- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
+-- Stability   :  alpha
+-- Portability :  portable
+--
+-- Explanation: Command line option processing for building RPM
+-- packages.
+
+-- 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 Options (
+      RpmFlags(..)
+    , parseArgs
+    , quiet
+    ) where
+
+import Control.Monad (unless, when)
+import Data.Char     (toLower)
+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,
+                                        silent)
+
+import System.Console.GetOpt (ArgDescr (..), ArgOrder (..), OptDescr (..),
+                              getOpt', usageInfo)
+import System.Environment    (getProgName)
+import System.Exit           (ExitCode (..), exitSuccess, exitWith)
+import System.IO             (Handle, hPutStrLn, stderr, stdout)
+
+import Distro                (Distro(..), readDistroName)
+import Paths_cabal_rpm       (version)
+import SysCmd                ((+-+))
+
+data RpmFlags = RpmFlags
+    { rpmConfigurationsFlags :: [(FlagName, Bool)]
+    , rpmForce               :: Bool
+    , rpmHelp                :: Bool
+    , rpmBinary              :: Bool
+    , rpmStrict              :: Bool
+    , rpmRelease             :: Maybe String
+    , rpmCompilerId          :: Maybe CompilerId
+    , rpmDistribution        :: Maybe Distro
+    , rpmVerbosity           :: Verbosity
+    , rpmVersion             :: Bool
+    }
+    deriving (Eq, Show)
+
+emptyRpmFlags :: RpmFlags
+emptyRpmFlags = RpmFlags
+    { rpmConfigurationsFlags = []
+    , rpmForce = False
+    , rpmHelp = False
+    , rpmBinary = False
+    , rpmStrict = False
+    , rpmRelease = Nothing
+    , rpmCompilerId = Nothing
+    , rpmDistribution = Nothing
+    , rpmVerbosity = normal
+    , rpmVersion = False
+    }
+
+quiet :: RpmFlags
+quiet = emptyRpmFlags {rpmVerbosity = silent}
+
+options :: [OptDescr (RpmFlags -> RpmFlags)]
+options =
+  [ Option "h?" ["help"] (NoArg (\x -> x { rpmHelp = True }))
+    "Show this help text"
+  , Option "b" ["binary"] (NoArg (\x -> x { rpmBinary = True }))
+    "Force Haskell package name to be base package name"
+  , 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 "V" ["version"] (NoArg (\x -> x { rpmVersion = True }))
+    "Show version number"
+  , Option "f" ["flags"] (ReqArg (\flags x -> x { rpmConfigurationsFlags = 
rpmConfigurationsFlags x ++ flagList flags }) "FLAGS")
+    "Set given flags in Cabal conditionals"
+  , 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"
+  ]
+
+-- Lifted from Distribution.Simple.Setup, since it's not exported.
+flagList :: String -> [(FlagName, Bool)]
+flagList = map tagWithValue . words
+  where tagWithValue ('-':name) = (FlagName (map toLower name), False)
+        tagWithValue name       = (FlagName (map toLower name), True)
+
+printHelp :: Handle -> IO ()
+printHelp h = do
+  progName <- getProgName
+  let info = "Usage: " ++ progName ++ " [OPTION]... COMMAND 
[PATH|PKG|PKG-VERSION]\n"
+             ++ "\n"
+             ++ "PATH can be a .spec file, .cabal file, or pkg dir.\n"
+             ++ "\n"
+             ++ "Commands:\n"
+             ++ "  spec\t\t- generate a spec file\n"
+             ++ "  srpm\t\t- generate a src rpm file\n"
+             ++ "  prep\t\t- unpack source\n"
+             ++ "  local\t\t- build rpm package locally\n"
+             ++ "  builddep\t- install dependencies\n"
+             ++ "  install\t- install packages recursively\n"
+             ++ "  depends\t- list Cabal depends\n"
+             ++ "  requires\t- list package buildrequires\n"
+             ++ "  missingdeps\t- list missing buildrequires\n"
+             ++ "  diff\t\t- diff current spec file\n"
+             ++ "  update\t- update spec file package to latest version\n"
+             ++ "  refresh\t- refresh spec file to current cblrpm\n"
+             ++ "\n"
+             ++ "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
+      opts = foldl (flip ($)) emptyRpmFlags os
+  when (rpmHelp opts) $ do
+    printHelp stdout
+    exitSuccess
+  when (rpmVersion opts) $ do
+    putStrLn $ showVersion version
+    exitSuccess
+  unless (null errs) $
+    error $ unlines errs
+  unless (null unknown) $
+    error $ "Unrecognised options:" +-+ unwords unknown
+  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) $
+    error $ "Too many arguments:" +-+ unwords args'
+  return (opts, head args', listToMaybe $ tail args')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/PackageUtils.hs 
new/cabal-rpm-0.11/src/PackageUtils.hs
--- old/cabal-rpm-0.10.1/src/PackageUtils.hs    2016-11-29 02:38:51.000000000 
+0100
+++ new/cabal-rpm-0.11/src/PackageUtils.hs      2017-01-27 14:18:23.000000000 
+0100
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  PackageUtils
--- Copyright   :  (C) 2013-2015  Jens Petersen
+-- Copyright   :  (C) 2013-2017  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -15,12 +15,11 @@
 
 module PackageUtils (
   bringTarball,
-  checkForSpecFile,
   copyTarball,
   getPkgName,
   isGitDir,
   isScmDir,
-  latestPkg,
+  latestPackage,
   PackageData (..),
   packageName,
   packageVersion,
@@ -34,14 +33,17 @@
 
 import FileUtils (filesWithExtension, fileWithExtension,
                   getDirectoryContents_, mktempdir)
-import Setup (RpmFlags (..))
-import SysCmd (cmd, cmd_, cmdSilent, (+-+))
+import Options (RpmFlags (..))
+import SysCmd (cmd, cmd_, cmdSilent, (+-+), optionalProgram)
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
 import Control.Applicative ((<$>))
+#endif
 import Control.Monad    (filterM, unless, when)
 
 import Data.Char (isDigit)
-import Data.List (stripPrefix)
+import Data.List (isPrefixOf, stripPrefix)
 import Data.Maybe (fromMaybe, isJust)
 import Data.Version     (showVersion)
 
@@ -211,7 +213,7 @@
 
 tryUnpack :: String -> IO (FilePath, Maybe FilePath)
 tryUnpack pkg = do
-  pkgver <- if stripVersion pkg == pkg then latestPkg pkg else return pkg
+  pkgver <- if stripVersion pkg == pkg then latestPackage pkg else return pkg
   isdir <- doesDirectoryExist pkgver
   if isdir
     then do
@@ -226,13 +228,43 @@
     setCurrentDirectory cwd
     return (tmpdir </> pth, Just tmpdir)
 
-latestPkg :: String -> IO String
-latestPkg pkg = do
-  contains_pkg <- lines <$> cmd "cabal" ["list", "-v0", "--simple-output", pkg]
-  let pkgs = filter ((== pkg) . takeWhile (/= ' ')) contains_pkg
-  if null pkgs
-    then error $ pkg ++ " hackage not found"
-    else return $ map (\c -> if c == ' ' then '-' else c) $ last pkgs
+latestPackage :: String -> IO String
+latestPackage pkg = do
+  stk <- latestStackage pkg
+  case stk of
+    Just pv -> return pv
+    Nothing -> latestHackage pkg
+
+latestHackage :: String -> IO String
+latestHackage pkg = do
+  contains_pkg <- lines <$> cmd "cabal" ["list", "-v0", pkg]
+  let top = dropWhile (/= "*" +-+ pkg) contains_pkg
+  if null top
+    then error $ pkg +-+ "hackage not found"
+    else do
+    let field = "    Default available version: "
+    let avails = map (removePrefix field) $ filter (isPrefixOf field) top
+    if null avails
+      then error $ pkg +-+ "latest available version not found"
+      else do
+      let res = pkg ++ "-" ++ head avails
+      putStrLn $ res +-+ "in Hackage"
+      return res
+
+latestStackage :: String -> IO (Maybe String)
+latestStackage pkg = do
+  -- check for stackage-query
+  haveStackage <- optionalProgram "stackage"
+  if haveStackage
+    then do
+    let stream = "nightly"
+    out <- cmd "stackage" ["list", stream, pkg]
+    if null out
+      then return Nothing
+      else do
+      putStrLn $ out +-+ "in Stackage" +-+ stream
+      return $ Just out
+    else return Nothing
 
 packageName :: PackageIdentifier -> String
 packageName pkg = name
@@ -268,7 +300,7 @@
 checkForSpecFile :: Maybe String -> IO (Maybe FilePath)
 checkForSpecFile Nothing = do
   -- emacs makes ".#*.spec" tmp files
-  allSpecs <- filesWithExtension "." ".spec"
+  allSpecs <- allSpecfiles
   let specs = filter (\ f -> head f /= '.') allSpecs
   when (specs /= allSpecs) $
     putStrLn "Warning: dir contains a hidden spec file"
@@ -277,11 +309,14 @@
     _ -> return Nothing
 checkForSpecFile (Just pkg) = do
   let specname = pkg <.> "spec"
-  specs <- filter (`elem` [specname, "ghc-" ++ specname]) <$> 
filesWithExtension "." ".spec"
+  specs <- filter (`elem` [specname, "ghc-" ++ specname]) <$> allSpecfiles
   case specs of
     [one] -> return $ Just one
     _ -> return Nothing
 
+allSpecfiles :: IO [FilePath]
+allSpecfiles = filesWithExtension "." ".spec"
+
 checkForCabalFile :: String -> IO (Maybe FilePath)
 checkForCabalFile pkgmver = do
   let pkg = stripVersion pkgmver
@@ -340,9 +375,9 @@
               }
 
 -- Nothing implies existing packaging in cwd
--- Something implies either new packaging or could be multiple spec files in 
dir
-prepare :: Maybe String -> RpmFlags -> IO PackageData
-prepare mpkgver flags = do
+-- Something implies either new packaging or some existing spec file in dir
+prepare :: RpmFlags -> Maybe String -> IO PackageData
+prepare flags mpkgver = do
   let mpkg = stripVersion <$> mpkgver
   mspec <- checkForSpecFile mpkg
   case mspec of
@@ -354,7 +389,7 @@
       case mpkgver of
         Nothing -> do
           cwd <- getCurrentDirectory
-          prepare (Just $ takeFileName cwd) flags
+          prepare flags (Just $ takeFileName cwd)
         Just pkgmver -> do
           mcabal <- checkForCabalFile pkgmver
           case mcabal of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/Setup.hs 
new/cabal-rpm-0.11/src/Setup.hs
--- old/cabal-rpm-0.10.1/src/Setup.hs   2016-11-29 02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/src/Setup.hs     1970-01-01 01:00:00.000000000 +0100
@@ -1,159 +0,0 @@
--- |
--- Module      :  Setup
--- Copyright   :  (C) 2007-2008  Bryan O'Sullivan
---                (C) 2012-2014  Jens Petersen
---
--- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
--- Stability   :  alpha
--- Portability :  portable
---
--- Explanation: Command line option processing for building RPM
--- packages.
-
--- 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 Setup (
-      RpmFlags(..)
-    , parseArgs
-    , quiet
-    ) where
-
-import Control.Monad (unless, when)
-import Data.Char     (toLower)
-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,
-                                        silent)
-
-import System.Console.GetOpt (ArgDescr (..), ArgOrder (..), OptDescr (..),
-                              getOpt', usageInfo)
-import System.Environment    (getProgName)
-import System.Exit           (ExitCode (..), exitSuccess, exitWith)
-import System.IO             (Handle, hPutStrLn, stderr, stdout)
-
-import Distro                (Distro(..), readDistroName)
-import Paths_cabal_rpm       (version)
-import SysCmd                ((+-+))
-
-data RpmFlags = RpmFlags
-    { rpmConfigurationsFlags :: [(FlagName, Bool)]
-    , rpmForce               :: Bool
-    , rpmHelp                :: Bool
-    , rpmBinary              :: Bool
-    , rpmStrict              :: Bool
-    , rpmRelease             :: Maybe String
-    , rpmCompilerId          :: Maybe CompilerId
-    , rpmDistribution        :: Maybe Distro
-    , rpmVerbosity           :: Verbosity
-    , rpmVersion             :: Bool
-    }
-    deriving (Eq, Show)
-
-emptyRpmFlags :: RpmFlags
-emptyRpmFlags = RpmFlags
-    { rpmConfigurationsFlags = []
-    , rpmForce = False
-    , rpmHelp = False
-    , rpmBinary = False
-    , rpmStrict = False
-    , rpmRelease = Nothing
-    , rpmCompilerId = Nothing
-    , rpmDistribution = Nothing
-    , rpmVerbosity = normal
-    , rpmVersion = False
-    }
-
-quiet :: RpmFlags
-quiet = emptyRpmFlags {rpmVerbosity = silent}
-
-options :: [OptDescr (RpmFlags -> RpmFlags)]
-options =
-    [
-      Option "h?" ["help"] (NoArg (\x -> x { rpmHelp = True }))
-             "Show this help text",
-      Option "b" ["binary"] (NoArg (\x -> x { rpmBinary = True }))
-             "Force Haskell package name to be base package name",
-      Option "f" ["flags"] (ReqArg (\flags x -> x { rpmConfigurationsFlags = 
rpmConfigurationsFlags x ++ flagList flags }) "FLAGS")
-             "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 }))
-             "Show version number"
-    ]
-
--- Lifted from Distribution.Simple.Setup, since it's not exported.
-flagList :: String -> [(FlagName, Bool)]
-flagList = map tagWithValue . words
-  where tagWithValue ('-':name) = (FlagName (map toLower name), False)
-        tagWithValue name       = (FlagName (map toLower name), True)
-
-printHelp :: Handle -> IO ()
-printHelp h = do
-  progName <- getProgName
-  let info = "Usage: " ++ progName ++ " [OPTION]... COMMAND 
[PATH|PKG|PKG-VERSION]\n"
-             ++ "\n"
-             ++ "PATH can be a .spec file, .cabal file, or pkg dir.\n"
-             ++ "\n"
-             ++ "Commands:\n"
-             ++ "  spec\t\t- generate a spec file\n"
-             ++ "  srpm\t\t- generate a src rpm file\n"
-             ++ "  prep\t\t- unpack source\n"
-             ++ "  local\t\t- build rpm package locally\n"
-             ++ "  builddep\t- install dependencies\n"
-             ++ "  install\t- install packages recursively\n"
-             ++ "  depends\t- list Cabal depends\n"
-             ++ "  requires\t- list package buildrequires\n"
-             ++ "  missingdeps\t- list missing buildrequires\n"
-             ++ "  diff\t\t- diff current spec file\n"
-             ++ "  update\t- update spec file package to latest version\n"
---             ++ "  mock\t\t- mock build package\n"
-             ++ "\n"
-             ++ "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
-      opts = foldl (flip ($)) emptyRpmFlags os
-  when (rpmHelp opts) $ do
-    printHelp stdout
-    exitSuccess
-  when (rpmVersion opts) $ do
-    putStrLn $ showVersion version
-    exitSuccess
-  unless (null errs) $
-    error $ unlines errs
-  unless (null unknown) $
-    error $ "Unrecognised options:" +-+ unwords unknown
-  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) $
-    error $ "Too many arguments:" +-+ unwords args'
-  return (opts, head args', listToMaybe $ tail args')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cabal-rpm-0.10.1/src/SysCmd.hs 
new/cabal-rpm-0.11/src/SysCmd.hs
--- old/cabal-rpm-0.10.1/src/SysCmd.hs  2016-11-29 02:38:51.000000000 +0100
+++ new/cabal-rpm-0.11/src/SysCmd.hs    2017-01-27 14:18:23.000000000 +0100
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  SysCmd
--- Copyright   :  (C) 2013-2015  Jens Petersen
+-- Copyright   :  (C) 2013-2016  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <peter...@fedoraproject.org>
 -- Stability   :  alpha
@@ -21,6 +21,7 @@
   cmdIgnoreErr,
   cmdQuiet,
   cmdSilent,
+  optionalProgram,
   pkgInstall,
   repoquery,
   rpmInstall,
@@ -29,8 +30,11 @@
   sudo,
   (+-+)) where
 
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
+import Control.Applicative ((<$>))
+#endif
 import Control.Monad    (unless, void, when)
-import Data.Functor     ((<$>))
 import Data.List        ((\\))
 import Data.Maybe       (fromMaybe, isJust, isNothing)
 
@@ -48,14 +52,14 @@
 import System.Exit (ExitCode(..))
 
 findProgram :: FilePath -> IO (Maybe FilePath)
-findProgram prog =
+findProgram =
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,18,0)
-  findProgramOnSearchPath normal defaultProgramSearchPath prog
+  \ prog -> findProgramOnSearchPath normal defaultProgramSearchPath prog
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,23,0)
-  >>= return . fmap fst
+    >>= return . fmap fst
 #endif
 #else
-  findProgramLocation normal prog
+  findProgramLocation normal
 #endif
 
 requireProgram :: String -> IO ()


Reply via email to