Defer Guile initialization until the first $(guile...) call.
authorPaul Smith <psmith@gnu.org>
Sun, 22 Sep 2013 16:11:13 +0000 (12:11 -0400)
committerPaul Smith <psmith@gnu.org>
Sun, 22 Sep 2013 21:10:35 +0000 (17:10 -0400)
ChangeLog
guile.c

index 8905116..8c5b3e5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2013-09-22  Paul Smith  <psmith@gnu.org>
 
+       * guile.c (guile_gmake_setup): Don't initialize Guile so early.
+       (func_guile): Lazily initialize Guile the first time the $(guile ..)
+       function is invoked.  Guile can steal file descriptors which
+       confuses our jobserver FD checking, so we don't want to initialize
+       it before we have to.
+
        VMS port updates by Hartmut Becker <becker.ismaning@freenet.de>
 
        * makefile.com: Add output to the filelist.
diff --git a/guile.c b/guile.c
index 6c9fb75..20e58d4 100644 (file)
--- a/guile.c
+++ b/guile.c
@@ -107,6 +107,15 @@ internal_guile_eval (void *arg)
 static char *
 func_guile (const char *funcname UNUSED, int argc UNUSED, char **argv)
 {
+  static int init = 0;
+
+  if (! init)
+    {
+      /* Initialize the Guile interpreter.  */
+      scm_with_guile (guile_init, NULL);
+      init = 1;
+    }
+
   if (argv[0] && argv[0][0] != '\0')
     return scm_with_guile (internal_guile_eval, argv[0]);
 
@@ -120,9 +129,6 @@ func_guile (const char *funcname UNUSED, int argc UNUSED, char **argv)
 int
 guile_gmake_setup (const gmk_floc *flocp UNUSED)
 {
-  /* Initialize the Guile interpreter.  */
-  scm_with_guile (guile_init, NULL);
-
   /* Create a make function "guile".  */
   gmk_add_function ("guile", func_guile, 0, 1, 1);