fix(guile-gnutls): move static guile/artifact generation into automake and remove manual ar/gcc packaging

This commit is contained in:
vxtls 2026-03-05 13:43:32 -05:00
parent c2ecd887e9
commit 56f515400d
2 changed files with 54 additions and 46 deletions

View file

@ -40,7 +40,6 @@ src_configure() {
src_compile() { src_compile() {
local pkg_config_path guile_cflags guile_static_libs gnutls_cflags gnutls_static_libs local pkg_config_path guile_cflags guile_static_libs gnutls_cflags gnutls_static_libs
local main_c
pkg_config_path="${LIBDIR}/pkgconfig:${PREFIX}/lib/pkgconfig:${PREFIX}/share/pkgconfig" 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}" \ guile_cflags="$(PKG_CONFIG_LIBDIR="${pkg_config_path}" PKG_CONFIG_PATH="${pkg_config_path}" \
@ -58,48 +57,10 @@ src_compile() {
GNUTLS_CFLAGS="${gnutls_cflags}" \ GNUTLS_CFLAGS="${gnutls_cflags}" \
GNUTLS_LIBS="${gnutls_static_libs}" \ GNUTLS_LIBS="${gnutls_static_libs}" \
default_src_compile default_src_compile
mkdir -p static
ar rcs static/libguile-gnutls-static.a \
guile/src/.libs/core.o \
guile/src/.libs/errors.o \
guile/src/.libs/utils.o
main_c="static/guile-static-main.c"
cat > "${main_c}" <<'EOF_C'
#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;
}
EOF_C
gcc -O2 -static ${guile_cflags} \
-o static/guile \
"${main_c}" \
static/libguile-gnutls-static.a \
${guile_static_libs} \
${gnutls_static_libs}
} }
src_install() { src_install() {
default_src_install default_src_install
install -Dm755 static/guile "${DESTDIR}${PREFIX}/bin/guile"
install -Dm644 static/libguile-gnutls-static.a \
"${DESTDIR}${LIBDIR}/libguile-gnutls-static.a"
} }
src_postprocess() { src_postprocess() {

View file

@ -1,13 +1,60 @@
--- guile-gnutls-v5.0.1/guile/src/Makefile.am --- guile-gnutls-v5.0.1/guile/src/Makefile.am
+++ guile-gnutls-v5.0.1/guile/src/Makefile.am +++ guile-gnutls-v5.0.1/guile/src/Makefile.am
@@ -46,6 +46,10 @@ guileextension_LTLIBRARIES = guile-gnutls-v-2.la @@ -23,7 +23,8 @@
# <https://lists.gnutls.org/pipermail/gnutls-devel/2014-December/007294.html>.
guile_gnutls_v_2_la_LDFLAGS = -module -no-undefined
+# When this specific libtool target is built directly, force generation of EXTRA_DIST = \
+# Automake built sources (e.g. enums.h) first. make-enum-map.scm make-smob-types.scm \
+guile-gnutls-v-2.la: $(BUILT_SOURCES) - 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 = \
@@ -45,10 +46,26 @@
guile_gnutls_v_2_la_SOURCES = core.c errors.c utils.c guile_gnutls_v_2_la_SOURCES = core.c errors.c utils.c
guile_gnutls_v_2_la_CFLAGS = \ guile_gnutls_v_2_la_CFLAGS = \
$(AM_CFLAGS) $(GNULIB_CFLAGS) $(GUILE_CFLAGS) $(GNUTLS_CFLAGS) $(AM_CFLAGS) $(GNULIB_CFLAGS) $(GUILE_CFLAGS) $(GNUTLS_CFLAGS)
+guile_gnutls_v_2_la_DEPENDENCIES = $(BUILT_SOURCES)
guile_gnutls_v_2_la_LIBADD = \
$(GNUTLS_LIBS) \
$(GUILE_LDFLAGS)
+if !ENABLE_SHARED
+lib_LIBRARIES = libguile-gnutls-static.a
+libguile_gnutls_static_a_SOURCES = $(guile_gnutls_v_2_la_SOURCES)
+libguile_gnutls_static_a_CPPFLAGS = $(AM_CPPFLAGS)
+libguile_gnutls_static_a_CFLAGS = $(guile_gnutls_v_2_la_CFLAGS)
+libguile_gnutls_static_a_DEPENDENCIES = $(BUILT_SOURCES)
+
+bin_PROGRAMS = guile
+guile_SOURCES = guile-static-main.c
+guile_CPPFLAGS = $(AM_CPPFLAGS)
+guile_CFLAGS = $(AM_CFLAGS) $(GNULIB_CFLAGS) $(GUILE_CFLAGS) $(GNUTLS_CFLAGS)
+guile_LDFLAGS = -static
+guile_LDADD = libguile-gnutls-static.a $(GUILE_LDFLAGS) $(GNUTLS_LIBS)
+endif !ENABLE_SHARED
+
AM_CPPFLAGS = \
-I$(top_srcdir)/lib/includes \
-I$(top_builddir)/lib/includes \
--- /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;
+}