summaryrefslogtreecommitdiff
path: root/posix-modules
blob: 21aa8bebf5ac6de50ba4f01bbeb67f76aff596b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/bin/sh
#
# 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
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program 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 this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#

progname=$0
package=gnulib
cvsdatestamp='$Date: 2007-09-08 22:45:08 $'
last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'`
version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'`

# func_usage
# outputs to stdout the --help usage message.
func_usage ()
{
  echo "\
Usage: posix-modules

Report bugs to <bug-gnulib@gnu.org>."
}

# func_version
# outputs to stdout the --version message.
func_version ()
{
  year=`echo "$last_checkin_date" | sed -e 's,/.*$,,'`
  echo "\
$progname (GNU $package) $version
Copyright (C) $year Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by" "Bruno Haible"
}

case "$0" in
  /*) self_abspathname="$0" ;;
  */*) self_abspathname=`pwd`/"$0" ;;
  *)
    # Look in $PATH.
    # Iterate through the elements of $PATH.
    # We use IFS=: instead of
    #   for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'`
    # because the latter does not work when some PATH element contains spaces.
    # We use a canonicalized $pathx instead of $PATH, because empty PATH
    # elements are by definition equivalent to '.', however field splitting
    # according to IFS=: loses empty fields in many shells:
    #   - /bin/sh on OSF/1 and Solaris loses all empty fields (at the
    #     beginning, at the end, and in the middle),
    #   - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields
    #     at the beginning and at the end,
    #   - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX,
    #     Solaris lose empty fields at the end.
    # The 'case' statement is an optimization, to avoid evaluating the
    # explicit canonicalization command when $PATH contains no empty fields.
    self_abspathname=
    if test "${PATH_SEPARATOR+set}" != set; then
      func_tmpdir
      { echo "#! /bin/sh"; echo "exit 0"; } > "$tmp"/conf.sh
      chmod +x "$tmp"/conf.sh
      if (PATH="/nonexistent;$tmp"; conf.sh) >/dev/null 2>&1; then
        PATH_SEPARATOR=';'
      else
        PATH_SEPARATOR=:
      fi
      rm -rf "$tmp"
    fi
    if test "$PATH_SEPARATOR" = ";"; then
      # On Windows, programs are searched in "." before $PATH.
      pathx=".;$PATH"
    else
      # On Unix, we have to convert empty PATH elements to ".".
      pathx="$PATH"
      case :$PATH: in
        *::*)
          pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'`
          ;;
      esac
    fi
    save_IFS="$IFS"
    IFS="$PATH_SEPARATOR"
    for d in $pathx; do
      IFS="$save_IFS"
      test -z "$d" && d=.
      if test -x "$d/$0" && test ! -d "$d/$0"; then
        self_abspathname="$d/$0"
        break
      fi
    done
    IFS="$save_IFS"
    if test -z "$self_abspathname"; then
      func_fatal_error "could not locate the gnulib-tool program - how did you invoke it?"
    fi
    ;;
esac
while test -h "$self_abspathname"; do
  # Resolve symbolic link.
  linkval=`func_readlink "$self_abspathname"`
  test -n "$linkval" || break
  case "$linkval" in
    /* ) self_abspathname="$linkval" ;;
    * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;;
  esac
done
gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`

# Command-line option processing.
while test $# -gt 0; do
  case "$1" in
    --help | --hel | --he | --h )
      func_usage
      exit $? ;;
    --version | --versio | --versi | --vers | --ver | --ve | --v )
      func_version
      exit $? ;;
    -* )
      echo "posix-modules: unknown option $1" 1>&2
      echo "Try 'posix-modules --help' for more information." 1>&2
      exit 1 ;;
    * )
      echo "posix-modules: too many arguments" 1>&2
      echo "Try 'posix-modules --help' for more information." 1>&2
      exit 1 ;;
  esac
done

(
  # Get the header modules.
  LC_ALL=C grep -h '^Gnulib module: ' "$gnulib_dir"/doc/headers/* 2>/dev/null \
    | sed -e 's,^Gnulib module: ,,'
  # Get the function modules.
  LC_ALL=C grep -h '^Gnulib module: ' "$gnulib_dir"/doc/functions/* 2>/dev/null \
    | sed -e 's,^Gnulib module: ,,'
  # Then filter out the words "---", "and", "or" and remove *-gnu modules.
) | LC_ALL=C sort | LC_ALL=C uniq \
  | { # Then filter out the words "---", "and", "or" and remove *-gnu modules.
      tr ' ' '\012' | sed -e '/^---$/d' -e '/^and$/d' -e '/^or$/d' -e '/-gnu$/d'
    } \
  | LC_ALL=C sort | LC_ALL=C uniq \
  | { # Except ftruncate, which aborts the configuration on mingw. FiXME
      sed -e '/^ftruncate$/d'
    }