Make snarfing tools more robust to varied C preprocessor behavior.
authorMark H Weaver <mhw@netris.org>
Thu, 6 Mar 2014 22:17:11 +0000 (17:17 -0500)
committerMark H Weaver <mhw@netris.org>
Thu, 6 Mar 2014 22:25:55 +0000 (17:25 -0500)
* libguile/guile-snarf.in (modern_snarf): Rewrite sed script to cope
  with newlines in the snarfed code segments, or multiple code segments
  on the same line.

* module/scripts/snarf-check-and-output-texi.scm (process-stream):
  Strip all 'hash' tokens from the stream.
  (do-command): Remove special cases that handled 'hash' tokens
  in a few places.

libguile/guile-snarf.in
module/scripts/snarf-check-and-output-texi.scm

index c73e8ce..47bbc04 100644 (file)
@@ -1,7 +1,8 @@
 #!/bin/sh
 # Extract the initialization actions from source files.
 #
-#  Copyright (C) 1996, 97, 98, 99, 2000, 2001, 2002, 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+#  Copyright (C) 1996, 97, 98, 99, 2000, 2001, 2002, 2004, 2006, 2008,
+#    2009, 2014 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU Lesser General Public License as
@@ -51,19 +52,21 @@ modern_snarf ()                         # writes stdout
     ## empty file.
     echo "/* cpp arguments: $@ */" ;
     ${cpp} -DSCM_MAGIC_SNARF_INITS -DSCM_MAGIC_SNARFER "$@" > ${temp} && cpp_ok_p=true
-    sed -ne 's/ *\^ *: *\^/\
+    sed -ne 's/ *\^ *\^ */\
 /
-h
-s/\n.*//
+s/.*\n//
 t x
 d
 : x
-s/.*\^ *\^ *\(.*\)/\1;/
+s/ *\^ *: *\^ */;\
+/
 t y
-d
+N
+s/\n\(#.*\)/ /
+s/\n/ /
+t x
 : y
-p
-x
+P
 D' ${temp}
 }
 
index 6ca07a1..82d71f4 100644 (file)
@@ -1,6 +1,6 @@
 ;;; snarf-check-and-output-texi --- called by the doc snarfer.
 
-;;     Copyright (C) 2001, 2002, 2006, 2011 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2006, 2011, 2014 Free Software Foundation, Inc.
 ;;
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the GNU Lesser General Public License
@@ -63,7 +63,7 @@
                                                (let loop ((s s))
                                                  (cond
                                                    ((stream-null? s) #t)
-                                                   ((eq? 'eol (stream-car s))
+                                                   ((memq (stream-car s) '(eol hash))
                                                     (loop (stream-cdr s)))
                                                    (else (cons (stream-car s) (stream-cdr s))))))
                                              (port->stream port read)))))
       (set! *file* file)
       (set! *line* line))
 
-     ;; newer gccs like to throw around more location markers into the
-     ;; preprocessed source; these (hash . hash) bits are what they translate to
-     ;; in snarfy terms.
-     (('location ('string . file) ('int . line) ('hash . 'hash))
-      (set! *file* file)
-      (set! *line* line))
-
-     (('location ('hash . 'hash) ('string . file) ('int . line) ('hash . 'hash))
-      (set! *file* file)
-      (set! *line* line))
-
      (('arglist rest ...)
       (set! *args* (do-arglist rest)))