summaryrefslogtreecommitdiff
path: root/dev-libs
diff options
context:
space:
mode:
authorBertrand Jacquin <beber@meleeweb.net>2013-07-11 22:49:51 +0200
committerBertrand Jacquin <beber@meleeweb.net>2013-08-05 14:35:42 +0200
commite098e0c38b45ed71f68412a1284f0e61551e1970 (patch)
tree49faa5d09f46c30fb99047754efb95b84535f895 /dev-libs
parentrefresh metadata md5-cache for changes in eclass subversion, (diff)
downloadportage-e098e0c38b45ed71f68412a1284f0e61551e1970.tar.xz
dev-libs/nss: Fix compilation for non 64bits platform, see #476574
Package-Manager: portage-2.1.12.11
Diffstat (limited to 'dev-libs')
-rw-r--r--dev-libs/nss/ChangeLog8
-rw-r--r--dev-libs/nss/Manifest10
-rw-r--r--dev-libs/nss/files/nss-3.14.2-solaris-gcc.patch24
-rw-r--r--dev-libs/nss/files/nss-3.15-gentoo-fixup-warnings.patch10
-rw-r--r--dev-libs/nss/files/nss-3.15-gentoo-fixups.patch238
-rw-r--r--dev-libs/nss/files/nss-3.15-x32.patch46
-rw-r--r--dev-libs/nss/metadata.xml11
-rw-r--r--dev-libs/nss/nss-3.15.ebuild274
8 files changed, 621 insertions, 0 deletions
diff --git a/dev-libs/nss/ChangeLog b/dev-libs/nss/ChangeLog
new file mode 100644
index 00000000..011f70f1
--- /dev/null
+++ b/dev-libs/nss/ChangeLog
@@ -0,0 +1,8 @@
+*nss-3.15 (11 Jul 2013)
+
+ 11 Jul 2013; Bertrand Jacquin <beber@meleeweb.net>
+ +files/nss-3.14.2-solaris-gcc.patch,
+ +files/nss-3.15-gentoo-fixup-warnings.patch,
+ +files/nss-3.15-gentoo-fixups.patch, +files/nss-3.15-x32.patch, +metadata.xml,
+ +nss-3.15.ebuild:
+ dev-libs/nss: Fix compilation for non 64bits platform, see #476574
diff --git a/dev-libs/nss/Manifest b/dev-libs/nss/Manifest
new file mode 100644
index 00000000..5330ed03
--- /dev/null
+++ b/dev-libs/nss/Manifest
@@ -0,0 +1,10 @@
+AUX nss-3.14.2-solaris-gcc.patch 659 SHA256 d6ac2638602fcf5d73020efb616c2c16d5775d3a75122cc1681c944ddcd0a07f WHIRLPOOL b5f49f0a860598cf508ce7ea97165840ab5c068a00f213591d41101c12ec1e5afbffdbad7c3a1d69ef52c34f4d00da0d1aef4a80829f21209c60908e21a2663a
+AUX nss-3.15-gentoo-fixup-warnings.patch 177 SHA256 3bb300d8448f769beb97b110a0fe764160c866368f630e790c8599c1d75d70bb WHIRLPOOL 96565a7ba9f40b010f1825722aa2a5990daf7cfee09cbad1e4cb022c8aaf664ba26cfbb923b7bbe41b99bc3fcc6d03f8b265f8fd922c02dc3bbc450d3fadfcba
+AUX nss-3.15-gentoo-fixups.patch 5255 SHA256 eba46da3424640a0f16c7b07e526c373f3739dbfe6fb1e5a2af4d7b7fb83e4e2 WHIRLPOOL 54ff1716c8b016d38b83aa82c8473bea468710ed72d237ca0ea1d6201c39e141b7f32938c8a9f870c4693421f42751ce6f6c4bafd1d80a53e3bd17170ccf5f7a
+AUX nss-3.15-x32.patch 1308 SHA256 485686744485824c95823d593864695f5b417c7ba2e67ec07785bd2bcae3a0c2 WHIRLPOOL 71510984835ba1a38825482f1043204ba3502b2c78ed87ff2be884551658a8c42125e69fe90f5b090ea26139bfcf36910b4db7cc92eaf8d6d9a58c0356e89a98
+DIST nss-3.14.1-add_spi+cacerts_ca_certs.patch 25018 SHA256 82ca25982828fd7153ad15fc6e81408c115476eeeb4045d3a71469380b56824b WHIRLPOOL c9fe397e316dac7983b187acf7227078ebd8f8da5df53f77f2564489e85f123c4d2afb88d56e8dc14b9ebfffe8a71ade4724b3c1ea683c5c4c487cb3a64eda43
+DIST nss-3.15-pem-support-20130617.patch.xz 27800 SHA256 01885877f12b0460798760617c9b0a1f8ed05ad0130e924211bd73fc344535cc WHIRLPOOL 88f5edc621ca7862dc2e433836e11caa60752dc8f95bc7f49bcf07cdd0b3d8f2d7642ee02b018b8429a3e358e252ecdf3de40a1b12fab1f0fa13ca360e02a53c
+DIST nss-3.15.tar.gz 6276213 SHA256 c139f331ddcff4d5485590ee1b4489d3731aa520d4f5d942e2e40bba1e23a3cd WHIRLPOOL 80e76f6e36b814f7338d695220250aa68bd5757a5f3294609d3812708c30f2a77c9bdfcd6eeace34473afe22e0b0bd75eb848c168ea4e3a6327203dd323b66bf
+EBUILD nss-3.15.ebuild 7867 SHA256 e6d1d1280b408d14b863e44a816e9339f932314efe67dbff849d768b32c79030 WHIRLPOOL 938fb887cd2b0022507c77593f6640ded0cc76ecf5c607c11626f0182a2bc5a0e05e5b9d82d257f067538e677695ea4f69f24c02d5d92fafc4575798538f946c
+MISC ChangeLog 334 SHA256 daa178a0e7846d96e6dc6f5ecd54baf870ece925c7e4a2d7cb10697668d42972 WHIRLPOOL 0c1667b150cee36ac6c5144812c5d55e9da60c7b8250d813b44d75b3c519f46935002c45334266ce6cf96c869cf7286283393027d033c6dcddfb4e6efd27ded0
+MISC metadata.xml 323 SHA256 e6fef8af50b09ae8cd84d42ca66b3716d47046ca2c643cb842a0cbc75196c1c5 WHIRLPOOL 38c7d7ccfbaf04fa026fe377b5810c187cf4da4c9c9f77ee0f80fc0d68bffd398a65eb37ec3457a351ec80405d0bd71ae09612efc6cff16e047ba01ec87ccac5
diff --git a/dev-libs/nss/files/nss-3.14.2-solaris-gcc.patch b/dev-libs/nss/files/nss-3.14.2-solaris-gcc.patch
new file mode 100644
index 00000000..a23725da
--- /dev/null
+++ b/dev-libs/nss/files/nss-3.14.2-solaris-gcc.patch
@@ -0,0 +1,24 @@
+--- nss-3.14.2/mozilla/security/coreconf/SunOS5.mk
++++ nss-3.14.2/mozilla/security/coreconf/SunOS5.mk
+@@ -5,6 +5,9 @@
+
+ include $(CORE_DEPTH)/coreconf/UNIX.mk
+
++NS_USE_GCC = 1
++GCC_USE_GNU_LD = 1
++
+ # Sun's WorkShop defines v8, v8plus and v9 architectures.
+ # gcc on Solaris defines v8 and v9 "cpus".
+ # gcc's v9 is equivalent to Workshop's v8plus.
+@@ -71,11 +74,6 @@
+ NOMD_OS_CFLAGS += $(DSO_CFLAGS) $(OS_DEFINES) $(SOL_CFLAGS)
+
+ MKSHLIB = $(CC) $(DSO_LDOPTS) $(RPATH)
+-ifdef NS_USE_GCC
+-ifeq (GNU,$(findstring GNU,$(shell `$(CC) -print-prog-name=ld` -v 2>&1)))
+- GCC_USE_GNU_LD = 1
+-endif
+-endif
+ ifdef MAPFILE
+ ifdef NS_USE_GCC
+ ifdef GCC_USE_GNU_LD
diff --git a/dev-libs/nss/files/nss-3.15-gentoo-fixup-warnings.patch b/dev-libs/nss/files/nss-3.15-gentoo-fixup-warnings.patch
new file mode 100644
index 00000000..3ce2c0e4
--- /dev/null
+++ b/dev-libs/nss/files/nss-3.15-gentoo-fixup-warnings.patch
@@ -0,0 +1,10 @@
+--- nss-3.15/nss/coreconf/Linux.mk
++++ nss-3.15/nss/coreconf/Linux.mk
+@@ -116,6 +116,7 @@
+ OPTIMIZER += -gdwarf-2
+ endif
+ endif
++OPTIMIZER += -fno-strict-aliasing
+ endif
+
+
diff --git a/dev-libs/nss/files/nss-3.15-gentoo-fixups.patch b/dev-libs/nss/files/nss-3.15-gentoo-fixups.patch
new file mode 100644
index 00000000..9314d5f2
--- /dev/null
+++ b/dev-libs/nss/files/nss-3.15-gentoo-fixups.patch
@@ -0,0 +1,238 @@
+--- nss/config/Makefile
++++ nss/config/Makefile
+@@ -0,0 +1,40 @@
++CORE_DEPTH = ..
++DEPTH = ..
++
++include $(CORE_DEPTH)/coreconf/config.mk
++
++NSS_MAJOR_VERSION = `grep "NSS_VMAJOR" ../lib/nss/nss.h | awk '{print $$3}'`
++NSS_MINOR_VERSION = `grep "NSS_VMINOR" ../lib/nss/nss.h | awk '{print $$3}'`
++NSS_PATCH_VERSION = `grep "NSS_VPATCH" ../lib/nss/nss.h | awk '{print $$3}'`
++PREFIX = /usr
++
++all: export libs
++
++export:
++ # Create the nss.pc file
++ mkdir -p $(DIST)/lib/pkgconfig
++ sed -e "s,@prefix@,$(PREFIX)," \
++ -e "s,@exec_prefix@,\$${prefix}," \
++ -e "s,@libdir@,\$${prefix}/lib64," \
++ -e "s,@includedir@,\$${prefix}/include/nss," \
++ -e "s,@NSS_MAJOR_VERSION@,$(NSS_MAJOR_VERSION),g" \
++ -e "s,@NSS_MINOR_VERSION@,$(NSS_MINOR_VERSION)," \
++ -e "s,@NSS_PATCH_VERSION@,$(NSS_PATCH_VERSION)," \
++ nss.pc.in > nss.pc
++ chmod 0644 nss.pc
++ ln -sf ../../../../config/nss.pc $(DIST)/lib/pkgconfig
++
++ # Create the nss-config script
++ mkdir -p $(DIST)/bin
++ sed -e "s,@prefix@,$(PREFIX)," \
++ -e "s,@NSS_MAJOR_VERSION@,$(NSS_MAJOR_VERSION)," \
++ -e "s,@NSS_MINOR_VERSION@,$(NSS_MINOR_VERSION)," \
++ -e "s,@NSS_PATCH_VERSION@,$(NSS_PATCH_VERSION)," \
++ nss-config.in > nss-config
++ chmod 0755 nss-config
++ ln -sf ../../../config/nss-config $(DIST)/bin
++
++libs:
++
++dummy: all export libs
++
+--- nss/config/nss-config.in
++++ nss/config/nss-config.in
+@@ -0,0 +1,145 @@
++#!/bin/sh
++
++prefix=@prefix@
++
++major_version=@NSS_MAJOR_VERSION@
++minor_version=@NSS_MINOR_VERSION@
++patch_version=@NSS_PATCH_VERSION@
++
++usage()
++{
++ cat <<EOF
++Usage: nss-config [OPTIONS] [LIBRARIES]
++Options:
++ [--prefix[=DIR]]
++ [--exec-prefix[=DIR]]
++ [--includedir[=DIR]]
++ [--libdir[=DIR]]
++ [--version]
++ [--libs]
++ [--cflags]
++Dynamic Libraries:
++ nss
++ ssl
++ smime
++ nssutil
++EOF
++ exit $1
++}
++
++if test $# -eq 0; then
++ usage 1 1>&2
++fi
++
++lib_ssl=yes
++lib_smime=yes
++lib_nss=yes
++lib_nssutil=yes
++
++while test $# -gt 0; do
++ case "$1" in
++ -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
++ *) optarg= ;;
++ esac
++
++ case $1 in
++ --prefix=*)
++ prefix=$optarg
++ ;;
++ --prefix)
++ echo_prefix=yes
++ ;;
++ --exec-prefix=*)
++ exec_prefix=$optarg
++ ;;
++ --exec-prefix)
++ echo_exec_prefix=yes
++ ;;
++ --includedir=*)
++ includedir=$optarg
++ ;;
++ --includedir)
++ echo_includedir=yes
++ ;;
++ --libdir=*)
++ libdir=$optarg
++ ;;
++ --libdir)
++ echo_libdir=yes
++ ;;
++ --version)
++ echo ${major_version}.${minor_version}.${patch_version}
++ ;;
++ --cflags)
++ echo_cflags=yes
++ ;;
++ --libs)
++ echo_libs=yes
++ ;;
++ ssl)
++ lib_ssl=yes
++ ;;
++ smime)
++ lib_smime=yes
++ ;;
++ nss)
++ lib_nss=yes
++ ;;
++ nssutil)
++ lib_nssutil=yes
++ ;;
++ *)
++ usage 1 1>&2
++ ;;
++ esac
++ shift
++done
++
++# Set variables that may be dependent upon other variables
++if test -z "$exec_prefix"; then
++ exec_prefix=`pkg-config --variable=exec_prefix nss`
++fi
++if test -z "$includedir"; then
++ includedir=`pkg-config --variable=includedir nss`
++fi
++if test -z "$libdir"; then
++ libdir=`pkg-config --variable=libdir nss`
++fi
++
++if test "$echo_prefix" = "yes"; then
++ echo $prefix
++fi
++
++if test "$echo_exec_prefix" = "yes"; then
++ echo $exec_prefix
++fi
++
++if test "$echo_includedir" = "yes"; then
++ echo $includedir
++fi
++
++if test "$echo_libdir" = "yes"; then
++ echo $libdir
++fi
++
++if test "$echo_cflags" = "yes"; then
++ echo -I$includedir
++fi
++
++if test "$echo_libs" = "yes"; then
++ libdirs=""
++ if test -n "$lib_ssl"; then
++ libdirs="$libdirs -lssl${major_version}"
++ fi
++ if test -n "$lib_smime"; then
++ libdirs="$libdirs -lsmime${major_version}"
++ fi
++ if test -n "$lib_nss"; then
++ libdirs="$libdirs -lnss${major_version}"
++ fi
++ if test -n "$lib_nssutil"; then
++ libdirs="$libdirs -lnssutil${major_version}"
++ fi
++ echo $libdirs
++fi
++
+--- nss/config/nss.pc.in
++++ nss/config/nss.pc.in
+@@ -0,0 +1,12 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: NSS
++Description: Network Security Services
++Version: @NSS_MAJOR_VERSION@.@NSS_MINOR_VERSION@.@NSS_PATCH_VERSION@
++Requires: nspr >= 4.8
++Libs: -lssl3 -lsmime3 -lnss3 -lnssutil3
++Cflags: -I${includedir}
++
+--- nss/Makefile
++++ nss/Makefile
+@@ -44,7 +44,7 @@
+ # (7) Execute "local" rules. (OPTIONAL). #
+ #######################################################################
+
+-nss_build_all: build_nspr all
++nss_build_all: all
+
+ nss_clean_all: clobber_nspr clobber
+
+@@ -103,12 +103,6 @@
+ --with-dist-prefix='$(NSPR_PREFIX)' \
+ --with-dist-includedir='$(NSPR_PREFIX)/include'
+
+-build_nspr: $(NSPR_CONFIG_STATUS)
+- $(MAKE) -C $(CORE_DEPTH)/../nspr/$(OBJDIR_NAME)
+-
+-clobber_nspr: $(NSPR_CONFIG_STATUS)
+- $(MAKE) -C $(CORE_DEPTH)/../nspr/$(OBJDIR_NAME) clobber
+-
+ build_docs:
+ $(MAKE) -C $(CORE_DEPTH)/doc
+
+--- nss/manifest.mn
++++ nss/manifest.mn
+@@ -10,4 +10,4 @@
+
+ RELEASE = nss
+
+-DIRS = coreconf lib cmd
++DIRS = coreconf lib cmd config
diff --git a/dev-libs/nss/files/nss-3.15-x32.patch b/dev-libs/nss/files/nss-3.15-x32.patch
new file mode 100644
index 00000000..bb744928
--- /dev/null
+++ b/dev-libs/nss/files/nss-3.15-x32.patch
@@ -0,0 +1,46 @@
+--- nss-3.15/nss/coreconf/Linux.mk
++++ nss-3.15/nss/coreconf/Linux.mk
+@@ -55,11 +55,18 @@
+ ifeq ($(OS_TEST),x86_64)
+ ifeq ($(USE_64),1)
+ CPU_ARCH = x86_64
++ ARCHFLAG = -m64
++else
++ifeq ($(USE_x32),1)
++ OS_REL_CFLAGS = -Di386
++ CPU_ARCH = x86
++ ARCHFLAG = -mx32
+ else
+ OS_REL_CFLAGS = -Di386
+ CPU_ARCH = x86
+ ARCHFLAG = -m32
+ endif
++endif
+ else
+ ifeq ($(OS_TEST),sparc64)
+ CPU_ARCH = sparc
+--- nss-3.15/nss/lib/freebl/Makefile
++++ nss-3.15/nss/lib/freebl/Makefile
+@@ -193,12 +193,16 @@
+ MPI_SRCS += mpi_amd64.c mp_comba.c
+ endif
+ ifeq ($(CPU_ARCH),x86)
+- ASFILES = mpi_x86.s
+- DEFINES += -DMP_ASSEMBLY_MULTIPLY -DMP_ASSEMBLY_SQUARE
+- DEFINES += -DMP_ASSEMBLY_DIV_2DX1D
+- DEFINES += -DMP_CHAR_STORE_SLOW -DMP_IS_LITTLE_ENDIAN
+- # The floating point ECC code doesn't work on Linux x86 (bug 311432).
+- #ECL_USE_FP = 1
++ ifeq ($(USE_x32),1)
++ DEFINES += -DMP_CHAR_STORE_SLOW -DMP_IS_LITTLE_ENDIAN
++ else
++ ASFILES = mpi_x86.s
++ DEFINES += -DMP_ASSEMBLY_MULTIPLY -DMP_ASSEMBLY_SQUARE
++ DEFINES += -DMP_ASSEMBLY_DIV_2DX1D
++ DEFINES += -DMP_CHAR_STORE_SLOW -DMP_IS_LITTLE_ENDIAN
++ # The floating point ECC code doesn't work on Linux x86 (bug 311432).
++ #ECL_USE_FP = 1
++ endif
+ endif
+ ifeq ($(CPU_ARCH),arm)
+ DEFINES += -DMP_ASSEMBLY_MULTIPLY -DMP_ASSEMBLY_SQUARE
diff --git a/dev-libs/nss/metadata.xml b/dev-libs/nss/metadata.xml
new file mode 100644
index 00000000..1ed7407d
--- /dev/null
+++ b/dev-libs/nss/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>mozilla</herd>
+<use>
+ <flag name='utils'>Install utilities included with the library</flag>
+</use>
+<upstream>
+ <remote-id type="cpe">cpe:/a:mozilla:nss</remote-id>
+</upstream>
+</pkgmetadata>
diff --git a/dev-libs/nss/nss-3.15.ebuild b/dev-libs/nss/nss-3.15.ebuild
new file mode 100644
index 00000000..d5153d47
--- /dev/null
+++ b/dev-libs/nss/nss-3.15.ebuild
@@ -0,0 +1,274 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/nss/nss-3.15.ebuild,v 1.1 2013/06/19 01:18:35 anarchy Exp $
+
+EAPI=5
+inherit eutils flag-o-matic multilib toolchain-funcs
+
+NSPR_VER="4.10"
+RTM_NAME="NSS_${PV//./_}_RTM"
+
+DESCRIPTION="Mozilla's Network Security Services library that implements PKI support"
+HOMEPAGE="http://www.mozilla.org/projects/security/pki/nss/"
+SRC_URI="ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/${RTM_NAME}/src/${P}.tar.gz
+ http://dev.gentoo.org/~anarchy/patches/${PN}-3.14.1-add_spi+cacerts_ca_certs.patch
+ http://dev.gentoo.org/~anarchy/patches/${PN}-3.15-pem-support-20130617.patch.xz"
+
+LICENSE="|| ( MPL-2.0 GPL-2 LGPL-2.1 )"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
+IUSE="utils"
+
+DEPEND="virtual/pkgconfig
+ >=dev-libs/nspr-${NSPR_VER}"
+
+RDEPEND=">=dev-libs/nspr-${NSPR_VER}
+ >=dev-db/sqlite-3.5
+ sys-libs/zlib"
+
+S="${WORKDIR}/${P}/${PN}"
+
+src_setup() {
+ export LC_ALL="C"
+}
+
+src_prepare() {
+ # Custom changes for gentoo
+ epatch "${FILESDIR}/${PN}-3.15-gentoo-fixups.patch"
+ epatch "${FILESDIR}/${PN}-3.15-gentoo-fixup-warnings.patch"
+ epatch "${DISTDIR}/${PN}-3.14.1-add_spi+cacerts_ca_certs.patch"
+ epatch "${DISTDIR}/${PN}-3.15-pem-support-20130617.patch.xz"
+ epatch "${FILESDIR}/${PN}-3.15-x32.patch"
+ cd coreconf
+ # hack nspr paths
+ echo 'INCLUDES += -I$(DIST)/include/dbm' \
+ >> headers.mk || die "failed to append include"
+
+ # modify install path
+ sed -e 's:SOURCE_PREFIX = $(CORE_DEPTH)/\.\./dist:SOURCE_PREFIX = $(CORE_DEPTH)/dist:' \
+ -i source.mk
+
+ # Respect LDFLAGS
+ sed -i -e 's/\$(MKSHLIB) -o/\$(MKSHLIB) \$(LDFLAGS) -o/g' rules.mk
+
+ # Ensure we stay multilib aware
+ sed -i -e "s:gentoo\/nss:$(get_libdir):" "${S}"/config/Makefile
+ sed -i -e "/@libdir@/ s:lib64:$(get_libdir):" "${S}"/config/Makefile
+
+ # Fix pkgconfig file for Prefix
+ sed -i -e "/^PREFIX =/s:= /usr:= ${EPREFIX}/usr:" \
+ "${S}"/config/Makefile
+
+ epatch "${FILESDIR}/nss-3.14.2-solaris-gcc.patch"
+
+ # use host shlibsign if need be #436216
+ if tc-is-cross-compiler ; then
+ sed -i \
+ -e 's:"${2}"/shlibsign:shlibsign:' \
+ "${S}"/cmd/shlibsign/sign.sh
+ fi
+
+ # dirty hack
+ cd "${S}"
+ sed -i -e "/CRYPTOLIB/s:\$(SOFTOKEN_LIB_DIR):../freebl/\$(OBJDIR):" \
+ lib/ssl/config.mk
+ sed -i -e "/CRYPTOLIB/s:\$(SOFTOKEN_LIB_DIR):../../lib/freebl/\$(OBJDIR):" \
+ cmd/platlibs.mk
+}
+
+nssarch() {
+ # Most of the arches are the same as $ARCH
+ local t=${1:-${CHOST}}
+ case ${t} in
+ hppa*) echo "parisc";;
+ i?86*) echo "i686";;
+ x86_64*) echo "x86_64";;
+ *) tc-arch ${t};;
+ esac
+}
+
+nssbits() {
+ local cc="${1}CC" cppflags="${1}CPPFLAGS" cflags="${1}CFLAGS"
+ echo > "${T}"/test.c || die
+ ${!cc} ${!cppflags} ${!cflags} -c "${T}"/test.c -o "${T}"/test.o || die
+ case $(file "${T}"/test.o) in
+ *32-bit*x86-64*) echo USE_x32=1;;
+ *64-bit*|*ppc64*|*x86_64*) echo USE_64=1;;
+ *32-bit*|*ppc*|*i386*) ;;
+ *) die "Failed to detect whether your arch is 64bits or 32bits, disable distcc if you're using it, please";;
+ esac
+}
+
+src_compile() {
+ strip-flags
+
+ tc-export AR RANLIB {BUILD_,}{CC,PKG_CONFIG}
+ local makeargs=(
+ CC="${CC}"
+ AR="${AR} rc \$@"
+ RANLIB="${RANLIB}"
+ OPTIMIZER=
+ $(nssbits)
+ )
+
+ # Take care of nspr settings #436216
+ append-cppflags $(${PKG_CONFIG} nspr --cflags)
+ append-ldflags $(${PKG_CONFIG} nspr --libs-only-L)
+ unset NSPR_INCLUDE_DIR
+ export NSPR_LIB_DIR=${T}/fake-dir
+
+ # Do not let `uname` be used.
+ if use kernel_linux ; then
+ makeargs+=(
+ OS_TARGET=Linux
+ OS_RELEASE=2.6
+ OS_TEST="$(nssarch)"
+ )
+ fi
+
+ export BUILD_OPT=1
+ export NSS_USE_SYSTEM_SQLITE=1
+ export NSDISTMODE=copy
+ export NSS_ENABLE_ECC=1
+ export XCFLAGS="${CFLAGS} ${CPPFLAGS}"
+ export FREEBL_NO_DEPEND=1
+ export ASFLAGS=""
+
+ local d
+
+ # Build the host tools first.
+ LDFLAGS="${BUILD_LDFLAGS}" \
+ XCFLAGS="${BUILD_CFLAGS}" \
+ emake -j1 -C coreconf \
+ CC="${BUILD_CC}" \
+ $(nssbits BUILD_) \
+ || die
+ makeargs+=( NSINSTALL="${PWD}/$(find -type f -name nsinstall)" )
+
+ # Then build the target tools.
+ for d in . lib/dbm ; do
+ emake -j1 "${makeargs[@]}" -C ${d} || die "${d} make failed"
+ done
+}
+
+# Altering these 3 libraries breaks the CHK verification.
+# All of the following cause it to break:
+# - stripping
+# - prelink
+# - ELF signing
+# http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn6.html
+# Either we have to NOT strip them, or we have to forcibly resign after
+# stripping.
+#local_libdir="$(get_libdir)"
+#export STRIP_MASK="
+# */${local_libdir}/libfreebl3.so*
+# */${local_libdir}/libnssdbm3.so*
+# */${local_libdir}/libsoftokn3.so*"
+
+export NSS_CHK_SIGN_LIBS="freebl3 nssdbm3 softokn3"
+
+generate_chk() {
+ local shlibsign="$1"
+ local libdir="$2"
+ einfo "Resigning core NSS libraries for FIPS validation"
+ shift 2
+ local i
+ for i in ${NSS_CHK_SIGN_LIBS} ; do
+ local libname=lib${i}.so
+ local chkname=lib${i}.chk
+ "${shlibsign}" \
+ -i "${libdir}"/${libname} \
+ -o "${libdir}"/${chkname}.tmp \
+ && mv -f \
+ "${libdir}"/${chkname}.tmp \
+ "${libdir}"/${chkname} \
+ || die "Failed to sign ${libname}"
+ done
+}
+
+cleanup_chk() {
+ local libdir="$1"
+ shift 1
+ local i
+ for i in ${NSS_CHK_SIGN_LIBS} ; do
+ local libfname="${libdir}/lib${i}.so"
+ # If the major version has changed, then we have old chk files.
+ [ ! -f "${libfname}" -a -f "${libfname}.chk" ] \
+ && rm -f "${libfname}.chk"
+ done
+}
+
+src_install() {
+ MINOR_VERSION=12
+ cd "${S}"/dist
+
+ dodir /usr/$(get_libdir)
+ cp -L */lib/*$(get_libname) "${ED}"/usr/$(get_libdir) || die "copying shared libs failed"
+ # We generate these after stripping the libraries, else they don't match.
+ #cp -L */lib/*.chk "${ED}"/usr/$(get_libdir) || die "copying chk files failed"
+ cp -L */lib/libcrmf.a "${ED}"/usr/$(get_libdir) || die "copying libs failed"
+
+ # Install nss-config and pkgconfig file
+ dodir /usr/bin
+ cp -L */bin/nss-config "${ED}"/usr/bin
+ dodir /usr/$(get_libdir)/pkgconfig
+ cp -L */lib/pkgconfig/nss.pc "${ED}"/usr/$(get_libdir)/pkgconfig
+
+ # all the include files
+ insinto /usr/include/nss
+ doins public/nss/*.h
+ cd "${ED}"/usr/$(get_libdir)
+ local n file
+ for file in *$(get_libname); do
+ n=${file%$(get_libname)}$(get_libname ${MINOR_VERSION})
+ mv ${file} ${n}
+ ln -s ${n} ${file}
+ if [[ ${CHOST} == *-darwin* ]]; then
+ install_name_tool -id "${EPREFIX}/usr/$(get_libdir)/${n}" ${n} || die
+ fi
+ done
+
+ local f nssutils
+ # Always enabled because we need it for chk generation.
+ nssutils="shlibsign"
+ if use utils; then
+ # The tests we do not need to install.
+ #nssutils_test="bltest crmftest dbtest dertimetest
+ #fipstest remtest sdrtest"
+ nssutils="addbuiltin atob baddbdir btoa certcgi certutil checkcert
+ cmsutil conflict crlutil derdump digest makepqg mangle modutil multinit
+ nonspr10 ocspclnt oidcalc p7content p7env p7sign p7verify pk11mode
+ pk12util pp rsaperf selfserv shlibsign signtool signver ssltap strsclnt
+ symkeyutil tstclnt vfychain vfyserv"
+ fi
+ cd "${S}"/dist/*/bin/
+ for f in ${nssutils}; do
+ dobin ${f}
+ done
+
+ # Prelink breaks the CHK files. We don't have any reliable way to run
+ # shlibsign after prelink.
+ local l libs=()
+ for l in ${NSS_CHK_SIGN_LIBS} ; do
+ libs+=("${EPREFIX}/usr/$(get_libdir)/lib${l}.so")
+ done
+ OLD_IFS="${IFS}" IFS=":" ; liblist="${libs[*]}" ; IFS="${OLD_IFS}"
+ echo -e "PRELINK_PATH_MASK=${liblist}" >"${T}/90nss"
+ unset libs liblist
+ doenvd "${T}/90nss"
+}
+
+pkg_postinst() {
+ # We must re-sign the libraries AFTER they are stripped.
+ local shlibsign="${EROOT}/usr/bin/shlibsign"
+ # See if we can execute it (cross-compiling & such). #436216
+ "${shlibsign}" -h >&/dev/null
+ if [[ $? -gt 1 ]] ; then
+ shlibsign="shlibsign"
+ fi
+ generate_chk "${shlibsign}" "${EROOT}"/usr/$(get_libdir)
+}
+
+pkg_postrm() {
+ cleanup_chk "${EROOT}"/usr/$(get_libdir)
+}