mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-18 09:40:05 +02:00
Atempt to enable the recipe, but the previous version of ghc (2.2) crashes during the build for me. Let's see if the buildbot does better.
312 lines
14 KiB
Plaintext
312 lines
14 KiB
Plaintext
From 42a9f63ce53434e9e3cab7a34f51c76500b394e3 Mon Sep 17 00:00:00 2001
|
||
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
||
Date: Tue, 29 Dec 2020 20:55:22 +0100
|
||
Subject: Import patch from ghc 8.2.
|
||
|
||
|
||
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
|
||
index 92e3455..d735a14 100644
|
||
--- a/compiler/main/DriverPipeline.hs
|
||
+++ b/compiler/main/DriverPipeline.hs
|
||
@@ -2163,6 +2163,9 @@ joinObjectFiles dflags o_files output_fn = do
|
||
then [SysTools.Option "-no-pie"]
|
||
else [])
|
||
|
||
+ ++ (if osInfo == OSHaiku
|
||
+ then [SysTools.Option "-r"]
|
||
+ else [])
|
||
++ (if any (cc ==) [Clang, AppleClang, AppleClang51]
|
||
then []
|
||
else [SysTools.Option "-nodefaultlibs"])
|
||
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
|
||
index 5391326..3ba7947 100644
|
||
--- a/compiler/main/DynFlags.hs
|
||
+++ b/compiler/main/DynFlags.hs
|
||
@@ -4325,6 +4325,7 @@ default_PIC :: Platform -> [GeneralFlag]
|
||
default_PIC platform =
|
||
case (platformOS platform, platformArch platform) of
|
||
(OSDarwin, ArchX86_64) -> [Opt_PIC]
|
||
+ (OSHaiku, _) -> [Opt_PIC]
|
||
(OSOpenBSD, ArchX86_64) -> [Opt_PIC] -- Due to PIE support in
|
||
-- OpenBSD since 5.3 release
|
||
-- (1 May 2013) we need to
|
||
diff --git a/configure.ac b/configure.ac
|
||
index bbdf747..28068d5 100644
|
||
--- a/configure.ac
|
||
+++ b/configure.ac
|
||
@@ -678,11 +678,11 @@ dnl --------------------------------------------------------------
|
||
dnl ** Copy the files from the "fs" utility into the right folders.
|
||
dnl --------------------------------------------------------------
|
||
AC_MSG_NOTICE([Creating links for in-tree file handling routines.])
|
||
-ln -f -v utils/fs/fs.* utils/lndir/
|
||
-ln -f -v utils/fs/fs.* utils/unlit/
|
||
-ln -f -v utils/fs/fs.* rts/
|
||
-ln -f -v utils/fs/fs.h libraries/base/include/
|
||
-ln -f -v utils/fs/fs.c libraries/base/cbits/
|
||
+cp utils/fs/fs.* utils/lndir/
|
||
+cp utils/fs/fs.* utils/unlit/
|
||
+cp utils/fs/fs.* rts/
|
||
+cp utils/fs/fs.h libraries/base/include/
|
||
+cp utils/fs/fs.c libraries/base/cbits/
|
||
AC_MSG_NOTICE([Routines in place. Packages can now be build normally.])
|
||
|
||
dnl --------------------------------------------------------------
|
||
@@ -1217,7 +1217,7 @@ dnl ** Use MMAP in the runtime linker?
|
||
dnl --------------------------------------------------------------
|
||
|
||
case ${TargetOS} in
|
||
- linux|linux-android|freebsd|dragonfly|netbsd|openbsd|kfreebsdgnu|gnu|solaris2)
|
||
+ linux|linux-android|freebsd|dragonfly|netbsd|openbsd|kfreebsdgnu|gnu|solaris2|haiku)
|
||
RtsLinkerUseMmap=1
|
||
;;
|
||
darwin|ios|watchos|tvos)
|
||
diff --git a/libraries/Cabal/Cabal/Distribution/Simple/InstallDirs.hs b/libraries/Cabal/Cabal/Distribution/Simple/InstallDirs.hs
|
||
index e63ea73..3ec304b 100644
|
||
--- a/libraries/Cabal/Cabal/Distribution/Simple/InstallDirs.hs
|
||
+++ b/libraries/Cabal/Cabal/Distribution/Simple/InstallDirs.hs
|
||
@@ -190,6 +190,7 @@ defaultInstallDirs' False comp userInstall _hasLibs = do
|
||
else case buildOS of
|
||
Windows -> do windowsProgramFilesDir <- getWindowsProgramFilesDir
|
||
return (windowsProgramFilesDir </> "Haskell")
|
||
+ Haiku -> return "/boot/system/non-packaged"
|
||
_ -> return "/usr/local"
|
||
installLibDir <-
|
||
case buildOS of
|
||
@@ -209,17 +210,22 @@ defaultInstallDirs' False comp userInstall _hasLibs = do
|
||
flibdir = "$libdir",
|
||
libexecdir = case buildOS of
|
||
Windows -> "$prefix" </> "$libname"
|
||
+ Haiku -> "$libdir"
|
||
_other -> "$prefix" </> "libexec",
|
||
includedir = "$libdir" </> "$libsubdir" </> "include",
|
||
datadir = case buildOS of
|
||
Windows -> "$prefix"
|
||
_other -> "$prefix" </> "share",
|
||
datasubdir = "$abi" </> "$pkgid",
|
||
- docdir = "$datadir" </> "doc" </> "$abi" </> "$pkgid",
|
||
- mandir = "$datadir" </> "man",
|
||
+ docdir = case buildOS of
|
||
+ Haiku -> "$prefix" </> "documentation" </> "ghc"
|
||
+ _ -> "$datadir" </> "doc" </> "$abi" </> "$pkgid",
|
||
+ mandir = "$docdir" </> "man",
|
||
htmldir = "$docdir" </> "html",
|
||
haddockdir = "$htmldir",
|
||
- sysconfdir = "$prefix" </> "etc"
|
||
+ sysconfdir = case buildOS of
|
||
+ Haiku -> "boot" </> "home" </> "config" </> "settings"
|
||
+ _ -> "$prefix" </> "etc"
|
||
}
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
diff --git a/libraries/Cabal/Cabal/Distribution/Simple/PreProcess.hs b/libraries/Cabal/Cabal/Distribution/Simple/PreProcess.hs
|
||
index 4933028..4a05d47 100644
|
||
--- a/libraries/Cabal/Cabal/Distribution/Simple/PreProcess.hs
|
||
+++ b/libraries/Cabal/Cabal/Distribution/Simple/PreProcess.hs
|
||
@@ -622,6 +622,7 @@ platformDefines lbi =
|
||
OpenBSD -> ["openbsd"]
|
||
NetBSD -> ["netbsd"]
|
||
DragonFly -> ["dragonfly"]
|
||
+ Haiku -> ["haiku"]
|
||
Solaris -> ["solaris2"]
|
||
AIX -> ["aix"]
|
||
HPUX -> ["hpux"]
|
||
diff --git a/libraries/Cabal/Cabal/Distribution/System.hs b/libraries/Cabal/Cabal/Distribution/System.hs
|
||
index ea1ae0d..2572522 100644
|
||
--- a/libraries/Cabal/Cabal/Distribution/System.hs
|
||
+++ b/libraries/Cabal/Cabal/Distribution/System.hs
|
||
@@ -80,7 +80,7 @@ data ClassificationStrictness = Permissive | Compat | Strict
|
||
-- ------------------------------------------------------------
|
||
|
||
-- | These are the known OS names: Linux, Windows, OSX
|
||
--- ,FreeBSD, OpenBSD, NetBSD, DragonFly
|
||
+-- ,FreeBSD, OpenBSD, NetBSD, DragonFly, Haiku
|
||
-- ,Solaris, AIX, HPUX, IRIX
|
||
-- ,HaLVM ,Hurd ,IOS, Android,Ghcjs
|
||
--
|
||
@@ -93,7 +93,7 @@ data ClassificationStrictness = Permissive | Compat | Strict
|
||
--
|
||
data OS = Linux | Windows | OSX -- tier 1 desktop OSs
|
||
| FreeBSD | OpenBSD | NetBSD -- other free Unix OSs
|
||
- | DragonFly
|
||
+ | DragonFly | Haiku
|
||
| Solaris | AIX | HPUX | IRIX -- ageing Unix OSs
|
||
| HaLVM -- bare metal / VMs / hypervisors
|
||
| Hurd -- GNU's microkernel
|
||
@@ -108,7 +108,7 @@ instance NFData OS where rnf = genericRnf
|
||
|
||
knownOSs :: [OS]
|
||
knownOSs = [Linux, Windows, OSX
|
||
- ,FreeBSD, OpenBSD, NetBSD, DragonFly
|
||
+ ,FreeBSD, OpenBSD, NetBSD, DragonFly, Haiku
|
||
,Solaris, AIX, HPUX, IRIX
|
||
,HaLVM
|
||
,Hurd
|
||
@@ -120,6 +120,7 @@ osAliases Permissive Windows = ["mingw32", "win32", "cygwin32"]
|
||
osAliases Compat Windows = ["mingw32", "win32"]
|
||
osAliases _ OSX = ["darwin"]
|
||
osAliases _ Hurd = ["gnu"]
|
||
+osAliases _ Haiku = ["haiku"]
|
||
osAliases Permissive FreeBSD = ["kfreebsdgnu"]
|
||
osAliases Compat FreeBSD = ["kfreebsdgnu"]
|
||
osAliases Permissive Solaris = ["solaris2"]
|
||
diff --git a/rts/LinkerInternals.h b/rts/LinkerInternals.h
|
||
index b48fc75..fa9c1fd 100644
|
||
--- a/rts/LinkerInternals.h
|
||
+++ b/rts/LinkerInternals.h
|
||
@@ -337,7 +337,7 @@ char *cstring_from_section_name(
|
||
|| defined(linux_android_HOST_OS) \
|
||
|| defined(freebsd_HOST_OS) || defined(kfreebsdgnu_HOST_OS) \
|
||
|| defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS) \
|
||
-|| defined(openbsd_HOST_OS) || defined(gnu_HOST_OS)
|
||
+|| defined(openbsd_HOST_OS) || defined(gnu_HOST_OS) || defined(haiku_HOST_OS)
|
||
# define OBJFORMAT_ELF
|
||
# include "linker/ElfTypes.h"
|
||
#elif defined (mingw32_HOST_OS)
|
||
diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c
|
||
index ede0482..73f6c44 100644
|
||
--- a/rts/linker/Elf.c
|
||
+++ b/rts/linker/Elf.c
|
||
@@ -4,7 +4,7 @@
|
||
|| defined(linux_android_HOST_OS) \
|
||
|| defined(freebsd_HOST_OS) || defined(kfreebsdgnu_HOST_OS) \
|
||
|| defined(dragonfly_HOST_OS) || defined(netbsd_HOST_OS) \
|
||
-|| defined(openbsd_HOST_OS) || defined(gnu_HOST_OS)
|
||
+|| defined(openbsd_HOST_OS) || defined(gnu_HOST_OS) || defined(haiku_HOST_OS)
|
||
|
||
// It is essential that this is included before any <elf.h> is included. <elf.h>
|
||
// defines R_XXX relocations, which would interfere with the COMPAT_R_XXX
|
||
diff --git a/rts/posix/OSMem.c b/rts/posix/OSMem.c
|
||
index 5058f03..47a436c 100644
|
||
--- a/rts/posix/OSMem.c
|
||
+++ b/rts/posix/OSMem.c
|
||
@@ -245,6 +245,10 @@ my_mmap (void *addr, W_ size, int operation)
|
||
// See Trac #7500.
|
||
ret = linux_retry_mmap(operation, size, ret, addr, prot, flags);
|
||
}
|
||
+#elif defined(haiku_HOST_OS)
|
||
+ // Retry without address constraint
|
||
+ if (ret == (void *)-1 && errno == EFAULT)
|
||
+ ret = mmap(0, size, prot, MAP_ANON | MAP_PRIVATE, -1, 0);
|
||
# endif
|
||
if (ret == MAP_FAILED) {
|
||
return NULL;
|
||
diff --git a/rules/library-path.mk b/rules/library-path.mk
|
||
index dbfd4be..49e04ae 100644
|
||
--- a/rules/library-path.mk
|
||
+++ b/rules/library-path.mk
|
||
@@ -15,6 +15,8 @@ ifeq "$(TargetOS_CPP)" "mingw32"
|
||
prependLibraryPath = $(error Do not know how to prependLibraryPath on Windows)
|
||
else ifeq "$(TargetOS_CPP)" "darwin"
|
||
prependLibraryPath = export DYLD_LIBRARY_PATH="$1$${DYLD_LIBRARY_PATH:+:$$DYLD_LIBRARY_PATH}"
|
||
+else ifeq "$(TargetOS_CPP)" "haiku"
|
||
+prependLibraryPath = export LIBRARY_PATH="$1:$$LIBRARY_PATH"
|
||
else
|
||
prependLibraryPath = export LD_LIBRARY_PATH="$1$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}"
|
||
endif
|
||
--
|
||
2.28.0
|
||
|
||
|
||
From 3c64f217dc939acaa70389c978cb10d6ae991ae8 Mon Sep 17 00:00:00 2001
|
||
From: Donn Cave <donn@avvanta.com>
|
||
Date: Sat, 2 Jan 2021 11:22:50 +0100
|
||
Subject: Patch for better Haiku support
|
||
|
||
|
||
diff --git a/libraries/Cabal/Cabal/Distribution/Simple/GHC.hs b/libraries/Cabal/Cabal/Distribution/Simple/GHC.hs
|
||
index 1d4a97a..ca828aa 100644
|
||
--- a/libraries/Cabal/Cabal/Distribution/Simple/GHC.hs
|
||
+++ b/libraries/Cabal/Cabal/Distribution/Simple/GHC.hs
|
||
@@ -1633,6 +1633,7 @@ getRPaths lbi clbi | supportRPaths hostOS = do
|
||
supportRPaths OpenBSD = False
|
||
supportRPaths NetBSD = False
|
||
supportRPaths DragonFly = False
|
||
+ supportRPaths Haiku = True
|
||
supportRPaths Solaris = False
|
||
supportRPaths AIX = False
|
||
supportRPaths HPUX = False
|
||
diff --git a/libraries/Cabal/Cabal/Distribution/Simple/Utils.hs b/libraries/Cabal/Cabal/Distribution/Simple/Utils.hs
|
||
index 871a3e9..db768a0 100644
|
||
--- a/libraries/Cabal/Cabal/Distribution/Simple/Utils.hs
|
||
+++ b/libraries/Cabal/Cabal/Distribution/Simple/Utils.hs
|
||
@@ -1167,7 +1167,7 @@ createDirectoryIfMissingVerbose verbosity create_parents path0
|
||
-- the case that the dir did exist but another process deletes the
|
||
-- directory and creates a file in its place before we can check
|
||
-- that the directory did indeed exist.
|
||
- | isAlreadyExistsError e -> (do
|
||
+ | isAlreadyExistsError e || isPermissionError e -> (do
|
||
isDir <- doesDirectoryExist dir
|
||
unless isDir $ throwIO e
|
||
) `catchIO` ((\_ -> return ()) :: IOException -> IO ())
|
||
diff --git a/libraries/Cabal/Cabal/Makefile b/libraries/Cabal/Cabal/Makefile
|
||
index e2bb10b..779c993 100644
|
||
--- a/libraries/Cabal/Cabal/Makefile
|
||
+++ b/libraries/Cabal/Cabal/Makefile
|
||
@@ -5,7 +5,7 @@ VERSION=2.4.0.1
|
||
KIND=rc
|
||
#KIND=cabal-latest
|
||
|
||
-PREFIX=/usr/local
|
||
+PREFIX=/boot/system
|
||
HC=ghc
|
||
GHCFLAGS=-Wall -threaded
|
||
SSH_USER=$(USER)
|
||
diff --git a/libraries/Cabal/cabal-install/bootstrap.sh b/libraries/Cabal/cabal-install/bootstrap.sh
|
||
index 7246ae9..0bbed8f 100755
|
||
--- a/libraries/Cabal/cabal-install/bootstrap.sh
|
||
+++ b/libraries/Cabal/cabal-install/bootstrap.sh
|
||
@@ -122,7 +122,7 @@ while [ "$#" -gt 0 ]; do
|
||
shift;;
|
||
"--global")
|
||
SCOPE_OF_INSTALLATION="${1}"
|
||
- DEFAULT_PREFIX="/usr/local"
|
||
+ DEFAULT_PREFIX="/boot/system"
|
||
shift;;
|
||
"--sandbox")
|
||
shift
|
||
diff --git a/libraries/directory/System/Directory/Internal/Posix.hsc b/libraries/directory/System/Directory/Internal/Posix.hsc
|
||
index 5a4d5dc..9ed01dc 100644
|
||
--- a/libraries/directory/System/Directory/Internal/Posix.hsc
|
||
+++ b/libraries/directory/System/Directory/Internal/Posix.hsc
|
||
@@ -294,7 +294,11 @@ getXdgDirectoryListInternal xdgDirs =
|
||
|
||
getAppUserDataDirectoryInternal :: FilePath -> IO FilePath
|
||
getAppUserDataDirectoryInternal appName =
|
||
+# if defined(haiku_HOST_OS)
|
||
+ (\ home -> home <> ("/config/settings/." ++ appName)) <$> getHomeDirectoryInternal
|
||
+# else
|
||
(\ home -> home <> ('/' : '.' : appName)) <$> getHomeDirectoryInternal
|
||
+#endif
|
||
|
||
getUserDocumentsDirectoryInternal :: IO FilePath
|
||
getUserDocumentsDirectoryInternal = getHomeDirectoryInternal
|
||
diff --git a/mk/config.mk.in b/mk/config.mk.in
|
||
index c112a5f..76ae7f0 100644
|
||
--- a/mk/config.mk.in
|
||
+++ b/mk/config.mk.in
|
||
@@ -199,7 +199,7 @@ GhcWithSMP := $(strip $(if $(filter YESNO, $(ArchSupportsSMP)$(GhcUnregisterised
|
||
# Whether to include GHCi in the compiler. Depends on whether the RTS linker
|
||
# has support for this OS/ARCH combination.
|
||
|
||
-OsSupportsGHCi=$(strip $(patsubst $(TargetOS_CPP), YES, $(findstring $(TargetOS_CPP), mingw32 linux solaris2 freebsd dragonfly netbsd openbsd darwin kfreebsdgnu)))
|
||
+OsSupportsGHCi=$(strip $(patsubst $(TargetOS_CPP), YES, $(findstring $(TargetOS_CPP), mingw32 linux solaris2 freebsd dragonfly netbsd openbsd darwin kfreebsdgnu haiku)))
|
||
ArchSupportsGHCi=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc powerpc64 powerpc64le sparc sparc64 arm aarch64)))
|
||
|
||
ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES"
|
||
diff --git a/rts/Task.h b/rts/Task.h
|
||
index 0410407..d9b61c8 100644
|
||
--- a/rts/Task.h
|
||
+++ b/rts/Task.h
|
||
@@ -321,7 +321,7 @@ typedef StgWord64 TaskId;
|
||
//
|
||
#if defined(THREADED_RTS)
|
||
INLINE_HEADER TaskId serialiseTaskId (OSThreadId taskID) {
|
||
-#if defined(freebsd_HOST_OS) || defined(darwin_HOST_OS)
|
||
+#if defined(freebsd_HOST_OS) || defined(darwin_HOST_OS) || defined(haiku_HOST_OS)
|
||
// Here OSThreadId is a pthread_t and pthread_t is a pointer, but within
|
||
// the process we can still use that pointer value as a unique id.
|
||
return (TaskId) (size_t) taskID;
|
||
--
|
||
2.28.0
|
||
|