# nss 3.126 — Network Security Services de Mozilla (TLS, S/MIME, PKCS#11, almacén de certificados).
#
# POR QUÉ ENTRA, después de haber intentado esquivarla: evolution-data-server declara
# `-DENABLE_SMIME=OFF` y hasta documenta ese modo, pero en 3.56.2 está ROTO — src/camel/camel.c
# incluye <nspr.h>, "nss.h", <ssl.h> SIN guardar por el #ifdef, y hace init/shutdown reales de NSS
# (nss_initlock, NSS_Shutdown). camel-msgport.c y camel-operation.c también usan NSPR. O sea que el
# apagado sólo compila fuera camel-smime-context.c, no camel entero. Se intentó cablear el guard que
# el upstream olvidó en FindSMIME.cmake y el build igual cortó en el 11%: la conclusión honesta es
# que camel REQUIERE NSS en esta versión, y arrancarlo a parches sería reescribir camel.
#
# Y no es deuda de una sola receta: NSS es también la base criptográfica del frente del navegador
# (Firefox/Zen la necesitan igual), así que era una cuenta que había que pagar de todas formas.
#
# ── EL BUILD, QUE NO ES AUTOTOOLS NI CMAKE ──────────────────────────────────────────────────────
# NSS usa `coreconf`, el sistema de make propio de Mozilla. Consecuencias que la receta absorbe:
#   · NO hay ./configure. La fase configure existe igual porque si se deja vacía el lab inyecta su
#     propio ./configure minimal, que aborta; definirla la desactiva (mismo truco que libxml2).
#   · NO hay `make install`. Todo sale a ../dist/<OBJDIR>.OBJ/ y la instalación es a mano. El nombre
#     del OBJDIR lo arma coreconf con la versión del kernel del constructor, así que se resuelve por
#     glob y NO se hornea: si se escribiera literal, el artefacto dependería del uname del anfitrión.
#   · `nss_build_all` NO sirve acá: su primer paso es build_nspr contra ../nspr, que no existe en
#     este tarball (extrae sólo nss/). Se usa `make all` apuntando NSPR_{INCLUDE,LIB}_DIR al nspr
#     YA SELLADO (b3:d7b71315, el que vino con spidermonkey) — se reusa, no se duplica.
#   · NO hay nss.pc generado por el build; el tarball trae el template pkg/pkg-config/nss.pc.in y se
#     rellena a mano. Es lo que FindSMIME.cmake de eds busca por pkg-config (`foreach(pkg nss …)`).
#
# NSS_USE_SYSTEM_SQLITE=1 usa la sqlite-shared de esta cola en vez de la copia in-tree de NSS:
# una sola sqlite en la distro, no dos con versiones distintas conviviendo en el mismo proceso.
#
# compiler=gcc, igual que nspr: coreconf está lleno de gcc-ismos y detecta el toolchain por NS_USE_GCC.
# Es deuda consciente del frente matar-gcc, y la misma que ya paga nspr — la pareja entra junta.
name    = "nss"
version = "3.126"
license = "MPL-2.0"

[source]
tarball          = "https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_126_RTM/src/nss-3.126.tar.gz"
sha256           = "7aa07c758be1453d82d739240b249ffb7aef0041be488067e1c0f348e1f9e337"
strip_components = 1

[build]
compiler = "gcc"
target   = "x86_64-linux-musl"
link     = "dynamic"

[build.phases]
configure = "cd nss && echo 'NSS no tiene configure: el build es coreconf/make (ver comentario de la receta)'"

compile = '''
cd nss && make all -j"$(nproc)" \
	BUILD_OPT=1 \
	USE_64=1 \
	NS_USE_GCC=1 \
	NSS_ENABLE_WERROR=0 \
	NSS_DISABLE_GTESTS=1 \
	NSS_USE_SYSTEM_SQLITE=1 \
	NSPR_INCLUDE_DIR=/usr/include/nspr \
	NSPR_LIB_DIR=/usr/lib
'''

install = '''
cd nss
OBJDIR=$(ls -d ../dist/*.OBJ | head -1)
echo "OBJDIR resuelto por glob: $OBJDIR"
install -d /out/usr/lib/pkgconfig /out/usr/include/nss /out/usr/bin
install -m755 "$OBJDIR"/lib/*.so /out/usr/lib/
install -m644 ../dist/public/nss/*.h /out/usr/include/nss/
for b in certutil pk12util modutil nss-policy-check; do
	[ -x "$OBJDIR/bin/$b" ] && install -m755 "$OBJDIR/bin/$b" /out/usr/bin/ || true
done
sed -e 's|%prefix%|/usr|g' \
    -e 's|%exec_prefix%|/usr|g' \
    -e 's|%libdir%|/usr/lib|g' \
    -e 's|%includedir%|/usr/include/nss|g' \
    -e 's|%NSS_VERSION%|3.126|g' \
    -e 's|%NSPR_VERSION%|4.36|g' \
    pkg/pkg-config/nss.pc.in > /out/usr/lib/pkgconfig/nss.pc
cat /out/usr/lib/pkgconfig/nss.pc
'''

[deps]
build = ["make", "perl", "python3", "pkgconf", "nspr", "sqlite-shared", "zlib-shared"]
