Files

266 lines
12 KiB
Tcl

# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
name ghc-bootstrap
set canonicalname ghc
version 7.6.3
revision 0
categories lang haskell
maintainers nomaintainer
license BSD
# ppc64 will need cross-compilation, not enabled for now.
supported_archs i386 x86_64 ppc
universal_variant no
installs_libs no
description The Glorious Glasgow Haskell Compilation System
long_description This is a package that installs a binary \
bootstrap ghc compiler.
homepage https://haskell.org/${canonicalname}
master_sites ${homepage}/dist/${version}/
if {${configure.build_arch} in [list ppc ppc64]} {
distname ${canonicalname}-${version}-src
} else {
distname ${canonicalname}-${version}-${build_arch}-apple-darwin
}
worksrcdir ${canonicalname}-${version}
use_bzip2 yes
checksums ${canonicalname}-${version}-i386-apple-darwin${extract.suffix} \
rmd160 aca3ff527969cfaf1e4ebcbf304dd49e264b0ad7 \
sha256 b212acd6ef99df87a4a6f2fb68b1de35071527889743bbd69b9c9ab2d301b178 \
size 158867690 \
${canonicalname}-${version}-x86_64-apple-darwin${extract.suffix} \
rmd160 2ed57694bcf505e13fa69a7c84a83cb49040ea0c \
sha256 f7a35bea69b6cae798c5f603471a53b43c4cc5feeeeb71733815db6e0a280945 \
size 151929866 \
${canonicalname}-${version}-src${extract.suffix} \
rmd160 82a673ed38b7cf9a59afeb01057625fc761a822b \
sha256 bd43823d31f6b5d0b2ca7b74151a8f98336ab0800be85f45bb591c9c26aac998 \
size 110763823
# There are no ready-built binaries of GHC 7.6.x for PPC. We use 7.0.4 to build 7.6.3 from source.
platform darwin powerpc {
PortGroup active_variants 1.1
depends_build-append \
port:ghc-ppc-bootstrap \
port:libxslt
depends_lib-append \
port:gmp \
port:libiconv \
port:ncurses
patchfiles-append \
patch-configure.diff \
patch-utils__mkdirhier__mkdirhier.sh.diff \
patch-includes_HsFFI.h.diff \
validate-settings.diff \
patch-10.6.diff
}
# Compilation (of the final non-bootstrap GHC, which uses the C compiler
# configured in this port) fails with older versions of clang. clang-4.1 from
# Xcode 4.5 is too old, clang-5.1 from from Xcode 5.1 works. I do not have
# any data points in between, so I'm blacklisting everything lower than 5.1.
# If you want to test the versions in between, be my guest.
# Also avoid LLVM GCC 4.2 and GCC 4.2, which are before MacPorts' clang 3.4
# in the fallback list on some systems.
compiler.blacklist-append \
*gcc-4.0 \
llvm-gcc-4.2 \
{clang < 503.0.38} \
macports-clang-3.3
if {${configure.build_arch} ni [list ppc ppc64]} {
# There seems to be no reason to blacklist this, since it should work on every released version of macOS where present,
# and has been reported to work, but since the port was set up this way earlier, we retain it.
compiler.blacklist-append \
*gcc-4.2
}
platform darwin {
if {${configure.build_arch} ni [list ppc ppc64]} {
post-extract {
# Copy clang-wrapper for re-inplace during configure
xinstall -m 644 ${filespath}/clang-wrapper ${workpath}/clang-wrapper
}
# ghc needs a build and runtime dependency on the compiler used to build it.
# Same is also set in ghc-bootstrap. clang-9.0 works, is needed on older systems anyway.
# Also /usr/bin/clang does not work on 10.11, so override it there.
if {${os.major} < 13 || ${os.major} == 15} {
depends_run-append port:clang-9.0
compiler.whitelist macports-clang-9.0
}
} else {
# This is PPC:
compiler.blacklist-append *clang*
# Newer gcc do not build it. Restriction to gcc7 is on purpose.
variant gcc7 conflicts gcc42 description {Compile with gcc 7} {
configure.compiler macports-gcc-7
depends_run-append port:gcc7
require_active_variants ghc-ppc-bootstrap gcc7
configure.args-append --with-gcc=${configure.cc}
}
variant gcc42 conflicts gcc7 description {Compile with Xcode gcc 4.2} {
configure.compiler gcc-4.2
require_active_variants ghc-ppc-bootstrap gcc42
configure.args-append --with-gcc=${configure.cc}
}
if {![variant_isset gcc7] && ![variant_isset gcc42]} {
default_variants +gcc42
}
}
}
configure.pre_args --prefix=${prefix}/share/ghc-bootstrap
platform darwin {
if {${configure.build_arch} ni [list ppc ppc64]} {
pre-configure {
# OK so because this binary has been prebuilt for libraries in /usr/lib
# We search these before macports stuff so (hopefully) weird things don't happen
configure.ldflags -L/usr/lib
configure.cppflags -I/usr/include
# patch clang-wrapper and make sure it is used by patching settings.in
reinplace "s#@clang@#${configure.cc}#g" ${workpath}/clang-wrapper
reinplace "s#@SettingsCCompilerCommand@#${prefix}/share/ghc-bootstrap/libexec/clang-wrapper#g" ${worksrcpath}/settings.in
}
build {}
} else {
# Here we ghc-ppc-bootstrap port to build GHC.
# The build is quite fragile; do not modify settings unnecessarily.
set bootstraproot ${prefix}/share/ghc-ppc-bootstrap
configure.args-append \
--with-ghc=${bootstraproot}/bin/ghc \
--with-iconv-includes=${prefix}/include \
--with-iconv-libraries=${prefix}/lib \
--with-gmp-includes=${prefix}/include \
--with-gmp-libraries=${prefix}/lib \
--with-macosx-deployment-target=${macosx_deployment_target}
# OK so because the bootstrap binary has been prebuilt for libraries
# in /usr/lib we search these before macports stuff to prevent
# link errors, ghc _should_ actually compile itself in stage2
# using paths from the command line arguments
compiler.cpath /usr/include
compiler.library_path /usr/lib
}
}
platform darwin {
if {${configure.build_arch} ni [list ppc ppc64]} {
post-destroot {
# install clang-wrapper to libexec
xinstall -d -m 755 ${destroot}${prefix}/share/ghc-bootstrap/libexec
xinstall -m 755 ${workpath}/clang-wrapper ${destroot}${prefix}/share/ghc-bootstrap/libexec
# Delete all .dylib files, because their load commands would have to be
# fixed or rev-upgrade complains and tries to rebuild the port. However,
# we cannot correctly fix all .dylibs, because the have not been built
# with -headerpad_max_install_names. Deleting them fixes the problem
# and GHC still seems to compile correctly.
# We also delete all the .html files, because we really don't need
# the documentation in a bootstrap port.
fs-traverse f ${destroot}${prefix} {
if {[file isfile ${f}]} {
set ext [file extension ${f}]
if {${ext} eq ".html" || ${ext} eq ".dylib"} {
delete ${f}
}
}
}
}
} else {
post-destroot {
set prefixlib ${prefix}/share/ghc-bootstrap/lib/${worksrcdir}
set destlib ${destroot}/${prefixlib}
set libver ${canonicalname}${version}
variable libs [ list \
libHSrts-${libver}.dylib \
libHSrts_debug-${libver}.dylib \
libHSrts_thr-${libver}.dylib \
libHSrts_thr_debug-${libver}.dylib ]
system "install_name_tool -id ${prefixlib}/libffi.dylib ${destlib}/libffi.dylib"
foreach lib $libs {
regexp -line {[^[:space:]]*/libffi.*\.dylib} [exec otool -L ${destlib}/${lib}] oldlib
system "install_name_tool -change ${oldlib} ${prefixlib}/libffi.dylib ${destlib}/$lib"
}
}
pre-activate {
# Legacy port deactivation hack added 2012-12-08
if {![catch {set platform_ghc_installed [lindex [registry_active hs-platform-ghc] 0]}]} {
# hs-platform-ghc is installed and active
# force deactivation
registry_deactivate_composite hs-platform-ghc "" [list ports_nodepcheck 1]
}
# Legacy port deactivation hack added 2013-08-11, hs-process is provided by base
if {![catch {set hs_process_installed [lindex [registry_active hs-process] 0]}]} {
# hs-process is installed and active
# force deactivation
registry_deactivate_composite hs-process "" [list ports_nodepcheck 1]
}
# Legacy port deactivation hack added 2013-08-14, hs-template-haskell is provided by base
if {![catch {set hs_template_haskell_installed [lindex [registry_active hs-template-haskell] 0]}]} {
# hs-template-haskell is installed and active
# force deactivation
registry_deactivate_composite hs-template-haskell "" [list ports_nodepcheck 1]
}
}
post-activate {
set libprefix "${prefix}/share/ghc-bootstrap/lib/${canonicalname}-${version}"
set packageconfd "${libprefix}/package.conf.d"
set deletefiles [list]
# files that were not correctly unregistered due to --force missing in the haskell portgroup,
# leaving package registrations of packages that still had dependents in place
# added 2013-12-14
lappend deletefiles "${packageconfd}/Cabal-1.16.0.3-*.conf"
lappend deletefiles "${packageconfd}/cereal-0.3.5.2-*.conf"
lappend deletefiles "${packageconfd}/cpphs-1.16-*.conf"
lappend deletefiles "${packageconfd}/entropy-0.2.2.2-*.conf"
lappend deletefiles "${packageconfd}/highlighting-kate-0.5.3.9-*.conf"
lappend deletefiles "${packageconfd}/language-c-0.3.2.1-*.conf"
lappend deletefiles "${packageconfd}/nats-0.1-*.conf"
lappend deletefiles "${packageconfd}/primitive-0.5.0.1-*.conf"
lappend deletefiles "${packageconfd}/semigroups-0.11-*.conf"
lappend deletefiles "${packageconfd}/semigroups-0.9.2-*.conf"
lappend deletefiles "${packageconfd}/template-haskell-2.8.0.0-10af654f73a6befd48e3430f5bf44c21.conf"
lappend deletefiles "${packageconfd}/uniplate-1.6.10-*.conf"
fs-traverse file $packageconfd {
foreach pattern $deletefiles {
if {[string match $pattern $file]} {
ui_debug "Removing remnant package registration file ${file}"
delete $file
}
}
}
catch {system "${prefix}/share/ghc-bootstrap/bin/ghc-pkg -v recache"}
}
}
}
livecheck.type none