From 1b3c48499abb000d708abe5f05413c1f4155e086 Mon Sep 17 00:00:00 2001
From: Jory Pratt <anarchy@gentoo.org>
Date: Mon, 8 Jun 2020 12:22:29 -0500
Subject: [PATCH] Add pkg-config and nss-config for Gentoo

Modifications to use with Guix and the latest NSS source checkout code: use
'install' instead of 'ln -sf' and adapt the relative file names.

---
 Makefile             |  15 +----
 config/Makefile      |  40 ++++++++++++
 config/nss-config.in | 145 +++++++++++++++++++++++++++++++++++++++++++
 config/nss.pc.in     |  12 ++++
 manifest.mn          |   2 +-
 5 files changed, 200 insertions(+), 14 deletions(-)
 create mode 100644 config/Makefile
 create mode 100644 config/nss-config.in
 create mode 100644 config/nss.pc.in

diff --git a/Makefile b/Makefile
index eb4ed1a..f979d90 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,8 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
+default: nss_build_all
+
 #######################################################################
 # (1) Include initial platform-independent assignments (MANDATORY).   #
 #######################################################################
@@ -48,12 +50,9 @@ include $(CORE_DEPTH)/coreconf/rules.mk
 #######################################################################
 
 nss_build_all:
-	$(MAKE) build_nspr
 	$(MAKE) all
-	$(MAKE) latest
 
 nss_clean_all:
-	$(MAKE) clobber_nspr
 	$(MAKE) clobber
 
 NSPR_CONFIG_STATUS = $(CORE_DEPTH)/../nspr/$(OBJDIR_NAME)/config.status
@@ -138,16 +137,6 @@ $(NSPR_CONFIG_STATUS): $(NSPR_CONFIGURE)
 	--prefix='$(NSS_GYP_PREFIX)'
 endif
 
-build_nspr: $(NSPR_CONFIG_STATUS)
-	$(MAKE) -C $(CORE_DEPTH)/../nspr/$(OBJDIR_NAME)
-	$(MAKE) -C $(CORE_DEPTH)/../nspr/$(OBJDIR_NAME)/pr/tests
-
-install_nspr: build_nspr
-	$(MAKE) -C $(CORE_DEPTH)/../nspr/$(OBJDIR_NAME) install
-
-clobber_nspr: $(NSPR_CONFIG_STATUS)
-	$(MAKE) -C $(CORE_DEPTH)/../nspr/$(OBJDIR_NAME) clobber
-
 build_docs:
 	$(MAKE) -C $(CORE_DEPTH)/doc
 
diff --git a/config/Makefile b/config/Makefile
new file mode 100644
index 0000000..aaf1991
--- /dev/null
+++ b/config/Makefile
@@ -0,0 +1,40 @@
+CORE_DEPTH = ..
+DEPTH      = ..
+
+include $(CORE_DEPTH)/coreconf/config.mk
+
+NSS_MAJOR_VERSION = $(shell grep -F "NSS_VMAJOR" ../lib/nss/nss.h | awk '{print $$3}')
+NSS_MINOR_VERSION = $(shell grep -F "NSS_VMINOR" ../lib/nss/nss.h | awk '{print $$3}')
+NSS_PATCH_VERSION = $(shell grep -F "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
+	install 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
+	install nss-config $(DIST)/bin
+
+libs:
+
+dummy: all export libs
+
diff --git a/config/nss-config.in b/config/nss-config.in
new file mode 100644
index 0000000..3a957b8
--- /dev/null
+++ b/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
+
diff --git a/config/nss.pc.in b/config/nss.pc.in
new file mode 100644
index 0000000..03f1e39
--- /dev/null
+++ b/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.25
+Libs: -lssl3 -lsmime3 -lnss3 -lnssutil3
+Cflags: -I${includedir}
+
diff --git a/manifest.mn b/manifest.mn
index dada8ab..72dc9b3 100644
--- a/manifest.mn
+++ b/manifest.mn
@@ -10,7 +10,7 @@ IMPORTS =	nspr20/v4.8 \
 
 RELEASE = nss
 
-DIRS = coreconf lib cmd cpputil gtests
+DIRS = coreconf lib cmd cpputil config
 
 lib: coreconf
 cmd: lib
-- 
2.26.2