# Template file for 'nss'

_nsprver=4.39

pkgname=nss
version=3.126
revision=1
_v="${version//\./_}"
hostmakedepends="perl"
makedepends="nspr-devel sqlite-devel zlib-devel"
short_desc="Mozilla Network Security Services"
maintainer="Đoàn Trần Công Danh <congdanhqx@gmail.com>"
license="MPL-2.0, MIT, BSD-3-Clause"
homepage="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS"
distfiles="${MOZILLA_SITE}/security/nss/releases/NSS_${_v}_RTM/src/nss-${version}.tar.gz"
checksum=7aa07c758be1453d82d739240b249ffb7aef0041be488067e1c0f348e1f9e337

export NS_USE_GCC=1
export LIBRUNPATH=
export BUILD_OPT=1
export NSS_USE_SYSTEM_SQLITE=1
export NSS_ENABLE_WERROR=0
export NSS_ENABLE_ECC=1
export NSPR_INCLUDE_DIR=${XBPS_CROSS_BASE}/usr/include/nspr
export NSPR_LIB_DIR=${XBPS_CROSS_BASE}/usr/lib
export NSDISTMODE=copy

do_build() {
	local _use64 _ARCH

	# Build System can detect this just fine,
	# but I don't like to see useless warning barf for every line.
	case "$XBPS_TARGET_MACHINE" in
		x86_64*) ;;
		*) export NSS_DISABLE_AVX2=1 ;;
	esac

	case "$XBPS_TARGET_MACHINE" in
		ppc64le*) ;;
		ppc64*) export NSS_DISABLE_CRYPTO_VSX=1 ;;
		ppc*)
			export NSS_DISABLE_CRYPTO_VSX=1
			export NSS_DISABLE_ALTIVEC=1
			;;
	esac

	if [ "$XBPS_TARGET_WORDSIZE" = "64" ]; then
		CFLAGS+=" -DNS_PTR_GT_32"
		_use64="USE_64=1"
	fi

	case "$XBPS_TARGET_MACHINE" in
		aarch64*|ppc*|x86_64*|i?86*)
			_ARCH="${XBPS_TARGET_MACHINE%-*}"
			;;
		arm*) _ARCH="arm";;
		mips*) _ARCH="mips";;
		*) msg_error "$pkgver: unknown target machine\n";;
	esac
	export XCFLAGS="${CFLAGS}"
	make -C nss ${makejobs} \
		${CROSS_BUILD:+CROSS_COMPILE=1} OS_TEST="${_ARCH}" \
		NATIVE_CC="${CC_FOR_BUILD}" \
		NATIVE_FLAGS="${CFLAGS_FOR_BUILD}" \
		NATIVE_LDFLAGS="${LDFLAGS_FOR_BUILD}" \
		CCC="$CXX" ${_use64} \
		all
}

do_check() {
	local _use_64
	export XCFLAGS="${CFLAGS}"
	export NSS_CYCLES=standard
	if [ "$XBPS_TARGET_WORDSIZE" = "64" ]; then
		_use_64="USE_64=1"
	fi
	cd nss/tests
	env $_use_64 HOST=localhost DOMSUF=localdomain ./all.sh
}

do_install() {
	vmkdir usr/lib/pkgconfig
	vmkdir usr/bin
	vmkdir usr/include/nss

	eval $(awk '
	    /#define.*NSS_VMAJOR/{printf "NSS_VMAJOR=%d\n", $3}
            /#define.*NSS_VMINOR/{printf "NSS_VMINOR=%d\n", $3}
            /#define.*NSS_VPATCH/{printf "NSS_VPATCH=%d\n", $3}
	' nss/lib/nss/nss.h)

	sed -e "
	    s,%prefix%,/usr,g
	    s,%exec_prefix%,\${prefix},g
	    s,%includedir%,\${prefix}/include/nss,g
	    s,%libdir%,\${prefix}/lib,g
	    s,%NSPR_VERSION%,${_nsprver},g
	    s,%NSS_VERSION%,${version},g
	" nss/pkg/pkg-config/nss.pc.in > nss/pkg/pkg-config/nss.pc

	vinstall nss/pkg/pkg-config/nss.pc 644 usr/lib/pkgconfig

	ln -sf nss.pc ${DESTDIR}/usr/lib/pkgconfig/mozilla-nss.pc

	sed -e "
	    s,@prefix@,/usr,g
	    s,@exec_prefix@,\${prefix},g
	    s,@includedir@,\${prefix}/include/nss,g
	    s,@libdir@,\${prefix}/lib,g
	    s,@MOD_MAJOR_VERSION@,${NSS_VMAJOR},g
	    s,@MOD_MINOR_VERSION@,${NSS_VMINOR},g
	    s,@MOD_PATCH_VERSION@,${NSS_VPATCH},g
	" nss/pkg/pkg-config/nss-config.in > nss/pkg/pkg-config/nss-config
	vbin nss/pkg/pkg-config/nss-config

	for f in libsoftokn3.so libfreebl3.so libfreeblpriv3.so libnss3.so libnssutil3.so \
		libssl3.so libsmime3.so libnssckbi.so libnssdbm3.so libnsssysinit.so; do
		install -m755 dist/*.OBJ/lib/${f} ${DESTDIR}/usr/lib
	done

	# install -m644 dist/*.OBJ/lib/libcrmf.a ${DESTDIR}/usr/lib

	for f in certutil cmsutil crlutil derdump modutil pk12util pp shlibsign \
		signtool signver ssltap vfychain vfyserv; do
		install -m755 dist/*.OBJ/bin/${f} ${DESTDIR}/usr/bin
	done
	mv ${DESTDIR}/usr/bin/pp ${DESTDIR}/usr/bin/nss-pp

	vmkdir usr/libexec/nss
	for f in addbuiltin chktest dbtest dbtool ecperf httpserv \
		ocspclnt p7content p7env p7sign p7verify pk1sign pwdecrypt \
		rsaperf selfserv strsclnt symkeyutil
	do
		install -m755 dist/*.OBJ/bin/${f} ${DESTDIR}/usr/libexec/nss/
	done

	for f in nss/doc/nroff/*.1
	do
		vman $f
	done
	mv "${DESTDIR}/usr/share/man/man1/pp.1" "${DESTDIR}/usr/share/man/man1/nss-pp.1"

	install -m644 dist/public/nss/*.h ${DESTDIR}/usr/include/nss

	sed -ne '/Copyright/,/SUCH DAMAGE/p' nss/lib/dbm/src/db.c >dbm.LICENSE
	vlicense dbm.LICENSE
	{
		echo "The MIT License"
		find nss/lib -name '*.h' -o -name '*.c' |
		xargs grep -l 'MIT License' |
		xargs grep -h 'Copyright' |
		sed 's,^[[:space:]]*[*/]*[[:space:]]*,,' |
		sort -u
		sed -ne '/Permission is hereby/,/ [*] SOFTWARE[.]$/p' \
			nss/lib/freebl/verified/Hacl_Chacha20.c
	} >MIT.license
	vlicense MIT.license
}

nss-devel_package() {
	depends="nspr-devel>=${_nsprver} nss>=${version}_${revision}"
	short_desc+=" - development files"
	pkg_install() {
		vmove usr/bin/nss-config
		vmove usr/lib/pkgconfig
		vmove usr/include
		# vmove "usr/lib/*.a"
	}
}
