Skip to content

Commit dc7f5e2

Browse files
committed
allow libraries to be specified only once
1 parent c7f7776 commit dc7f5e2

File tree

4 files changed

+95
-13
lines changed

4 files changed

+95
-13
lines changed

Makefile.pre.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ srcdir= @srcdir@
3232
VPATH= @srcdir@
3333
abs_srcdir= @abs_srcdir@
3434
abs_builddir= @abs_builddir@
35+
UNIQMODLIBS= @UNIQMODLIBS@
3536

3637

3738
CC= @CC@
@@ -3381,21 +3382,28 @@ MODULE__CTYPES_MALLOC_CLOSURE=@MODULE__CTYPES_MALLOC_CLOSURE@
33813382
MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h @LIBMPDEC_INTERNAL@
33823383
MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/pyexpat.c @LIBEXPAT_INTERNAL@
33833384
MODULE__HASHLIB_DEPS=@LIBHASHLIB_INTERNAL@
3385+
MODULE__HASHLIB_RULE_LDFLAGS=@LIBHASHLIB_INTERNAL_RULE_LDFLAGS@
33843386
MODULE__IO_DEPS=$(srcdir)/Modules/_io/_iomodule.h
33853387

33863388
# HACL*-based cryptographic primitives
33873389
MODULE__MD5_DEPS=$(MODULE__HASHLIB_DEPS) $(LIBHACL_MD5_HEADERS) $(LIBHACL_MD5_LIB_@LIBHACL_LDEPS_LIBTYPE@)
33883390
MODULE__MD5_LDEPS=$(LIBHACL_MD5_LIB_@LIBHACL_LDEPS_LIBTYPE@)
3391+
MODULE__MD5_RULE_LDFLAGS=@LIBHASHLIB_INTERNAL_RULE_LDFLAGS@
33893392
MODULE__SHA1_DEPS=$(MODULE__HASHLIB_DEPS) $(LIBHACL_SHA1_HEADERS) $(LIBHACL_SHA1_LIB_@LIBHACL_LDEPS_LIBTYPE@)
33903393
MODULE__SHA1_LDEPS=$(LIBHACL_SHA1_LIB_@LIBHACL_LDEPS_LIBTYPE@)
3394+
MODULE__SHA1_RULE_LDFLAGS=@LIBHASHLIB_INTERNAL_RULE_LDFLAGS@
33913395
MODULE__SHA2_DEPS=$(MODULE__HASHLIB_DEPS) $(LIBHACL_SHA2_HEADERS) $(LIBHACL_SHA2_LIB_@LIBHACL_LDEPS_LIBTYPE@)
33923396
MODULE__SHA2_LDEPS=$(LIBHACL_SHA2_LIB_@LIBHACL_LDEPS_LIBTYPE@)
3397+
MODULE__SHA2_RULE_LDFLAGS=@LIBHASHLIB_INTERNAL_RULE_LDFLAGS@
33933398
MODULE__SHA3_DEPS=$(MODULE__HASHLIB_DEPS) $(LIBHACL_SHA3_HEADERS) $(LIBHACL_SHA3_LIB_@LIBHACL_LDEPS_LIBTYPE@)
33943399
MODULE__SHA3_LDEPS=$(LIBHACL_SHA3_LIB_@LIBHACL_LDEPS_LIBTYPE@)
3400+
MODULE__SHA3_RULE_LDFLAGS=@LIBHASHLIB_INTERNAL_RULE_LDFLAGS@
33953401
MODULE__BLAKE2_DEPS=$(MODULE__HASHLIB_DEPS) $(LIBHACL_BLAKE2_HEADERS) $(LIBHACL_BLAKE2_LIB_@LIBHACL_LDEPS_LIBTYPE@)
33963402
MODULE__BLAKE2_LDEPS=$(LIBHACL_BLAKE2_LIB_@LIBHACL_LDEPS_LIBTYPE@)
3403+
MODULE__BLAKE2_RULE_LDFLAGS=@LIBHASHLIB_INTERNAL_RULE_LDFLAGS@
33973404
MODULE__HMAC_DEPS=$(MODULE__HASHLIB_DEPS) $(LIBHACL_HMAC_HEADERS) $(LIBHACL_HMAC_LIB_@LIBHACL_LDEPS_LIBTYPE@)
33983405
MODULE__HMAC_LDEPS=$(LIBHACL_HMAC_LIB_@LIBHACL_LDEPS_LIBTYPE@)
3406+
MODULE__HMAC_RULE_LDFLAGS=@LIBHASHLIB_INTERNAL_RULE_LDFLAGS@
33993407

34003408
MODULE__SOCKET_DEPS=$(srcdir)/Modules/socketmodule.h $(srcdir)/Modules/addrinfo.h $(srcdir)/Modules/getaddrinfo.c $(srcdir)/Modules/getnameinfo.c
34013409
MODULE__SSL_DEPS=$(srcdir)/Modules/_ssl.h $(srcdir)/Modules/_ssl/cert.c $(srcdir)/Modules/_ssl/debughelpers.c $(srcdir)/Modules/_ssl/misc.c $(srcdir)/Modules/_ssl_data_111.h $(srcdir)/Modules/_ssl_data_300.h $(srcdir)/Modules/socketmodule.h

Modules/makesetup

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
276276
;;
277277
esac
278278
rule="$file: $objs \$(MODULE_${mods_upper}_LDEPS)"
279-
rule="$rule; \$(BLDSHARED) $objs $libs \$(LIBPYTHON) -o $file"
279+
rule="$rule; \$(BLDSHARED) $objs $libs \$(MODULE_${mods_upper}_RULE_LDFLAGS) \$(LIBPYTHON) -o $file"
280280
echo "$rule" >>$rulesf
281281
done
282282
done
@@ -290,7 +290,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
290290
yes) BASELIBS=$LIBS;;
291291
*) LOCALLIBS=$LIBS;;
292292
esac
293-
LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)'
293+
LIBS='$(LOCALMODLIBS) $(BASEMODLIBS) $(UNIQMODLIBS)'
294294
DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS"
295295
DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS"
296296

configure

Lines changed: 58 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

configure.ac

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,15 @@ AC_DEFUN([WITH_SAVE_ENV],
5353
[RESTORE_ENV]
5454
)dnl
5555

56+
dnl The libraries passed to the linker exactly once.
57+
dnl
58+
dnl This is needed for WASI/WASM as symbols should be defined at most once.
59+
dnl Modules sharing a common static library must add the latter here and
60+
dnl to "MODULE_<NAME>_RULE_LDFLAGS" instead of "MODULE_<NAME>_LDFLAGS"
61+
dnl as otherwise the library gets duplicated when linking the interpreter.
62+
UNIQMODLIBS=
63+
AC_SUBST([UNIQMODLIBS])
64+
5665
dnl PY_CHECK_FUNC(FUNCTION, [INCLUDES], [AC_DEFINE-VAR])
5766
AC_DEFUN([PY_CHECK_FUNC],
5867
[ AS_VAR_PUSHDEF([py_var], [ac_cv_func_$1])
@@ -7961,10 +7970,12 @@ PY_STDLIB_MOD_SIMPLE([unicodedata])
79617970
###############################################################################
79627971
# Cryptographic primitives
79637972
LIBHASHLIB_INTERNAL_CFLAGS="-I\$(srcdir)/Modules/_hashlib"
7964-
LIBHASHLIB_INTERNAL_LDFLAGS="-lm \$(LIBHASHLIB_INTERNAL_A)"
7973+
LIBHASHLIB_INTERNAL_RULE_LDFLAGS="-lm \$(LIBHASHLIB_INTERNAL_A)"
79657974
LIBHASHLIB_INTERNAL="\$(LIBHASHLIB_INTERNAL_HEADERS) \$(LIBHASHLIB_INTERNAL_A)"
7975+
UNIQMODLIBS="$UNIQMODLIBS \$(LIBHASHLIB_INTERNAL_A)"
79667976

79677977
AC_SUBST([LIBHASHLIB_INTERNAL_CFLAGS])
7978+
AC_SUBST([LIBHASHLIB_INTERNAL_RULE_LDFLAGS])
79687979
AC_SUBST([LIBHASHLIB_INTERNAL])
79697980

79707981
###############################################################################
@@ -8103,9 +8114,15 @@ dnl The EXTNAME is the name of the extension module being built.
81038114
AC_DEFUN([PY_HACL_CREATE_MODULE], [
81048115
AS_VAR_PUSHDEF([v], [[LIBHACL_][$1][_LDFLAGS]])
81058116
AS_VAR_SET([v], [[LIBHACL_][$1][_LIB_${LIBHACL_LDEPS_LIBTYPE}]])
8117+
# LDFLAGS will not contain the internal library helper as it could
8118+
# be duplicated when eventually linking the interpreter.
8119+
#
8120+
# Instead, it will be part of the UNIQMODLIBS variable which will
8121+
# then be available as any other "core" features but without being
8122+
# part of the Include/ directory.
81068123
PY_STDLIB_MOD([$2], [$3], [],
81078124
[$LIBHACL_CFLAGS $LIBHASHLIB_INTERNAL_CFLAGS],
8108-
[\$($v) $LIBHASHLIB_INTERNAL_LDFLAGS])
8125+
[\$($v)])
81098126
AS_VAR_POPDEF([v])
81108127
])
81118128

@@ -8185,9 +8202,16 @@ PY_STDLIB_MOD([_zstd], [], [test "$have_libzstd" = yes],
81858202
dnl OpenSSL bindings
81868203
PY_STDLIB_MOD([_ssl], [], [test "$ac_cv_working_openssl_ssl" = yes],
81878204
[$OPENSSL_INCLUDES], [$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $OPENSSL_LIBS])
8205+
8206+
# LDFLAGS will not contain the internal library helper as it could
8207+
# be duplicated when eventually linking the interpreter.
8208+
#
8209+
# Instead, it will be part of the UNIQMODLIBS variable which will
8210+
# then be available as any other "core" features but without being
8211+
# part of the Include/ directory.
81888212
PY_STDLIB_MOD([_hashlib], [], [test "$ac_cv_working_openssl_hashlib" = yes],
81898213
[$OPENSSL_INCLUDES $LIBHASHLIB_INTERNAL_CFLAGS],
8190-
[$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $LIBCRYPTO_LIBS $LIBHASHLIB_INTERNAL_LDFLAGS])
8214+
[$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $LIBCRYPTO_LIBS])
81918215

81928216
dnl test modules
81938217
PY_STDLIB_MOD([_testcapi],

0 commit comments

Comments
 (0)