git: cb5e41b16083 - main - lib/libcrypt: unbundle hash functions

From: Robert Clausecker <fuz_at_FreeBSD.org>
Date: Fri, 25 Oct 2024 14:18:09 UTC
The branch main has been updated by fuz:

URL: https://cgit.FreeBSD.org/src/commit/?id=cb5e41b160838880de7d03100afa02e4edee5a9e

commit cb5e41b160838880de7d03100afa02e4edee5a9e
Author:     Robert Clausecker <fuz@FreeBSD.org>
AuthorDate: 2024-10-11 15:41:52 +0000
Commit:     Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2024-10-25 14:02:38 +0000

    lib/libcrypt: unbundle hash functions
    
    libcrypt bundles the various hash functions it needs,
    duplicating code that is also found in libmd.
    Unbundle the hash functions and apply the same hack used
    for libncursesw so static consumers link -lmd in addition
    to -lcrypt.
    
    Reviewed by:    kevans
    Differential Revision:  https://reviews.freebsd.org/D47062
---
 Makefile.inc1                   |  1 +
 lib/Makefile                    |  1 +
 lib/libcrypt/Makefile           | 41 +++++++++++++++++++++++------------------
 lib/libcrypt/libcrypt.aldscript |  1 +
 lib/libcrypt/libcrypt.ldscript  |  1 +
 share/mk/src.libnames.mk        |  1 +
 6 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/Makefile.inc1 b/Makefile.inc1
index 0a8895933bea..69a1ad2c8d01 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -3223,6 +3223,7 @@ lib/libc__L: lib/libsys__L
 lib/libgcc_s__L: lib/libc__L
 lib/libgcc_s__L: lib/libc_nonshared__L
 lib/libcxxrt__L: lib/libgcc_s__L
+lib/libcrypt__L: lib/libmd__L
 
 _prebuild_libs=	${_kerberos5_lib_libasn1} \
 		${_kerberos5_lib_libhdb} \
diff --git a/lib/Makefile b/lib/Makefile
index e4a4aa95a1ef..fdfe198bea10 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -128,6 +128,7 @@ SUBDIR_DEPEND_libc++:= libcxxrt
 SUBDIR_DEPEND_libc= libsys libcompiler_rt libssp_nonshared
 SUBDIR_DEPEND_libcam= libsbuf
 SUBDIR_DEPEND_libcasper= libnv
+SUBDIR_DEPEND_libcrypt= libmd
 SUBDIR_DEPEND_libdevstat= libkvm
 SUBDIR_DEPEND_libdpv= libfigpar ncurses libutil
 SUBDIR_DEPEND_libedit= ncurses
diff --git a/lib/libcrypt/Makefile b/lib/libcrypt/Makefile
index d9bd85f7e699..5a9eac4c682f 100644
--- a/lib/libcrypt/Makefile
+++ b/lib/libcrypt/Makefile
@@ -10,17 +10,15 @@ PACKAGE=	runtime
 SHLIB_MAJOR=	5
 LIB=		crypt
 
-.PATH:		${SRCTOP}/sys/kern ${SRCTOP}/sys/crypto/sha2
 SRCS=		crypt.c misc.c \
-		crypt-md5.c md5c.c \
-		crypt-nthash.c md4c.c \
-		crypt-sha256.c sha256c.c \
-		crypt-sha512.c sha512c.c
+		crypt-md5.c \
+		crypt-nthash.c \
+		crypt-sha256.c \
+		crypt-sha512.c
 MAN=		crypt.3
 MLINKS=		crypt.3 crypt_get_format.3 crypt.3 crypt_r.3 \
 		crypt.3 crypt_set_format.3
-CFLAGS+=	-I${SRCTOP}/lib/libmd \
-		-I${SRCTOP}/sys/crypto/sha2
+CFLAGS+=	-I${SRCTOP}/lib/libmd
 
 # Pull in the strong crypto, if it is present.
 .if exists(${SRCTOP}/secure/lib/libcrypt) && ${MK_CRYPT} != "no"
@@ -29,17 +27,6 @@ SRCS+=		crypt-des.c crypt-blowfish.c blowfish.c
 CFLAGS+=	-I${.CURDIR} -DHAS_DES -DHAS_BLOWFISH
 .endif
 
-.for sym in MD4Init MD4Final MD4Update MD4Pad \
-	    MD5Init MD5Final MD5Update MD5Pad \
-	    SHA224_Init SHA224_Final SHA224_Update \
-	    SHA256_Init SHA256_Final SHA256_Update \
-	    SHA512_224_Init SHA512_224_Final SHA512_224_Update \
-	    SHA512_256_Init SHA512_256_Final SHA512_256_Update \
-	    SHA384_Init SHA384_Final SHA384_Update \
-	    SHA512_Init SHA512_Final SHA512_Update
-CFLAGS+=	-D${sym}=__${sym}
-.endfor
-
 WARNS?=		2
 
 PRECIOUSLIB=
@@ -47,4 +34,22 @@ PRECIOUSLIB=
 HAS_TESTS=
 SUBDIR.${MK_TESTS}+= tests
 
+LIBADD+=	md
+SHLIB_LDSCRIPT=	libcrypt.ldscript
+STATIC_LDSCRIPT= libcrypt.aldscript
+CLEANFILES+=	libcrypt.ald
+
+libcrypt.ald: ${.CURDIR}/${STATIC_LDSCRIPT}
+	sed -e 's,@@LIB@@,${LIB},g' \
+	    -e 's,@@STATICLIB_SUFFIX@@,${_STATICLIB_SUFFIX},g' \
+	    ${.ALLSRC} > ${.TARGET}
+
+all: ${STATIC_LDSCRIPT} libcrypt.ald
+
+install-libcrypt.a: libcrypt.ald
+	${INSTALL} ${TAG_ARGS:D${TAG_ARGS},dev} -S -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
+	    ${_INSTALLFLAGS} libcrypt.ald ${DESTDIR}${_LIBDIR}/lib${LIB}.a
+
+realinstall: install-libcrypt.a
+
 .include <bsd.lib.mk>
diff --git a/lib/libcrypt/libcrypt.aldscript b/lib/libcrypt/libcrypt.aldscript
new file mode 100644
index 000000000000..cfc8020dd9e3
--- /dev/null
+++ b/lib/libcrypt/libcrypt.aldscript
@@ -0,0 +1 @@
+INPUT(-l@@LIB@@@@STATICLIB_SUFFIX@@ -lmd)
diff --git a/lib/libcrypt/libcrypt.ldscript b/lib/libcrypt/libcrypt.ldscript
new file mode 100644
index 000000000000..a0b20fa43fe8
--- /dev/null
+++ b/lib/libcrypt/libcrypt.ldscript
@@ -0,0 +1 @@
+INPUT(@@SHLIB@@ AS_NEEDED(-lmd))
diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk
index 092e1b444beb..588291d8ec9c 100644
--- a/share/mk/src.libnames.mk
+++ b/share/mk/src.libnames.mk
@@ -322,6 +322,7 @@ _DP_cap_grp=	nv
 _DP_cap_pwd=	nv
 _DP_cap_sysctl=	nv
 _DP_cap_syslog=	nv
+_DP_crypt=	md
 .if ${MK_OFED} != "no"
 _DP_pcap=	ibverbs mlx5
 .endif