diff options
Diffstat (limited to 'mk/scripts/genindex.awk')
-rwxr-xr-x | mk/scripts/genindex.awk | 389 |
1 files changed, 0 insertions, 389 deletions
diff --git a/mk/scripts/genindex.awk b/mk/scripts/genindex.awk deleted file mode 100755 index 0e109955939..00000000000 --- a/mk/scripts/genindex.awk +++ /dev/null @@ -1,389 +0,0 @@ -#!/usr/bin/awk -f -# $NetBSD: genindex.awk,v 1.4 2003/09/02 07:00:08 jlam Exp $ -# -# Copyright (c) 2002, 2003 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. -# - - -# Global variables -#----------------- -# The following associative arrays are used for storing the dependency -# information and other information for the packages -# -# topdepends[] : index=pkgdir (math/scilab) -# List of explicitly listed depencencies by name. -# I.e. "xless-[0-9]* pvm-3.4.3" -# -# alldepends[] : index=pkgdir (math/scilab) -# Flattened dependency list by name. -# -# - - -BEGIN { - debug = 0; - printf("Reading database file\n"); -} - -#conflicts /usr/pkgsrc/math/scilab -#depends /usr/pkgsrc/math/scilab xless-[0-9]*:../../x11/xless pvm-3.4.3:../../parallel/pvm3 -# - -/^(build_)?depends / { -# -# Read in the entire depends tree -# These lines look like: -# -#depends /usr/pkgsrc/math/scilab xless-[0-9]*:../../x11/xless pvm-3.4.3:../../parallel/pvm3 -#build_depends /usr/pkgsrc/math/scilab libtool-base>=1.4.20010614nb9:../../devel/libtool-base -# - deptype=$1; -# pkg=fulldir2pkgdir($2); - pkg = $2; - if (pkg in topdepends) {} - else {topdepends[pkg] = "";} - if (pkg in topbuilddepends) {} - else {topbuilddepends[pkg] = "";} - - for (i = 3; i <= NF; i++) { - split($i, a,":"); - pkgpat = a[1]; - pkgdir = a[2]; - sub(/[\.\/]*/, "", pkgdir); - if (pkgdir !~ /\//) { - pkgcat = pkg; - gsub(/\/.*/, "", pkgcat); - pkgdir=pkgcat "/" pkgdir; - if (debug) - printf("Corrected missing category directory to get \"%s\"\n", - pkgdir); - } - if (debug){ - printf("package in directory %s %s on:\n", - pkg, deptype); - printf("\tpkgpat = %s\n", pkgpat); - printf("\tpkgdir = %s\n", pkgdir); - } - - -# -# store the package directory in a associative array with the wildcard -# pattern as the index since we will need to be able to look this up later -# - pat2dir[pkgpat] = pkgdir; - - if (deptype == "depends") { - topdepends[pkg] = topdepends[pkg] " " pkgpat " " ; - if (debug) { - printf("Appending %s to topdepends[%s] (%s)\n", - pkgpat, pkg, topdepends[pkg]); - } - } - else { - if (debug) { - printf("Appending %s to topbuilddepends[%s] (%s)\n", - pkgpat, pkg, topbuilddepends[pkg]); - } - topbuilddepends[pkg] = topbuilddepends[pkg] " " pkgpat " " ; - } - } - - next; -} - -/^categories /{ - # note: we pick out the categories slightly differently than the comment - # and homepage because the category name will be included in the directory - # name and hence the index() call points to the wrong location - categories[$2] = $3; - for(i = 4; i <= NF; i = i + 1) { - categories[$2] = categories[$2] " " $i; - } - next; -} - -/^comment /{ - comment[$2] = substr($0, index($0, $3)); - next; -} - -/^descr /{ - descr[$2] = substr($0, index($0, $3)); - next; -} - -/^homepage /{ - if( NF>=3 ) { - homepage[$2] = substr($0, index($0, $3)); - } else { - homepage[$2] = ""; - } - next; -} - -/^index / { -# -# read lines like: -#index /usr/pkgsrc/math/scilab scilab-2.6nb3 -# and store the directory name in a associative array where the index -# is the package name and in a associative array that lets us lookup -# name from directory. We use fuldir2pkgdir to get "math/scilab" -# and drop the /usr/pkgsrc part. -# -# pkgname2dir[$3] = fulldir2pkgdir($2); -# pkgdir2name[fulldir2pkgdir($2)] = $3; - pkgname2dir[$3] = $2; - pkgdir2name[$2] = $3; - next; -} - -/^license /{ - license[$2] = substr($0, index($0, $3)); - next; -} - -/^maintainer /{ - maintainer[$2] = substr($0, index($0, $3)); - next; -} - -/^notfor /{ - notfor[$2] = substr($0, index($0, $3)); - next; -} - -/^onlyfor /{ - onlyfor[$2] = substr($0, index($0, $3)); - next; -} - -/^prefix /{ - prefix[$2] = substr($0, index($0, $3)); - next; -} - -/^wildcard /{ - wildcard[$2] = substr($0, index($0, $3)); - next; -} - -# -# Now recurse the tree to give a flattened depends list for each pkg -# - -END { - if( SORT == "" ) { SORT = "sort"; } - indexf = SORT " > INDEX"; - if ( dependsfile == "" ) dependsfile = "/dev/null"; - if ( builddependsfile == "" ) builddependsfile = "/dev/null"; - - printf("Flattening dependencies\n"); - printf("") > dependsfile; - for (toppkg in topdepends){ - if (debug) printf("calling find_all_depends(%s, run)\n", toppkg); - find_all_depends(toppkg, "run"); - if (debug) printf("%s depends on: %s, topdepends on %s\n", - toppkg, alldepends[toppkg], - topdepends[toppkg]); - printf("%s depends on: %s\n", - toppkg, alldepends[toppkg]) >> dependsfile; - flatdepends[toppkg] = alldepends[toppkg]; - } - close(dependsfile); - - -# clear out the flattened depends list and repeat for the build depends - for( pkg in alldepends) { - delete alldepends[pkg]; - } - - printf("Flattening build dependencies\n"); - printf("") > builddependsfile; - for (toppkg in topbuilddepends){ - find_all_depends(toppkg, "build"); - printf("%s build_depends on: %s\n", - toppkg, alldepends[toppkg]) >> builddependsfile; - } - close(builddependsfile); - - printf("Generating INDEX file\n"); - -# Output format: -# package-name|package-path|installation-prefix|comment| \ -# description-file|maintainer|categories|build deps|run deps|for arch| \ -# not for opsys|homepage - - pkgcnt = 0; - for (toppkg in topdepends){ - pkgcnt++; - printf("%s|", pkgdir2name[toppkg]) | indexf; - printf("%s|", toppkg) | indexf; - printf("%s|", prefix[toppkg]) | indexf; - printf("%s|", comment[toppkg]) | indexf; - printf("%s|", descr[toppkg]) | indexf; - printf("%s|", maintainer[toppkg]) | indexf; - printf("%s|", categories[toppkg]) | indexf; - gsub(/^ /, "", alldepends[toppkg]); - gsub(/ $/, "", alldepends[toppkg]); - printf("%s|", alldepends[toppkg]) | indexf; - gsub(/^ /, "", flatdepends[toppkg]); - gsub(/ $/, "", flatdepends[toppkg]); - printf("%s|", flatdepends[toppkg]) | indexf; - printf("%s|", onlyfor[toppkg]) | indexf; - printf("%s|", notfor[toppkg]) | indexf; - printf("%s", homepage[toppkg]) | indexf; - printf("\n") | indexf; - } - close(indexf); - printf("Indexed %d packages\n", pkgcnt); - exit 0; -} - -function find_all_depends(pkg, type, pkgreg, i, deps, depdir, topdep){ -# pkg is the package directory, like math/scilab - -# printf("find_all_depends(%s, %s)\n", pkg, type); -# if we find the package already has been fully depended -# then return the depends list - if (pkg in alldepends){ - if (debug) printf("\t%s is allready depended. Returning %s\n", - pkg, alldepends[pkg]); - return(alldepends[pkg]); - } - -# if this package has no top dependencies, enter an empty flat dependency -# list for it. - if( type == "run" ) { -# we only want DEPENDS - topdep = topdepends[pkg]; - } else { -# we want BUILD_DEPENDS and DEPENDS - topdep = topdepends[pkg] " " topbuilddepends[pkg]; - } - if (topdep ~ "^[ \t]*$") { - alldepends[pkg] = " "; - if (debug) printf("\t%s has no depends(%s). Returning %s\n", - pkg, topdep, alldepends[pkg]); - return(alldepends[pkg]); - } - -# recursively gather depends that each of the depends has - pkgreg = reg2str(pkg); - split(topdep, deps); - i = 1; - alldepends[pkg] = " "; - while ( i in deps ) { - -# figure out the directory name associated with the package hame -# in (wild card/dewey) version form - depdir = pat2dir[deps[i]]; - if (debug) printf("\tadding dependency #%d on \"%s\" (%s)\n", - i, deps[i], depdir); - -# do not add ourselves to the list (should not happen, but -# we would like to not get stuck in a loop if one exists) -# if (" "deps[i]" " !~ pkgreg){ - -# if we do not already have this dependency (deps[i]) listed, then add -# it. However, we may have already added it because another package -# we depend on may also have depended on -# deps[i]. - if (alldepends[pkg] !~ reg2str(deps[i])){ - alldepends[pkg] = alldepends[pkg] " " deps[i] " " find_all_depends(depdir, type); - } - else { - if (debug) printf("\t%s is already listed in %s\n", - deps[i], alldepends[pkg]); - } - - i = i + 1; - } # while i - - if (debug) printf("\tcalling uniq() on alldepends[%s] = %s\n", - pkg, alldepends[pkg]); - alldepends[pkg] = uniq(alldepends[pkg]); - if (debug) printf("\tuniq() output alldepends[%s] = %s\n", - pkg, alldepends[pkg]); - return(alldepends[pkg]); -} - -# -# take a string which has special characters like '+' in it and -# escape them. Also put a space before and after since that's how -# we'll distinguish things like gnome from gnome-libs -# -function reg2str(reg){ - gsub(/\./, "\\\.", reg); - gsub(/\+/, "\\\+", reg); - gsub(/\*/, "\\\*", reg); - gsub(/\?/, "\\\?", reg); - gsub(/\[/, "\\\[", reg); - gsub(/\]/, "\\\]", reg); - reg = " "reg" "; - return(reg); -} - -# -# accepts a full path to a package directory, like "/usr/pkgsrc/math/scilab" -# and returns just the last 2 directories, like "math/scilab" -# -function fulldir2pkgdir(d, i){ - i = match(d, /\/[^\/]+\/[^\/]+$/); - return substr(d, i + 1); -} - -# -# take the depends lists and uniq them. -# -function uniq(list, deps, i, ulist){ - -# split out the depends - split(list, deps); - - i = 1; - ulist = " "; - while (i in deps){ -# printf("uniq(): Checking \"%s\"\n", ulist); -# printf(" for \"%s\"\n", reg2str(deps[i])); - if (ulist !~reg2str(deps[i])){ - ulist = ulist deps[i]" "; - } - i++; - } - return(ulist); -} - - - |