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

Reply via email to