[gnutls-devel] [PATCH 5/8] guile: Build and install .go files on Guile 2.x.

Ludovic Courtès ludo at gnu.org
Thu Feb 11 23:04:35 CET 2016


* configure.ac: Check for 'guild' and substitute 'GUILD'.  Define
'HAVE_GUILD'.  Substitute 'guileobjectdir'.  Don't output
guile/modules/Makefile and guile/tests/Makefile.
* guile/modules/Makefile.am, guile/tests/Makefile.am: Remove.  Move
contents to...
* guile/Makefile.am: ... here.
(SUBDIRS): Remove 'modules' and 'tests'.
---
 configure.ac              |  19 ++++++--
 guile/Makefile.am         | 118 +++++++++++++++++++++++++++++++++++++++++++++-
 guile/modules/Makefile.am |  38 ---------------
 guile/tests/Makefile.am   |  43 -----------------
 4 files changed, 131 insertions(+), 87 deletions(-)
 delete mode 100644 guile/modules/Makefile.am
 delete mode 100644 guile/tests/Makefile.am

diff --git a/configure.ac b/configure.ac
index 6a5600c..8440def 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+# Copyright (C) 2000-2012, 2016 Free Software Foundation, Inc.
 #
 # Author: Nikos Mavrogiannopoulos, Simon Josefsson
 #
@@ -730,9 +730,14 @@ if test "$opt_guile_bindings" = "yes"; then
 
    AC_PATH_PROG([guile_snarf], [guile-snarf])
    if test "x$guile_snarf" = "x"; then
-      AC_MSG_WARN([`guile-snarf' from Guile 1.8 not found.  Guile bindings not built.])
+      AC_MSG_WARN([`guile-snarf' from Guile not found.  Guile bindings not built.])
       opt_guile_bindings=no
    else
+      dnl Check for 'guild', which can be used to compile Scheme code
+      dnl on Guile 2.x.
+      AC_PATH_PROG([GUILD], [guild])
+      AC_SUBST([GUILD])
+
       GUILE_PROGS
       GUILE_FLAGS
 
@@ -789,6 +794,10 @@ if test "$opt_guile_bindings" = "yes"; then
 	AC_MSG_RESULT([$guile_effective_version])
 	guileextensiondir="$libdir/guile/$guile_effective_version"
 	AC_SUBST([guileextensiondir])
+
+	# The location of .go files.
+	guileobjectdir="$libdir/guile/$guile_effective_version/site-ccache"
+	AC_SUBST([guileobjectdir])
       else
         AC_MSG_RESULT([no])
         AC_MSG_WARN([A sufficiently recent GNU Guile not found.  Guile bindings not built.])
@@ -796,7 +805,9 @@ if test "$opt_guile_bindings" = "yes"; then
       fi
    fi
 fi
-AM_CONDITIONAL(HAVE_GUILE, test "$opt_guile_bindings" = "yes")
+
+AM_CONDITIONAL([HAVE_GUILE], [test "$opt_guile_bindings" = "yes"])
+AM_CONDITIONAL([HAVE_GUILD], [test "x$GUILD" != "x"])
 
 LIBGNUTLS_LIBS="-L${libdir} -lgnutls $LIBS"
 LIBGNUTLS_CFLAGS="-I${includedir}"
@@ -886,9 +897,7 @@ AC_CONFIG_FILES([
   gl/Makefile
   gl/tests/Makefile
   guile/Makefile
-  guile/modules/Makefile
   guile/src/Makefile
-  guile/tests/Makefile
   lib/Makefile
   lib/accelerated/Makefile
   lib/accelerated/x86/Makefile
diff --git a/guile/Makefile.am b/guile/Makefile.am
index ed9b8ba..98ac7a1 100644
--- a/guile/Makefile.am
+++ b/guile/Makefile.am
@@ -15,6 +15,122 @@
 #  License along with GnuTLS; if not, write to the Free Software
 #  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-SUBDIRS = modules src tests
+# First of all, built the DSO.  We cannot compile the Scheme code until this
+# is done.
+SUBDIRS = src
+
 
 EXTRA_DIST = .dir-locals.el
+
+guilemoduledir = $(GUILE_SITE)
+guilemodulesubdir = $(GUILE_SITE)/gnutls
+
+nodist_guilemodule_DATA = modules/gnutls.scm
+dist_guilemodulesub_DATA = modules/gnutls/extra.scm
+
+documentation_modules =				\
+  modules/system/documentation/README		\
+  modules/system/documentation/c-snarf.scm	\
+  modules/system/documentation/output.scm
+
+helper_modules =				\
+  modules/gnutls/build/enums.scm		\
+  modules/gnutls/build/smobs.scm		\
+  modules/gnutls/build/utils.scm		\
+  modules/gnutls/build/tests.scm
+
+EXTRA_DIST += modules/gnutls.in $(helper_modules) $(documentation_modules)
+
+CLEANFILES = modules/gnutls.scm
+
+.in.scm:
+	cat "$^" | $(SED) -e's|[@]guileextensiondir[@]|$(guileextensiondir)|g' \
+	  > "$@.tmp"
+	mv "$@.tmp" "$@"
+
+
+#
+# Scheme code compilation.
+#
+
+if HAVE_GUILD
+
+guileobjectsubdir = $(guileobjectdir)/gnutls
+nodist_guileobject_DATA = modules/gnutls.go
+nodist_guileobjectsub_DATA = modules/gnutls/extra.go
+
+GOBJECTS =					\
+  $(nodist_guileobject_DATA)			\
+  $(nodist_guileobjectsub_DATA)
+
+CLEANFILES += $(GOBJECTS)
+
+AM_V_GUILEC = $(AM_V_GUILEC_$(V))
+AM_V_GUILEC_ = $(AM_V_GUILEC_$(AM_DEFAULT_VERBOSITY))
+AM_V_GUILEC_0 = @echo "  GUILEC  " $@;
+
+# Make sure 'gnutls.scm' is built first.
+# Unset 'GUILE_LOAD_COMPILED_PATH' so we can be sure that any .go file that we
+# load comes from the build directory.
+# XXX: Use the C locale for when Guile lacks
+# <http://git.sv.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=e2c6bf3866d1186c60bacfbd4fe5037087ee5e3f>.
+%.go: %.scm modules/gnutls.scm
+	$(AM_V_GUILEC)$(MKDIR_P) "`dirname "$@"`" ;			\
+	$(AM_V_P) && out=1 || out=- ;					\
+	unset GUILE_LOAD_COMPILED_PATH ; LC_ALL=C			\
+	GNUTLS_GUILE_EXTENSION_DIR="$(abs_top_builddir)/guile/src"	\
+	$(GUILD) compile --target="$(host)"				\
+	  -L "$(top_builddir)/guile/modules"				\
+	  -L "$(top_srcdir)/guile/modules"				\
+	  -Wformat -Wunbound-variable -Warity-mismatch			\
+	  -o "$@" "$<" >&$$out
+
+SUFFIXES = .go
+
+endif HAVE_GUILD
+
+
+#
+# Tests.
+#
+
+TESTS =						\
+  tests/anonymous-auth.scm			\
+  tests/session-record-port.scm			\
+  tests/pkcs-import-export.scm			\
+  tests/errors.scm				\
+  tests/x509-certificates.scm			\
+  tests/x509-auth.scm				\
+  tests/priorities.scm
+
+if ENABLE_OPENPGP
+TESTS +=					\
+  tests/openpgp-keys.scm			\
+  tests/openpgp-keyring.scm			\
+  tests/openpgp-auth.scm
+endif
+
+if ENABLE_SRP
+TESTS +=					\
+  tests/srp-base64.scm
+endif
+
+TESTS_ENVIRONMENT =				\
+  GUILE_AUTO_COMPILE=0				\
+  GUILE_WARN_DEPRECATED=detailed
+
+LOG_COMPILER = $(top_builddir)/guile/pre-inst-guile -L $(srcdir)/tests
+
+
+EXTRA_DIST +=					\
+  $(TESTS)					\
+  tests/openpgp-pub.asc				\
+  tests/openpgp-sec.asc				\
+  tests/openpgp-elg-pub.asc			\
+  tests/openpgp-elg-sec.asc			\
+  tests/openpgp-keyring.gpg			\
+  tests/openpgp-keyring.asc			\
+  tests/rsa-parameters.pem			\
+  tests/dh-parameters.pem			\
+  tests/x509-certificate.pem			\
+  tests/x509-key.pem
diff --git a/guile/modules/Makefile.am b/guile/modules/Makefile.am
deleted file mode 100644
index 71e3d68..0000000
--- a/guile/modules/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-#  GnuTLS --- Guile bindings for GnuTLS.
-#  Copyright (C) 2007-2012, 2014 Free Software Foundation, Inc.
-#
-#  GnuTLS is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU Lesser General Public
-#  License as published by the Free Software Foundation; either
-#  version 2.1 of the License, or (at your option) any later version.
-#
-#  GnuTLS is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with GnuTLS; if not, write to the Free Software
-#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-guilemoduledir = $(GUILE_SITE)
-
-nobase_nodist_guilemodule_DATA = gnutls.scm
-nobase_dist_guilemodule_DATA   = gnutls/extra.scm
-
-documentation_modules = system/documentation/README		\
-		        system/documentation/c-snarf.scm	\
-                        system/documentation/output.scm
-
-EXTRA_DIST = gnutls/build/enums.scm gnutls/build/smobs.scm	\
-	     gnutls/build/utils.scm				\
-	     gnutls/build/tests.scm				\
-	     gnutls.in						\
-             $(documentation_modules)
-
-CLEANFILES = gnutls.scm
-
-.in.scm:
-	cat "$^" | $(SED) -e's|[@]guileextensiondir[@]|$(guileextensiondir)|g' \
-	  > "$@.tmp"
-	mv "$@.tmp" "$@"
diff --git a/guile/tests/Makefile.am b/guile/tests/Makefile.am
deleted file mode 100644
index 6b1cfd8..0000000
--- a/guile/tests/Makefile.am
+++ /dev/null
@@ -1,43 +0,0 @@
-#  GnuTLS --- Guile bindings for GnuTLS.
-#  Copyright (C) 2007-2013 Free Software Foundation, Inc.
-#
-#  GnuTLS is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU Lesser General Public
-#  License as published by the Free Software Foundation; either
-#  version 2.1 of the License, or (at your option) any later version.
-#
-#  GnuTLS is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-#  Lesser General Public License for more details.
-#
-#  You should have received a copy of the GNU Lesser General Public
-#  License along with GnuTLS; if not, write to the Free Software
-#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-TESTS = anonymous-auth.scm session-record-port.scm	\
-        pkcs-import-export.scm				\
-        errors.scm					\
-	x509-certificates.scm x509-auth.scm		\
-	priorities.scm
-
-if ENABLE_OPENPGP
-TESTS += openpgp-keys.scm openpgp-keyring.scm openpgp-auth.scm
-endif
-
-if ENABLE_SRP
-TESTS += srp-base64.scm
-endif
-
-TESTS_ENVIRONMENT =					\
-  GUILE_AUTO_COMPILE=0					\
-  GUILE_WARN_DEPRECATED=detailed
-
-LOG_COMPILER = $(top_builddir)/guile/pre-inst-guile -L $(srcdir)
-
-
-EXTRA_DIST = $(TESTS) openpgp-pub.asc openpgp-sec.asc	\
-		openpgp-elg-pub.asc openpgp-elg-sec.asc \
-             openpgp-keyring.gpg openpgp-keyring.asc	\
-	     rsa-parameters.pem dh-parameters.pem	\
-	     x509-certificate.pem x509-key.pem
-- 
2.6.3




More information about the Gnutls-devel mailing list