summaryrefslogtreecommitdiff
path: root/mk/scripts/mkreadme
diff options
context:
space:
mode:
authordmcmahill <dmcmahill>2003-01-04 21:13:34 +0000
committerdmcmahill <dmcmahill>2003-01-04 21:13:34 +0000
commit80a513fb6da8549b1bfc5a47dea27bcde3341d26 (patch)
tree6621d884e9cea5598c8ce745bc89da437a3dd10d /mk/scripts/mkreadme
parent1fb4d24fa146b18393e0f83d3eff9b0a2442cd90 (diff)
downloadpkgsrc-80a513fb6da8549b1bfc5a47dea27bcde3341d26.tar.gz
move bulk/{mkreadme,genreadme.awk} to scripts/ as this is a more suitable
location. They are not really part of the bulk build stuff.
Diffstat (limited to 'mk/scripts/mkreadme')
-rwxr-xr-xmk/scripts/mkreadme487
1 files changed, 487 insertions, 0 deletions
diff --git a/mk/scripts/mkreadme b/mk/scripts/mkreadme
new file mode 100755
index 00000000000..0b02077f32c
--- /dev/null
+++ b/mk/scripts/mkreadme
@@ -0,0 +1,487 @@
+#!/bin/sh
+# $NetBSD: mkreadme,v 1.1 2003/01/04 21:13:37 dmcmahill Exp $
+#
+# Script for README.html generation
+#
+# Copyright (c) 2002 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Dan McMahill.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+
+TMPDIR=${TMPDIR:-/tmp/mkreadme}
+PKGSRCDIR=${PKGSRCDIR:-/usr/pkgsrc}
+BMAKE=${BMAKE:-make}
+AWK=${AWK:-/usr/bin/awk}
+
+usage(){
+ echo "$prog - Generates README.html files for a pkgsrc tree"
+ echo "Usage: $prog [-c|--cdrom] [-C|--prune] [-d|--debug] [-f|--ftp] "
+ echo " [-m|--multi-arch] [-p|--pkgsrc directory] "
+ echo " [-P|--packages directory] [-r|--restart] "
+ echo " [-s|--single-arch] [-S|--save-database]"
+ echo " "
+ echo " $prog -h|--help"
+ echo " "
+ echo " $prog -v|--version"
+ echo " "
+ echo "The options supported by $prog are: "
+ echo " "
+ echo " -C|--prune Prune unused README.html files which may exist in"
+ echo " pkg directories which have been removed from CVS."
+ echo " "
+ echo " -c|--cdrom Generates CD-ROM README.html files"
+ echo " "
+ echo " -d|--debug Enables (extremely verbose) debug output"
+ echo " "
+ echo " -f|--ftp Generates FTP README.html files"
+ echo " "
+ echo " -h|--help Displays this help message"
+ echo " "
+ echo " -m|--multi-arch Assumes a packages directory layout like:"
+ echo " OS_VERSION/MACHINE_ARCH/ for example:"
+ echo " 1.{5,6}/{alpha,i386,sparc,vax}"
+ echo " "
+ echo " -p|--pkgsrc dir Specifies the pkgsrc directory. Defaults to"
+ echo " The value of the PKGSRCDIR environment variable"
+ echo " if set or /usr/pkgsrc otherwise."
+ echo " "
+ echo " -P|--packages dir Specifies the packages directory."
+ echo " "
+ echo " -r|--restart Restart. This option assumes that the database file"
+ echo " from a previous run still exists and that the script"
+ echo " should use that instead of recreating the database."
+ echo " "
+ echo " -s|--single-arch Assumes a single OS release and MACHINE_ARCH binary"
+ echo " packages directory structure."
+ echo " "
+ echo " -S|--save-database Does not delete the database file after the run."
+ echo " This is useful for debugging or re-running this script"
+ echo " with the -r option."
+ echo " "
+ echo " -v|--version Displays the version of this script and exits."
+ echo " "
+ echo "Example: $prog -p /pub/NetBSD/packages/pkgsrc -P /pub/NetBSD/packages -m -f"
+ echo " "
+}
+
+clean_and_exit(){
+ if [ "x$DEBUG" = "xno" -a "x$restart" = "xno" -a "x$save" = "xno" ]; then
+ rm -fr $TMPDIR
+ else
+ echo "Debugging output left in $TMP"
+ fi
+ exit 1
+}
+
+prog=$0
+
+
+######################################################################
+#
+# Handle command line options
+#
+######################################################################
+
+ftp_readme=no
+restart=no
+prune=no
+DEBUG=no
+save=no
+
+while
+ test -n "$1"
+do
+ case "$1"
+ in
+
+ # We're generating README.html's for a CD-ROM
+ -c|--cdrom)
+ ftp_readme=no
+ shift
+ ;;
+
+ # Prune old README.html files from pkgs which no longer exist
+ -C|--prune)
+ prune=yes
+ shift
+ ;;
+
+ # Turn on debugging
+ -d|--debug)
+ DEBUG=yes
+ shift
+ ;;
+
+ # We're generating README.html's for a CD-ROM
+ -f|--ftp)
+ ftp_readme=yes
+ shift
+ ;;
+
+
+ # Help
+ -h|--help)
+ usage
+ exit 0
+ ;;
+
+ # assume a OS_RELEASE/MACHINE_ARCH/ layout for the binary pkgs
+ -m|--multi-arch)
+ multiarch=yes
+ shift
+ ;;
+
+ # Specify pkgsrc directory
+ -p|--pkgsrc)
+ PKGSRCDIR=$2
+ shift 2
+ ;;
+
+ # Specify PACKAGES directory
+ -P|--packages)
+ PKGDIR=$2
+ shift 2
+ ;;
+
+ # Restart (ie, don't re-generate the database file)
+ -r|--restart)
+ restart=yes
+ shift
+ ;;
+
+ # assume a single directory structure layout for the binary pkgs
+ -s|--single-arch)
+ multiarch=no
+ shift
+ ;;
+
+ # Save the database files
+ -S|--save-database)
+ save=yes
+ shift
+ ;;
+
+ # Version
+ -v|--version)
+ ${AWK} '/^#[ \t]*\$NetBSD/ {gsub(/,v/,"",$3);printf("%s: Version %s, %s\n",$3,$4,$5); exit 0;}' $prog
+ exit 0
+ ;;
+
+ -*) echo "$prog: ERROR: $1 is not a valid option"
+ usage
+ clean_and_exit
+ ;;
+
+ *)
+ break
+ ;;
+
+ esac
+done
+
+if [ "x$DEBUG" = "xyes" ]; then
+ set -v
+fi
+
+if [ ! -d ${PKGSRCDIR} ]; then
+ echo "ERROR: package source directory ${PKGSRCDIR} does not exist"
+ echo ""
+ clean_and_exit
+fi
+
+if [ ! -d $TMPDIR ]; then
+ mkdir -p $TMPDIR
+fi
+
+DEPENDSTREEFILE=$TMPDIR/dependstree
+export DEPENDSTREEFILE
+DEPENDSFILE=$TMPDIR/depends
+export DEPENDSFILE
+SUPPORTSFILE=$TMPDIR/supports
+export SUPPORTSFILE
+INDEXFILE=$TMPDIR/index
+export SUPPORTSFILE
+ORDERFILE=$TMPDIR/order
+export ORDERFILE
+DATABASEFILE=$TMPDIR/database
+export DATABASEFILE
+BINPKGFILE=$TMPDIR/binpkglist
+
+echo "Starting README.html generation: `date`"
+
+######################################################################
+#
+# Extract key pkgsrc configuration variables
+#
+######################################################################
+
+echo " "
+echo "Extracting configuration variables:"
+echo " "
+if [ -d ${PKGSRCDIR}/pkgtools/pkglint ]; then
+ cd ${PKGSRCDIR}/pkgtools/pkglint
+
+ for v in DISTDIR PACKAGES PKGREPOSITORYSUBDIR PKG_SUFX MACHINE_ARCH PKG_URL OPSYS OS_VERSION FTP_PKG_URL_HOST FTP_PKG_URL_DIR CDROM_PKG_URL_HOST CDROM_PKG_URL_DIR
+ do
+ val=`make show-var VARNAME=${v}`
+ if [ $? != 0 ]; then
+ echo "Error: make show-var VARNAME=${v} in `pwd` "
+ echo "Failed. This is a fatal error"
+ clean_and_exit
+ fi
+ echo "$v=$val"
+ eval ${v}=${val}
+ done
+else
+ echo "Error: ${PKGSRCDIR}/pkgtools/pkglint does not seem to exist"
+ exit 1
+fi
+
+
+######################################################################
+#
+# Decide on FTP vs CDROM README.html files
+#
+######################################################################
+
+if [ "$ftp_readme" = "yes" ]; then
+ PKG_URL=${FTP_PKG_URL_HOST}${FTP_PKG_URL_DIR}
+ echo "Will generate FTP readme files with PKG_URL=$PKG_URL"
+else
+ PKG_URL=${CDROM_PKG_URL_HOST}${CDROM_PKG_URL_DIR}
+ echo "Will generate CD-ROM readme files with PKG_URL=$PKG_URL"
+fi
+
+######################################################################
+#
+# Check for command line switch for packages directory
+#
+######################################################################
+
+# we've been given the directory as a command line switch
+if [ ! -z "$PKGDIR" ]; then
+ PACKAGES=$PKGDIR
+ echo "PACKAGES specified on command line to be $PKGDIR"
+fi
+
+######################################################################
+#
+# Decide in binary package directory layout
+#
+######################################################################
+
+
+# If PACKAGES is set to the default (../../pkgsrc/packages), the current
+# ${MACHINE_ARCH} and "release" (uname -r) will be used. Otherwise a directory
+# structure of ...pkgsrc/packages/`uname -r`/${MACHINE_ARCH} is assumed.
+#
+# This is the logic from bsd.pkg.mk, but I think I'd like to change it to
+# come from a command line switch
+
+if [ -z "$multiarch" -a -e ${PACKAGES} ]; then
+ cd ${PACKAGES}
+ case `pwd` in
+ */pkgsrc/packages)
+ multiarch=no
+ ;;
+
+ *)
+ multiarch=yes
+ ;;
+ esac
+fi
+
+if [ "x$multiarch" = "xyes" ]; then
+ echo "Will generate multi-release, multi-arch readme files"
+else
+ echo "Will generate single-release, single-arch readme files"
+fi
+
+
+######################################################################
+#
+# Extract Database for All Packages (longest step)
+#
+######################################################################
+
+if [ "x$restart" = "xno" ] ; then
+ echo " "
+ echo "Extracting data. This could take a while"
+ echo " "
+ npkg=1
+
+ # make sure we don't have an old database lying around
+ rm -fr $DATABASEFILE
+
+ cd ${PKGSRCDIR}
+ list=`grep '^[[:space:]]*'SUBDIR */Makefile | sed 's,/Makefile.*=[[:space:]]*,/,'`
+ for pkgdir in $list
+ do
+ if [ ! -d $pkgdir ]; then
+ echo " "
+ echo "WARNING: the package directory $pkgdir is listed in" > /dev/stderr
+ echo $pkgdir | sed 's;/.*;/Makefile;g' > /dev/stderr
+ echo "but the directory does not exist. Please fix this!" > /dev/stderr
+ else
+ cd $pkgdir
+ l=`${BMAKE} print-summary-data`
+ if [ $? != 0 ]; then
+ echo "WARNING (printdepends): the package in $pkgdir had problem with" \
+ > /dev/stderr
+ echo " ${BMAKE} print-summary-data" > /dev/stderr
+ echo " database information for this package" > /dev/stderr
+ echo " will be dropped." > /dev/stderr
+ ${BMAKE} print-summary-data 2>&1 > /dev/stderr
+ else
+ echo "$l" >> $DATABASEFILE
+ fi
+ fi
+ echo -n "."
+ if [ `expr $npkg % 100 = 0` -eq 1 ]; then
+ echo " "
+ echo "$npkg"
+ fi
+ npkg=`expr $npkg + 1`
+ cd $PKGSRCDIR
+ done
+else
+ echo " "
+ echo "Using existing database (are you sure you wanted the -r/--restart flag?)"
+ echo " "
+ if [ ! -f $DATABASEFILE ]; then
+ echo " "
+ echo "ERROR: You have use the -r/--restart flag but the database "
+ echo " file $DATABASEFILE does not exist"
+ echo " "
+ exit 1
+ fi
+fi
+
+######################################################################
+#
+# Generate the package and category README.html files
+#
+######################################################################
+
+echo " "
+echo "Generating package README.html files"
+echo " "
+if [ "x$DEBUG" = "xyes" ]; then
+ debug=1;
+else
+ debug=0;
+fi
+
+${AWK} -f ${PKGSRCDIR}/mk/scripts/genreadme.awk \
+ builddependsfile=${TMPDIR}/pkgsrc.builddepends.debug \
+ debug=$debug \
+ dependsfile=${TMPDIR}/pkgsrc.depends.debug \
+ DISTDIR=$DISTDIR \
+ MACHINE_ARCH=$MACHINE_ARCH \
+ MULTIARCH=$multiarch \
+ OPSYS=$OPSYS \
+ OS_VERSION=$OS_VERSION \
+ PACKAGES=$PACKAGES \
+ PKG_SUFX=$PKG_SUFX \
+ PKG_URL=$PKG_URL \
+ PKGREPOSITORYSUBDIR=$PKGREPOSITORYSUBDIR \
+ PKGSRCDIR=$PKGSRCDIR \
+ TMPDIR=$TMPDIR \
+ ${DATABASEFILE}
+
+if [ $? != 0 ]; then
+ echo "Error: genreadme.awk failed to create README.html files"
+ clean_and_exit
+fi
+
+######################################################################
+#
+# Generate the README-IPv6.html file
+#
+######################################################################
+
+echo " "
+echo "Generating the README-IPv6.html file"
+echo " "
+cd ${PKGSRCDIR}
+ipv6=${TMPDIR}/ipv6pkgs
+ipv6_entries=${TMPDIR}/ipv6_entries
+grep -l '^BUILD_DEFS.*=.*USE_INET6' */*/Makefile | sed 's;Makefile;;g' > $ipv6
+fgrep -f $ipv6 README-all.html | sort -t/ +1 > $ipv6_entries
+sed \
+ -e "/%%TRS%%/r${ipv6_entries}" \
+ -e '/%%TRS%%/d' \
+ templates/README.ipv6 > ${TMPDIR}/README-IPv6.html
+if [ $? != 0 ]; then
+ echo "Error: README-IPv6.html generation failed (on sed script)"
+ clean_and_exit
+fi
+if [ ! -f README-IPv6.html ] || ! cmp -s ${TMPDIR}/README-IPv6.html README-IPv6.html ; then
+ mv -f ${TMPDIR}/README-IPv6.html README-IPv6.html
+else
+ echo "README-IPv6.html is unchanged (no changes were needed)"
+fi
+
+######################################################################
+#
+# Prune README.html files which are no longer needed
+#
+######################################################################
+if [ "x$prune" = "xyes" ]; then
+ echo " "
+ echo "Pruning unused README.html files"
+ echo " "
+ cd ${PKGSRCDIR}
+ for d in `ls -d */*` ; do
+ if [ -d $d -a ! -f ${d}/Makefile -a -f ${d}/README.html ]; then
+ echo "Pruning ${d}/README.html which is no longer used"
+ rm -f ${d}/README.html
+ fi
+ done
+fi
+
+######################################################################
+#
+# All done. Clean (if needed) and exit
+#
+######################################################################
+echo " "
+echo "README.html generation finished: `date`"
+echo " "
+if [ "x$DEBUG" = "xno" -a "x$restart" = "xno" -a "x$save" = "xno" ]; then
+ rm -fr $TMPDIR
+else
+ echo "Debugging output left in $TMPDIR"
+fi
+