Commits

Anonymous committed 05498e4

Add miscompiled macro test stuff <psfzsuzh5d.fsf@diannao.ittc.ku.edu>.

Comments (0)

Files changed (5)

 Local.rules
 typescripts
 id-lisp
+macro.list
+2002-12-18  Jerry James  <james@xemacs.org>
+
+	* .cvsignore: Add macro.list, generated by gen-macro-list.awk.
+	* meta-iterate.rules (.PHONY): Add macro-list.
+	* meta-iterate.rules (macro-list): New.
+	* gen-macro-list.awk: New file.  Generate a list of macros.
+	* find-macro-err.awk: New file.  Find miscompiled macros.
+
+2002-12-15  Ville Skyttä  <scop@xemacs.org>
+
+	* XEmacs.rules (autoloads): Create DEPENDS_FILE_NAME here for
+	consistency with `autoloads' from other levels.
+
 2002-12-08  Ville Skyttä  <scop@xemacs.org>
 
 	* Local.rules.template (TEXI2HTML_FLAGS): Wiggle around
+#!/bin/awk -f
+#
+# This file is part of XEmacs.
+#
+# XEmacs 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.
+#
+# XEmacs 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 XEmacs; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+# Written by Jerry James
+# December 18, 2002
+#
+# Find undefined function messages in the smoketest log and try to match them
+# against the macro list.  Invoke this script in a directory containing
+# macro.list, the output of gen-macro-list.awk.
+# Usage: awk -f find-macro-err.awk < $package_build_log
+#
+# Read macro.list into an array and save RS and FS
+BEGIN {
+  OrigRS = RS
+  OrigFS = FS
+  while ((getline < "macro.list") > 0)
+    macro[$1] = $2
+  close("macro.list")
+}
+# Track the current package/file name from the log
+/Compiling .*\.\.\./ {
+  # Get rid of the trailing dots
+  split($2, path, "[ .]") - 1
+  fil = substr(path[1], match(path[1], "(xemacs|mule)-packages")) ".el"
+}
+# Find single undefined functions
+/is not known to be defined/ {
+  if ($4 in macro)
+    printf("%s\n  Definition: %s\n  Miscompile: %s\n", $4, macro[$4], fil)
+}
+# Find multiple undefined functions
+/are not known to be defined/ {
+  RS = "Wrote"
+  FS = ",?[ \t\n\f]+"
+  getline
+  for (i = 1; i <= NF; i++)
+    if ($i !~ "^[ \t\n\f]*$" && $i in macro)
+      printf("%s\n  Definition: %s\n  Miscompile: %s\n", $i, macro[$i], fil)
+  RS = OrigRS
+  FS = OrigFS
+}
+#!/bin/awk -f
+#
+# This file is part of XEmacs.
+#
+# XEmacs 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.
+
+# XEmacs 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 XEmacs; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+# Written by Jerry James
+# December 18, 2002
+#
+# Produce a list of macros and the packages/files in which they are defined.
+# Usage: find $package_root -type f -name \*.el | \
+#        xargs awk -f gen-macro-list.awk > macro.list
+#
+# Find all defmacro and defsubst instances (including defmacro*, etc.)
+/\(def(macro|subst)/ {
+  for (i = 1; i <= NF; i++)
+    if ($i ~ "\\(def(macro|subst)") {
+      mac = i + 1
+      # If the macro name contains a comma, we don't know how to deal with it
+      if ($mac !~ ",")
+	# This is not correct for pathnames with multiple xemacs-packages
+	# elements, but fixing it is too painful
+	printf("%s\t%s\n", $mac,
+	       substr(FILENAME, match(FILENAME, "(xemacs|mule)-packages")))
+      break
+    }
+}
 
 all: autoloads bytecompile
 
-.PHONY: all all-bytecompile autoloads bytecompile bindist-real bindist clean distclean elcclean html World install just-install
+.PHONY: all all-bytecompile autoloads bytecompile bindist-real bindist clean distclean elcclean html macro-list World install just-install
 
 # The toplevel has slightly different rules so we do not use iterate.rules
 # directly
 
 html: $(HTML_TARGETS)
 
+macro-list:
+	-rm -f macro.list
+	find . -type f -name \*.el | xargs awk -f gen-macro-list.awk > macro.list
+
 World: distclean install
 
 install: all just-install