diff options
Diffstat (limited to 'pkgtools/revbump/files/blbump')
-rw-r--r-- | pkgtools/revbump/files/blbump | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/pkgtools/revbump/files/blbump b/pkgtools/revbump/files/blbump new file mode 100644 index 00000000000..cb6249c0286 --- /dev/null +++ b/pkgtools/revbump/files/blbump @@ -0,0 +1,146 @@ +#!@PERL@ -w +# +# $NetBSD: blbump,v 1.1.1.1 2005/01/05 00:31:39 wiz Exp $ +# +# Copyright (c) 2003, 2004 The NetBSD Foundation, Inc. +# +# This code was originally contributed to the NetBSD Foundation, Inc. +# by Julio Merino <jmmv@NetBSD.org> and Thomas Klausner <wiz@NetBSD.org>. +# +# 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. Neither the name of author 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. +# + +$PKGSRCDIR = $ENV{PKGSRCDIR}; +if (! $PKGSRCDIR) { + $PKGSRCDIR = "/usr/pkgsrc"; +} + +sub usage { + print STDERR "usage: blbump [-p pkgsrcdir] [cat1/pkg1 ... catN/pkgN]\n\n"; + print STDERR "If no packages are given as arguments, the list is read from stdin.\n"; + print STDERR "Packages whose buildlink files cannot be updated automatically\n"; + print STDERR "are written to stdout.\n"; + exit 0; +} + +sub blbump { + my $pkgdir = shift; + my ($oldpkgver, $pkgver, $done, $rev, $oldbl, $newbl, $backupbl); + local (*MAKE); + + open(MAKE, '-|', "cd $PKGSRCDIR/$pkgdir ; make show-var VARNAME=PKGNAME"); + $pkgver = <MAKE>; + close(MAKE); + chop $pkgver; + $pkgver =~ s/-([^-]*)$/>=$1/; + + if (-f "$PKGSRCDIR/$pkgdir/buildlink3.mk") { + $ret = bumpbl("$PKGSRCDIR/$pkgdir/buildlink3.mk", $pkgver); + if ($ret == 0) { + return 0; + } + } + + return 1; +} + +sub bumpbl { + $oldbl = shift; + $pkgver = shift; + my ($done, $rev, $newbl, $backupbl); + local (*OLDBL); + + open(OLDBL, $oldbl) or return 0; + $newbl = "$oldbl.new"; + open(NEWBL, ">$newbl"); + + $done = 0; + while (<OLDBL>) { + if ($done == 0 && /^(BUILDLINK_RECOMMENDED.+=[ \t]+)(.+)$/) { + print NEWBL "$1$pkgver\n"; + $done = 1; + } elsif ($done == 0 && /^BUILDLINK_PKGSRCDIR(.*=[ \t]+)/) { + print NEWBL "BUILDLINK_RECOMMENDED${1}$pkgver\n"; + print NEWBL $_; + $done = 1; + } else { + print NEWBL $_; + } + } + + # no suitable place found + if ($done == 0) { + close(NEWBL); + close(OLDBL); + unlink "$newbl"; + return 0; + } + + close(NEWBL); + close(OLDBL); + rename("$newbl", "$oldbl"); + + return 1; +} + +@PACKAGES = (); + +while (@ARGV) { + $arg = shift; + if ($arg eq '-h') { + usage(); + } elsif ($arg eq '-p') { + $PKGSRCDIR = shift; + } else { + push @PACKAGES, $arg; + } +} + +if (! -d $PKGSRCDIR || ! -d "$PKGSRCDIR/doc" || ! -d "$PKGSRCDIR/mk") { + print STDERR "Invalid pkgsrc directory $PKGSRCDIR\n"; + exit 1; +} + +if (! @PACKAGES) { + while (<STDIN>) { + chop; + push @PACKAGES, $_; + } +} + +@valid = (); +foreach $pkg (@PACKAGES) { + if (! -f "$PKGSRCDIR/$pkg/Makefile") { + print "$pkg\n"; + } else { + print "$pkg\n" if blbump("$pkg") == 0; + $pkg =~ /\/(.*)$/; + push @valid, $1; + } +} + +exit 0; |