Back from an automatic module-indicator macro to a module-indicator macro
[gnulib.git] / MODULES.html.sh
index 5fb9747..9f89f1d 100755 (executable)
@@ -1243,8 +1243,62 @@ yn
 ' | sed -e "$sed_alt1" | tr -d "$trnl" | sed -e "$sed_alt2" -e "$sed_alt3"`
 
 indent=""
-missed_modules=`gnulib-tool --list`
-missed_files=`ls -d lib/* m4/* | sed -e /CVS/d -e /README/d -e /ChangeLog/d -e /Makefile/d -e /TODO/d -e '/~$/d'`
+seen_modules=
+seen_files=
+
+# func_exit STATUS
+# exit with status
+func_exit ()
+{
+  (exit $1); exit $1
+}
+
+# func_tmpdir
+# creates a temporary directory.
+# Sets variable
+# - tmp             pathname of freshly created temporary directory
+func_tmpdir ()
+{
+  # Use the environment variable TMPDIR, falling back to /tmp. This allows
+  # users to specify a different temporary directory, for example, if their
+  # /tmp is filled up or too small.
+  : ${TMPDIR=/tmp}
+  {
+    # Use the mktemp program if available. If not available, hide the error
+    # message.
+    tmp=`(umask 077 && mktemp -d "$TMPDIR/MDXXXXXX") 2>/dev/null` &&
+    test -n "$tmp" && test -d "$tmp"
+  } ||
+  {
+    # Use a simple mkdir command. It is guaranteed to fail if the directory
+    # already exists.  $RANDOM is bash specific and expands to empty in shells
+    # other than bash, ksh and zsh.  Its use does not increase security;
+    # rather, it minimizes the probability of failure in a very cluttered /tmp
+    # directory.
+    tmp=$TMPDIR/MD$$-$RANDOM
+    (umask 077 && mkdir "$tmp")
+  } ||
+  {
+    echo "$0: cannot create a temporary directory in $TMPDIR" >&2
+    func_exit 1
+  }
+}
+
+# func_append var value
+# appends the given value to the shell variable var.
+if ( foo=bar; foo+=baz && test "$foo" = barbaz ) >/dev/null 2>&1; then
+  # Use bash's += operator. It reduces complexity of appending repeatedly to
+  # a single variable from O(n^2) to O(n).
+  func_append ()
+  {
+    eval "$1+=\"\$2\""
+  }
+else
+  func_append ()
+  {
+    eval "$1=\"\$$1\$2\""
+  }
+fi
 
 # func_echo line
 # outputs line with indentation.
@@ -1337,7 +1391,11 @@ func_module ()
     element='<A HREF="#module='$1'">'$1'</A>'
     func_echo "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"20%\">$element"
 
-    element=`gnulib-tool --extract-description $1 | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" | sed -e 's,^, ,' | sed -e 's,\([^a-zA-Z]\)'"${posix_functions}"'(),\1<A HREF="'"$POSIX2001_URL"'xsh/\2.html">\2</A>(),g' | sed -e 's,^ ,,'`
+    element=`gnulib-tool --extract-description $1 \
+             | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" \
+                   -e 's,^, ,' \
+                   -e 's,\([^a-zA-Z]\)'"${posix_functions}"'(),\1<A HREF="'"$POSIX2001_URL"'xsh/\2.html">\2</A>(),g' \
+                   -e 's,^ ,,'`
     func_echo "<TD ALIGN=LEFT VALIGN=TOP WIDTH=\"80%\">$element"
 
     func_end TR
@@ -1349,36 +1407,52 @@ func_module ()
     element='<A NAME="module='$1'"></A><A HREF="modules/'$1'">'$1'</A>'
     func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element"
 
-    element=`gnulib-tool --extract-include-directive $1 | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" | sed -e 's,^#include "\(.*\)"$,#include "<A HREF="lib/\1">\1</A>",' -e 's,^#include &lt;'"${posix_headers}"'\.h&gt;$,#include \&lt;<A HREF="'"$POSIX2001_URL"'xbd/\1.h.html">\1.h</A>\&gt;,' | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
+    includes=`gnulib-tool --extract-include-directive $1`
+    files=`gnulib-tool --extract-filelist $1`
+    element=`echo "$includes" \
+             | sed -e "$sed_lt" -e "$sed_gt" -e "$sed_remove_trailing_empty_line" \
+                   -e 's,^#include "\(.*\)"$,#include "<A HREF="lib/\1">\1</A>",' \
+                   -e 's,^#include &lt;'"${posix_headers}"'\.h&gt;$,#include \&lt;<A HREF="'"$POSIX2001_URL"'xbd/\1.h.html">\1.h</A>\&gt;,' \
+                   -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
     test -n "$element" || element='---'
     func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element"
 
     sed_choose_unconditional_nonstandard_include='s,^#include "\(.*\)"$,\1,p'
-    includefile=`gnulib-tool --extract-include-directive $1 | sed -n -e "$sed_choose_unconditional_nonstandard_include" | sed -e "$sed_escape_dot" | tr -d "$trnl"`
+    includefile=`echo "$includes" \
+                 | sed -n -e "$sed_choose_unconditional_nonstandard_include" \
+                 | sed -e "$sed_escape_dot" | tr -d "$trnl"`
     sed_choose_lib_files='s,^lib/\(.*\)$,\1,p'
-    element=`gnulib-tool --extract-filelist $1 | sed -e '/^$/d' | sed -n -e "$sed_choose_lib_files" | sed -e '/^'"${includefile}"'$/d' | sed -e 's,^\(.*\)$,<A HREF="lib/\1">\1</A>,' | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
+    element=`echo "$files" \
+             | sed -e '/^$/d' \
+             | sed -n -e "$sed_choose_lib_files" \
+             | sed -e '/^'"${includefile}"'$/d' \
+                   -e 's,^\(.*\)$,<A HREF="lib/\1">\1</A>,' \
+                   -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
     test -n "$element" || element='---'
     func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element"
 
     sed_choose_m4_files='s,^m4/\(.*\)$,\1,p'
-    element=`(gnulib-tool --extract-filelist $1 | sed -e "$sed_remove_trailing_empty_line" | sed -n -e "$sed_choose_m4_files" | sed -e '/^onceonly/d' | sed -e 's,^\(.*\)$,<A HREF="m4/\1">\1</A>,'; gnulib-tool --extract-autoconf-snippet $1 | sed -e "$sed_remove_trailing_empty_line") | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
+    element=`(echo "$files" \
+              | sed -e "$sed_remove_trailing_empty_line" \
+              | sed -n -e "$sed_choose_m4_files" \
+              | sed -e '/^onceonly/d' \
+                    -e 's,^\(.*\)$,<A HREF="m4/\1">\1</A>,'; \
+              gnulib-tool --extract-autoconf-snippet $1 \
+              | sed -e "$sed_remove_trailing_empty_line") \
+              | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
     test -n "$element" || element='---'
     func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element"
 
-    element=`gnulib-tool --extract-dependencies $1 | sed -e "$sed_remove_trailing_empty_line" | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
+    element=`gnulib-tool --extract-dependencies $1 \
+             | sed -e "$sed_remove_trailing_empty_line" \
+                   -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
     test -n "$element" || element='---'
     func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element"
 
     func_end TR
 
-    missed_modules=`echo "$missed_modules" | sed -e '/^'"$1"'$/d'`
-
-    files=`gnulib-tool --extract-filelist $1`
-    sed_removal_prefix='s,^,/^,'
-    sed_removal_suffix='s,$,\$/d,'
-    sed_remove_files=`echo '{'; for file in $files; do echo $file | sed -e "$sed_escape_dot" -e "$sed_escape_slash" | sed -e "$sed_removal_prefix" -e "$sed_removal_suffix"; done; echo '}'`
-    missed_files=`echo "$missed_files" | sed -e "$sed_remove_files"`
-
+    func_append seen_modules " $1"
+    func_append seen_files " $files"
   fi
 }
 
@@ -1535,6 +1609,8 @@ func_all_modules ()
   func_module strnlen1
   func_module strndup
   func_module strsep
+  func_module c-strstr
+  func_module trim
   #func_module fstrcmp
   func_module xstrndup
   func_end_table
@@ -1665,6 +1741,17 @@ func_all_modules ()
   func_wrap H2
   func_echo "$element"
 
+  element="Core language properties"
+  element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
+  func_section_wrap isoc_core_properties
+  func_wrap H3
+  func_echo "$element"
+
+  func_begin_table
+  func_module flexmember
+  func_module vararrays
+  func_end_table
+
   element="Sizes of integer types <limits.h>"
   element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
   func_section_wrap isoc_sup_limits
@@ -1738,6 +1825,16 @@ func_all_modules ()
   func_module strtoumax
   func_end_table
 
+  element="Wide character classification and mapping utilities <wctype.h>"
+  element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
+  func_section_wrap isoc_sup_wctype
+  func_wrap H3
+  func_echo "$element"
+
+  func_begin_table
+  func_module wctype
+  func_end_table
+
   element="Mathematics <math.h>"
   element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
   func_section_wrap isoc_sup_math
@@ -1806,20 +1903,23 @@ func_all_modules ()
   func_module inet_ntop
   func_module inet_pton
   func_module mkdir
-  func_module mkstemp
   func_module mkdtemp
+  func_module mkstemp
   func_module poll
   func_module readlink
   func_module lstat
+  func_module tempname
   func_module time_r
   func_module timespec
   func_module nanosleep
   func_module regex
   func_module rename
   func_module rmdir
+  func_module sigprocmask
   func_module ssize_t
   func_module strtok_r
   func_module sys_stat
+  func_module tsearch
   func_module unistd
   func_module utime
   func_module wcwidth
@@ -1834,6 +1934,7 @@ func_all_modules ()
   func_module d-ino
   func_module d-type
   func_module link-follow
+  func_module rename-dest-slash
   func_module rmdir-errno
   func_module unlink-busy
   func_module winsz-ioctl
@@ -1881,11 +1982,13 @@ func_all_modules ()
   func_module acl
   func_module backupfile
   func_module canonicalize
+  func_module canonicalize-lgpl
   func_module clean-temp
   func_module copy-file
   func_module cycle-check
   func_module fsusage
   func_module dirfd
+  func_module double-slash-root
   func_module euidaccess
   func_module file-type
   func_module fileblocks
@@ -1900,11 +2003,13 @@ func_all_modules ()
   func_module mkdir-p
   func_module modechange
   func_module mountlist
+  func_module openat
   func_module pathname
   func_module pathmax
   func_module same
   func_module save-cwd
   func_module savedir
+  func_module savewd
   func_module stat-time
   func_module tmpdir
   func_module unlinkdir
@@ -1927,6 +2032,7 @@ func_all_modules ()
   func_module full-read
   func_module full-write
   func_module binary-io
+  func_module isapipe
   func_end_table
 
   element="File stream based Input/Output"
@@ -2004,6 +2110,8 @@ func_all_modules ()
   func_module gettext
   func_module gettext-h
   func_module iconv
+  func_module striconv
+  func_module xstriconv
   func_module iconvme
   func_module localcharset
   func_module hard-locale
@@ -2099,11 +2207,14 @@ func_all_modules ()
   func_echo "$element"
 
   func_begin_table
+  func_module absolute-header
+  func_module config-h
   func_module configmake
   func_module dummy
   func_module elisp-comp
   func_module ldd
   func_module lib-ignore
+  func_module no-c++
   func_end_table
 
   element="Support for building documentation"
@@ -2114,6 +2225,8 @@ func_all_modules ()
   func_begin_table
   func_module fdl
   func_module gendocs
+  func_module gpl
+  func_module lgpl
   func_module regexprops-generic
   func_end_table
 
@@ -2140,6 +2253,18 @@ func_all_modules ()
 }
 
 
+func_tmpdir
+trap 'exit_status=$?
+      if test "$signal" != 0; then
+        echo "caught signal $signal" >&2
+      fi
+      rm -rf "$tmp"
+      exit $exit_status' 0
+for signal in 1 2 3 13 15; do
+  trap '{ signal='$signal'; func_exit 1; }' $signal
+done
+signal=0
+
 echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">'
 func_begin HTML
 
@@ -2169,6 +2294,12 @@ func_all_modules
 in_toc=
 func_all_modules
 
+
+gnulib-tool --list > "$tmp/all-modules"
+missed_modules=`for module in $seen_modules; do echo $module; done \
+                 | LC_ALL=C sort -u \
+                 | LC_ALL=C join -v 2 - "$tmp/all-modules"`
+
 if test -n "$missed_modules"; then
 
   element="Unclassified modules - please update MODULES.html.sh"
@@ -2184,6 +2315,11 @@ if test -n "$missed_modules"; then
 
 fi
 
+LC_ALL=C ls -d lib/* m4/* | sed -e /CVS/d -e /README/d -e /ChangeLog/d -e /Makefile/d -e /TODO/d -e '/tags$/d' -e '/TAGS$/d' -e '/~$/d' > "$tmp/all-files"
+missed_files=`for file in $seen_files; do echo $file; done \
+               | LC_ALL=C sort -u \
+               | LC_ALL=C join -v 2 - "$tmp/all-files"`
+
 if test -n "$missed_files"; then
 
   element="Lone files - please create new modules containing them"
@@ -2219,3 +2355,15 @@ func_echo 'Generated from <CODE>MODULES.html.sh</CODE> on '`LC_ALL=C date +"%e %
 func_end BODY
 
 func_end HTML
+
+rm -rf "$tmp"
+# Undo the effect of the previous 'trap' command.
+trap '' 0
+trap 'func_exit $?' 1 2 3 13 15
+
+exit 0
+
+# Local Variables:
+# indent-tabs-mode: nil
+# whitespace-check-buffer-indent: nil
+# End: