xemacs-packages / find-macro-err.awk

#!/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
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.