Magellan Linux

Annotation of /trunk/mage/usr/lib/mage/mkinfodir

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2915 - (hide annotations) (download)
Mon Nov 30 13:50:35 2015 UTC (8 years, 5 months ago) by niro
File size: 7896 byte(s)
-added some sanity checks
1 niro 24 #!/bin/bash
2 niro 78 # $Id: mkinfodir,v 1.7 2005-06-01 15:48:42 niro Exp $
3 niro 24 # Generate the top-level Info node, given a directory of Info files
4     # and (optionally) a skeleton file. The output will be suitable for a
5     # top-level dir file. The skeleton file contains info topic names in the
6     # order they should appear in the output. There are three special
7     # lines that alter the behavior: a line consisting of just "--" causes
8     # the next line to be echoed verbatim to the output. A line
9     # containing just "%%" causes all the remaining filenames (wildcards
10     # allowed) in the rest of the file to be ignored. A line containing
11     # just "!!" exits the script when reached (unless preceded by a line
12     # containing just "--"). Once the script reaches the end of the
13     # skeleton file, it goes through the remaining files in the directory
14     # in order, putting their entries at the end. The script will use the
15     # ENTRY information in each info file if it exists. Otherwise it will
16     # make a minimal entry.
17    
18     # sent by Jeffrey Osier <jeffrey@cygnus.com>, who thinks it came from
19     # zoo@winternet.com (david d `zoo' zuhn)
20    
21     # modified 7 April 1995 by Joe Harrington <jh@tecate.gsfc.nasa.gov> to
22     # take special flags
23    
24 niro 2268 # $Id$
25 niro 24
26     INFODIR=$1
27     if [ $# = 2 ] ; then
28     SKELETON=$2
29     else
30     SKELETON=/dev/null
31     fi
32    
33     skip=
34    
35     if [ $# -gt 2 ] ; then
36     echo usage: $0 info-directory [ skeleton-file ] 1>&2
37     exit 1
38     elif [ -z "${INFODIR}" ] ; then
39     INFODIR="%%DEFAULT_INFO_DIR%%"
40     else
41     true
42     fi
43    
44     if [ ! -d ${INFODIR} ] ; then
45     echo "$0: first argument must specify a directory"
46     exit 1
47     fi
48    
49 niro 2915 # sanity checks
50     if [[ -x $(type -P date) ]]
51     then
52     _DATE="$(date)"
53     else
54     _DATE="unknown date"
55     fi
56     if [[ -x $(type -P whoami) ]]
57     then
58     _WHOAMI="$(whoami)"
59     else
60     if [[ -n ${USER} ]]
61     then
62     _WHOAMI="${USER}"
63     else
64     _WHOAMI="unknown user"
65     fi
66     fi
67     if [[ -x $(type -P hostname) ]]
68     then
69     _HOSTNAME="$(hostname)"
70     else
71     if [[ -n ${HOSTNAME} ]]
72     then
73     _HOSTNAME="${HOSTNAME}"
74     else
75     _HOSTNAME="unknown hostname"
76     fi
77     fi
78     if [[ -x $(type -P pwd) ]]
79     then
80     _PWD="$(cd ${INFODIR}; pwd)"
81     else
82     if [[ -n ${PWD} ]]
83     then
84     _PWD="$(cd ${INFODIR}; echo $PWD)"
85     else
86     _PWD="unknown directory"
87     fi
88     fi
89    
90 niro 24 ### output the dir header
91     echo "-*- Text -*-"
92     echo "This file was generated automatically by $0."
93 niro 2915 echo "This version was generated on ${_DATE}"
94     echo "by ${_WHOAMI}@${_HOSTNAME} for ${_PWD}"
95 niro 24
96     cat << moobler
97 niro 78 \$Id: mkinfodir,v 1.7 2005-06-01 15:48:42 niro Exp $
98 niro 24 This is the file .../info/dir, which contains the topmost node of the
99     Info hierarchy. The first time you invoke Info you start off
100     looking at that node, which is (dir)Top.
101     
102     File: dir Node: Top This is the top of the INFO tree
103    
104     This (the Directory node) gives a menu of major topics.
105     Typing "q" exits, "?" lists all Info commands, "d" returns here,
106     "h" gives a primer for first-timers,
107     "mEmacs<Return>" visits the Emacs topic, etc.
108    
109     In Emacs, you can click mouse button 2 on a menu item or cross reference
110     to select it.
111    
112     * Menu: The list of major topics begins on the next line.
113    
114     moobler
115    
116     ### go through the list of files in the skeleton. If an info file
117     ### exists, grab the ENTRY information from it. If an entry exists
118     ### use it, otherwise create a minimal dir entry.
119     ###
120     ### Then remove that file from the list of existing files. If any
121     ### additional files remain (ones that don't have a skeleton entry),
122     ### then generate entries for those in the same way, putting the info for
123     ### those at the end....
124    
125     infofiles=`(cd ${INFODIR}; /bin/ls | grep -v '\-[0-9]*\.gz$' | grep -v '\-[0-9]*$' | egrep -v '^dir$|^dir\.info$|^dir\.orig$')`
126    
127     # echoing gets clobbered by backquotes; we do it the hard way...
128     lines=`wc $SKELETON | awk '{print $1}'`
129     line=1
130     while [ $lines -ge $line ] ; do
131     # Read one line from the file. This is so that we can echo lines with
132     # whitespace and quoted characters in them.
133     fileline=`awk NR==$line $SKELETON`
134    
135     # flag fancy features
136     if [ ! -z "$echoline" ] ; then # echo line
137     echo "$fileline"
138     fileline=
139     echoline=
140     elif [ "${fileline}" = "--" ] ; then # should we echo the next line?
141     echoline=1
142     elif [ "${fileline}" = "%%" ] ; then # eliminate remaining files from dir?
143     skip=1
144     elif [ "${fileline}" = "!!" ] ; then # quit now
145     exit 0
146     fi
147    
148     # handle files if they exist
149     for file in $fileline"" ; do # expand wildcards ("" handles blank lines)
150    
151     fname=
152    
153     if [ -z "$echoline" -a ! -z "$file" ] ; then
154    
155     # Find the file to operate upon. Check both possible names.
156     infoname=`echo $file | sed 's/\.gz$//'`
157     infoname=`echo $infoname | sed 's/\.info$//'`
158     noext=
159     ext=
160     if [ -f ${INFODIR}/$infoname ] ; then
161     noext=$infoname
162     fi
163     if [ -f ${INFODIR}/${infoname}.info ] ; then
164     ext=${infoname}.info
165     fi
166     if [ -f ${INFODIR}/${infoname}.info.gz ] ; then
167     ext=${infoname}.info.gz
168     fi
169     # If it exists with both names take what was said in the file.
170     if [ ! -z "$ext" -a ! -z "$noext" ]; then
171     fname=$file
172     warn="### Warning: $ext and $noext both exist! Using ${file}. ###"
173     elif [ ! \( -z "$ext" -a -z "$noext" \) ]; then
174     # just take the name if it exists only once
175     fname=${noext}${ext}
176     fi
177    
178     # if we found something and aren't skipping, do the entry
179     if [ ! -z "$fname" ] ; then
180     if [ -z "$skip" ] ; then
181    
182     if [ ! -z "$warn" ] ; then # issue any warning
183     echo $warn
184     warn=
185     fi
186     if [ "${fname##*.}" = "gz" ] ; then
187     entry=`zcat ${INFODIR}/${fname} | sed -e '1,/START-INFO-DIR-ENTRY/d' \
188     -e '/END-INFO-DIR-ENTRY/,$d' `
189     else
190     entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \
191     -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$fname`
192     fi
193     if [ ! -z "${entry}" ] ; then
194     echo "${entry}"
195     else
196     echo "* ${infoname}: (${infoname})."
197     fi
198     fi
199    
200     # remove the name from the directory listing
201     infofiles=`echo "" ${infofiles} "" | sed -e "s/ ${fname} / /" -e "s/ / /g"`
202    
203     fi
204    
205     fi
206    
207     done
208    
209     line=`expr $line + 1`
210     done
211    
212     if [ -z "${infofiles}" ] ; then
213     exit 0
214     elif [ $lines -gt 0 ]; then
215     echo
216     fi
217    
218     # Sort remaining files by INFO-DIR-SECTION.
219     prevsect=
220     filesectdata=`(cd ${INFODIR}; fgrep INFO-DIR-SECTION /dev/null ${infofiles} | \
221     fgrep -v 'INFO-DIR-SECTION Miscellaneous' | \
222     sort -t: -k2 -k1 | tr ' ' '_')`
223     for sectdata in ${filesectdata}; do
224     file=`echo ${sectdata} | cut -d: -f1`
225     section=`sed -n -e 's/^INFO-DIR-SECTION //p' ${INFODIR}/${file}`
226     infofiles=`echo "" ${infofiles} "" | sed -e "s/ ${file} / /" -e "s/ / /g"`
227    
228     if [ "${prevsect}" != "${section}" ] ; then
229     if [ ! -z "${prevsect}" ] ; then
230     echo ""
231     fi
232     echo "${section}"
233     prevsect="${section}"
234     fi
235     infoname=`echo $file | sed 's/\.gz$//'`
236     infoname=`echo $infoname | sed 's/\.info$//'`
237     if [ "${file##*.}" = "gz" ] ; then
238     entry=`zcat ${INFODIR}/$file | sed -e '1,/START-INFO-DIR-ENTRY/d' \
239     -e '/END-INFO-DIR-ENTRY/,$d' `
240     else
241     entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \
242     -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$file`
243     fi
244     if [ ! -z "${entry}" ] ; then
245     echo "${entry}"
246     elif [ ! -d "${INFODIR}/${file}" ] ; then
247     echo "* ${infoname}: (${infoname})."
248     fi
249     done
250    
251     # Process miscellaneous files.
252     for file in ${infofiles}; do
253     if [ ! -z "${prevsect}" ] ; then
254     echo ""
255     echo "Miscellaneous"
256     prevsect=""
257     fi
258    
259     infoname=`echo $file | sed 's/\.gz$//'`
260     infoname=`echo $infoname | sed 's/\.info$//'`
261     if [ "${file##*.}" = "gz" ] ; then
262     entry=`zcat ${INFODIR}/${file} | sed -e '1,/START-INFO-DIR-ENTRY/d' \
263     -e '/END-INFO-DIR-ENTRY/,$d'`
264     else
265     entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' \
266     -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/$file`
267     fi
268    
269    
270     if [ ! -z "${entry}" ] ; then
271     echo "${entry}"
272     elif [ ! -d "${INFODIR}/${file}" ] ; then
273     echo "* ${infoname}: (${infoname})."
274     fi
275     done
276    

Properties

Name Value
svn:executable *