diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+* 0.12.2 (2018-03-29)
+- diff now supports CBLRPM_DIFF envvar to override "diff -u"
+- try to build even when missing rpms deps not available
+- package now builds with Cabal-2.2
+
 * 0.12.1 (2018-02-20)
 - new option --missing: comments out missing dependencies
 - put license files in lib subpackage
diff --git a/cabal-rpm.cabal b/cabal-rpm.cabal
--- a/cabal-rpm.cabal
+++ b/cabal-rpm.cabal
@@ -1,5 +1,5 @@
 Name:                cabal-rpm
-Version:             0.12.1
+Version:             0.12.2
 Synopsis:            RPM packaging tool for Haskell Cabal-based packages
 Description:
     This package provides a RPM packaging tool for Haskell Cabal-based packages.
@@ -24,7 +24,8 @@
 Extra-source-files:  README.md ChangeLog man/cabal-rpm.1.md man/cabal-rpm.1
 Cabal-version:       >=1.6
 Tested-with:         GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4,
-                     GHC == 7.10.3, GHC == 8.0.2
+                     GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2,
+                     GHC == 8.4.1
 
 source-repository head
   type:     git
diff --git a/man/cabal-rpm.1 b/man/cabal-rpm.1
--- a/man/cabal-rpm.1
+++ b/man/cabal-rpm.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pandoc 1.19.2.4
+.\" Automatically generated by Pandoc 2.1.1
 .\"
 .TH "CABAL\-RPM" "1" "2013\-01\-21" "" ""
 .hy
@@ -30,9 +30,8 @@
 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 cabal\-rpm will try to unpack the package and use its .cabal
-file.
+Otherwise if there is no `/' in the argument and it does not exist then
+cabal\-rpm will try to unpack the package and use its .cabal file.
 cabal\-rpm uses a temporary directory for unpackaging tarballs or
 packages.
 cabal\-rpm then parses the .cabal file and uses it to generate a .spec
@@ -41,32 +40,32 @@
 If a .spec already exists, cabal\-rpm outputs to .spec.cblrpm instead.
 .SH OPTIONS
 .TP
-.B \-h, \-\-help
+.B \-h, \[en]help
 Show the help text.
 .RS
 .RE
 .TP
-.B \-b, \-\-binary
+.B \-b, \[en]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[]
+.B \-f \f[I]FLAGS\f[], \[en]flags=\f[I]FLAGS\f[]
 Override one or more Cabal build configuration flags.
 .RS
 .RE
 .TP
-.B \-\-release=\f[I]RELEASE\f[]
+.B \[en]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[]
+.B \-v \f[I]N\f[], \[en]verbose=\f[I]N\f[]
 Set verbosity to \f[I]N\f[].
 .RS
 .RE
 .TP
-.B \-\-version=\f[I]VERSION\f[]
+.B \[en]version=\f[I]VERSION\f[]
 Override the version number in the .spec file.
 .RS
 .RE
@@ -108,8 +107,8 @@
 .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.
+Cabal\-rpm was originally written by Bryan O'Sullivan in 2007\-2008 and
+resurrected by Jens Petersen in 2012 to replace cabal2spec.
 .SH SEE ALSO
 .PP
 <http://github.com/juhp/cabal-rpm/>
diff --git a/src/Commands/Diff.hs b/src/Commands/Diff.hs
--- a/src/Commands/Diff.hs
+++ b/src/Commands/Diff.hs
@@ -27,6 +27,7 @@
 import Distribution.Simple.Utils (die)
 
 import System.Directory (removeDirectoryRecursive)
+import System.Posix.Env (getEnvDefault)
 
 diff :: PackageData -> RpmFlags -> Maybe String -> IO ()
 diff pkgdata flags mpkg =
@@ -37,5 +38,6 @@
       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" ++ "%"
+      diffcmd <- getEnvDefault "CBLRPM_DIFF" "diff -u"
+      shell $ diffcmd +-+ spec +-+ speccblrpm +-+ "| sed -e s%" ++ speccblrpm ++ "%" ++ spec ++ ".cblrpm" ++ "%"
       removeDirectoryRecursive tmpdir
diff --git a/src/Commands/RpmBuild.hs b/src/Commands/RpmBuild.hs
--- a/src/Commands/RpmBuild.hs
+++ b/src/Commands/RpmBuild.hs
@@ -58,7 +58,7 @@
   let pkg = package pkgDesc
       name = packageName pkg
   when (stage `elem` [Binary,BuildDep]) $
-    pkgInstallMissing pkgdata (stage == Binary)
+    pkgInstallMissing pkgdata False
 
   unless (stage == BuildDep) $ do
     srcdir <- cmd "rpm" ["--eval", "%{_sourcedir}"]
diff --git a/src/Commands/Spec.hs b/src/Commands/Spec.hs
--- a/src/Commands/Spec.hs
+++ b/src/Commands/Spec.hs
@@ -42,11 +42,18 @@
 import Data.Time.Format (formatTime)
 import qualified Data.Version (showVersion)
 
-import Distribution.License  (License (..))
+import Distribution.License  (License (..)
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)
+                             , licenseFromSPDX
+#endif
+                             )
 
 import Distribution.PackageDescription (BuildInfo (..), PackageDescription (..),
                                         Executable (..),
                                         Library (..), exeName, hasExes, hasLibs,
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)
+                                        license,
+#endif
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0)
                                         unFlagName
 #else
@@ -229,7 +236,11 @@
                             else "System Environment/Libraries")
     _ -> return ()
   putNewline
-  putHdr "License" $ (showLicense distro . license) pkgDesc
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)
+#else
+  let licenseFromSPDX = id
+#endif
+  putHdr "License" $ (showLicense distro . licenseFromSPDX . license) pkgDesc
   putHdr "Url" $ "https://hackage.haskell.org/package" </> pkg_name
   putHdr "Source0" $ sourceUrl pkgver
   mapM_ (\ (n,p) -> putHdr ("Source" ++ n) (sourceUrl p)) $ number subpkgs
@@ -347,9 +358,9 @@
   when selfdep $
     put $ "%ghc_fix_rpath" +-+ pkgver
 
-  let datafiles = dataFiles pkgDesc
-      dupdocs = docs `intersect` datafiles
-      datafiles' = datafiles \\ dupdocs
+  let ds = dataFiles pkgDesc
+      dupdocs = docs `intersect` ds
+      datafiles = ds \\ dupdocs
   unless (null dupdocs) $ do
     putNewline
     putStrLn $ "Warning: doc files found in datadir:" +-+ unwords dupdocs
@@ -394,7 +405,7 @@
     unless (null docs) $
       put $ "%doc" +-+ unwords docs
     mapM_ ((\ p -> put $ "%{_bindir}" </> (if p == name then "%{name}" else p)) . unUnqualComponentName) execs
-    when (notNull datafiles' && not selfdep) $
+    when (notNull datafiles && not selfdep) $
       put $ "%{_datadir}" </> pkgver
 
     sectionNewline
@@ -408,7 +419,7 @@
       mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
       when (distro == SUSE && not binlib) $
         mapM_ ((\ p -> put $ "%{_bindir}" </> (if p == name then "%{pkg_name}" else p)) . unUnqualComponentName) execs
-      when (notNull datafiles' && (selfdep  || not binlib)) $
+      when (notNull datafiles && (selfdep  || not binlib)) $
         put $ "%{_datadir}" </> pkgver
       sectionNewline
     put $ "%files" +-+ ghcPkgDevel +-+  develFiles
diff --git a/src/PackageUtils.hs b/src/PackageUtils.hs
--- a/src/PackageUtils.hs
+++ b/src/PackageUtils.hs
@@ -63,9 +63,17 @@
 #endif
                                        )
 import Distribution.PackageDescription (PackageDescription (..),
-                                        hasExes, hasLibs)
+                                        hasExes, hasLibs
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)
+                                       , mkFlagAssignment
+#endif
+                                       )
 import Distribution.PackageDescription.Configuration (finalizePackageDescription)
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)
+import Distribution.PackageDescription.Parsec (readGenericPackageDescription)
+#else
 import Distribution.PackageDescription.Parse (readPackageDescription)
+#endif
 
 import Distribution.Simple.Compiler (
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)
@@ -121,7 +129,11 @@
                          -> IO (PackageDescription, [FilePath], [FilePath])
 simplePackageDescription cabalfile opts = do
   let verbose = rpmVerbosity opts
-  genPkgDesc <- readPackageDescription verbose cabalfile
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)
+#else
+  let readGenericPackageDescription = readPackageDescription
+#endif
+  genPkgDesc <- readGenericPackageDescription verbose cabalfile
   compiler <- case rpmCompilerId opts of
                 Just cid -> return
 #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(1,22,0)
@@ -141,7 +153,11 @@
 #else
                               return (compilerId compiler)
 #endif
-  case finalizePackageDescription (rpmConfigurationsFlags opts)
+#if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,2,0)
+#else
+  let mkFlagAssignment = id
+#endif
+  case finalizePackageDescription (mkFlagAssignment $ rpmConfigurationsFlags opts)
        (const True) (Platform buildArch buildOS)
        compiler
        [] genPkgDesc of
diff --git a/src/Stackage.hs b/src/Stackage.hs
--- a/src/Stackage.hs
+++ b/src/Stackage.hs
@@ -32,6 +32,10 @@
 import System.FilePath
 import SysCmd ((+-+))
 #else
+#if (defined(MIN_VERSION_base) && MIN_VERSION_base(4,8,2))
+#else
+import Control.Applicative ((<$>))
+#endif
 import SysCmd ((+-+), cmdMaybe, optionalProgram)
 #endif
 
