#!/bin/sh
#
-# Copyright (C) 2002-2006 Free Software Foundation, Inc.
+# Copyright (C) 2002-2007 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
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
-# Usage: MODULES.html.sh > MODULES.html
+# Usage: MODULES.html.sh [--cvs-urls|--git-urls] > MODULES.html
# Extend the PATH so that gnulib-tool is found.
PATH=`dirname "$0"`:$PATH; export PATH
POSIX2001_URL='file:/packages/www/www.opengroup.org/susv3' ;;
esac
+repo_url_prefix=
+repo_url_suffix=
+if test $# != 0; then
+ case "$1" in
+ --cvs-urls)
+ # Generate URLs to the official gnulib CVS repository.
+ repo_url_prefix='http://cvs.sv.gnu.org/viewcvs/*checkout*/gnulib/'
+ repo_url_suffix='?root=gnulib&content-type=text/plain'
+ ;;
+ --git-urls)
+ # Generate URLs to the official gnulib git repository.
+ repo_url_prefix='http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f='
+ repo_url_suffix=''
+ ;;
+ esac
+fi
+# For sed replacements: Escape the '&'.
+repo_url_suffix_repl=`echo "$repo_url_suffix" | sed -e 's,[&],\\\&,'`
+
sed_lt='s,<,\<,g'
sed_gt='s,>,\>,g'
sed_escape_dot='s,\.,\\.,g'
' | 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.
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,^ ,,'`
+ -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
func_begin TR
- element='<A NAME="module='$1'"></A><A HREF="modules/'$1'">'$1'</A>'
+ element='<A NAME="module='$1'"></A><A HREF="'$repo_url_prefix'modules/'$1$repo_url_suffix'">'$1'</A>'
func_echo "<TD ALIGN=LEFT VALIGN=TOP>$element"
- element=`gnulib-tool --extract-include-directive $1 \
+ 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" \
- | sed -e 's,^#include "\(.*\)"$,#include "<A HREF="lib/\1">\1</A>",' \
- -e 's,^#include <'"${posix_headers}"'\.h>$,#include \<<A HREF="'"$POSIX2001_URL"'xbd/\1.h.html">\1.h</A>\>,' \
- | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
+ -e 's,^#include "\(.*\)"$,#include "<A HREF="'$repo_url_prefix'lib/\1'$repo_url_suffix_repl'">\1</A>",' \
+ -e 's,^#include <'"${posix_headers}"'\.h>$,#include \<<A HREF="'"$POSIX2001_URL"'xbd/\1.h.html">\1.h</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_unconditional_nonstandard_include='s,^#include "\(.*\)"$,\1,p'
- includefile=`gnulib-tool --extract-include-directive $1 \
+ 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 \
+ element=`echo "$files" \
| 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>$//'`
+ -e 's,^\(.*\)$,<A HREF="'$repo_url_prefix'lib/\1'$repo_url_suffix_repl'">\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 \
+ element=`(echo "$files" \
| 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>,'; \
+ -e 's,^\(.*\)$,<A HREF="'$repo_url_prefix'm4/\1'$repo_url_suffix_repl'">\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=`gnulib-tool --extract-dependencies $1 \
| sed -e "$sed_remove_trailing_empty_line" \
- | sed -e 's/$/<BR>/' | tr -d "$trnl" | sed -e 's/<BR>$//'`
+ -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
}
func_module memset
func_module strcspn
func_module strpbrk
- func_module strstr
func_module strerror
func_module mktime
func_end_table
func_module pagealign_alloc
func_end_table
+ element="Sorting functions <stdlib.h>"
+ element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
+ func_section_wrap ansic_enh_stdlib_sorting
+ func_wrap H3
+ func_echo "$element"
+
+ func_begin_table
+ func_module mpsort
+ func_end_table
+
element="Date and time <time.h>"
element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
func_section_wrap ansic_enh_time_datetime
func_module stpncpy
func_module c-strcase
func_module strcase
+ func_module c-strcaseeq
func_module c-strcasestr
func_module strcasestr
func_module strchrnul
func_module strdup
+ func_module streq
func_module strnlen
func_module strnlen1
func_module strndup
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
func_module strtoumax
func_end_table
+ element="Extended multibyte and wide character utilities <wchar.h>"
+ element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
+ func_section_wrap isoc_sup_wchar
+ func_wrap H3
+ func_echo "$element"
+
+ func_begin_table
+ func_module wchar
+ 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
func_begin_table
func_module chown
func_module dup2
+ func_module fchdir
func_module ftruncate
func_module getaddrinfo
func_module getcwd
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
func_module time_r
func_module timespec
func_module nanosleep
func_module rmdir
func_module sigprocmask
func_module ssize_t
+ func_module strptime
func_module strtok_r
func_module sys_stat
+ func_module sys_time
+ func_module tsearch
func_module unistd
func_module utime
func_module wcwidth
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
func_module mkdir-p
func_module modechange
func_module mountlist
+ func_module openat
func_module pathname
func_module pathmax
func_module same
func_module iconv
func_module striconv
func_module xstriconv
+ func_module striconveh
+ func_module striconveha
func_module iconvme
func_module localcharset
func_module hard-locale
+ func_module mbslen
+ func_module mbschr
+ func_module mbsrchr
+ func_module mbsstr
+ func_module mbscasecmp
+ func_module mbscasestr
+ func_module mbscspn
+ func_module mbspbrk
+ func_module mbsspn
+ func_module mbssep
+ func_module mbstok_r
func_module mbswidth
func_module memcasecmp
func_module memcoll
func_module unicodeio
func_module rpmatch
func_module yesno
+ func_module linebreak
+ func_module bison-i18n
+ func_end_table
+
+ element="Unicode string functions"
+ element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"`
+ func_section_wrap posix_ext_unicode
+ func_wrap H3
+ func_echo "$element"
+
+ func_begin_table
+ func_module unitypes
func_module ucs4-utf8
func_module ucs4-utf16
+ func_module utf8-ucs4-unsafe
+ func_module utf16-ucs4-unsafe
func_module utf8-ucs4
func_module utf16-ucs4
- func_module linebreak
- func_module bison-i18n
+ func_module unistr/base
+ func_module unistr/u8-to-u16
+ func_module unistr/u8-to-u32
+ func_module unistr/u16-to-u8
+ func_module unistr/u16-to-u32
+ func_module unistr/u32-to-u8
+ func_module unistr/u32-to-u16
+ func_module unistr/u8-check
+ func_module unistr/u16-check
+ func_module unistr/u32-check
+ func_module unistr/u8-chr
+ func_module unistr/u16-chr
+ func_module unistr/u32-chr
+ func_module unistr/u8-cmp
+ func_module unistr/u16-cmp
+ func_module unistr/u32-cmp
+ func_module unistr/u8-cpy
+ func_module unistr/u16-cpy
+ func_module unistr/u32-cpy
+ func_module unistr/u8-cpy-alloc
+ func_module unistr/u16-cpy-alloc
+ func_module unistr/u32-cpy-alloc
+ func_module unistr/u8-endswith
+ func_module unistr/u16-endswith
+ func_module unistr/u32-endswith
+ func_module unistr/u8-mblen
+ func_module unistr/u16-mblen
+ func_module unistr/u32-mblen
+ func_module unistr/u8-mbtouc-unsafe
+ func_module unistr/u16-mbtouc-unsafe
+ func_module unistr/u32-mbtouc-unsafe
+ func_module unistr/u8-mbtouc
+ func_module unistr/u16-mbtouc
+ func_module unistr/u32-mbtouc
+ func_module unistr/u8-move
+ func_module unistr/u16-move
+ func_module unistr/u32-move
+ func_module unistr/u8-next
+ func_module unistr/u16-next
+ func_module unistr/u32-next
+ func_module unistr/u8-prev
+ func_module unistr/u16-prev
+ func_module unistr/u32-prev
+ func_module unistr/u8-set
+ func_module unistr/u16-set
+ func_module unistr/u32-set
+ func_module unistr/u8-startswith
+ func_module unistr/u16-startswith
+ func_module unistr/u32-startswith
+ func_module unistr/u8-stpcpy
+ func_module unistr/u16-stpcpy
+ func_module unistr/u32-stpcpy
+ func_module unistr/u8-stpncpy
+ func_module unistr/u16-stpncpy
+ func_module unistr/u32-stpncpy
+ func_module unistr/u8-strcat
+ func_module unistr/u16-strcat
+ func_module unistr/u32-strcat
+ func_module unistr/u8-strchr
+ func_module unistr/u16-strchr
+ func_module unistr/u32-strchr
+ func_module unistr/u8-strcmp
+ func_module unistr/u16-strcmp
+ func_module unistr/u32-strcmp
+ func_module unistr/u8-strcpy
+ func_module unistr/u16-strcpy
+ func_module unistr/u32-strcpy
+ func_module unistr/u8-strcspn
+ func_module unistr/u16-strcspn
+ func_module unistr/u32-strcspn
+ func_module unistr/u8-strdup
+ func_module unistr/u16-strdup
+ func_module unistr/u32-strdup
+ func_module unistr/u8-strlen
+ func_module unistr/u16-strlen
+ func_module unistr/u32-strlen
+ func_module unistr/u8-strmblen
+ func_module unistr/u16-strmblen
+ func_module unistr/u32-strmblen
+ func_module unistr/u8-strmbtouc
+ func_module unistr/u16-strmbtouc
+ func_module unistr/u32-strmbtouc
+ func_module unistr/u8-strncat
+ func_module unistr/u16-strncat
+ func_module unistr/u32-strncat
+ func_module unistr/u8-strncmp
+ func_module unistr/u16-strncmp
+ func_module unistr/u32-strncmp
+ func_module unistr/u8-strncpy
+ func_module unistr/u16-strncpy
+ func_module unistr/u32-strncpy
+ func_module unistr/u8-strnlen
+ func_module unistr/u16-strnlen
+ func_module unistr/u32-strnlen
+ func_module unistr/u8-strpbrk
+ func_module unistr/u16-strpbrk
+ func_module unistr/u32-strpbrk
+ func_module unistr/u8-strrchr
+ func_module unistr/u16-strrchr
+ func_module unistr/u32-strrchr
+ func_module unistr/u8-strspn
+ func_module unistr/u16-strspn
+ func_module unistr/u32-strspn
+ func_module unistr/u8-strstr
+ func_module unistr/u16-strstr
+ func_module unistr/u32-strstr
+ func_module unistr/u8-strtok
+ func_module unistr/u16-strtok
+ func_module unistr/u32-strtok
+ func_module unistr/u8-uctomb
+ func_module unistr/u16-uctomb
+ func_module unistr/u32-uctomb
+ func_module uniconv/base
+ func_module uniconv/u8-conv-from-enc
+ func_module uniconv/u16-conv-from-enc
+ func_module uniconv/u32-conv-from-enc
+ func_module uniconv/u8-strconv-from-enc
+ func_module uniconv/u16-strconv-from-enc
+ func_module uniconv/u32-strconv-from-enc
+ func_module uniconv/u8-strconv-to-enc
+ func_module uniconv/u16-strconv-to-enc
+ func_module uniconv/u32-strconv-to-enc
+ func_module uniconv/u8-strconv-from-locale
+ func_module uniconv/u16-strconv-from-locale
+ func_module uniconv/u32-strconv-from-locale
+ func_module uniconv/u8-strconv-to-locale
+ func_module uniconv/u16-strconv-to-locale
+ func_module uniconv/u32-strconv-to-locale
func_end_table
element="Executing programs"
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"
}
+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
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"
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"
func_echo "$element"
func_echo '<PRE>'
- echo "$missed_files" | sed -e 's,^\(.*\)$,<A HREF="\1">\1</A>,'
+ echo "$missed_files" | sed -e 's,^\(.*\)$,<A HREF="'$repo_url_prefix'\1'$repo_url_suffix_repl'">\1</A>,'
echo '</PRE>'
fi
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: