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
|
||
|