Files

207 lines
7.9 KiB
Tcl

# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup muniversal 1.0
name nss
version 3.125
revision 0
set NSS_VMAJOR [lindex [split ${version} .] 0]
set NSS_VMINOR [lindex [split ${version} .] 1]
set NSS_VPATCH [lindex [split ${version} .] 2]
if {${NSS_VPATCH} eq ""} {
# NSS_VPATCH should always be a number
set NSS_VPATCH 0
}
categories net
maintainers nomaintainer
license {MPL-2 GPL-2+ LGPL-2.1+}
description Network Security Service libraries.
long_description {*}${description}
homepage https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
set my_release NSS_[string map {. _} ${version}]_RTM
master_sites https://ftp.mozilla.org/pub/security/nss/releases/${my_release}/src/ \
ftp://ftp.mozilla.org/pub/security/nss/releases/${my_release}/src/
checksums rmd160 88cca564716a530a258b97cd06f63776441f00f3 \
sha256 1ad541f10da7c58dec01f540ecc44d28cbbc033f741a57473de5a0893d91606d \
size 78567913
use_configure no
# build fails with gcc-4.2 on Intel, but succeeds with gcc-4.2 on PPC
# cc1: error: unrecognized command line option "-mpclmul"
# cc1: error: unrecognized command line option "-maes"
if {${configure.build_arch} in [list i386 x86_64]} {
compiler.blacklist-append *gcc-4.* *gcc-3.*
}
patchfiles undef-prefix.patch
# VSX and Crypto have to be disabled, since they belong to post-G5 ISA.
# See: https://bugzilla.mozilla.org/show_bug.cgi?id=1687164
# gcc-4.2 does not recognize these flags:
# cc1: error: unrecognized command line option "-mcrypto"
# cc1: error: unrecognized command line option "-mvsx"
# Recent gcc does, however build still fails: https://trac.macports.org/ticket/64900
# Therefore approach is different from Intel case.
if {${configure.build_arch} in [list ppc ppc64]} {
patchfiles-append patch-ppc.diff
}
# fails with clang-425: https://trac.macports.org/ticket/63245
# warning: implicit declaration of function '_mm_sha256xxxxx'
# fails with clang < 800: https://trac.macports.org/ticket/67585
# error: "AES/PCLMUL instructions not enabled"
# TODO: Latter blacklisting is a quick fix only; needs more investigation
compiler.blacklist-append {clang < 800}
depends_lib port:nspr \
port:zlib \
port:sqlite3
destroot.dir ${destroot.dir}/dist
build.dir ${build.dir}/nss
# external tests require C++11
build.args NSS_DISABLE_GTESTS=1
# disable use of -Werror
build.args-append NSS_ENABLE_WERROR=0
# muniversal destroot requires a Makefile
post-extract {
xinstall -d -m 0755 ${destroot.dir}
copy ${filespath}/Makefile-MacPorts-Install.in ${destroot.dir}/Makefile-MacPorts-Install
reinplace "s|__MACPORTS_PREFIX__|${prefix}|g" ${destroot.dir}/Makefile-MacPorts-Install
}
destroot.args-append \
-f Makefile-MacPorts-Install
post-patch {
# libraries are not relative to any main executable, so no need for @executable_path
reinplace "s|@executable_path|${prefix}/lib/nss|g" \
${build.dir}/coreconf/Darwin.mk \
${build.dir}/lib/freebl/config.mk
}
post-destroot {
# applications seem to expect an nss-config executable and nss.pc file, but nss does not provide them
# see https://bugzilla.mozilla.org/show_bug.cgi?id=530672
xinstall -m 0755 ${filespath}/nss-config.in ${destroot}${prefix}/bin/nss-config
reinplace "s,@libdir@,${prefix}/lib/nss,g" ${destroot}${prefix}/bin/nss-config
reinplace "s,@prefix@,${prefix},g" ${destroot}${prefix}/bin/nss-config
reinplace "s,@exec_prefix@,${prefix},g" ${destroot}${prefix}/bin/nss-config
reinplace "s,@includedir@,${prefix}/include/nss,g" ${destroot}${prefix}/bin/nss-config
reinplace "s,@MOD_MAJOR_VERSION@,${NSS_VMAJOR},g" ${destroot}${prefix}/bin/nss-config
reinplace "s,@MOD_MINOR_VERSION@,${NSS_VMINOR},g" ${destroot}${prefix}/bin/nss-config
reinplace "s,@MOD_PATCH_VERSION@,${NSS_VPATCH},g" ${destroot}${prefix}/bin/nss-config
set nspr_version [exec ${prefix}/bin/nspr-config --version]
set nss_version [exec ${destroot}${prefix}/bin/nss-config --version]
xinstall -m 0644 ${filespath}/nss.pc.in ${destroot}${prefix}/lib/pkgconfig/nss.pc
reinplace "s,@libdir@,${prefix}/lib/nss,g" ${destroot}${prefix}/lib/pkgconfig/nss.pc
reinplace "s,@prefix@,${prefix},g" ${destroot}${prefix}/lib/pkgconfig/nss.pc
reinplace "s,@exec_prefix@,${prefix},g" ${destroot}${prefix}/lib/pkgconfig/nss.pc
reinplace "s,@includedir@,${prefix}/include/nss," ${destroot}${prefix}/lib/pkgconfig/nss.pc
reinplace "s,@NSPR_VERSION@,${nspr_version},g" ${destroot}${prefix}/lib/pkgconfig/nss.pc
reinplace "s,@NSS_VERSION@,${nss_version},g" ${destroot}${prefix}/lib/pkgconfig/nss.pc
# install man files
xinstall -m 0644 \
{*}[glob ${build.dir}/doc/nroff/*.1] \
${destroot}${prefix}/share/man/man1/
}
use_parallel_build no
# tls13esni.c:72: error: 'for' loop initial declaration used outside C99 mode
compiler.c_standard 1999
configure.cflags-append -std=c99
array set cpu_arch_map [list \
arm64 aarch64 \
ppc ppc \
ppc64 ppc64 \
i386 i386 \
x86_64 x86_64]
if {!${universal_possible} || ![variant_isset universal]} {
if {${configure.build_arch} in [list arm64 ppc64 x86_64]} {
build.args-append USE_64=1
}
if {[info exists cpu_arch_map(${configure.build_arch})]} {
build.args-append CPU_ARCH=$cpu_arch_map(${configure.build_arch})
}
build.args-append \
CC="${configure.cc} ${configure.cflags} [get_canonical_archflags cc]" \
CCC="${configure.cxx} ${configure.cxxflags} [get_canonical_archflags cxx]"
} else {
lappend merger_build_args(arm64) USE_64=1 CPU_ARCH=aarch64
lappend merger_build_args(i386) CPU_ARCH=i386
lappend merger_build_args(ppc64) USE_64=1
lappend merger_build_args(x86_64) USE_64=1 CPU_ARCH=x86_64
foreach arch ${universal_archs} {
lappend merger_build_args(${arch}) \
CC="${configure.cc} ${configure.cflags} -arch ${arch}" \
CCC="${configure.cxx} ${configure.cxxflags} -arch ${arch}"
}
}
build.args-append \
NSPR_INCLUDE_DIR=${prefix}/include/nspr \
NSPR_LIB_DIR=${prefix}/lib/nspr \
NSS_USE_SYSTEM_SQLITE=1 \
USE_SYSTEM_ZLIB=1 \
BUILD_OPT=1 \
OPTIMIZER="${configure.optflags}" \
OBJDIR_NAME="Output.OBJD"
if {${configure.sdkroot} ne ""} {
build.args-append \
MACOS_SDK_DIR=${configure.sdkroot}
}
if {${universal_possible} && [variant_isset universal]} {
# chk files can not be merged
merger-post-destroot {
foreach arch ${universal_archs_to_use} {
foreach chk [glob -nocomplain -directory ${destroot}-${arch}${prefix}/lib/nss *.chk] {
# delete chk file and replace it with an empty file, which can be merged
# keep the empty file so that later, we can know which chk files need to be regenerated from universal library
file delete ${chk}
touch ${chk}
}
}
}
post-destroot {
foreach chk [glob -nocomplain -directory ${destroot}${prefix}/lib/nss *.chk] {
# replace empty chk file with an actual one generated from universal library
file delete ${chk}
set base [file rootname ${chk}]
system "env DYLD_LIBRARY_PATH=${destroot}${prefix}/lib/nss ${destroot}${prefix}/bin/shlibsign -i ${base}.dylib -o ${chk}"
}
}
}
livecheck.type regex
livecheck.url https://ftp.mozilla.org/pub/security/nss/releases/
if {${NSS_VPATCH} eq 0} {
livecheck.version "${NSS_VMAJOR}_${NSS_VMINOR}"
} else {
livecheck.version "${NSS_VMAJOR}_${NSS_VMINOR}_${NSS_VPATCH}"
}
livecheck.regex {(\d+_\d+(?:_\d+)*)}