<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/7369b9ebb493cc0daf3dc5efd3afba0ce153153a">https://github.com/macports/macports-ports/commit/7369b9ebb493cc0daf3dc5efd3afba0ce153153a</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 7369b9ebb493cc0daf3dc5efd3afba0ce153153a
</span>Author: Steven Thomas Smith <s.t.smith@ieee.org>
AuthorDate: Wed Aug 17 17:53:06 2022 -0400

<span style='display:block; white-space:pre;color:#404040;'>    ghc: Update to version 9.4.2
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    * Update to version 9.4.2
</span><span style='display:block; white-space:pre;color:#404040;'>    * Refactor to use new hadrian bootstrapping
</span><span style='display:block; white-space:pre;color:#404040;'>    * hadrian port submission
</span><span style='display:block; white-space:pre;color:#404040;'>    * ghc-prebuilt subport for bootstrapping
</span><span style='display:block; white-space:pre;color:#404040;'>    * integration with new cabal-prebuilt subport
</span><span style='display:block; white-space:pre;color:#404040;'>    * integration with revised PG haskell_cabal-1.0.tcl
</span>---
 lang/ghc/Portfile                       | 620 ++++++++++++++++----------------
 lang/ghc/files/Paths_hadrian.hs         |  62 ++++
 lang/ghc/files/patch-cabal_project.diff |  22 ++
 lang/ghc/files/patch-ghc_mk.diff        |  13 -
 4 files changed, 394 insertions(+), 323 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/ghc/Portfile b/lang/ghc/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 5294a8905ee..1864f66c849 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/ghc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/ghc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,17 +5,13 @@ PortGroup           gpg_verify 1.0
</span> PortGroup           compiler_blacklist_versions 1.0
 PortGroup           legacysupport 1.1
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Disable on all systems, we just need the libraries for the binary patching
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-legacysupport.newest_darwin_requires_legacy 5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> name                ghc
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version             9.2.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             9.4.2
</span> revision            0
 categories          lang haskell
 maintainers         {ieee.org:s.t.smith @essandess} openmaintainer
 license             BSD
 platforms           darwin
<span style='display:block; white-space:pre;background:#ffe0e0;'>-supported_archs     arm64 x86_64
</span> 
 description         The Glorious Glasgow Haskell Compilation System
 long_description    The Glasgow Haskell Compiler is a robust, \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -32,24 +28,14 @@ long_description    The Glasgow Haskell Compiler is a robust, \
</span>                     generational garbage collector, and a space and \
                     time profiler.
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-homepage            http://haskell.org/${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+homepage            https://haskell.org/${name}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Bootstrapped ghc is the default build
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variant prebuilt \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    description {Do not bootstrap ghc; install the pre-built binary.} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # https://gitlab.haskell.org/ghc/ghc/-/issues/19646
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set workpath_destdir_pattern /Users/builder/Desktop/builds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://gitlab.haskell.org/ghc/ghc/-/wikis/building/hadrian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://www.haskell.org/ghc/blog/20220805-make-to-hadrian.html
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://www.haskell.org/ghcup/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://gitlab.haskell.org/haskell/ghcup/blob/master/README.md#manual-install
</span> use_xz              yes
 master_sites        https://downloads.haskell.org/~${name}/${version}
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# set build_arch by hand on arm64/x86_64 systems to get x86_64/arm64 checksums
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# run `port clean --all ghc` before commenting out this line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# set build_arch arm64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> platform arm {
     set ghc_build_arch  aarch64
 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -61,7 +47,7 @@ platform powerpc {
</span> }
 
 if {${os.arch} ni [list arm i386]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    known_fail          yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    known_fail      yes
</span>     pre-fetch {
         ui_error "GHC is only available on macOS \
             with [join ${supported_archs} " or "] architectures."
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -69,162 +55,110 @@ if {${os.arch} ni [list arm i386]} {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+set ghc_version     ${version}
</span> set ghc_distname    ${distname}-${ghc_build_arch}-apple-darwin
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set worksrcdir      ${ghc_distname}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-distfiles           ${ghc_distname}${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ${distname}-testsuite${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# set build_arch by hand on arm64/x86_64 systems to get x86_64/arm64 checksums
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sudo port -d checksum ghc os.arch=arm build_arch=arm64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# run `port clean --all ghc` afterwards
</span> if {${build_arch} eq {arm64}} {
     checksums       ${ghc_distname}${extract.suffix} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160  320ff19925143d52047bcc6a09849bd23a800ac5 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  356b99081ae38ded43b78840d673e8c782e0088e9a2aea0e19faaf677ccb54cf \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    123959636
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  d83d46d313b812618fc48c61b70cec856d262deb \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  3f38808ac6b47631487b37535b6792d6594f5e2fbb5204bb9573ed528748e736 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    198194876
</span> } elseif {${build_arch} eq {x86_64}} {
     checksums       ${ghc_distname}${extract.suffix} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160  0e758f28b4bbb581b105e369de2a004f4d0085d2 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  c527700a210306098ce85d2c956089deea539aefe1d1816701d5c14cf9c113b7 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    122462092
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  d43b11202e5088c5383bcc5bbb4cfe6639292c90 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  42bfb0412c19e3ae1727fea53208a3d15720f19c11526bb499bbd95af17e4eae \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    188413412
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums-append    ${distname}-testsuite${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160  f37e923d76381cb34da478b8c047d4440d9a4933 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  0402066000db81781b343976f1a274e54ebb117d599da1a979ccb0b99ab782cd \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    3170520
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set ghc_source_checksums [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${distname}-src${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  2479a11a4723faa1cdfb5082c12cb86437153ce8 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  7227ef3b5e15a0d70b8f1a43aec32867e2a9b2d857cc0ed556aeed172d4db3a5 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    28545388 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set ghc_testsuite_checksums [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${distname}-testsuite${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  fac63ddd5534ef7db6dd899e0c1673799763cf7b \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  e3e9dedd647cc6936acb507730c1e148e13300ed347ea9752c3bbc7e919b671e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    3380276 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://bgamari.github.io/media/ben@well-typed.com.asc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set gpg_keyid       ffeb7ce81e16a36b3e2ded6f2de04d4e97db64ad
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${name} eq ${subport}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    PortGroup       haskell_cabal 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    haskell_cabal.use_prebuilt  yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cmd   ./configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.pre_args \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --prefix=${prefix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.cmd       hadrian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.target    binary-dist-dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.pre_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build.post_args [haskell_cabal.build_getjobsarg]
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-gpg_verify.use_gpg_verification \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.cmd    hadrian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.target install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.pre_args \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --prefix=${destroot}${prefix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    destroot.post_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.cmd        hadrian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.target     test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.pre_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.post_args  [haskell_cabal.build_getjobsarg]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles       [lindex ${ghc_source_checksums} 0] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    [lindex ${ghc_testsuite_checksums} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums       {*}${ghc_source_checksums} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    {*}${ghc_testsuite_checksums}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    extract.only    [lindex ${ghc_source_checksums} 0] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    [lindex ${ghc_testsuite_checksums} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant prebuilt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        description {This variant is deprecated.} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Please install the port ${name}-prebuilt."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -code error "deprecated variant."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    gpg_verify.use_gpg_verification \
</span>                     yes
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[option gpg_verify.use_gpg_verification]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    distfiles-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ${ghc_distname}${extract.suffix}.sig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option gpg_verify.use_gpg_verification]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distfiles-append \
</span>                     ${distname}-testsuite${extract.suffix}.sig
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    checksums-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ${ghc_distname}${extract.suffix}.sig \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    586 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums-append \
</span>                     ${distname}-testsuite${extract.suffix}.sig \
                     size    586
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    post-checksum {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # https://bgamari.github.io/media/ben@well-typed.com.asc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set gpg_keyid ffeb7ce81e16a36b3e2ded6f2de04d4e97db64ad
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        gpg_verify.verify_gpg_signature \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${filespath}/keyid-${gpg_keyid}.txt \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${distpath}/${ghc_distname}${extract.suffix}.sig \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${distpath}/${ghc_distname}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        gpg_verify.verify_gpg_signature \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${filespath}/keyid-${gpg_keyid}.txt \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${distpath}/${distname}-testsuite${extract.suffix}.sig \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${distpath}/${distname}-testsuite${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-extract.only        ${ghc_distname}${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ${distname}-testsuite${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# If legacy support is active, patch the bootstrap binaries to redirect libSystem.B.dylib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# to MacPorts wrapped implementation which reexports the system library, adding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# each missing in each OS.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if {${os.platform} eq "darwin" && ${os.major} <= [legacysupport::get_newest_darwin_with_missing_symbols]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    depends_lib-append [legacysupport::get_dependency]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    post-extract {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach f [ exec find ${workpath}/ -type f -and -name "*.dylib" -or -name "*ghc*" -and -not -name "*stderr"] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[string match "application/*" [lindex [exec /usr/bin/file --mime-type ${f}] end]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set sLib /usr/lib/libSystem.B.dylib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set lLib ${prefix}/lib/libMacportsLegacySystem.B.dylib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                system "install_name_tool -change ${sLib} ${lLib} ${f} > /dev/null 2>&1 ; true"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        post-checksum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            gpg_verify.verify_gpg_signature \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${filespath}/keyid-${gpg_keyid}.txt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${distpath}/${distname}-testsuite${extract.suffix}.sig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${distpath}/${distname}-testsuite${extract.suffix}
</span>         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Build requires C11
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.c_standard 2011
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# On OSX 10.{8,9} with clang 503, 600
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#   :info:build dtrace: failed to open td=gnu11/usr/bin/clang -std=gnu11 -E ...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.blacklist-append {clang < 700}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# use these to specify python versions, python3 required
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# use ${prefix}/var/macports/sources/rsync.macports.org/macports/release/tarballs/ports/_resources/port1.0/group/python-1.0.tcl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set python3_version 39
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set python3_branch [string index ${python3_version} 0].[string range ${python3_version} 1 end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set srcpath ${workpath}/src
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# get the objdump rpath names that match ${workpath} in the binary
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc get_workpath_list { binname workpath_destdir_pattern } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [exec bash -c "otool -l \"${binname}\" 2>/dev/null \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        | grep -E -A 2 -e '\[\[:space:]]+cmd\[\[:space:]]+LC_RPATH' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        | grep -E -e '\[\[:space:]]+path\[\[:space:]]+' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        | grep -E -o -e '(${workpath_destdir_pattern}\[^ ]+)' || true"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# fix ${workpath} rpath dirs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc fix_workpath_rpath { binname workpath_destdir_pattern libdir_glob rpath_re } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global destroot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set workpath_list \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        [get_workpath_list ${binname} ${workpath_destdir_pattern}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach path [lreverse ${workpath_list}] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        system "install_name_tool -delete_rpath \"${path}\" \"${binname}\" || true"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach rpath [exec bash -c \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "otool -L \"${binname}\" | grep -E -o -e '${rpath_re}' || true"] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set libname [strsed ${rpath} "s|^@rpath/||"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set libpath [glob -nocomplain "${destroot}${libdir_glob}/${libname}"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if { ${libpath} ne "" } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set libprefixpath \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                [strsed [file dirname ${libpath}] "s|${destroot}||"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            system "install_name_tool -add_rpath \"${libprefixpath}\" \"${binname}\" || true"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# `make install` in bootstrap build cannot use a parallel build.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Also during the main build the 'ghc-stage1' processes can use huge amounts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# of memory, leading to build failures (particularly on the buildbots or VMs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# with limited resources). So disable parallel builds there as well, at the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# expense of a longer build time (mitigated by fact most users will then get
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# the binary installation).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-use_parallel_build  no
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Note: ghc has DESTDIR; however, specifying --prefix=${prefix} installs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# binaries into ${prefix}, not DESTDIR.  Work around this by setting
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# --prefix=${destroot}${prefix} and not setting DESTDIR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    use_xcode       yes
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_lib-append  port:libffi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Build requires C11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.c_standard 2011
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # On OSX 10.{8,9} with clang 503, 600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #   :info:build dtrace: failed to open td=gnu11/usr/bin/clang -std=gnu11 -E ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.blacklist-append {clang < 700}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-if { [variant_isset "prebuilt"] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set bootstrap_dir ${destroot}${prefix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # install the initial bootstrap compiler to destroot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.pre_args \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    --prefix=${bootstrap_dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the PATH environment must provide the bootstrap path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    build.env-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    "PATH=$env(PATH):${bootstrap_dir}/bin"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    post-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # avoid conflicts with libffi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach f {ffi.h ffitarget.h} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[file exists ${prefix}/include/${f}] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                && [file exists ${destroot}${prefix}/include/${f}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                delete ${destroot}${prefix}/include/${f}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set bootstrap_dir ${workpath}/bootstrap
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    distfiles-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ${distname}-src${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    checksums-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ${distname}-src${extract.suffix} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160  93a5bb73ffab85daabeed6b65dc349bda28f4359 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  f444012f97a136d9940f77cdff03fda48f9475e2ed0fec966c4d35c4df55f746 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    23338772
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # use these to specify python versions, python3 required
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # use ${prefix}/var/macports/sources/rsync.macports.org/macports/release/tarballs/ports/_resources/port1.0/group/python-1.0.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set python3_version 310
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set python3_branch  [string index ${python3_version} 0].[string range ${python3_version} 1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set python3_prefix  ${frameworks_dir}/Python.framework/Versions/${python3_branch}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set python3_bin     ${python3_prefix}/bin/python${python3_branch}
</span> 
     depends_build-append \
                     port:alex \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -234,6 +168,7 @@ if { [variant_isset "prebuilt"] } {
</span>                     port:bzip2 \
                     port:cctools \
                     port:gzip \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                    port:hadrian \
</span>                     port:happy \
                     port:HsColour \
                     port:python${python3_version} \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -244,188 +179,126 @@ if { [variant_isset "prebuilt"] } {
</span>                     port:texlive-latex-extra \
                     port:xz
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_lib-append  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    port:gmp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    
</span>     # build depends upon these x86_64 binaries
     depends_skip_archcheck-append \
                     alex \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                    hadrian \
</span>                     happy \
                     HsColour
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Add these MacPorts dependencies after this issue is fixed:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # https://gitlab.haskell.org/ghc/ghc/-/issues/18752
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # depends_lib-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 port:gmp \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 port:libiconv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    post-extract {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # test: move extracted testsuite directory to src
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        xinstall -m 0755 -d ${srcpath}/${distname}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        move        ${workpath}/${distname}/testsuite ${srcpath}/${distname}/testsuite
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-patch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # bootstrap build/destroot from cabal-prebuilt and ghc-prebuilt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d ${workpath}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ln -s       ${haskell_cabal.bin} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${workpath}/bin/cabal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ln -s       ${prefix}/bin/ghc-prebuilt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${workpath}/bin/ghc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # the versions of ghc and ghc-pkg must match
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ln -s       ${prefix}/bin/ghc-pkg-prebuilt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${workpath}/bin/ghc-pkg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ln -s       ${python3_bin} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${workpath}/bin/python3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ln -s       ${prefix}/bin/sphinx-build-${python3_branch} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${workpath}/bin/sphinx-build
</span>     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # libHSbase shipped with GHC links against system libiconv, which provides the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # 'iconv' symbol, but not the 'libiconv' symbol. Because the compilation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # process statically links libHSbase.a, we must have /usr/lib in the library
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # search path first :/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    compiler.library_path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    compiler.cpath
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # install the initial bootstrap compiler to destroot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.pre_args \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    --prefix=${bootstrap_dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Add these MacPorts dependencies after this issue is fixed:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # https://gitlab.haskell.org/ghc/ghc/-/issues/18752
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 --with-ffi-includes=${prefix}/include \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 --with-ffi-libraries=${prefix}/lib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 --with-gmp-includes=${prefix}/include \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 --with-gmp-libraries=${prefix}/lib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 --with-iconv-includes=${prefix}/include \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    #                 --with-iconv-libraries=${prefix}/lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # add the bootstrap binary and the sphinx-build binary to PATH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.env-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        GHC=${bootstrap_dir}/bin/ghc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "PATH=$env(PATH):${bootstrap_dir}/bin:${frameworks_dir}/Python.framework/Versions/${python3_branch}/bin"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # configure.dir   ${workpath}/${ghc_distname}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    pre-configure {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        xinstall -m 0755 -d ${bootstrap_dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # the PATH environment must provide the bootstrap path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    build.env \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "PATH=$env(PATH):${bootstrap_dir}/bin:${frameworks_dir}/Python.framework/Versions/${python3_branch}/bin"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Remove after this issue is fixed:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # https://gitlab.haskell.org/ghc/ghc/-/issues/20592
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {${build_arch} eq {arm64}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        build.env-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        "C_INCLUDE_PATH=${configure.sdkroot}/usr/include/ffi"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    build.dir           ${configure.dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    post-build {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # bootstrap build/destroot from ${distname}-src${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # extract
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        extract.dir     ${srcpath}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        extract.only    ${distname}-src${extract.suffix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        portextract::extract_main
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-patch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if { ![file exists ${worksrcpath}/boot] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xinstall \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${worksrcpath}/boot.source \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${worksrcpath}/boot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span> 
         # fix DejaVu texlive fonts names, e.g. "\setmonofont{DejaVu Sans Mono}"
         foreach f [list \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${srcpath}/${distname}/libraries/Cabal/doc/conf.py \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${srcpath}/${distname}/docs/users_guide/conf.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${worksrcpath}/libraries/Cabal/doc/conf.py \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${worksrcpath}/docs/users_guide/conf.py \
</span>             ] {
             reinplace -E "s|(\{DejaVu\[\[:alnum:]_]*)\[\[:space:]]+|\\1|g" \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${f}
</span>             reinplace -E "s|(\{DejaVu\[\[:alnum:]_]*)\[\[:space:]]+|\\1|g" \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${f}
</span>             reinplace -E "s|\{(DejaVu\[\[:alnum:]_]*)\}|\{\\1.ttf\}|g" \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${f}
</span>         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # fix python3 executable name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach f [list \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${srcpath}/${distname}/boot \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${srcpath}/${distname}/utils/checkUniques/check-uniques.py \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            reinplace -E "s|^(#!/usr/bin/env python)3|\\1${python3_branch}|" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pre-configure {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach phase {configure build destroot test} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${phase}.env-replace \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "PATH=${haskell_cabal.cabal_root}/bin:$env(PATH)" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "PATH=${workpath}/bin:$env(PATH)"
</span>         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # see https://trac.macports.org/wiki/UsingTheRightCompiler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        configure.env-append    CC=${configure.cc} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                CXX=${configure.cxx}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        build.env-append        CC=${configure.cc} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                CXX=${configure.cxx}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Remove this patch for version 9.2.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # https://gitlab.haskell.org/ghc/ghc/-/issues/19631
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # https://gitlab.haskell.org/ghc/ghc/-/commit/71c1bdb0b657667c0bbc805bb7ab83408ffc2784
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # diff -Naur ghc-orig ghc-new | sed -E -e 's/ghc-(orig|new)\//.\//g' > patch-ghc_mk.diff
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        system -W ${srcpath}/${distname} "patch -p0 < ${filespath}/patch-ghc_mk.diff"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        system -W ${srcpath}/${distname} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    "export ${configure.env} ;\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ./boot"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # configure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # install the final compiler to destroot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        configure.pre_args-replace \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    --prefix=${bootstrap_dir} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    --prefix=${destroot}${prefix}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        configure.dir   ${srcpath}/${distname}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        system -W ${srcpath}/${distname} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "export ${configure.env};\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${configure.cmd} ${configure.pre_args}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # build and destroot the second stage: `make && make install`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        system -W ${srcpath}/${distname} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "export ${build.env};\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${build.cmd} [portbuild::build_getjobsarg]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        system -W ${srcpath}/${distname} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            "export ${build.env};\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ${build.cmd} ${destroot.pre_args}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pre-configure {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system -W ${worksrcpath} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "./boot"
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-build.target        install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    use_autoconf    yes
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    xinstall -W ${filespath} -m 0644 ./ghci.conf ${destroot}${prefix}/etc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # https://gitlab.haskell.org/ghc/ghc/-/issues/22118
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.pre_args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --with-gmp-includes=${prefix}/include \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --with-gmp-libraries=${prefix}/lib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --with-iconv-includes=${prefix}/include \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --with-iconv-libraries=${prefix}/lib
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://gitlab.haskell.org/ghc/ghc/-/issues/19646
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set workpath_destdir_pattern ${workpath}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-post-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # fix rpath searches
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set dylib_list {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fs-traverse f ${destroot}${prefix}/lib/${name}-${version} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if { [file isfile ${f}] && [string match "*.dylib" ${f}] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            lappend dylib_list ${f}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pre-build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        build.env-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    CC=${configure.cc} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "CFLAGS=${configure.cflags} [get_canonical_archflags cc]" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "CPPFLAGS=${configure.cppflags}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "LDFLAGS=${configure.ldflags} [get_canonical_archflags ld]"
</span>     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach f [concat \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        [glob -type f ${destroot}${prefix}/lib/${name}-${version}/bin/*] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ${dylib_list}] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[file executable ${f}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            || [string match *.dylib ${f}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            fix_workpath_rpath ${f} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${workpath_destdir_pattern} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ${prefix}/lib/${name}-${version}/* \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                {@rpath/lib.+\.dylib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system -W ${build.dir} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "${build.cmd} docs [haskell_cabal.build_getjobsarg]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    pre-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # mk/install_script.sh isn't automatically created by hadrian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set bindist_mkdir [glob ${worksrcpath}/_build/bindist/${distname}-*/mk]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {![file exists ${bindist_mkdir}/install_script.sh]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xinstall -W ${worksrcpath} mk/install_script.sh ${bindist_mkdir}
</span>         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-post-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # delete any destroot path appearing in text files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    fs-traverse f ${destroot}${prefix} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[file isfile ${f}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[string match "text/*" [lindex [exec /usr/bin/file --mime-type ${f}] end]]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                reinplace -q "s|${destroot}||g" ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # documentation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -W ${filespath} -m 0644 ./ghci.conf ${destroot}${prefix}/etc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        delete      ${destroot}${prefix}/share/share/doc/${distname}/archives
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -d ${destroot}${prefix}/share/man/man1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        xinstall -m 0644 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${worksrcpath}/_build/doc/users_guide/build-man/${name}.1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${destroot}${prefix}/share/man/man1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # delete any destroot path appearing in text files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        fs-traverse f ${destroot}${prefix} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[file isfile ${f}] && [file type ${f}] eq {file}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[string match "text/*" [lindex [exec /usr/bin/file --mime-type ${f}] end]]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    reinplace -q "s|${destroot}||g" ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span>             }
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-post-activate {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    system "${prefix}/bin/ghc-pkg recache"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-pre-test {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test.env-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "PATH=$env(PATH):${bootstrap_dir}/bin:${frameworks_dir}/Python.framework/Versions/${python3_branch}/bin"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.run        yes
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-test.run            yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test.dir            ${srcpath}/${distname}/testsuite
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test.target         test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-activate {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        system "${prefix}/bin/ghc-pkg recache"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-notes "The GHC User Manual is available at:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    notes "The GHC User Manual is available at:
</span> 
     file://${prefix}/share/doc/${distname}/html/index.html
     ${prefix}/share/doc/${distname}/users_guide.pdf
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -433,8 +306,135 @@ notes "The GHC User Manual is available at:
</span> Copy/edit ${prefix}/etc/ghci.conf to your directory ~/.ghc
 for a user-specific startup configuration."
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# livecheck broken on downloads.haskell.org
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# See: https://lists.macports.org/pipermail/macports-dev/2019-December/041581.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#livecheck.type      regex
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#livecheck.url       https://downloads.haskell.org/~${name}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#livecheck.regex     (\\d+(?:\\.\\d+){1,3})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # livecheck broken on downloads.haskell.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # See: https://lists.macports.org/pipermail/macports-dev/2019-December/041581.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #livecheck.type      regex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #livecheck.url       https://downloads.haskell.org/~${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #livecheck.regex     (\\d+(?:\\.\\d+){1,3})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport ghc-prebuilt {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    supported_archs arm64 x86_64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    worksrcdir      ${ghc_distname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles       ${ghc_distname}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    gpg_verify.use_gpg_verification \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option gpg_verify.use_gpg_verification]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        distfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${ghc_distname}${extract.suffix}.sig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        checksums-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${ghc_distname}${extract.suffix}.sig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    586
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        post-checksum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            gpg_verify.verify_gpg_signature \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${filespath}/keyid-${gpg_keyid}.txt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${distpath}/${ghc_distname}${extract.suffix}.sig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${distpath}/${ghc_distname}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    extract.only    ${ghc_distname}${extract.suffix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Build requires C11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.c_standard 2011
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # On OSX 10.{8,9} with clang 503, 600
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    #   :info:build dtrace: failed to open td=gnu11/usr/bin/clang -std=gnu11 -E ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    compiler.blacklist-append {clang < 700}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distname        ${name}-${ghc_version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    worksrcdir      ${distname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    build           {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # rename installed files to *-prebuilt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set exedir ${prefix}/lib/${distname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set docdir ${prefix}/share/doc/${distname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach f [glob ${destroot}${prefix}/bin/*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[file isfile ${f}] && [file type ${f}] eq {file}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                && [string match "text/*" [lindex [exec /usr/bin/file --mime-type ${f}] end]]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                reinplace -E -q \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    "s|^(exeprog=\".+)(\")\$|\\1-prebuilt\\2|" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                foreach d [list ${exedir} ${docdir}] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    reinplace -E -q "s|(${d})|\\1-prebuilt|g" ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                move ${f} ${f}-prebuilt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } elseif {[file type ${f}] eq {link}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set flink [file readlink ${f}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ln -s ${flink}-prebuilt ${f}-prebuilt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                delete ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach d [list ${destroot}${exedir} ${destroot}${docdir}] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            move    ${d} ${d}-prebuilt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        delete -force \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ${destroot}${docdir}/archives
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport hadrian {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # find ${worksrcpath} -type f -exec egrep -E -o '"pkg-name":"shake","pkg-version":"[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+"' {} ';'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    version         0.19.6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variant stack \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        description {Use stack to build.} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { [variant_isset "stack"] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        PortGroup   haskell_stack 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Fix for cabal data-files hardcoded path in binary
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # See:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # https://github.com/commercialhaskell/stack/issues/848
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # https://github.com/commercialhaskell/stack/issues/4857
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # https://github.com/haskell/cabal/issues/462
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # https://github.com/haskell/cabal/issues/3586
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            xinstall -m 0644 -W ${worksrcpath} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${filespath}/Paths_${subport}.hs ./src/Paths_${subport}.hs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|@PREFIX@|${prefix}|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${worksrcpath}/src/Paths_${subport}.hs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace "s|@NAME@|${subport}|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${worksrcpath}/src/Paths_${subport}.hs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reinplace -E "s|(Version\[\[:space:\]\]+)\\\[\[\[:digit:\]\]+(,\[\[:digit:\]\]+){1,4}\\\]|\\1\[[join [split ${version} .] ,]\]|" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ${worksrcpath}/src/Paths_${subport}.hs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        PortGroup   haskell_cabal 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        variant haskell_cabal_use_prebuilt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            description {Use prebuilt cabal and ghc. This is a necessary\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                default variant because hadrian is used to bootstrap ghc\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                and ghc is used to bootstrap cabal.} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            haskell_cabal.use_prebuilt  yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        default_variants-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    +haskell_cabal_use_prebuilt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # patch to allow compilation with ghc 9.4.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # please remove after next upgrade
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # https://gitlab.haskell.org/ghc/ghc/-/issues/21980#note_447726
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-cabal_project.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach phase {build destroot test} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ${phase}.post_args-prepend \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --project-file=cabal.project
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distname        ${name}-${ghc_version}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    distfiles       [lindex ${ghc_source_checksums} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    checksums       {*}${ghc_source_checksums}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    extract.only    [lindex ${ghc_source_checksums} 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    worksrcdir      ${distname}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set worksrcpath ${workpath}/${worksrcdir}/${subport}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/ghc/files/Paths_hadrian.hs b/lang/ghc/files/Paths_hadrian.hs
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..b0986aee428
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/ghc/files/Paths_hadrian.hs
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,62 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{- Cabal data-files hardcoded path in binary fix.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This file replaces the Paths_*.hs automatically created by cabal.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+See:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+* https://github.com/commercialhaskell/stack/issues/848
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+* https://github.com/commercialhaskell/stack/issues/4857
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+* https://github.com/haskell/cabal/issues/462
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+* https://github.com/haskell/cabal/issues/3586
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{-# LANGUAGE CPP #-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{-# LANGUAGE NoRebindableSyntax #-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+module Paths_hadrian (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    version,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    getDataFileName, getSysconfDir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  ) where
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+import qualified Control.Exception as Exception
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+import Data.Version (Version(..))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+import System.Environment (getEnv)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+import Prelude
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if defined(VERSION_base)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#if MIN_VERSION_base(4,0,0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+catchIO :: IO a -> (Exception.Exception -> IO a) -> IO a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+catchIO = Exception.catch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version :: Version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version = Version [0,1,0,0] []
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+bindir, libdir, dynlibdir, datadir, libexecdir, sysconfdir :: FilePath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+bindir     = "@PREFIX@/bin"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+libdir     = "@PREFIX@/lib/@NAME@"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dynlibdir  = "@PREFIX@/lib/@NAME@"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+datadir    = "@PREFIX@/share/@NAME@"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+libexecdir = "@PREFIX@/lib/@NAME@"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sysconfdir = "@PREFIX@/etc"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getBinDir, getLibDir, getDynLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getBinDir = catchIO (getEnv "hadrian_bindir") (\_ -> return bindir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getLibDir = catchIO (getEnv "hadrian_libdir") (\_ -> return libdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getDynLibDir = catchIO (getEnv "hadrian_dynlibdir") (\_ -> return dynlibdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getDataDir = catchIO (getEnv "hadrian_datadir") (\_ -> return datadir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getLibexecDir = catchIO (getEnv "hadrian_libexecdir") (\_ -> return libexecdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getSysconfDir = catchIO (getEnv "hadrian_sysconfdir") (\_ -> return sysconfdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getDataFileName :: FilePath -> IO FilePath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+getDataFileName name = do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  dir <- getDataDir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  return (dir ++ "/" ++ name)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/ghc/files/patch-cabal_project.diff b/lang/ghc/files/patch-cabal_project.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..28693bdcf1a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/ghc/files/patch-cabal_project.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,22 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ./cabal.project        2022-09-03 20:04:07.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ./cabal.project        2022-09-03 20:06:31.000000000 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,9 +1,18 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ packages: ./
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++allow-newer: base, template-haskell, ghc-bignum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++constraints:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  primitive == 0.7.4.0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  hashable == 1.4.0.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -- This essentially freezes the build plan for hadrian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-index-state: 2022-03-26T18:46:55Z
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++index-state: 2022-08-09T12:46:55Z
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -- N.B. Compile with -O0 since this is not a performance-critical executable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -- and the Cabal takes nearly twice as long to build with -O1. See #16817.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ package Cabal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   optimization: False
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++package hadrian
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  flags: -selftest
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/ghc/files/patch-ghc_mk.diff b/lang/ghc/files/patch-ghc_mk.diff
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 604a4bc88de..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/ghc/files/patch-ghc_mk.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,13 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff -Naur ./utils/ghc-cabal/ghc.mk ./utils/ghc-cabal/ghc.mk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- ./utils/ghc-cabal/ghc.mk       2022-02-13 13:55:11.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ ./utils/ghc-cabal/ghc.mk       2022-02-13 13:54:05.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -59,7 +59,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   "$(GHC)" $(SRC_HC_OPTS) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          $(addprefix -optc, $(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE0)) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          $(addprefix -optl, $(SRC_LD_OPTS) $(CONF_GCC_LINKER_OPTS_STAGE0)) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                           -O0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+             -O0 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+             -XHaskell2010 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          -hide-all-packages \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          -package-env - \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-          $(addprefix -package , $(CABAL_BUILD_DEPS)) \
</span></pre><pre style='margin:0'>

</pre>