#!/bin/sh
#
# generate an Info directory, given a directory of Info files and a
# list of entries.  The output will be suitable for a dir.info file,
# in the order given in the skeleton file

INFODIR=$1
if [ $# = 2 ] ; then
  SKELETON=$2
else
  SKELETON=/dev/null
fi

skip=

if [ $# -gt 2 ] ; then
  echo usage: $0 info-directory [ skeleton-file ] 1>&2
  exit 1
else
  true
fi

if [ ! -d ${INFODIR} ] ; then
  echo "$0: first argument must specify a directory"
  exit 1
fi

infofiles=`(cd ${INFODIR}; ls *.info | sort | sed "s/dir\.info//")`
template=`cat ${SKELETON}`

### output the dir.info header
echo "-*- Text -*-"
echo "This file was generated automatically by the gen-info-dir script."
echo "This version was generated on `date`"
echo "by `whoami`@`hostname` for `(cd ${INFODIR}; pwd)`"

cat << moobler

This is the file .../info/dir, which contains the topmost node of the
Info hierarchy.  The first time you invoke Info you start off
looking at that node, which is (dir)Top.

File: dir	Node: Top	This is the top of the INFO tree
  This (the Directory node) gives a menu of major topics. 
  Typing "d" returns here, "q" exits, "?" lists all INFO commands, "h" 
  gives a primer for first-timers, "mTexinfo<Return>" visits Texinfo topic,
  etc.
  --- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) ---

* Menu: The list of major topics begins on the next line.

moobler


### go through the list of files in the template.  If an info file
### exists, grab the ENTRY information from it.  If there is no entry
### info, then create a minimal dir entry, otherwise use the given info.
###
### Then remove that file from the list of existing files.  If any
### additional files remain (ones that don't have a template entry), 
### then generate entries for those in the same way, putting the info for 
### those at the very end....

for file in ${template} ; do
  if [ "${file}" = "--" ] ; then
    skip=1
  else
    if [ -f ${INFODIR}/${file}.info ] ; then
      entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/${file}.info`
      if [ ! -z "${skip}" ] ; then
	echo
        skip=
      fi

      if [ ! -z "${entry}" ] ; then
	echo "${entry}"
      else
	echo "* ${file}: (${file})."
      fi

      infofiles=`echo ${infofiles} | sed -e "s/${file}\.info//"`
    fi
  fi 
done

if [ -z "${infofiles}" ] ; then
  exit 0
else
  echo
fi

for file in ${infofiles}; do
  entry=`sed -e '1,/START-INFO-DIR-ENTRY/d' -e '/END-INFO-DIR-ENTRY/,$d' ${INFODIR}/${file}`

  if [ ! -z "${entry}" ] ; then
    echo "${entry}"
  else
    echo "* ${file}: (${file})."
  fi
done