diff options
-rwxr-xr-x | mk/scripts/binpkg-scan | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/mk/scripts/binpkg-scan b/mk/scripts/binpkg-scan new file mode 100755 index 00000000000..8cbd18c0e00 --- /dev/null +++ b/mk/scripts/binpkg-scan @@ -0,0 +1,163 @@ +#!/usr/bin/awk -f +# $NetBSD: binpkg-scan,v 1.1 2006/07/01 11:11:21 dmcmahill Exp $: genreadme.awk,v 1.22 2006/04/15 15:00:24 salo Exp $ +# +# Copyright (c) 2006 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. +# + +# Scans for packages with NO_BIN_ON_FTP set. This script makes use of the +# cache files generated as part of the README.html generation. This makes +# this scan run quite fast when you have a very large binary packages collection. +# +# Usage: +# +# binpkg-scan PACKAGES=/usr/pkgsrc/packages /dev/null +# + +# Global variables +#----------------- +# +# notify - if set to 1, something will be set in the output script to make it +# easy to detect and an automatic email can be sent to notify a person +# that some cleanup is required. +# +# + +BEGIN { + printf("#!/bin/sh\n#\n\n"); + printf("# Starting scan for NO_BIN_ON_FTP packages\n\n"); + notify = 0; +} + + +END { + +# printf("Making sure binary package cache file is up to date...\n"); +# cmd = sprintf("%s AWK=%s CMP=%s FIND=%s GREP=%s PKG_INFO=\"%s\" PKG_SUFX=%s SED=%s SORT=%s %s/mk/scripts/binpkg-cache --packages %s", +# SETENV, AWK, CMP, FIND, GREP, PKG_INFO, PKG_SUFX, SED, SORT, PKGSRCDIR, PACKAGES); +# if (debug) printf("\nExecute: %s\n",cmd); +# rc = system(cmd); + rc = 0; + + if (rc != 0 && rc != 2) { + printf("\n**** WARNING ****\n") > "/dev/stderr"; + printf("Command: %s\nfailed.", cmd) > "/dev/stderr"; + printf("**** ------- ****\n") > "/dev/stderr"; + exit(1); + } + + if (rc == 2) { + printf("\n**** WARNING ****\n") > "/dev/stderr"; + printf("* No binary packages directory found\n") > "/dev/stderr"; + printf("* List of binary packages will not be generated\n") > "/dev/stderr"; + printf("**** ------- ****\n") > "/dev/stderr"; + exit(0); + } + + printf("# Loading binary package cache file...\n\n"); + load_cache_file( PACKAGES "/.pkgcache" ); + printf("\n"); + + for(pkg in noftp_list) { + printf("# NO_BIN_ON_FTP (%s) = %s\nrm %s/%s\n\n", + pkgpath_list[pkg], noftp_list[pkg], PACKAGES, pkg); + } + + if( notify ) { + printf("\n# NOTIFY a person that this script should be run\n\n"); + } +} + +function fatal_check_file(file, cmd){ + cmd="test -f " file ; + if (debug) printf("Execute: %s\n",cmd); + if (system(cmd) != 0) { + printf("**** FATAL ****\nRequired file %s does not exist\n", + file) > "/dev/stderr"; + printf("**** ------- ****\n") > "/dev/stderr"; + close("/dev/stderr"); + exit(1); + } +} + + +function load_cache_file( file, pkgfile, noftp, pkgpath, wk, rx ) { + printf("# * %s\n", file); + fatal_check_file( file ); + + # read the cache file + while( getline < file ) { + + # if this line points to another cache file, then recursively + # load it + if( $0 ~ /^pkgcache_cachefile/ ) { + if( debug ) printf("# Found pkgcache_cachefile line.\n"); + load_cache_file( $2 ); + } else if( $0 ~/^pkgcache_begin /) { + pkgfile = $2; + if( debug ) printf("# Starting %s\n", pkgfile); + pkgpath = "unknown"; + noftp = "unknown"; + } else if( $0 ~/^PKGPATH=/ ) { + pkgpath = $0; + gsub(/PKGPATH=[ \t]*/, "", pkgpath); + } else if( $0 ~/^NO_BIN_ON_FTP=/ ) { + noftp = $0; + gsub(/NO_BIN_ON_FTP=[ \t]*/, "", noftp); + } else if( $0 ~/^pkgcache_end /) { + if( debug ) printf("# %s, NO_BIN_ON_FTP=%s, PKGPATH=%s\n", + pkgfile, noftp, pkpath); + + if(noftp == "") { + if( debug ) printf("# %s, NOT restricted\n", pkgfile); + } else if( noftp == "unknown" ) { + printf("# UNKNOWN value for NO_BIN_ON_FTP: %s/%s\n", PACKAGES, pkgfile); + notify = 1; + } else { + noftp_list[pkgfile] = noftp; + pkgpath_list[pkgfile] = pkgpath; + notify = 1; + } + + + } else { + # skip this line + } + } + + # close the cache file + close( file ); +} + + |