summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmk/scripts/binpkg-scan163
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 );
+}
+
+