#!/bin/sh

# look at installed packages (NetBSD)
# and build a datafile to generate menus
# (c) 2001 Jeremy C. Reed
# started 08/Jan/2000

FILELIST=filelist
PKG_DB_DIR=/var/db/pkg
PKGSRC_DIR=/usr/pkgsrc
PKG_MAN_DIR=/usr/pkg/man
PACKAGES=packages
TMPFILE=tmpfile
MENUFILE=menufile

cp /dev/null $TMPFILE ## start clean
cp /dev/null $MENUFILE ## start clean

find $PKG_DB_DIR -type d -print | sed -e 's/^\.\///g' > $FILELIST

for package in `cat $FILELIST`; do

  head -1 $package/+BUILD_VERSION | sed -e 's/\/Makefile.*//' >> $TMPFILE

done

grep -v 'pkgsrc' <$TMPFILE | sort >$PACKAGES

for package in `cat $PACKAGES`; do

  EXECUTABLES=`grep '^bin' $PKGSRC_DIR/$package/pkg/PLIST | sed -e 's/bin\///'`

  if [ -n "$EXECUTABLES" ]; then

    PACKAGE_DESC=`cat $PKGSRC_DIR/$package/pkg/COMMENT`
# maybe should check for no description?

    ( echo $package ; echo $PACKAGE_DESC ) >> $MENUFILE

    packagename=`echo $package | sed -e 's/^.*\///'`

    for executable in $EXECUTABLES; do

      unset DESC

      # get descriptions from manual pages

      if [ -f $PKG_MAN_DIR/man1/$executable.1 ]; then
        DESC=`grep -A 1 '.S[Hh] NAME' $PKG_MAN_DIR/man1/$executable.1 | \
              grep "$executable " | sed -e 's/^.* \\\- //'`
      fi
      if [ -f $PKG_MAN_DIR/man8/$executable.8 ]; then
        DESC=`grep -A 1 '.S[Hh] NAME' $PKG_MAN_DIR/man8/$executable.8 | \
              grep "$executable " | sed -e 's/^.* \\\- //'`
      fi

      if [ -z "$DESC" -a $packagename = $executable ]; then
        DESC=$PACKAGE_DESC
      fi

      echo $executable $DESC >> $MENUFILE
 
#      echo >> $MENUFILE

    done

   echo >> $MENUFILE

  fi

done
