head 1.13; access; symbols pkgsrc-2026Q1:1.13.0.2 pkgsrc-2026Q1-base:1.13 pkgsrc-2025Q4:1.11.0.2 pkgsrc-2025Q4-base:1.11 pkgsrc-2025Q3:1.10.0.6 pkgsrc-2025Q3-base:1.10 pkgsrc-2025Q2:1.10.0.4 pkgsrc-2025Q2-base:1.10 pkgsrc-2025Q1:1.10.0.2 pkgsrc-2025Q1-base:1.10 pkgsrc-2024Q4:1.6.0.4 pkgsrc-2024Q4-base:1.6 pkgsrc-2024Q3:1.6.0.2 pkgsrc-2024Q3-base:1.6 pkgsrc-2024Q2:1.5.0.2 pkgsrc-2024Q2-base:1.5; locks; strict; comment @# @; 1.13 date 2026.02.02.22.52.49; author wiz; state Exp; branches; next 1.12; commitid 6XXuKQBT2u9k6RsG; 1.12 date 2026.01.06.11.18.44; author wiz; state Exp; branches; next 1.11; commitid KwiZcHB9zKU08kpG; 1.11 date 2025.10.09.07.57.44; author wiz; state Exp; branches; next 1.10; commitid t4nMY0Dt3rBjSRdG; 1.10 date 2025.02.23.16.59.20; author wiz; state Exp; branches; next 1.9; commitid kbo5dPTmHbFBcCKF; 1.9 date 2025.01.27.15.08.07; author pho; state Exp; branches; next 1.8; commitid 6D80fPPLpq9ms8HF; 1.8 date 2025.01.08.14.51.06; author pho; state Exp; branches; next 1.7; commitid HkPTgPKwmD6oYGEF; 1.7 date 2025.01.08.10.17.27; author pho; state Exp; branches; next 1.6; commitid 9Ur3B6RBnSgvsFEF; 1.6 date 2024.07.30.11.38.42; author wiz; state Exp; branches; next 1.5; commitid k7QKif3JVEJO6RjF; 1.5 date 2024.06.20.12.49.39; author jperkin; state Exp; branches; next 1.4; commitid MIONgbUVnq1vKIeF; 1.4 date 2024.05.11.18.37.40; author pho; state Exp; branches; next 1.3; commitid ASALFLp83Ulo0C9F; 1.3 date 2024.05.06.02.26.39; author pho; state Exp; branches; next 1.2; commitid fzkRKvIIGVBGKS8F; 1.2 date 2024.04.28.16.23.44; author pho; state Exp; branches; next 1.1; commitid Jw4BhhlDFV3mGV7F; 1.1 date 2024.04.28.05.58.57; author pho; state Exp; branches; next ; commitid fQDRcIiooIQ0eS7F; desc @@ 1.13 log @ghc98: remove AVX workaround for NetBSD 11+ Problem has been fixed as part of PR 57661. Bump PKGREVISION. @ text @# $NetBSD: Makefile,v 1.12 2026/01/06 11:18:44 wiz Exp $ # ----------------------------------------------------------------------------- # Package metadata # DISTNAME= ghc-9.8.2-src PKGNAME= ${DISTNAME:S/-src$//} PKGREVISION= 3 CATEGORIES= lang MASTER_SITES= https://downloads.haskell.org/~ghc/${PKGVERSION_NOREV}/ EXTRACT_SUFX= .tar.xz MAINTAINER= pkgsrc-users@@NetBSD.org HOMEPAGE= https://www.haskell.org/ghc/ COMMENT= Compiler for the functional language Haskell - 9.8 Release Series LICENSE= modified-bsd UNLIMIT_RESOURCES= cputime datasize virtualsize # GHC requires GHC to build itself. We have to prepare stripped-down # binaries sufficient to bootstrap compilers for each platform. If you want # to build them yourself, follow instructions in files/BOOTSTRAP.md. BROKEN_EXCEPT_ON_PLATFORM+= Darwin-*-aarch64 BROKEN_EXCEPT_ON_PLATFORM+= Darwin-*-x86_64 BROKEN_EXCEPT_ON_PLATFORM+= FreeBSD-*-i386 BROKEN_EXCEPT_ON_PLATFORM+= FreeBSD-*-x86_64 BROKEN_EXCEPT_ON_PLATFORM+= NetBSD-*-aarch64 BROKEN_EXCEPT_ON_PLATFORM+= NetBSD-*-x86_64 BROKEN_EXCEPT_ON_PLATFORM+= SunOS-*-x86_64 # We are going to do a PIE build on our responsibility. Do not put -pie in # wrappers, as that would prevent us from building stage-1 compiler. PKGSRC_OVERRIDE_MKPIE= yes .include "options.mk" # ----------------------------------------------------------------------------- # Distfiles # DISTFILES= ${DEFAULT_DISTFILES} WRKSRC= ${WRKDIR}/${PKGNAME_NOREV} # We don't want to extract all of the DISTFILEs. EXTRACT_ONLY= ${DEFAULT_DISTFILES} # ----------------------------------------------------------------------------- # Tools # USE_TOOLS+= autoconf gmake USE_LANGUAGES+= c c++ GNU_CONFIGURE= yes USE_GNU_CONFIGURE_HOST= no USE_LIBTOOL= yes PYTHON_FOR_BUILD_ONLY= tool .include "../../lang/python/tool.mk" # ----------------------------------------------------------------------------- # Configuration # HADRIAN_ARGS.common= # empty HADRIAN_ARGS.common+= -j${_MAKE_JOBS_N} HADRIAN_ARGS= ${HADRIAN_ARGS.common} # The output from Hadrian is too terse by default. Use at least a single # --verbose so we can know what's really going on. HADRIAN_ARGS.common+= --verbose ${PKG_VERBOSE:D--verbose} CONFIGURE_ARGS.common+= \ --with-curses-libraries=${BUILDLINK_PREFIX.curses}/${BUILDLINK_LIBDIRS.curses:Q} \ --with-gmp-includes=${BUILDLINK_PREFIX.gmp}/${BUILDLINK_INCDIRS.gmp:Q} \ --with-gmp-libraries=${BUILDLINK_PREFIX.gmp}/${BUILDLINK_LIBDIRS.gmp:Q} \ --with-iconv-includes=${BUILDLINK_PREFIX.iconv}/${BUILDLINK_INCDIRS.iconv:Q} \ --with-iconv-libraries=${BUILDLINK_PREFIX.iconv}/${BUILDLINK_LIBDIRS.iconv:Q} \ --with-ffi-includes=${BUILDLINK_PREFIX.libffi}/${BUILDLINK_INCDIRS.libffi:Q} \ --with-ffi-libraries=${BUILDLINK_PREFIX.libffi}/${BUILDLINK_LIBDIRS.libffi:Q} .include "../../mk/bsd.prefs.mk" # We must pass non-wrapper tools to ./configure because they will be # embedded in the compiler (actually ${WRKSRC}/settings). CONFIGURE_ENV+= ac_cv_prog_fp_prog_ar=${AR:Q} CONFIGURE_ENV+= ac_cv_prog_LIBTOOL=libtool CONFIGURE_ARGS.common+= LD=${LD:Q} # While we use binutils ar which supports "@@", this appears to be leaking # somewhere into assuming that SunOS ld also supports "@@" which it does not. CONFIGURE_ENV.SunOS+= fp_cv_prog_ar_supports_atfile=no # If there is HsColour in the PATH, GHC's build system tries to use it # without checking if it really works. That's not what we appreciate. CONFIGURE_ENV+= ac_cv_path_HSCOLOUR= CONFIGURE_ARGS+= ${CONFIGURE_ARGS.common} CONFIGURE_ARGS+= --with-system-libffi # 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 # http://hackage.haskell.org/trac/ghc/ticket/2933 .for stage in 0 1 2 CONFIGURE_ENV+= CONF_GCC_LINKER_OPTS_STAGE${stage}=${LDFLAGS:M*: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} # does more harm than good because our ${LDFLAGS} contains -Wl,* # flags. It's true that ../../mk/wrapper/cmd-sink-ld transforms them # but those flags will also be baked into the compiler (see # ${WRKSRC}/compiler/ghc.mk) so they cause problems when used outside # the buildlink. .endfor # The use of internal variable ${_PKGSRC_MKPIE} in mk/bsd.prefs.mk is not # very satisfying, but the current infrastructure does not export a public # variable indicating whether a PIE build is requested or not. Note that we # can't build stage-1 compiler as PIE, because our bootkit libraries aren't # necessarily built as PIC. .for stage in 0 1 2 . if ${stage} == 0 CONFIGURE_ENV+= CONF_CC_OPTS_STAGE${stage}=${CFLAGS:M*:Q} . else . if ${_PKGSRC_MKPIE} == "yes" CONFIGURE_ENV+= CONF_CC_OPTS_STAGE${stage}=${CFLAGS:M*:Q}\ -fPIC CONFIGURE_ENV+= CONF_HC_OPTS_STAGE${stage}=-fPIC\ -pie # Hadrian doesn't honor CONF_HC_OPTS_STAGE${stage}. Possibly a bug? HADRIAN_ARGS+= "stage${stage}.*.ghc.c.opts += -fPIC" HADRIAN_ARGS+= "stage${stage}.*.ghc.hs.opts += -fPIC" HADRIAN_ARGS+= "stage${stage}.*.ghc.link.opts += -pie" . else CONFIGURE_ENV+= CONF_CC_OPTS_STAGE${stage}=${CFLAGS:M*:Q} . endif . endif .endfor .if ${_PKGSRC_MKPIE} == "yes" # utils/unlit is a special case. It's built with the stage-0 compiler but # since it's entirely written in C there's no problem doing a PIE build. HADRIAN_ARGS+= "*.unlit.ghc.c.opts += -fPIC" HADRIAN_ARGS+= "*.unlit.ghc.link.opts += -pie" .endif # ----------------------------------------------------------------------------- # Security # # The runtime system of GHC (rts) has a mechanism called "RTS linker" whose # job is to load and execute *static* objects (.a and .o files) at run # time. It cannot survive PaX MPROTECT because preloadObjectFile() in # rts/linker.c tries to mmap pages with w+x. It doesn't play nice with ASLR # either because mmapForLinker() in rts/linker.c wants to always mmap pages # in the lower 32-bit area on 64-bit platforms. # # Luckily for us, the RTS linker is only used when the GHC executable (or # any user programs which uses GHC API as an interpreter, not a compiler) # is statically linked, which is no longer the case except for ghc-iserv # and ghc-iesrv-prof. They are launched when ghci is started with # -fexternal-interpreter without -dynamic, and their purpose is to run # non-PIC code from within a dynamically linked ghci using the evil RTS # linker. .for f in ghc-iserv ghc-iserv-prof NOT_PAX_MPROTECT_SAFE+= lib/${PKGNAME_NOREV}/bin/${f} NOT_PAX_ASLR_SAFE+= lib/${PKGNAME_NOREV}/bin/${f} .endfor # ----------------------------------------------------------------------------- # Build hooks # # We patch configure.ac in some directories. post-patch: @@${PHASE_MSG} "Regenerating configuration scripts for ${PKGNAME}" ${RUN}cd ${WRKSRC} && autoconf ${RUN}cd ${WRKSRC}/libraries/terminfo && autoconf # Define the target "pre-configure", "pre-build", and non-standard # "bootstrap". .include "bootstrap.mk" # Our pre-configure phase installs a bindist of bootstrapping compiler # directly into TOOLS_DIR so that ./configure can find it. Our pre-build # phase bootstraps Hadrian. # We have a patch to Hadrian so that it uses absolute RPATHs as opposed to # relative ones (i.e. $ORIGIN). The patch uses --prefix at build time. HADRIAN_ARGS+= --prefix=${PREFIX:Q} # The version restriction on Sphinx in ${WRKSRC}/configure.ac is too # loose, and building docs/users_guide rarely succeeds. We don't know # which version is actually required for it. BUILD_SPHINX_HTML?= no HADRIAN_ARGS+= ${${BUILD_SPHINX_HTML:tl} == "no":?--docs=no-sphinx:} # Don't even think of PDF. HADRIAN_ARGS+= --docs=no-sphinx-pdfs # Enable -fsplit-sections on platforms that support it. .if ${OPSYS} == "FreeBSD" # -fsplit-sections appears to corrupt the symbol table of stage 1 # libHSghc-*.a(Instances.o) and cause a linkage failure. Either Clang or # LLD is doing something wrong, probably the former. HADRIAN_ARGS+= --flavour=default .else HADRIAN_ARGS+= --flavour=default+split_sections .endif do-build: ${RUN}cd ${WRKSRC} && ${HADRIAN_CMD} ${HADRIAN_ARGS} ${RUN}cd ${WRKSRC} && ${HADRIAN_CMD} ${HADRIAN_ARGS} docs # ----------------------------------------------------------------------------- # Installation/removal hooks # # Substitutions for INSTALL and DEINSTALL that handles package.cache. FILES_SUBST+= PKGVERSION_NOREV=${PKGVERSION_NOREV} FILES_SUBST+= RM=${RM:Q} FILES_SUBST+= RMDIR=${RMDIR:Q} FILES_SUBST+= TRUE=${TRUE:Q} # mk/install_script.sh, whose purpose is to generate GHC wrapper scripts to # be installed, refers to the variable $SHELL. This is bad because our # $SHELL is in the TOOLDIR. SUBST_CLASSES+= ghc-wrapper-sh SUBST_STAGE.ghc-wrapper-sh= post-extract SUBST_FILES.ghc-wrapper-sh= mk/install_script.sh SUBST_SED.ghc-wrapper-sh= -e 's,\#!\$$SHELL,\#!/bin/sh,' # The "install" target in Hadrian doesn't support DESTDIR so we can't use # it. We also need to give configure and "make install" some additional env # vars and args. do-install: ${RUN}cd ${WRKSRC} && \ ${HADRIAN_CMD} ${HADRIAN_ARGS} binary-dist-dir ${RUN}cd ${WRKSRC}/_build/bindist/ghc-* && \ ${PKGSRC_SETENV} ${CONFIGURE_ENV} ${SH} ./configure ${CONFIGURE_ARGS} ${RUN}cd ${WRKSRC}/_build/bindist/ghc-* && \ ${PKGSRC_SETENV} ${INSTALL_ENV} ${MAKE_ENV} \ ${MAKE_PROGRAM} ${MAKE_FLAGS} ${INSTALL_MAKE_FLAGS} \ RECACHE_PACKAGE_DB=NO install INSTALLATION_DIRS+= share/bash-completion/completions post-install: ${INSTALL_DATA} ${WRKSRC}/utils/completion/ghc.bash \ ${DESTDIR}${PREFIX}/share/bash-completion/completions/ghc # We don't want package.cache to be in the PLIST. for f in package.cache package.cache.lock; do \ ${RM} ${DESTDIR}${PREFIX}/lib/${PKGNAME_NOREV}/lib/package.conf.d/$$f; \ done # ----------------------------------------------------------------------------- # PLIST # # We can't use static PLIST because the package installs files with a # hashed name. PLIST_TYPE= dynamic # ----------------------------------------------------------------------------- # Sanity checks # # These files don't pass our portability checks but we don't use them # anyway. CHECK_PORTABILITY_SKIP+= validate # ghc57207_0.s: failed to add inputs for merge: Resource temporarily unavailable # XXX: On which platform? Is it still an issue? CTF_FILES_SKIP+= */libHS*-ghc${PKGVERSION_NOREV}.* # ld: fatal: relocation error ... relocation requires reference symbol # XXX: On which platform? Is it still an issue? STRIP_FILES_SKIP+= lib/${PKGNAME_NOREV}/libHSrts.a # ----------------------------------------------------------------------------- # Dependencies # .if ${BUILD_SPHINX_HTML} != "no" PYTHON_VERSIONS_INCOMPATIBLE= 310 311 # py-sphinx TOOL_DEPENDS+= ${PYPKGPREFIX}-sphinx-[0-9]*:../../textproc/py-sphinx .endif # NetBSD bootkits are currently built on 9. We need some compat libraries # to run them on later versions. # # In a sandboxed build environment, we have to reach over to the # installed libraries themselves, since the symlinks compatXX adds # to the /usr tree can't be applied. .if ${MACHINE_PLATFORM:MNetBSD-*-*} && ${OPSYS_VERSION} >= 099000 TOOL_DEPENDS+= compat90-[0-9]*:../../emulators/compat90 ALL_ENV+= LD_LIBRARY_PATH=${PREFIX}/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" .include "../../mk/bsd.pkg.mk" # ghc has UTF-8 issues, this is needed to avoid problems during build that # may manifest from the bootstrap kit. It comes after bsd.pkg.mk as that # sets LC_ALL=C first. # # XXX I believe those issues have already been sorted out. If you still see # issues please uncomment this and leave some explanation # here so that I can look into. [2024-04-27; pho] #ALL_ENV+= LC_ALL=en_US.UTF-8 @ 1.12 log @*: forbid some more Python 3.11 for sphinx users List from grep @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.11 2025/10/09 07:57:44 wiz Exp $ d7 1 a7 1 PKGREVISION= 2 @ 1.11 log @*: remove reference to (removed) Python 3.9 @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.10 2025/02/23 16:59:20 wiz Exp $ d282 1 a282 1 PYTHON_VERSIONS_INCOMPATIBLE= 310 # py-sphinx @ 1.10 log @*: py-sphinx 8.2 drops support for Python 3.10 @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.9 2025/01/27 15:08:07 pho Exp $ d282 1 a282 1 PYTHON_VERSIONS_INCOMPATIBLE= 39 310 # py-sphinx @ 1.9 log @lang/ghc98: Replace bootkits with GHC 9.8.2 NFCI where they work. The resulting compiler produces the same binary as before so recursive revbump is not required. This is actually a rework of my previous changes that I had to revert. Replacing them with 9.8.x is necessary for the upcoming GHC 9.10. I'm going to import lang/ghc910, update every Haskell package in pkgsrc, then switch the default compiler after that. As a bonus this also contains a fix for one of the long-standing issues on Darwin: GHC was failing to build any Haskell packages that contain C++ code. This affected security/hs-digest and therefore Pandoc too. Note that GHC 9.8.2 is going to be the last version that supports FreeBSD/i386. The upstream has apparently stopped caring about i386 platforms and I'm already seeing several signs of it bitrotting away. In fact ghci, the REPL for GHC, has already stopped working for years, because it immediately segfaults by exhausting the ridiculously small stack space of i386. But I have received zero complaints so far which probably means we can just let it go. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.8 2025/01/08 14:51:06 pho Exp $ d282 1 @ 1.8 log @lang/ghc98: A better way to work around PR 58379 @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.7 2025/01/08 10:17:27 pho Exp $ d7 1 a7 1 PKGREVISION= 1 a141 7 # MacOS X 10.7 is the oldest OS X version supporting __thread. Although # ${WRKSRC}/configure has a check for it, the actual build will fail # without this env. .if ${OPSYS} == "Darwin" ALL_ENV+= MACOSX_DEPLOYMENT_TARGET="10.7" .endif @ 1.7 log @lang/ghc98: A better workaround for the native vs. GNU iconv mixture problem Instead of disallowing the existence of pkgsrc libiconv, we can have a bridge between two implementations and use it during the build of the stage-1 compiler. This way bootkits built with native iconv can co-exist with GNU libiconv in ${BUILDLINK_DIR}/lib. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.6 2024/07/30 11:38:42 wiz Exp $ a96 3 # workaround for http://gnats.netbsd.org/58379 CFLAGS+= -D__STDC_NO_ATOMICS__ @ 1.6 log @ghc98: fix PR 58379 Add -D__STDC_NO_ATOMICS__ to CFLAGS per upstream recommendation to disable AVX-512 support. Fixes build on at least NetBSD systems with AVX-512 CPUs. Enabled unconditionally since there are reports that this also causes problems on other operating systems. Ok pho@@ @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.5 2024/06/20 12:49:39 jperkin Exp $ a35 8 # The bootstrap kits are built with native iconv, and unfortunately ghc looks # in places it should not, so we have to do everything we can to avoid libiconv # being installed as it breaks the build due to iconv_*() vs libiconv_*(). # .if ${OPSYS} == "Darwin" PREFER.iconv= native .endif @ 1.5 log @ghc98: Incredibly ugly workaround to fix Darwin. Ultimately, the problem here is that GHC goes looking for things in places it should not be. If libiconv is installed, it ends up trying to link against the pkgsrc libiconv, even if it is not buildlinked. The problem is that the bootstrap kits are built with native libiconv, and so this breaks the build as they are looking for iconv_*() vs pkgsrc libiconv which uses libiconv_*(). Unfortunately setting PREFER.iconv=native isn't enough. For some reason gtar is being pulled in as a tool, and because of nls that ends up pulling in gettext-lib and therefore libiconv, which still breaks the build. The native tar works fine on Darwin, so we also need to add an exclusion to avoid gtar being added to USE_TOOLS. This "fix" will only really work in bulk builds. As soon as libiconv is installed via any other dependency it's game over. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.4 2024/05/11 18:37:40 pho Exp $ d105 3 @ 1.4 log @lang/ghc98: Remove a patch that we no longer need @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.3 2024/05/06 02:26:39 pho Exp $ d36 7 @ 1.3 log @lang/ghc98: Built a bootkit for Darwin/aarch64 I used the official binary distribution from the upstream to build this one. Glad I didn't have to cross-build it... @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.2 2024/04/28 16:23:44 pho Exp $ d58 1 @ 1.2 log @lang/ghc98: Fix a long-standing Cabal bug @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.1 2024/04/28 05:58:57 pho Exp $ d22 1 @ 1.1 log @lang/ghc98: import ghc-9.8.2 GHC: The Glasgow Haskell Compiler. The Glasgow Haskell Compiler is a robust, fully-featured, optimising compiler for the functional programming language Haskell 98 (http://www.haskell.org). GHC compiles Haskell to either native code or C. It implements numerous experimental language extensions to Haskell, including concurrency, a foreign language interface, several 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 9.8.x release series. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.6 2023/11/30 16:23:59 jperkin Exp $ d7 1 @