Hi,
the diff below will fix the build of devel/darcs with ghc-8.2.2.
It *should* still work with ghc-8.2. I would appreciate a test build
with this diff against what we currently have in the ports tree
(i.e. ghc-8.2). I only need to know wether it still builds and
packages, the test suite is AFAIK still failing on OpenBSD (at least
it was the last time i tried).
For even more fun, it may be worth to try it on i386 (remove the
NOT_FOR_ARCHS entry), because it *should* no longer require template
Haskell.
Thanks in advance.
Ciao,
Kili
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/darcs/Makefile,v
retrieving revision 1.67
diff -u -p -r1.67 Makefile
--- Makefile 20 Nov 2017 23:43:46 -0000 1.67
+++ Makefile 7 Jan 2018 20:11:38 -0000
@@ -8,11 +8,12 @@ USE_WXNEEDED = Yes
COMMENT = advanced revision control system written in Haskell
DISTNAME = darcs-2.12.5
+REVISION = 0
CATEGORIES = devel
HOMEPAGE = http://www.darcs.net/
-WANTLIB = c curl>=2 iconv m ncursesw pthread util z
+WANTLIB = c curl>=2 curses iconv m pthread util z
MODULES = lang/ghc
MODGHC_BUILD = cabal hackage nort
MODGHC_SETUP_CONF_ARGS =-f 'curl -library' --enable-tests
Index: patches/patch-Setup_lhs
===================================================================
RCS file: patches/patch-Setup_lhs
diff -N patches/patch-Setup_lhs
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-Setup_lhs 7 Jan 2018 20:11:38 -0000
@@ -0,0 +1,369 @@
+$OpenBSD$
+
+Fix configuration with newer ghc/cabal etc.
+
+From upstream commit c9fe8ac1fbffeef0be1c6e0796d798b2280a2e23, with
+the \begin{code}/\end{code} bracket left in place, so we don't have
+to rename Setup.lhs to Setup.hs.
+
+(incomplete)
+Fix Setup.lhs for the breaking new Cabal-2.0 shipped with ghc-8.2.
+
+Index: Setup.lhs
+--- Setup.lhs.orig
++++ Setup.lhs
+@@ -1,72 +1,45 @@
+ \begin{code}
+-{-# LANGUAGE TemplateHaskell #-}
+ -- copyright (c) 2008 Duncan Coutts
+ -- portions copyright (c) 2008 David Roundy
+ -- portions copyright (c) 2007-2009 Judah Jacobson
+
+-import qualified Distribution.InstalledPackageInfo as Installed
+ import Distribution.Simple
+ ( defaultMainWithHooks, UserHooks(..), simpleUserHooks )
+-import Distribution.Simple.Configure
+- ( checkForeignDeps )
+ import Distribution.ModuleName( toFilePath )
+ import Distribution.PackageDescription
+- ( PackageDescription(executables, testSuites), Executable(buildInfo,
exeName)
+- , BuildInfo(customFieldsBI), emptyBuildInfo
++ ( PackageDescription(executables, testSuites), Executable(exeName)
++ , emptyBuildInfo
+ , TestSuite(testBuildInfo)
+- , FlagName(FlagName)
+ , updatePackageDescription
+- , cppOptions, ccOptions, ldOptions
+- , library, libBuildInfo, otherModules
+- , extraLibs, extraLibDirs, includeDirs )
++ , cppOptions, ccOptions
++ , library, libBuildInfo, otherModules )
+ import Distribution.Package
+- ( packageVersion, packageName, PackageName(..), Package )
+-import Distribution.Version
+- ( Version(Version, versionBranch) )
+-import Data.Version( showVersion )
++ ( packageVersion )
++import Distribution.Version( Version )
+ import Distribution.Simple.LocalBuildInfo
+- ( LocalBuildInfo(..), absoluteInstallDirs, externalPackageDeps )
++ ( LocalBuildInfo(..), absoluteInstallDirs )
+ import Distribution.Simple.InstallDirs (mandir, CopyDest (NoCopyDest))
+-import Distribution.Simple.PackageIndex ( topologicalOrder )
+-import Distribution.Simple.Program ( gccProgram, rawSystemProgramStdoutConf )
+ import Distribution.Simple.Setup
+ (buildVerbosity, copyDest, copyVerbosity, fromFlag,
+- haddockVerbosity, installVerbosity, sDistVerbosity,
+- configVerbosity, ConfigFlags, configConfigurationsFlags)
+-import qualified Distribution.Simple.Setup as DSS -- to get replVerbosity in
Cabal > 1.18
+-import Distribution.Simple.BuildPaths
+- ( autogenModulesDir, exeExtension )
++ haddockVerbosity, installVerbosity, sDistVerbosity, replVerbosity )
++import Distribution.Simple.BuildPaths ( autogenModulesDir )
+ import Distribution.System
+ ( OS(Windows), buildOS )
+ import Distribution.Simple.Utils
+ (copyFiles, createDirectoryIfMissingVerbose, rawSystemStdout,
+- rewriteFile, withTempFile, cabalVersion)
++ rewriteFile )
+ import Distribution.Verbosity
+ ( Verbosity )
+ import Distribution.Text
+ ( display )
+-import Control.Monad ( zipWithM_, when, unless, filterM )
+-import Control.Exception ( bracket, handle, IOException )
++import Control.Monad ( unless, void )
+
+-import Language.Haskell.TH ( mkName, newName, recUpdE, varE, appE, lamE, varP
)
+-
+ import System.Directory
+- (copyFile, createDirectory, createDirectoryIfMissing,
+- doesDirectoryExist, doesFileExist,
+- getCurrentDirectory, getDirectoryContents,
+- removeDirectoryRecursive, removeFile, setCurrentDirectory,
+- getTemporaryDirectory
+- )
+-import System.Exit ( ExitCode(ExitSuccess) )
++ ( doesDirectoryExist, doesFileExist )
+ import System.IO
+- ( openFile, IOMode (..), stdout
+- , hPutStr, hFlush, hClose
+- )
++ ( openFile, IOMode(..) )
+ import System.Process (runProcess)
+-import System.IO.Error ( isDoesNotExistError )
+-import Data.List( isPrefixOf, isSuffixOf, sort )
+-import System.Process( rawSystem )
+-import System.FilePath ( (</>), (<.>), splitDirectories, isAbsolute )
++import System.FilePath ( (</>) )
+ import Foreign.Marshal.Utils ( with )
+ import Foreign.Storable ( peek )
+ import Foreign.Ptr ( castPtr )
+@@ -75,33 +48,11 @@ import Data.Word ( Word8, Word32 )
+
+ import qualified Control.Exception as Exception
+
++catchAny :: IO a -> (Exception.SomeException -> IO a) -> IO a
+ catchAny f h = Exception.catch f (\e -> h (e :: Exception.SomeException))
+
+-{- Template Haskell hackery for replHook while we want to support Cabal <
1.18 -}
+-replVerbosity =
+- $(if cabalVersion >= Version [1,18,0] []
+- then varE (mkName "DSS.replVerbosity")
+- else [| error "This shouldn't be called" |]
+- )
+-
+-replHookBody replHookSel =
+- \pkg lbi hooks flags args ->
+- let verb = fromFlag $ replVerbosity flags
+- in commonBuildHook replHookSel pkg lbi hooks verb >>= (\f -> f flags args)
+-
+-addReplHook =
+- $(if cabalVersion >= Version [1,18,0] []
+- then
+- do hooks <- newName "hooks"
+- let replHook = mkName "replHook"
+- app <- appE (varE (mkName "replHookBody")) (varE replHook)
+- lamE [varP hooks] (recUpdE (varE hooks) [return (replHook,
app)])
+- else [| \hooks -> hooks |]
+- )
+-{- End of Template Haskell hackery -}
+-
+ main :: IO ()
+-main = defaultMainWithHooks $ addReplHook $ simpleUserHooks {
++main = defaultMainWithHooks $ simpleUserHooks {
+
+ buildHook = \ pkg lbi hooks flags ->
+ let verb = fromFlag $ buildVerbosity flags
+@@ -110,12 +61,9 @@ main = defaultMainWithHooks $ addReplHook $ simpleUser
+ haddockHook = \ pkg lbi hooks flags ->
+ let verb = fromFlag $ haddockVerbosity flags
+ in commonBuildHook haddockHook pkg lbi hooks verb >>= ($
flags) ,
+-{-
+- -- this is the actual replHook code we want
+ replHook = \pkg lbi hooks flags args ->
+ let verb = fromFlag $ replVerbosity flags
+ in commonBuildHook replHook pkg lbi hooks verb >>= (\f -> f
flags args) ,
+--}
+ postBuild = \ _ _ _ lbi -> buildManpage lbi,
+ postCopy = \ _ flags pkg lbi ->
+ installManpage pkg lbi (fromFlag $ copyVerbosity flags)
(fromFlag $ copyDest flags),
+@@ -126,7 +74,7 @@ main = defaultMainWithHooks $ addReplHook $ simpleUser
+ let pkgVer = packageVersion pkg
+ verb = fromFlag $ sDistVerbosity flags
+ x <- versionPatches verb pkgVer
+- y <- context verb pkgVer
++ y <- context verb
+ rewriteFile "release/distributed-version" $ show x
+ rewriteFile "release/distributed-context" $ show y
+ putStrLn "about to hand over"
+@@ -137,23 +85,6 @@ main = defaultMainWithHooks $ addReplHook $ simpleUser
+
+ sDistHook simpleUserHooks pkg' lbi hooks flags
+ ,
+- confHook =
+- if buildOS == Windows
+- then confHook simpleUserHooks
+- else
+- \genericDescript flags -> do
+- lbi <- confHook simpleUserHooks genericDescript flags
+- let pkgDescr = localPkgDescr lbi
+- let verb = fromFlag (configVerbosity flags)
+- checkForeignDeps pkgDescr lbi verb
+- let lib = maybe (error "darcs library was not configured - did it
end up unbuildable?") id
+- (library pkgDescr)
+- let bi = libBuildInfo lib
+- bi' <- maybeSetLibiconv flags bi lbi
+- return lbi {localPkgDescr = pkgDescr {
+- library = Just lib {
+- libBuildInfo = bi'}}}
+- ,
+ postConf = \_ _ _ _ -> return () --- Usually this checked for external C
+ --- dependencies, but we already have performed such
+ --- check in the confHook
+@@ -167,7 +98,7 @@ commonBuildHook runHook pkg lbi hooks verbosity = do
+ (version, state) <- determineVersion verbosity pkg
+
+ -- Create our own context file.
+- generateVersionModule verbosity pkg lbi version state
++ generateVersionModule verbosity lbi version state
+
+ -- Add custom -DFOO[=BAR] flags to the cpp (for .hs) and cc (for .c)
+ -- invocations, doing a dance to make the base hook aware of them.
+@@ -184,16 +115,14 @@ commonBuildHook runHook pkg lbi hooks verbosity = do
+
+ -- updatePackageDescription doesn't handle test suites so we
+ -- need to do this manually
+- updateTestSuiteBI bi testSuite
+- = testSuite { testBuildInfo = bi `mappend` testBuildInfo testSuite }
++ updateTestSuiteBI bi' testSuite
++ = testSuite { testBuildInfo = bi' `mappend` testBuildInfo testSuite
}
+ pkg'' = pkg' { testSuites = map (updateTestSuiteBI bi) (testSuites
pkg') }
+
+ lbi' = lbi { localPkgDescr = pkg'' }
+ return $ runHook simpleUserHooks pkg'' lbi' hooks
+
+ where
+- customFields = map fst . customFieldsBI . buildInfo $ darcsExe
+- darcsExe = head [e | e <- executables pkg, exeName e == "darcs"]
+ show' :: String -> String -- Petr was worried that we might
+ show' = show -- allow non-String arguments.
+ testEndianness :: IO Bool
+@@ -209,9 +138,8 @@ buildManpage lbi = do
+ let darcs = buildDir lbi </> "darcs/darcs"
+ manpage = buildDir lbi </> "darcs/darcs.1"
+ manpageHandle <- openFile manpage WriteMode
+- runProcess darcs ["help","manpage"]
++ void $ runProcess darcs ["help","manpage"]
+ Nothing Nothing Nothing (Just manpageHandle) Nothing
+- return ()
+
+ installManpage :: PackageDescription -> LocalBuildInfo
+ -> Verbosity -> CopyDest -> IO ()
+@@ -228,29 +156,21 @@ determineVersion :: Verbosity -> PackageDescription ->
+ determineVersion verbosity pkg = do
+ let darcsVersion = packageVersion pkg
+ numPatches <- versionPatches verbosity darcsVersion
+- return (display darcsVersion, versionStateString numPatches darcsVersion)
++ return (display darcsVersion, versionStateString numPatches)
+
+ where
+- versionStateString :: Maybe Int -> Version -> String
+- versionStateString Nothing _ = "unknown"
+- versionStateString (Just 0) v = case versionBranch v of
+- x | 97 `elem` x -> "alpha " ++ show (after 97 x)
+- | 98 `elem` x -> "beta " ++ show (after 98 x)
+- | 99 `elem` x ->
+- "release candidate " ++ show (after 99 x)
+- _ -> "release"
+- versionStateString (Just 1) _ = "+ 1 patch"
+- versionStateString (Just n) _ = "+ " ++ show n ++ " patches"
+- after w (x:r) | w == x = head r
+- | otherwise = after w r
+- after _ [] = undefined
++ versionStateString :: Maybe Int -> String
++ versionStateString Nothing = "unknown"
++ versionStateString (Just 0) = "release"
++ versionStateString (Just 1) = "+ 1 patch"
++ versionStateString (Just n) = "+ " ++ show n ++ " patches"
+
+ versionPatches :: Verbosity -> Version -> IO (Maybe Int)
+ versionPatches verbosity darcsVersion = do
+ numPatchesDarcs <- do
+ out <- rawSystemStdout verbosity "darcs"
+ ["log", "-a", "--from-tag", display darcsVersion, "--count"]
+- case reads (out) of
++ case reads out of
+ ((n,_):_) -> return $ Just ((n :: Int) - 1)
+ _ -> return Nothing
+ `catchAny` \_ -> return Nothing
+@@ -264,26 +184,23 @@ versionPatches verbosity darcsVersion = do
+ where
+ versionFile = "release/distributed-version"
+
+-generateVersionModule :: Verbosity -> PackageDescription -> LocalBuildInfo
++generateVersionModule :: Verbosity -> LocalBuildInfo
+ -> String -> String -> IO ()
+-generateVersionModule verbosity pkg lbi version state = do
++generateVersionModule verbosity lbi version state = do
+ let dir = autogenModulesDir lbi
+ createDirectoryIfMissingVerbose verbosity True dir
+- ctx <- context verbosity (packageVersion pkg)
++ ctx <- context verbosity
+ rewriteFile (dir </> "Version.hs") $ unlines
+ ["module Version where"
+- ,"builddeps, version, context :: String"
++ ,"version, context :: String"
+ ,"version = \"" ++ version ++ " (" ++ state ++ ")\""
+- ,"builddeps = " ++ show ( formatdeps (externalPackageDeps lbi))
+ ,"context = " ++ case ctx of
+ Just x -> show x
+ Nothing -> show "context not available"
+ ]
+- where formatdeps = unlines . map (formatone . snd)
+- formatone p = case packageName p of PackageName n -> n ++ "-" ++
showVersion (packageVersion p)
+
+-context :: Verbosity -> Version -> IO (Maybe String)
+-context verbosity version = do
++context :: Verbosity -> IO (Maybe String)
++context verbosity = do
+ contextDarcs <- do
+ inrepo <- doesDirectoryExist "_darcs"
+ unless inrepo $ fail "Not a repository."
+@@ -307,76 +224,5 @@ parseFile f = do
+ ((s,_):_) -> return s
+ _ -> return Nothing
+ else return Nothing
+-
+--- Test whether compiling a c program that links against libiconv needs
-liconv.
+-maybeSetLibiconv :: ConfigFlags -> BuildInfo -> LocalBuildInfo -> IO BuildInfo
+-maybeSetLibiconv flags bi lbi = do
+- let biWithIconv = addIconv bi
+- let verb = fromFlag (configVerbosity flags)
+- if hasFlagSet flags (FlagName "libiconv")
+- then do
+- putStrLn "Using -liconv."
+- return biWithIconv
+- else do
+- putStr "checking whether to use -liconv... "
+- hFlush stdout
+- worksWithout <- tryCompile iconv_prog bi lbi verb
+- if worksWithout
+- then do
+- putStrLn "not needed."
+- return bi
+- else do
+- worksWith <- tryCompile iconv_prog biWithIconv lbi verb
+- if worksWith
+- then do
+- putStrLn "using -liconv."
+- return biWithIconv
+- else error "Unable to link against the iconv library."
+-
+-hasFlagSet :: ConfigFlags -> FlagName -> Bool
+-hasFlagSet cflags flag = Just True == lookup flag (configConfigurationsFlags
cflags)
+-
+-tryCompile :: String -> BuildInfo -> LocalBuildInfo -> Verbosity -> IO Bool
+-tryCompile program bi lbi verb = handle processExit $ handle processException
$ do
+- tempDir <- getTemporaryDirectory
+- withTempFile tempDir ".c" $ \fname cH ->
+- withTempFile tempDir "" $ \execName oH -> do
+- hPutStr cH program
+- hClose cH
+- hClose oH
+- -- TODO take verbosity from the args.
+- rawSystemProgramStdoutConf verb gccProgram (withPrograms lbi)
+- (fname : "-o" : execName : args)
+- return True
+- where
+- processException :: IOException -> IO Bool
+- processException e = return False
+- processExit = return . (==ExitSuccess)
+- -- Mimicing Distribution.Simple.Configure
+- deps = topologicalOrder (installedPkgs lbi)
+- args = concat
+- [ ccOptions bi
+- , cppOptions bi
+- , ldOptions bi
+- -- --extra-include-dirs and --extra-lib-dirs are included
+- -- in the below fields.
+- -- Also sometimes a dependency like rts points to a
nonstandard
+- -- include/lib directory where iconv can be found.
+- , map ("-I" ++) (includeDirs bi ++ concatMap
Installed.includeDirs deps)
+- , map ("-L" ++) (extraLibDirs bi ++ concatMap
Installed.libraryDirs deps)
+- , map ("-l" ++) (extraLibs bi)
+- ]
+-
+-addIconv :: BuildInfo -> BuildInfo
+-addIconv bi = bi {extraLibs = "iconv" : extraLibs bi}
+-
+-iconv_prog :: String
+-iconv_prog = unlines
+- [ "#include <iconv.h>"
+- , "int main(void) {"
+- , " iconv_t t = iconv_open(\"UTF-8\", \"UTF-8\");"
+- , " return 0;"
+- , "}"
+- ]
+
+ \end{code}
Index: patches/patch-darcs_cabal
===================================================================
RCS file: patches/patch-darcs_cabal
diff -N patches/patch-darcs_cabal
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-darcs_cabal 7 Jan 2018 20:11:38 -0000
@@ -0,0 +1,49 @@
+$OpenBSD$
+
+Let it build with newer versions of libraries shipped with ghc-8.2.
+
+Index: darcs.cabal
+--- darcs.cabal.orig
++++ darcs.cabal
+@@ -388,7 +388,7 @@ Library
+ c-sources: src/h_iconv.c
+ build-depends: unix >= 2.6.0.1 && < 2.8
+
+- build-depends: base >= 4.8 && < 4.10,
++ build-depends: base >= 4.8 && < 4.12,
+ binary >= 0.5 && < 0.9,
+ containers >= 0.5 && < 0.6,
+ regex-compat-tdfa >= 0.95.1 && < 0.96,
+@@ -417,12 +417,12 @@ Library
+ unix-compat >= 0.1.2 && < 0.5,
+ bytestring >= 0.10.0.2 && < 0.11,
+ old-time >= 1.1 && < 1.2,
+- time >= 1.5 && < 1.8,
++ time >= 1.5 && < 1.9,
+ -- release notes of GHC 7.10.2 recommends to use text >= 1.2.1.3:
+ -- https://mail.haskell.org/pipermail/haskell/2015-July/024641.html
+ text >= 1.2.1.3 && < 1.3,
+ directory >= 1.2.0.1 && < 1.4.0.0,
+- process >= 1.1.0.2 && < 1.5.0.0,
++ process >= 1.1.0.2 && < 1.7.0.0,
+ array >= 0.4.0.1 && < 0.6,
+ random >= 1.0.1.1 && < 1.2,
+ hashable >= 1.1.2.5 && < 1.3,
+@@ -529,7 +529,7 @@ Executable darcs
+ cc-options: -D_REENTRANT
+
+ build-depends: darcs,
+- base >= 4.8 && < 4.10
++ base >= 4.8 && < 4.12
+
+ -- if true to work around cabal bug with flag ordering
+ if true
+@@ -562,7 +562,7 @@ test-suite darcs-test
+ build-depends: Win32 >= 2.2 && < 2.4
+
+ build-depends: darcs,
+- base >= 4.8 && < 4.10,
++ base >= 4.8 && < 4.12,
+ array >= 0.4.0.1 && < 0.6,
+ bytestring >= 0.10.0.2 && < 0.11,
+ cmdargs >= 0.10 && < 0.11,
Index: patches/patch-darcs_darcs_hs
===================================================================
RCS file: patches/patch-darcs_darcs_hs
diff -N patches/patch-darcs_darcs_hs
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-darcs_darcs_hs 7 Jan 2018 20:11:38 -0000
@@ -0,0 +1,25 @@
+$OpenBSD$
+
+Let it build with newer versions of cabal.
+
+From upstream commit 5f23ab60917a36be31d2edc7c0e0c38f3fe15de7.
+
+Index: darcs/darcs.hs
+--- darcs/darcs.hs.orig
++++ darcs/darcs.hs
+@@ -45,7 +45,7 @@ import Darcs.Util.ByteString ( decodeString )
+ import Darcs.UI.External ( setDarcsEncodings )
+ import Darcs.Util.Exec ( ExecException(..) )
+ import Darcs.Util.Path ( getCurrentDirectory )
+-import Version ( version, context, builddeps )
++import Version ( version, context )
+
+ #include "impossible.h"
+
+@@ -84,6 +84,4 @@ main = withAtexit . withSignalsHandled . handleExecFai
+ printExactVersion = do
+ putStrLn $ "darcs compiled on " ++ __DATE__ ++ ", at " ++ __TIME__
+ putStrLn context
+- putStrLn "Compiled with:\n"
+- putStr builddeps
+