Package: ghc Version: 9.4.7-1 Severity: important Tags: patch Hello,
Since version 9.4.7 and the switch to using Hadrian, ghc fails to build on hurd-i386. This is because of a confusion between "gnu" and "hurd". The attached patches fix the confusion. Some of them have just been commited upstream, others are already fixed in newer upstream versions. I will submit the hadrian patches to the haskell-hadrian package too. (they are needed in ghc to be able to build with the pkg.ghc.nohadrian profile until they get applied to the haskell-hadrian package) Samuel -- System Information: Debian Release: trixie/sid APT prefers testing APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'stable-security'), (500, 'stable-debug'), (500, 'oldstable-proposed-updates-debug'), (500, 'oldstable-proposed-updates'), (500, 'oldoldstable-proposed-updates'), (500, 'oldoldstable'), (500, 'buildd-unstable'), (500, 'unstable'), (500, 'stable'), (500, 'oldstable'), (1, 'experimental-debug'), (1, 'buildd-experimental'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386, arm64 Kernel: Linux 6.5.0-1-amd64 (SMP w/8 CPU threads; PREEMPT) Kernel taint flags: TAINT_WARN, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages ghc depends on: ii dpkg 1.22.1 ii gcc 4:13.2.0-1 ii libbsd-dev 0.11.7-4 ii libc6 2.37-12 ii libc6-dev 2.37-12 ii libffi-dev 3.4.4-1 ii libffi8 3.4.4-1 ii libgmp-dev 2:6.3.0+dfsg-2 ii libgmp10 2:6.3.0+dfsg-2 ii libncurses-dev 6.4+20231016-1 ii libtinfo6 6.4+20231016-1 ghc recommends no packages. Versions of packages ghc suggests: pn ghc-doc <none> pn ghc-prof <none> pn haskell-doc <none> ii llvm-13 1:13.0.1-13 ii perl 5.36.0-9 -- no debconf information -- Samuel --- Pour une évaluation indépendante, transparente et rigoureuse ! Je soutiens la Commission d'Évaluation de l'Inria.
https://github.com/haskell/cabal/pull/9434 Index: ghc-9.4.7/libraries/Cabal/Cabal/src/Distribution/Simple/GHC/Internal.hs =================================================================== --- ghc-9.4.7.orig/libraries/Cabal/Cabal/src/Distribution/Simple/GHC/Internal.hs +++ ghc-9.4.7/libraries/Cabal/Cabal/src/Distribution/Simple/GHC/Internal.hs @@ -609,6 +609,7 @@ ghcOsString :: OS -> String ghcOsString Windows = "mingw32" ghcOsString OSX = "darwin" ghcOsString Solaris = "solaris2" +ghcOsString Hurd = "gnu" ghcOsString other = prettyShow other -- | GHC's rendering of its platform and compiler version string as used in
https://github.com/haskell/cabal/pull/9441 Index: ghc-9.4.7/libraries/Cabal/Cabal/src/Distribution/Simple/GHC.hs =================================================================== --- ghc-9.4.7.orig/libraries/Cabal/Cabal/src/Distribution/Simple/GHC.hs +++ ghc-9.4.7/libraries/Cabal/Cabal/src/Distribution/Simple/GHC.hs @@ -1792,7 +1792,7 @@ getRPaths lbi clbi | supportRPaths hostO supportRPaths Android = False supportRPaths Ghcjs = False supportRPaths Wasi = False - supportRPaths Hurd = False + supportRPaths Hurd = True supportRPaths (OtherOS _) = False -- Do _not_ add a default case so that we get a warning here when a new OS -- is added. Index: ghc-9.4.7/libraries/Cabal/Cabal/src/Distribution/Simple/GHCJS.hs =================================================================== --- ghc-9.4.7.orig/libraries/Cabal/Cabal/src/Distribution/Simple/GHCJS.hs +++ ghc-9.4.7/libraries/Cabal/Cabal/src/Distribution/Simple/GHCJS.hs @@ -1537,7 +1537,7 @@ getRPaths lbi clbi | supportRPaths hostO supportRPaths Android = False supportRPaths Ghcjs = False supportRPaths Wasi = False - supportRPaths Hurd = False + supportRPaths Hurd = True supportRPaths (OtherOS _) = False -- Do _not_ add a default case so that we get a warning here when a new OS -- is added.
Also applies in 9.6.x Can be dropped with 9.8.1 Index: ghc-9.4.7/libraries/ghc-boot/GHC/BaseDir.hs =================================================================== --- ghc-9.4.7.orig/libraries/ghc-boot/GHC/BaseDir.hs +++ ghc-9.4.7/libraries/ghc-boot/GHC/BaseDir.hs @@ -23,7 +23,7 @@ import System.FilePath #if defined(mingw32_HOST_OS) import System.Environment (getExecutablePath) -- POSIX -#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS) || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS) +#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS) || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS) || defined(hurd_HOST_OS) import System.Environment (getExecutablePath) #endif @@ -52,7 +52,7 @@ getBaseDir = Just . (\p -> p </> "lib") -- that is running this function. rootDir :: FilePath -> FilePath rootDir = takeDirectory . takeDirectory . normalise -#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS) || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS) +#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) || defined(freebsd_HOST_OS) || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS) || defined(hurd_HOST_OS) -- on unix, this is a bit more confusing. -- The layout right now is something like --
Can be dropped with 9.6.1 Index: ghc-9.4.7/mk/config.mk.in =================================================================== --- ghc-9.4.7.orig/mk/config.mk.in +++ ghc-9.4.7/mk/config.mk.in @@ -105,7 +105,7 @@ else WITH_TERMINFO=YES endif -ifeq "$(findstring $(TargetOS_CPP),linux freebsd dragonfly openbsd netbsd solaris2 kfreebsdgnu haiku linux-android)" "" +ifeq "$(findstring $(TargetOS_CPP),linux freebsd dragonfly openbsd netbsd solaris2 kfreebsdgnu gnu haiku linux-android)" "" TargetElf = NO else TargetElf = YES
https://gitlab.haskell.org/ghc/ghc/-/merge_requests/11624 To be applied to haskell-hadrian too Index: ghc-9.4.7/hadrian/src/Hadrian/Haskell/Cabal.hs =================================================================== --- ghc-9.4.7.orig/hadrian/src/Hadrian/Haskell/Cabal.hs +++ ghc-9.4.7/hadrian/src/Hadrian/Haskell/Cabal.hs @@ -71,4 +71,5 @@ cabalOsString :: String -> String cabalOsString "mingw32" = "windows" cabalOsString "darwin" = "osx" cabalOsString "solaris2" = "solaris" +cabalOsString "gnu" = "hurd" cabalOsString other = other
Also applies in 9.6.x Can be dropped with 9.8.1 To be applied to haskell-hadrian too Index: ghc-9.4.7/hadrian/src/Oracles/Setting.hs =================================================================== --- ghc-9.4.7.orig/hadrian/src/Oracles/Setting.hs +++ ghc-9.4.7/hadrian/src/Oracles/Setting.hs @@ -273,7 +273,7 @@ anyHostOs = matchSetting HostOs isElfTarget :: Action Bool isElfTarget = anyTargetOs [ "linux", "freebsd", "dragonfly", "openbsd", "netbsd", "solaris2", "kfreebsdgnu" - , "haiku", "linux-android" + , "gnu", "haiku", "linux-android" ] -- | Check whether the host OS supports the @-rpath@ linker option when @@ -282,7 +282,7 @@ isElfTarget = anyTargetOs -- TODO: Windows supports lazy binding (but GHC doesn't currently support -- dynamic way on Windows anyways). hostSupportsRPaths :: Action Bool -hostSupportsRPaths = anyHostOs ["linux", "darwin", "freebsd"] +hostSupportsRPaths = anyHostOs ["linux", "darwin", "freebsd", "gnu"] -- | Check whether the target supports GHCi. ghcWithInterpreter :: Action Bool