pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/lang/ghc7 Update to GHC 7.10.3
details: https://anonhg.NetBSD.org/pkgsrc/rev/825ea07d04f0
branches: trunk
changeset: 406693:825ea07d04f0
user: pho <pho%pkgsrc.org@localhost>
date: Sun Dec 29 16:59:08 2019 +0000
description:
Update to GHC 7.10.3
Changes from 7.6.3 are as follows:
* https://www.haskell.org/ghc/docs/7.8.1/html/users_guide/release-7-8-1.html
* https://www.haskell.org/ghc/docs/7.8.2/html/users_guide/release-7-8-2.html
* https://www.haskell.org/ghc/docs/7.8.3/html/users_guide/release-7-8-3.html
* https://www.haskell.org/ghc/docs/7.8.4/html/users_guide/release-7-8-4.html
* https://www.haskell.org/ghc/docs/7.10.1/html/users_guide/release-7-10-1.html
* https://downloads.haskell.org/~ghc/7.10.2/docs/html/users_guide/release-7-10-2.html
* https://downloads.haskell.org/~ghc/7.10.3/docs/html/users_guide/release-7-10-3.html
diffstat:
lang/ghc7/BOOTSTRAP.txt | 20 +
lang/ghc7/DESCR | 5 +
lang/ghc7/Makefile | 119 +-
lang/ghc7/PLIST | 5384 ----------
lang/ghc7/TODO | 31 -
lang/ghc7/bootstrap.mk | 98 +-
lang/ghc7/buildlink3.mk | 7 +-
lang/ghc7/distinfo | 50 +-
lang/ghc7/files/bootstrap.build.mk | 10 +
lang/ghc7/patches/patch-Makefile | 16 -
lang/ghc7/patches/patch-ghc.mk | 31 +-
lang/ghc7/patches/patch-libffi_ghc.mk | 41 -
lang/ghc7/patches/patch-libraries_base_GHC_Event_KQueue.hsc | 16 +
lang/ghc7/patches/patch-libraries_base_System_Environment.hs | 23 +
lang/ghc7/patches/patch-libraries_integer-gmp_configure.ac | 42 -
lang/ghc7/patches/patch-libraries_integer-simple_GHC_Integer.hs | 15 -
lang/ghc7/patches/patch-libraries_integer-simple_GHC_Integer_Type.hs | 24 -
lang/ghc7/patches/patch-libraries_time_Data_Time_Clock_CTimeval.hs | 33 -
lang/ghc7/patches/patch-libraries_time_lib_Data_Time_Clock_CTimeval.hs | 33 +
lang/ghc7/patches/patch-libraries_unix_System_Posix_Files.hsc | 15 -
lang/ghc7/patches/patch-libraries_unix_System_Posix_Files_Common.hsc | 35 +
lang/ghc7/patches/patch-libraries_unix_System_Posix_Signals.hsc | 9 +-
lang/ghc7/patches/patch-libraries_unix_cbits_execvpe.c | 29 -
lang/ghc7/patches/patch-libraries_unix_include_execvpe.h | 32 +-
lang/ghc7/patches/patch-mk_config.mk.in | 14 -
lang/ghc7/patches/patch-rts_Linker.c | 26 -
lang/ghc7/patches/patch-rts_PosixSource.h | 4 +-
lang/ghc7/patches/patch-rts_StgCRun.c | 33 -
lang/ghc7/patches/patch-rts_ghc.mk | 58 -
29 files changed, 298 insertions(+), 5955 deletions(-)
diffs (truncated from 6657 to 300 lines):
diff -r 43fab8a51091 -r 825ea07d04f0 lang/ghc7/BOOTSTRAP.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lang/ghc7/BOOTSTRAP.txt Sun Dec 29 16:59:08 2019 +0000
@@ -0,0 +1,20 @@
+GHC requires itself to build, and unfortunately the only way to get a
+working GHC for a foreign target is to do a cross-compilation.
+
+In order to build a bootkit for a new platform, you need to manually
+set up a cross-building C compiler and binutils, libc, libterminfo,
+and libiconv for the target. Then you can follow instructions in
+https://gitlab.haskell.org/ghc/ghc/wikis/building/cross-compiling
+
+Once you get a working GHC for the target platform, install it
+somewhere in your PATH, run "cd lang/ghc7; make clean; make bootstrap"
+on the target platform and you'll have a bootkit for the target.
+
+--
+
+GHC in fact has never supported bootstrapping only with a C compiler.
+Prior to GHC 7, it had a thing called "HC source", which was a set of
+C source files compiled from Haskell source, but it wasn't actually
+cross-platform. It was because HC files were generated with many
+assumptions about the platform, such as the layout of libc structs,
+the size of off_t and time_t, byte-order, word size, etc.
diff -r 43fab8a51091 -r 825ea07d04f0 lang/ghc7/DESCR
--- a/lang/ghc7/DESCR Sun Dec 29 16:54:52 2019 +0000
+++ b/lang/ghc7/DESCR Sun Dec 29 16:59:08 2019 +0000
@@ -8,3 +8,8 @@
type-system extensions, exceptions, and so on. GHC comes with a
generational garbage collector, a space and time profiler, and a
comprehensive set of libraries.
+
+This package provides the 7.10.x release series, which is the last
+version that can bootstrap with 7.6.x. It will probably be removed
+once we make a separate package for GHC 8.0.x and get enough bootstrap
+kits for it.
diff -r 43fab8a51091 -r 825ea07d04f0 lang/ghc7/Makefile
--- a/lang/ghc7/Makefile Sun Dec 29 16:54:52 2019 +0000
+++ b/lang/ghc7/Makefile Sun Dec 29 16:59:08 2019 +0000
@@ -1,32 +1,33 @@
-# $NetBSD: Makefile,v 1.36 2019/11/01 06:10:23 gutteridge Exp $
+# $NetBSD: Makefile,v 1.37 2019/12/29 16:59:08 pho Exp $
# -----------------------------------------------------------------------------
# Package metadata
#
-DISTNAME= ghc-7.6.3-src
+DISTNAME= ghc-7.10.3-src
PKGNAME= ${DISTNAME:S/-src$//}
-PKGREVISION= 14
CATEGORIES= lang
-MASTER_SITES= https://www.haskell.org/ghc/dist/${PKGVERSION_NOREV}/
-EXTRACT_SUFX= .tar.bz2
+MASTER_SITES= https://downloads.haskell.org/~ghc/${PKGVERSION_NOREV}/
+EXTRACT_SUFX= .tar.xz
MAINTAINER= pho%cielonegro.org@localhost
HOMEPAGE= https://www.haskell.org/ghc/
-COMMENT= Compiler for the functional language Haskell
+COMMENT= Compiler for the functional language Haskell - 7.10 Release Series
LICENSE= modified-bsd
+# TODO: We should be using the alternatives framework.
+CONFLICTS+= ghc-[0-9]*
+
# GHC requires GHC to build itself. Formerly we could work around this
# bootstrapping problem by creating a special archive containing C
# sources compiled from Haskell sources, but that's no longer
# possible. So we have to prepare stripped-down binaries sufficient to
# bootstrap compilers for each platforms. If you want to build them
-# yourself, follow an instruction in the ./TODO file.
+# yourself, follow instructions in ./bootstrap.mk
BROKEN_EXCEPT_ON_PLATFORM+= \
Darwin-*-powerpc \
FreeBSD-*-i386 \
- Linux-*-x86_64 \
- NetBSD-*-i386 \
NetBSD-*-x86_64 \
- SunOS-5.11-*
+ SunOS-*-i386 \
+ SunOS-*-x86_64
# -----------------------------------------------------------------------------
@@ -42,31 +43,39 @@
# -----------------------------------------------------------------------------
# Tools
#
+# The runtime dependency on perl is due to the evil splitter
+# (lib/${PKGNAME_NOREV}/ghc-split).
USE_TOOLS+= autoconf gmake gzip perl:run
GNU_CONFIGURE= yes
USE_GNU_CONFIGURE_HOST= no
USE_LIBTOOL= yes
-CONFIGURE_ARGS+= \
+CONFIGURE_ARGS.common= \
--with-gcc=${CC:Q} \
+ --with-curses-includes=${BUILDLINK_PREFIX.curses:Q}/${BUILDLINK_INCDIRS.curses:Q} \
+ --with-curses-libraries=${BUILDLINK_PREFIX.curses:Q}/${BUILDLINK_LIBDIRS.curses:Q} \
--with-gmp-includes=${BUILDLINK_PREFIX.gmp:Q}/${BUILDLINK_INCDIRS.gmp:Q} \
--with-gmp-libraries=${BUILDLINK_PREFIX.gmp:Q}/${BUILDLINK_LIBDIRS.gmp:Q} \
--with-iconv-includes=${BUILDLINK_PREFIX.iconv:Q}/${BUILDLINK_INCDIRS.iconv:Q} \
- --with-iconv-libraries=${BUILDLINK_PREFIX.iconv:Q}/${BUILDLINK_LIBDIRS.iconv:Q}
+ --with-iconv-libraries=${BUILDLINK_PREFIX.iconv:Q}/${BUILDLINK_LIBDIRS.iconv:Q} \
+ --with-system-libffi \
+ --with-ffi-includes=${BUILDLINK_PREFIX.libffi:Q}/${BUILDLINK_INCDIRS.libffi:Q} \
+ --with-ffi-libraries=${BUILDLINK_PREFIX.libffi:Q}/${BUILDLINK_LIBDIRS.libffi:Q}
+
+CONFIGURE_ARGS+= ${CONFIGURE_ARGS.common}
CONFIGURE_ENV+= \
ac_cv_path_fp_prog_ar=${AR:Q} \
PerlCmd=${PERL5:Q}
-# CFLAGS and LDFLAGS are currently not honored by "./configure". Since
-# LDFLAGS contains rpath flags it's very important to force GHC to
-# honor it. Otherwise neither GHC itself nor executables it produces
-# will have any rpaths so users will have to put "${PREFIX}/lib" into
-# their "/etc/ld-elf.so.conf". See
+# LDFLAGS is currently not honored by "./configure". Since LDFLAGS
+# contains rpath flags it's very important to force GHC to honor
+# it. Otherwise neither GHC itself nor executables it produces will
+# have any rpaths so users will have to put "${PREFIX}/lib" into their
+# "/etc/ld-elf.so.conf". See
# http://hackage.haskell.org/trac/ghc/ticket/2933
.for stage in 0 1 2
CONFIGURE_ENV+= \
- CONF_CC_OPTS_STAGE${stage}=${CFLAGS:Q} \
CONF_GCC_LINKER_OPTS_STAGE${stage}=${LDFLAGS:Q}
# Note that CONF_LD_LINKER_OPTS_STAGE{0,1,2} are only used for
# creating static GHCi libraries (HS*.o). Setting them to ${LDFLAGS}
@@ -77,10 +86,19 @@
# the buildlink.
.endfor
-NOT_PAX_MPROTECT_SAFE+= lib/${PKGNAME_NOREV}/ghc
-NOT_PAX_MPROTECT_SAFE+= lib/${PKGNAME_NOREV}/ghc-pkg
-NOT_PAX_ASLR_SAFE+= lib/${PKGNAME_NOREV}/ghc
-NOT_PAX_ASLR_SAFE+= lib/${PKGNAME_NOREV}/ghc-pkg
+# The runtime system of GHC (rts) tends to conflict with PaX MPROTECT
+# because it needs to generate various kinds of code at run time. The
+# RTS linker, whose job is to load *static* objects at run time,
+# doesn't play nice with ASLR either. This means most executables
+# produced by GHC need them to be disabled. Perhaps we should patch
+# rts/sm/Storage.c so that it uses ffi_closure_alloc(3) on every
+# platform, not just Linux, and also drop support for static library
+# loading and switch to dynamic libraries entirely.
+.for f in ghc ghc-pkg haddock hpc hsc2hs runghc
+NOT_PAX_MPROTECT_SAFE+= lib/${PKGNAME_NOREV}/bin/${f}
+NOT_PAX_ASLR_SAFE+= lib/${PKGNAME_NOREV}/bin/${f}
+.endfor
+
# -----------------------------------------------------------------------------
# Build hooks
@@ -92,34 +110,16 @@
${RUN} cd ${WRKSRC:Q}/libraries/base && autoconf
${RUN} cd ${WRKSRC:Q}/libraries/integer-gmp && autoconf
-
# Define the target "pre-configure" and non-standard "bootstrap".
.include "../../lang/ghc7/bootstrap.mk"
# Our pre-configure phase installs a bindist of bootstrapping compiler
# directly into TOOLS_DIR so that ./configure can find it.
-
# Here we generate mk/build.mk dynamically.
post-configure:
${RUN} ${RM} -f ${WRKSRC:Q}/mk/build.mk
-# See https://ghc.haskell.org/trac/ghc/ticket/10096
- ${RUN} ${ECHO} "libraries/terminfo_CONFIGURE_OPTS += \
- --configure-option=--with-curses-includes=${BUILDLINK_PREFIX.curses:Q}/${BUILDLINK_INCDIRS.curses:Q} \
- --configure-option=--with-curses-libraries=${BUILDLINK_PREFIX.curses:Q}/${BUILDLINK_LIBDIRS.curses:Q}" \
- >> ${WRKSRC:Q}/mk/build.mk
-
-# The ghc compiler does normally split the generated asm files into small
-# parts before sending them to gcc, to enable the linker to eliminate
-# unused parts. This does however not play nice with the pkgsrc
-# framework, and the result is that the build takes more than 5 times
-# as long than when the files are not split. See
-# http://mail-index.netbsd.org/tech-pkg/2006/07/30/0005.html
-# for a description of the problem.
-# Disable file splitting until pkgsrc gets improved.
- ${RUN} ${ECHO} "SplitObjs = NO" >> ${WRKSRC:Q}/mk/build.mk
-
# If there is HsColour in the PATH, GHC's build system tries to use it
# without even checking if it really works. That's not what we
# appreciate.
@@ -145,18 +145,13 @@
# -----------------------------------------------------------------------------
# PLIST
#
-# We can't use static PLIST because the package installs some files
-# whose names are randomly generated, namely
-# lib/${PKGNAME}/package.conf.d/*.conf
-#
-PRINT_PLIST_AWK+= /lib\/${PKGNAME_NOREV}\/package\.conf\.d/ { next; }
+# We can't use static PLIST because the package installs files with a
+# hashed name. And "PLIST_TYPE = dynamic" appears to be broken atm
+# [2019-12-27; pho].
+GENERATE_PLIST+= \
+ cd ${DESTDIR:Q}${PREFIX:Q} && \
+ ${FIND} * \( -type f -o -type l \) | ${SORT};
-# If we were lucky we could just use "PLIST_TYPE = dynamic", but the
-# feature has seemingly bitrotted.
-.include "../../mk/bsd.prefs.mk"
-GENERATE_PLIST+= \
- cd ${DESTDIR}${PREFIX} && \
- ${FIND} lib/${PKGNAME_NOREV}/package.conf.d -xdev -newer ${_COOKIE.extract} \! -type d -print | ${SORT} -d;
# -----------------------------------------------------------------------------
# Sanity checks
@@ -165,26 +160,25 @@
# There is an unused script which don't pass the portability test.
CHECK_PORTABILITY_SKIP+= distrib/prep-bin-dist-mingw
-# Dynamic Haskell libraries currently have no rpaths to any dependent
-# Haskell libraries so we must skip shlibs check for them. Note that
-# the situation seems to be changed in GHC 7.8.1 so we should
-# readdress this later. See
-# https://ghc.haskell.org/trac/ghc/ticket/8266 (slightly off-topic but
-# pho@ found no description for the -fuse-rpath flag.)
-.if !empty(PKGNAME:Mghc-7.6.*)
+# Dynamically linked Haskell executables and libraries have rpaths to
+# dependent Haskell libraries, but the problem is that they are
+# specified with $ORIGIN, which isn't currently supported by
+# ../../mk/check/check-shlibs-elf.awk.
CHECK_SHLIBS_SKIP+= */libHS*-ghc${PKGVERSION_NOREV}.*
-.endif
+.for f in ghc ghc-pkg haddock hpc hsc2hs runghc
+CHECK_SHLIBS_SKIP+= lib/${PKGNAME_NOREV}/bin/${f}
+.endfor
# ghc57207_0.s: failed to add inputs for merge: Resource temporarily unavailable
-CTF_FILES_SKIP+= */libHSghc-7.6.3-ghc7.6.3.so
+CTF_FILES_SKIP+= */libHS*-ghc${PKGVERSION_NOREV}.*
# ld: fatal: relocation error ... relocation requires reference symbol
STRIP_FILES_SKIP+= lib/${PKGNAME_NOREV}/libHSrts.a
+
# -----------------------------------------------------------------------------
# Dependencies
#
-
BUILD_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt
BUILD_DEPENDS+= docbook-xsl-[0-9]*:../../textproc/docbook-xsl
@@ -196,10 +190,11 @@
# In a sandboxed build environment, we have to reach over to the
# installed libraries themselves, since the symlinks compat80 adds
# to the /usr tree can't be applied.
-MAKE_ENV+= LD_LIBRARY_PATH=${LOCALBASE}/emul/netbsd/usr/lib
+MAKE_ENV+= LD_LIBRARY_PATH=${PREFIX:Q}/emul/netbsd/usr/lib
.endif
.include "../../converters/libiconv/buildlink3.mk"
+.include "../../devel/libffi/buildlink3.mk"
.include "../../devel/gmp/buildlink3.mk"
.include "../../mk/curses.buildlink3.mk"
.include "../../mk/pthread.buildlink3.mk"
diff -r 43fab8a51091 -r 825ea07d04f0 lang/ghc7/PLIST
--- a/lang/ghc7/PLIST Sun Dec 29 16:54:52 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5384 +0,0 @@
-@comment $NetBSD: PLIST,v 1.2 2014/05/21 16:07:59 jperkin Exp $
-bin/ghc
-bin/${PKGNAME}
-bin/ghc-pkg
-bin/ghc-pkg-${PKGVERSION}
-bin/ghci
-bin/ghci-${PKGVERSION}
-bin/haddock
-bin/haddock-${PKGNAME}
-bin/hp2ps
-bin/hpc
-bin/hsc2hs
-bin/runghc
-bin/run${PKGNAME}
-bin/runhaskell
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/CopyFile.dyn_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/CopyFile.hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/CopyFile.p_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/Exception.dyn_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/Exception.hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/Exception.p_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/ReadP.dyn_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/ReadP.hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/ReadP.p_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/TempFile.dyn_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/TempFile.hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compat/TempFile.p_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compiler.dyn_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compiler.hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/Compiler.p_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/GetOpt.dyn_hi
-lib/${PKGNAME}/Cabal-1.16.0/Distribution/GetOpt.hi
Home |
Main Index |
Thread Index |
Old Index