fix(guile-gnutls): drop static-only patches and rely on shared bindings

This commit is contained in:
vxtls 2026-03-11 11:17:42 -04:00
parent a3878a91b9
commit 132a43d4a6
7 changed files with 54 additions and 192 deletions

View file

@ -16,8 +16,8 @@ src_configure() {
--includedir="${PREFIX}/include" \
--host="${host_triplet}" \
--build="${host_triplet}" \
--enable-static \
--disable-shared \
--enable-shared \
--disable-static \
--disable-doc \
--disable-tests \
--disable-tools \

View file

@ -6,18 +6,18 @@ src_prepare() {
}
src_configure() {
local host_triplet pkg_config_path guile_cflags guile_static_libs
local avahi_cflags avahi_static_libs
local host_triplet pkg_config_path guile_cflags guile_libs
local avahi_cflags avahi_libs
host_triplet="$(gcc -dumpmachine)"
pkg_config_path="${LIBDIR}/pkgconfig:${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
guile_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags guile-3.0)"
guile_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs guile-3.0)"
guile_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs guile-3.0)"
avahi_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags avahi-client)"
avahi_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs avahi-client)"
avahi_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs avahi-client)"
PATH="${PREFIX}/bin:/usr/bin:/bin" \
PKG_CONFIG="/usr/bin/pkg-config" \
@ -25,68 +25,62 @@ src_configure() {
PKG_CONFIG_PATH="${pkg_config_path}" \
LD_LIBRARY_PATH="${LIBDIR}:${PREFIX}/lib:${LD_LIBRARY_PATH}" \
GUILE_CFLAGS="${guile_cflags}" \
GUILE_LDFLAGS="${guile_static_libs}" \
GUILE_LDFLAGS="${guile_libs}" \
AVAHI_CFLAGS="${avahi_cflags}" \
AVAHI_LIBS="${avahi_static_libs}" \
AVAHI_LIBS="${avahi_libs}" \
./configure \
--prefix="${PREFIX}" \
--libdir="${LIBDIR}" \
--host="${host_triplet}" \
--build="${host_triplet}" \
--enable-static \
--disable-shared \
--enable-shared \
--disable-static \
'--with-guilemoduledir=$(datarootdir)/guile/site/$(GUILE_EFFECTIVE_VERSION)'
}
src_compile() {
local pkg_config_path guile_cflags guile_static_libs avahi_cflags avahi_static_libs
local gnutls_static_libs guile_gnutls_static_lib
local pkg_config_path guile_cflags guile_libs avahi_cflags avahi_libs gnutls_libs
pkg_config_path="${LIBDIR}/pkgconfig:${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
guile_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags guile-3.0)"
guile_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs guile-3.0)"
guile_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs guile-3.0)"
avahi_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags avahi-client)"
avahi_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs avahi-client)"
gnutls_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs gnutls)"
guile_gnutls_static_lib="${LIBDIR}/libguile-gnutls-static.a"
avahi_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs avahi-client)"
gnutls_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs gnutls)"
CPPFLAGS="${guile_cflags} ${avahi_cflags} ${CPPFLAGS:-}" \
GUILE_CFLAGS="${guile_cflags}" \
GUILE_LDFLAGS="${guile_static_libs}" \
GUILE_LDFLAGS="${guile_libs}" \
AVAHI_CFLAGS="${avahi_cflags}" \
AVAHI_LIBS="${avahi_static_libs}" \
GNUTLS_LIBS="${gnutls_static_libs}" \
GUILE_GNUTLS_STATIC_LIB="${guile_gnutls_static_lib}" \
AVAHI_LIBS="${avahi_libs}" \
GNUTLS_LIBS="${gnutls_libs}" \
default_src_compile
}
src_install() {
local pkg_config_path guile_cflags guile_static_libs avahi_cflags avahi_static_libs
local gnutls_static_libs guile_gnutls_static_lib
local pkg_config_path guile_cflags guile_libs avahi_cflags avahi_libs gnutls_libs
pkg_config_path="${LIBDIR}/pkgconfig:${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
guile_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags guile-3.0)"
guile_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs guile-3.0)"
guile_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs guile-3.0)"
avahi_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags avahi-client)"
avahi_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs avahi-client)"
gnutls_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs gnutls)"
guile_gnutls_static_lib="${LIBDIR}/libguile-gnutls-static.a"
avahi_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs avahi-client)"
gnutls_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs gnutls)"
CPPFLAGS="${guile_cflags} ${avahi_cflags} ${CPPFLAGS:-}" \
GUILE_CFLAGS="${guile_cflags}" \
GUILE_LDFLAGS="${guile_static_libs}" \
GUILE_LDFLAGS="${guile_libs}" \
AVAHI_CFLAGS="${avahi_cflags}" \
AVAHI_LIBS="${avahi_static_libs}" \
GNUTLS_LIBS="${gnutls_static_libs}" \
GUILE_GNUTLS_STATIC_LIB="${guile_gnutls_static_lib}" \
AVAHI_LIBS="${avahi_libs}" \
GNUTLS_LIBS="${gnutls_libs}" \
default_src_install
}

View file

@ -6,15 +6,15 @@ src_prepare() {
}
src_configure() {
local host_triplet pkg_config_path guile_cflags guile_static_libs gnutls_static_libs
local host_triplet pkg_config_path guile_cflags guile_libs gnutls_libs
host_triplet="$(gcc -dumpmachine)"
pkg_config_path="${LIBDIR}/pkgconfig:${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
guile_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags guile-3.0)"
guile_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs guile-3.0)"
gnutls_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs gnutls)"
guile_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs guile-3.0)"
gnutls_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs gnutls)"
PATH="${PREFIX}/bin:/usr/bin:/bin" \
PKG_CONFIG="/usr/bin/pkg-config" \
@ -24,38 +24,38 @@ src_configure() {
CXXFLAGS="-fPIC" \
LD_LIBRARY_PATH="${LIBDIR}:${PREFIX}/lib:${LD_LIBRARY_PATH}" \
GUILE_CFLAGS="${guile_cflags}" \
GUILE_LIBS="${guile_static_libs}" \
GNUTLS_LIBS="${gnutls_static_libs}" \
GUILE_LIBS="${guile_libs}" \
GNUTLS_LIBS="${gnutls_libs}" \
./configure \
--prefix="${PREFIX}" \
--libdir="${LIBDIR}" \
--host="${host_triplet}" \
--build="${host_triplet}" \
--enable-static \
--disable-shared \
--enable-shared \
--disable-static \
'--with-guile-site-dir=$(datarootdir)/guile/site/$(GUILE_EFFECTIVE_VERSION)' \
'--with-guile-site-ccache-dir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache' \
'--with-guile-extension-dir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/extensions'
}
src_compile() {
local pkg_config_path guile_cflags guile_static_libs gnutls_cflags gnutls_static_libs
local pkg_config_path guile_cflags guile_libs gnutls_cflags gnutls_libs
pkg_config_path="${LIBDIR}/pkgconfig:${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig"
guile_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags guile-3.0)"
guile_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs guile-3.0)"
guile_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs guile-3.0)"
gnutls_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --cflags gnutls)"
gnutls_static_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --static --libs gnutls)"
gnutls_libs="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
/usr/bin/pkg-config --libs gnutls)"
CPPFLAGS="${guile_cflags} ${gnutls_cflags} ${CPPFLAGS:-}" \
GUILE_CFLAGS="${guile_cflags}" \
GUILE_LDFLAGS="${guile_static_libs}" \
GUILE_LDFLAGS="${guile_libs}" \
GNUTLS_CFLAGS="${gnutls_cflags}" \
GNUTLS_LIBS="${gnutls_static_libs}" \
GNUTLS_LIBS="${gnutls_libs}" \
default_src_compile
}

View file

@ -1,82 +0,0 @@
--- guile-gnutls-v5.0.1/guile/src/Makefile.am
+++ guile-gnutls-v5.0.1/guile/src/Makefile.am
@@ -23,7 +23,8 @@
EXTRA_DIST = \
make-enum-map.scm make-smob-types.scm \
- make-enum-header.scm make-smob-header.scm
+ make-enum-header.scm make-smob-header.scm \
+ guile-static-main.c
# Files generated by the (gnutls build ...) modules.
GENERATED_BINDINGS = \
@@ -35,6 +36,10 @@
CLEANFILES = $(BUILT_SOURCES)
+guile_gnutls_common_cflags = \
+ $(AM_CFLAGS) $(GNULIB_CFLAGS) $(GUILE_CFLAGS) $(GNUTLS_CFLAGS)
+
+if ENABLE_SHARED
guileextension_LTLIBRARIES = guile-gnutls-v-2.la
# Use '-module' to build a "dlopenable module", in Libtool terms.
@@ -43,12 +48,26 @@
guile_gnutls_v_2_la_LDFLAGS = -module -no-undefined
guile_gnutls_v_2_la_SOURCES = core.c errors.c utils.c
-guile_gnutls_v_2_la_CFLAGS = \
- $(AM_CFLAGS) $(GNULIB_CFLAGS) $(GUILE_CFLAGS) $(GNUTLS_CFLAGS)
+guile_gnutls_v_2_la_CFLAGS = $(guile_gnutls_common_cflags)
+guile_gnutls_v_2_la_DEPENDENCIES = $(BUILT_SOURCES)
guile_gnutls_v_2_la_LIBADD = \
$(GNUTLS_LIBS) \
$(GUILE_LDFLAGS)
+else
+lib_LIBRARIES = libguile-gnutls-static.a
+libguile_gnutls_static_a_SOURCES = core.c errors.c utils.c
+libguile_gnutls_static_a_CPPFLAGS = $(AM_CPPFLAGS)
+libguile_gnutls_static_a_CFLAGS = $(guile_gnutls_common_cflags)
+libguile_gnutls_static_a_DEPENDENCIES = $(BUILT_SOURCES)
+bin_PROGRAMS = guile
+guile_SOURCES = guile-static-main.c
+guile_CPPFLAGS = $(AM_CPPFLAGS)
+guile_CFLAGS = $(guile_gnutls_common_cflags)
+guile_LDFLAGS = -static
+guile_LDADD = libguile-gnutls-static.a $(GUILE_LDFLAGS) $(GNUTLS_LIBS)
+endif
+
AM_CPPFLAGS = \
-I$(top_srcdir)/lib/includes \
-I$(top_builddir)/lib/includes \
@@ -102,7 +121,7 @@
# `$(GUILE_CFLAGS)' may contain a series of `-I' switches so it must be
# included here, even though we'd really want `$(GUILE_CPPFLAGS)'.
snarfcppopts = $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(CFLAGS) $(guile_gnutls_v_2_la_CFLAGS)
+ $(CFLAGS) $(guile_gnutls_common_cflags)
# Note: we cannot use the portable ".c.x" form, since that leads
# prerequisites to be ignored:
--- /dev/null
+++ guile-gnutls-v5.0.1/guile/src/guile-static-main.c
@@ -0,0 +1,18 @@
+#include <libguile.h>
+
+void scm_init_gnutls(void);
+
+static void
+inner_main(void *closure, int argc, char **argv)
+{
+ (void) closure;
+ scm_init_gnutls();
+ scm_shell(argc, argv);
+}
+
+int
+main(int argc, char **argv)
+{
+ scm_boot_guile(argc, argv, inner_main, NULL);
+ return 0;
+}

View file

@ -1,55 +0,0 @@
SPDX-License-Identifier: GPL-3.0-or-later
Make static/shared initialization deterministic from the build system only.
Do not patch Scheme sources; rewrite generated gnutls.scm at build time.
--- guile-gnutls-v5.0.1/configure.ac
+++ guile-gnutls-v5.0.1/configure.ac
@@ -508,6 +508,7 @@
fi
AC_SUBST([maybe_guileextensiondir])
+AM_CONDITIONAL([ENABLE_SHARED], [test "x$enable_shared" != "xno"])
AM_CONDITIONAL([HAVE_GUILD], [test "x$GUILD" != "x"])
AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = "xyes"])
AM_CONDITIONAL(HAVE_GCC_GNU89_INLINE_OPTION, test "$gnu89_inline" = "yes"])
--- guile-gnutls-v5.0.1/guile/Makefile.am
+++ guile-gnutls-v5.0.1/guile/Makefile.am
@@ -43,11 +43,21 @@
CLEANFILES = modules/gnutls.scm
+if ENABLE_SHARED
.in.scm:
$(AM_V_GEN)$(MKDIR_P) "`dirname "$@"`" ; cat "$^" | \
$(SED) -e's|[@]maybe_guileextensiondir[@]|$(maybe_guileextensiondir)|g' \
> "$@.tmp"
$(AM_V_at)mv "$@.tmp" "$@"
+else
+.in.scm:
+ $(AM_V_GEN)$(MKDIR_P) "`dirname "$@"`" ; cat "$^" | \
+ $(SED) -e's|[@]maybe_guileextensiondir[@]|$(maybe_guileextensiondir)|g' \
+ -e '1,/(unless (getenv "GNUTLS_GUILE_CROSS_COMPILING")/s|(unless (getenv "GNUTLS_GUILE_CROSS_COMPILING")|(when #f|' \
+ -e "s|(unless (getenv \\\"GNUTLS_GUILE_CROSS_COMPILING\\\")|(when (module-variable (current-module) 'protocol/ssl3)|" \
+ > "$@.tmp"
+ $(AM_V_at)mv "$@.tmp" "$@"
+endif
#
@@ -56,6 +66,7 @@
if HAVE_GUILD
+if ENABLE_SHARED
guilesiteccachesubdir = $(guilesiteccachedir)/gnutls
nodist_guilesiteccache_DATA = modules/gnutls.go
nodist_guilesiteccachesub_DATA = modules/gnutls/extra.go
@@ -94,6 +105,7 @@
-o "$@" "$<" >&$$out
SUFFIXES = .go
+endif ENABLE_SHARED
endif HAVE_GUILD

View file

@ -113,7 +113,7 @@ probe_guile_module() {
probe_pkg_config="gnutls"
find_name='libguile-gnutls*'
find_module='gnutls'
probe_expression="(use-modules (gnutls)) (display \"gnutls-module-ok\\n\")"
probe_expression="(use-modules (gnutls)) (if (module-variable (resolve-module '(gnutls)) 'make-session) (display \"gnutls-module-ok\\n\") (begin (display \"gnutls-make-session-missing\\n\") (exit 1)))"
;;
*)
probe_label="${module_name}-related"

View file

@ -231,4 +231,9 @@ EOF
chmod 0644 "${channels_file}"
if ! guile -c '(use-modules (gnutls)) (if (module-variable (resolve-module (quote (gnutls))) (quote make-session)) (exit 0) (exit 1))'; then
echo "Guile GnuTLS bindings are incomplete: (gnutls) is missing make-session." >&2
exit 1
fi
guix pull --bootstrap --no-substitutes --channels="${channels_file}" --disable-authentication