* snarf.h: New file.
authorJim Blandy <jimb@red-bean.com>
Tue, 29 Oct 1996 20:49:56 +0000 (20:49 +0000)
committerJim Blandy <jimb@red-bean.com>
Tue, 29 Oct 1996 20:49:56 +0000 (20:49 +0000)
* guile-snarf.sh: New file.
* Makefile.in (inner_h_files): Added snarf.h
(ancillary, install, uninstall, distclean): Added actions for
guile-snarf.
(.c.x): Use guile-snarf.
(guile-snarf): New rule, to produce guile-snarf from guile-snarf.sh.
(gen_c_files): Note that these depend on guile-snarf.
* _scm.h: Removed the snarfing macros (SCM_PROC, etc). They are
now in "snarf.h".  Added #include "snarf.h" to get them.
* configure.in: Added guile-snarf to AC_OUTPUT
* libguile.h: Added #include "snarf.h".
(Patches applied and tweaked by Jim Blandy.)

libguile/Makefile.in
libguile/_scm.h
libguile/libguile.h
libguile/snarf.h [new file with mode: 0644]

index 18c1d03..1e3136e 100644 (file)
@@ -50,6 +50,7 @@ pkgdatadir=$(datadir)/guile
 
 INSTALL = $(srcdir)/../install-sh -c
 INSTALL_DATA = $(INSTALL) -m 644
+INSTALL_PROGRAM = $(INSTALL) -m 755
 
 # Programs to make tags files.
 ETAGS = etags
@@ -65,6 +66,7 @@ CFLAGS=@CFLAGS@
 INCLUDE_CFLAGS=-I. -I.. -I$(srcdir)/.. -I$(srcdir)
 ALL_CFLAGS=$(X_CFLAGS) $(INCLUDE_CFLAGS) $(X11_INCLUDES) @DEFS@
 CC=@CC@ $(ALL_CFLAGS)
+CPP=@CPP@
 
 # CC used as a front end for ld
 LDFLAGS = @LDFLAGS@
@@ -203,6 +205,7 @@ inner_h_files= __scm.h \
                sequences.h \
                simpos.h \
                smob.h \
+               snarf.h \
                socket.h \
                srcprop.h \
                stackchk.h \
@@ -377,7 +380,8 @@ ancillary = gscm.c \
                configure \
                configure.in \
                scmconfig.h.in \
-               fd.h.in
+               fd.h.in \
+               guile-snarf.sh
 
 
 c_sources = $(c_files) $(h_files)
@@ -386,8 +390,8 @@ manifest = $(ancillary) $(c_sources)
 .SUFFIXES:
 .SUFFIXES: .o .c .h .ps .dvi .info .texinfo .scm .x
 
-.c.x:
-       $(CC) -DSCM_MAGIC_SNARFER -E $< | grep "^%%%" | sed -e "s/^%%%//" > $@
+.c.x: guile-snarf
+       ./guile-snarf $(ALL_CFLAGS) $< > $@
 
 .PHONY: all
 all: libguile.a
@@ -396,6 +400,13 @@ libpath.h: Makefile
        echo '/* generated by Makefile */' > libpath.h
        echo '#define LIBRARY_PATH "$(pkgdatadir)/$(VERSION)"' >> libpath.h
 
+$(gen_c_files): guile-snarf
+guile-snarf: $(srcdir)/guile-snarf.sh
+       rm -f guile-snarf
+       sed -e 's,xCPPx,$(CPP),' $(srcdir)/guile-snarf.sh > guile-snarf-t
+       mv guile-snarf-t guile-snarf
+       chmod +x guile-snarf
+
 # The `dist' target in the top-level Makefile uses this `dist-dir'
 # target to select the appropriate files for distribution from the
 # directory containing this Makefile.
@@ -435,13 +446,15 @@ install: all
        for h in $(inner_h_files); do \
          $(INSTALL_DATA) $(srcdir)/$$h $(innerincludedir); \
        done
+       test -d $(bindir) || mkdir $(bindir)
+       $(INSTALL_PROGRAM) guile-snarf $(bindir)
 
 uninstall:
        -rm $(libdir)/libguile$(VERSION).a
        -rm $(libdir)/libguile.a
        -rm -rf $(guileincludedir)
        -rm $(includedir)/guile
-
+       -rm $(bindir)/guile-snarf
 
 TAGS:
        etags $(c_sources)
@@ -462,7 +475,7 @@ distclean: clean
        -rm -f Makefile
        -rm -f scmconfig.h
        -rm -f fd.h
-
+       -rm -f guile-snarf
 
 realclean: distclean
        -rm -f $(gen_c_files)
index 350246a..16d87c6 100644 (file)
@@ -69,6 +69,7 @@
 #include "../threads/threads.h"        /* Some thread packages does switching
                                   at async ticks. */
 #endif
+#include "snarf.h"             /* Everyone snarfs. */
 
 /* On VMS, GNU C's errno.h contains a special hack to get link attributes
  * for errno correct for linking to the C RTL.
 
 \f
 
-#ifndef SCM_MAGIC_SNARFER
-#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN)  \
-       static char RANAME[]=STR
-#define SCM_PROC1(RANAME, STR, TYPE, CFN)  \
-       static char RANAME[]=STR
-#else
-#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN)  \
-%%%    scm_make_gsubr (RANAME, REQ, OPT, VAR, CFN)
-#define SCM_PROC1(RANAME, STR, TYPE, CFN)  \
-%%%    scm_make_subr(RANAME, TYPE, CFN)
-#endif
-
-#ifndef SCM_MAGIC_SNARFER
-#define SCM_SYMBOL(c_name, scheme_name) \
-       static SCM c_name = SCM_BOOL_F
-#else
-#define SCM_SYMBOL(C_NAME, SCHEME_NAME) \
-%%%    C_NAME = scm_permanent_object (SCM_CAR (scm_intern0 (SCHEME_NAME)))
-#endif
-
-
-#ifndef SCM_MAGIC_SNARFER
-#define SCM_GLOBAL(c_name, scheme_name) \
-       static SCM c_name = SCM_BOOL_F
-#else
-#define SCM_GLOBAL(C_NAME, SCHEME_NAME) \
-%%%    C_NAME = scm_permanent_object (scm_intern0 (SCHEME_NAME)); SCM_SETCDR (C_NAME, SCM_BOOL_F)
-#endif
-
-
-#ifndef SCM_MAGIC_SNARFER
-#define SCM_CONST_LONG(C_NAME, SCHEME_NAME,VALUE) \
-       static SCM C_NAME = SCM_BOOL_F
-#else
-#define SCM_CONST_LONG(C_NAME, SCHEME_NAME,VALUE) \
-%%%    C_NAME = scm_permanent_object (scm_intern0 (SCHEME_NAME)); SCM_SETCDR (C_NAME, scm_long2num (VALUE))
-#endif
-
 #define min(A,B) ((A) <= (B) ? (A) : (B))
 #define max(A,B) ((A) >= (B) ? (A) : (B))
 
index 8c3b16e..d352b1e 100644 (file)
@@ -99,6 +99,7 @@
 #include "libguile/scmsigs.h"
 #include "libguile/sequences.h"
 #include "libguile/simpos.h"
+#include "libguile/snarf.h"
 #include "libguile/socket.h"
 #include "libguile/srcprop.h"
 #include "libguile/stackchk.h"
diff --git a/libguile/snarf.h b/libguile/snarf.h
new file mode 100644 (file)
index 0000000..2104531
--- /dev/null
@@ -0,0 +1,94 @@
+/* classes: h_files */
+
+/* Macros for snarfing initialization actions from C source. */
+
+#ifndef LIBGUILE_SNARF_H
+#define LIBGUILE_SNARF_H
+
+/*     Copyright (C) 1995,1996 Free Software Foundation, Inc.
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * This program 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 General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * As a special exception, the Free Software Foundation gives permission
+ * for additional uses of the text contained in its release of GUILE.
+ *
+ * The exception is that, if you link the GUILE library with other files
+ * to produce an executable, this does not by itself cause the
+ * resulting executable to be covered by the GNU General Public License.
+ * Your use of that executable is in no way restricted on account of
+ * linking the GUILE library code into it.
+ *
+ * This exception does not however invalidate any other reasons why
+ * the executable file might be covered by the GNU General Public License.
+ *
+ * This exception applies only to the code released by the
+ * Free Software Foundation under the name GUILE.  If you copy
+ * code from other Free Software Foundation releases into a copy of
+ * GUILE, as the General Public License permits, the exception does
+ * not apply to the code that you add in this way.  To avoid misleading
+ * anyone as to the status of such modified files, you must delete
+ * this exception notice from them.
+ *
+ * If you write modifications of your own for GUILE, it is your choice
+ * whether to permit this exception to apply to your modifications.
+ * If you do not wish that, delete this exception notice.  */
+\f
+
+#ifndef SCM_MAGIC_SNARFER
+#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN)  \
+       static char RANAME[]=STR
+#define SCM_PROC1(RANAME, STR, TYPE, CFN)  \
+       static char RANAME[]=STR
+#else
+#ifdef __cplusplus
+#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN)  \
+%%%    scm_make_gsubr (RANAME, REQ, OPT, VAR, (SCM (*) (...)) CFN)
+#define SCM_PROC1(RANAME, STR, TYPE, CFN)  \
+%%%    scm_make_subr(RANAME, TYPE, (SCM (*)(...)) CFN)
+#else /* not __cplusplus */
+#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN)  \
+%%%    scm_make_gsubr (RANAME, REQ, OPT, VAR, CFN)
+#define SCM_PROC1(RANAME, STR, TYPE, CFN)  \
+%%%    scm_make_subr(RANAME, TYPE, CFN)
+#endif /* not __cplusplus */
+#endif
+
+#ifndef SCM_MAGIC_SNARFER
+#define SCM_SYMBOL(c_name, scheme_name) \
+       static SCM c_name = SCM_BOOL_F
+#else
+#define SCM_SYMBOL(C_NAME, SCHEME_NAME) \
+%%%    C_NAME = scm_permanent_object (SCM_CAR (scm_intern0 (SCHEME_NAME)))
+#endif
+
+
+#ifndef SCM_MAGIC_SNARFER
+#define SCM_GLOBAL(c_name, scheme_name) \
+       static SCM c_name = SCM_BOOL_F
+#else
+#define SCM_GLOBAL(C_NAME, SCHEME_NAME) \
+%%%    C_NAME = scm_permanent_object (scm_intern0 (SCHEME_NAME)); SCM_SETCDR (C_NAME, SCM_BOOL_F)
+#endif
+
+
+#ifndef SCM_MAGIC_SNARFER
+#define SCM_CONST_LONG(C_NAME, SCHEME_NAME,VALUE) \
+       static SCM C_NAME = SCM_BOOL_F
+#else
+#define SCM_CONST_LONG(C_NAME, SCHEME_NAME,VALUE) \
+%%%    C_NAME = scm_permanent_object (scm_intern0 (SCHEME_NAME)); SCM_SETCDR (C_NAME, scm_long2num (VALUE))
+#endif
+
+#endif /* LIBGUILE_SNARF_H */