diff options
author | will <will@FreeBSD.org> | 2000-10-14 13:06:09 +0800 |
---|---|---|
committer | will <will@FreeBSD.org> | 2000-10-14 13:06:09 +0800 |
commit | 90816ce9038f0b478ca105412d8420d4dd8bdb06 (patch) | |
tree | fd3ffbffca61e1c7b889c9e41257079858b4f3ef /Tools | |
parent | 3413cbbc02ffde809103605506e9bccbf3990dd2 (diff) | |
download | freebsd-ports-gnome-90816ce9038f0b478ca105412d8420d4dd8bdb06.tar.gz freebsd-ports-gnome-90816ce9038f0b478ca105412d8420d4dd8bdb06.tar.zst freebsd-ports-gnome-90816ce9038f0b478ca105412d8420d4dd8bdb06.zip |
Overhaul addport again. Should be quite functional now.
1) Re-add functionality removed in revision 1.11, but only as an option.
This time, it checks out its own copy of ports/Mk and points PORTSDIR
at the correct location. To use this, use the -a option. It will not
work if it can't find portlint in your path.
2) Add option -f to disable fetching the distfile.
3) Add option -m to disable checking out a copy of Mk for 1). For those
that have a current Mk in PORTSDIR and don't want to check out a fresh
copy for whatever reason.
4) Support CVSROOT environment variable.
5) Note environment variables recognized by addport.
6) Fix breakage trying to use -d with multiple directories (not tested).
7) Actually use $interactive variable.
8) Update usage().
9) Note original RCSID for my shell script; take over as MAINTAINER.
Tested by: gshapiro (this revision was used in adding sendmail)
Diffstat (limited to 'Tools')
-rwxr-xr-x | Tools/scripts/addport | 92 |
1 files changed, 70 insertions, 22 deletions
diff --git a/Tools/scripts/addport b/Tools/scripts/addport index 378b563a6857..4cc3c629a93a 100755 --- a/Tools/scripts/addport +++ b/Tools/scripts/addport @@ -1,15 +1,16 @@ #!/usr/bin/perl # # addport - perl script that adds new ports to the -# FreeBSD Ports Collection. -# Created by: Will Andrews <will@FreeBSD.org> -# and Michael Haro <mharo@FreeBSD.org> +# FreeBSD Ports Collection. Replaces easy-import. # -# $Id: addport,v 1.5 2000/04/22 22:19:43 mharo Exp $ +# Original shell script & idea: Will Andrews <will@FreeBSD.org> +# Original conversion to Perl : Michael Haro <mharo@FreeBSD.org> +# +# $Id: addport,v 1.2 2000/04/02 06:21:13 will Exp $ (original shell script) +# $Id: addport,v 1.5 2000/04/22 22:19:43 mharo Exp $ (perl conversion) # $FreeBSD$ # -# MAINTAINER= mharo@FreeBSD.org -# however feel free to submit patches to will@FreeBSD.org. =) +# MAINTAINER= will@FreeBSD.org # use Cwd "abs_path"; @@ -19,7 +20,7 @@ use strict; my %opts; -getopts('d:h:ins:tu:v', \%opts); +getopts('ad:fh:imns:tu:', \%opts); my $distdir = $opts{'s'} if ($opts{'s'} ne ""); my $dir = $opts{'d'}; @@ -30,6 +31,10 @@ my $u = $ENV{USER}; $u = $opts{'u'} if ($opts{'u'} ne ""); my $more_testing = $opts{'t'}; my $interactive = $opts{'i'}; +my $nomkdir = $opts{'m'}; +my $addlchk = $opts{'a'}; +my $nofetch = $opts{'f'}; +my $currentdir = abs_path("."); my $tmpdir; my $repo; @@ -38,21 +43,22 @@ if( !defined $ENV{"CVS_RSH"} ) { $ENV{CVS_RSH} = "ssh"; } my $make = "make"; -my $portlint = "portlint -N -a -c -t"; +my $portlint = `which portlint`; chomp $portlint; +my $plint_args = "-N -a -c -t"; my $perl = "perl"; my $cp = "cp"; my $mv = "mv"; my $rm = "rm"; -# now check to make sure this isn't running on freefall chomp(my $myhost = lc(hostname())); if ($myhost ne lc($h)) { $ssh = "$ENV{CVS_RSH} $u\@$h"; - $repo = "$u\@$h:/home/ncvs"; + $repo = "$u\@$h:/home/ncvs" if !$ENV{CVSROOT}; } else { $ssh = ""; - $repo = "/home/ncvs"; + $repo = "/home/ncvs" if !$ENV{CVSROOT}; } +$repo = "$ENV{CVSROOT}" if $ENV{CVSROOT}; my $cvs = "cvs $n-d $repo"; # stuff that always happens when we start @@ -73,25 +79,52 @@ END { } } +# setup the list of commands to run on the new port(s). +my @commands; +my $passenv = ""; +if ($addlchk && -f $portlint) { + $passenv = "DISTDIR=\"$distdir\"" if -d $distdir && $myhost ne "freefall.freebsd.org"; + $passenv = "DISTDIR=\"$tmpdir\"" if $myhost eq "freefall.freebsd.org"; + $passenv = $passenv . " PORTSDIR=\"$tmpdir\"" if !$nomkdir; + push(@commands, "$make clean check-categories"); + push(@commands, "$portlint $plint_args"); + push(@commands, "$make $passenv FETCH_BEFORE_ARGS='-btA' checksum") if !$nofetch; + if ($more_testing) { + push(@commands, "$make distclean"); + push(@commands, "$make build"); + } + if (!$nomkdir) { + chdir $tmpdir; + print "Checking out Mk directory to ensure portlint correctness.\n"; + system("$cvs co ports/Mk") && errx(1, "Could not checkout Mk directory"); + system("mv ports/Mk Mk") && errx(1, "Could not set up Mk directory"); + chdir $currentdir; + } +} + if ($dir eq "") { warnx("Need to specify a directory with -d argument!"); usage(); exit 1; } +# make sure we're in the right place. +chdir $currentdir; my @dirs = split(/\,/, $dir); +foreach my $i (@dirs) { $i = abs_path($i); } my $portname; my $module; foreach my $thisdir (@dirs) { + # make double sure where we are.. + chdir $thisdir; # do some dir sanity checking first errx(1, "Please specify valid directories to import new ports from.") if $thisdir eq ""; errx(1, "$thisdir is either not a directory or does not exist.") if (! -d $thisdir); - $thisdir = abs_path($thisdir); print "Working with port directory $thisdir.\n"; $portname = `basename $thisdir`; # avoid problems with dirs containing `/' in cvs chomp $portname; - if ($opts{'i'}) { + if ($interactive) { if (prompt("Port directory name will be $portname in CVS Repo. OK? ")) { do { $portname = query("Preferred name for port directory? "); @@ -101,13 +134,18 @@ foreach my $thisdir (@dirs) { chdir $thisdir or err(1, "$thisdir"); + # now run the tests on this baby. + for (@commands) { + system("$_") && errx(1, "'$_' had problems. aborting."); + } + # Get the category name and make it suitable for use with cvs my $category; $_ = `grep CATEGORIES Makefile`; m/\w+\W+([\w-]+)/; $category = $1; chomp $category; - if ($opts{'i'}) { + if ($interactive) { if (prompt("Port $portname will be put in category $category. OK? " )) { do { $category = query("Preferred category for $portname? "); @@ -118,7 +156,7 @@ foreach my $thisdir (@dirs) { $cvs_category =~ s/-/_/g; $module = $portname; - if ($opts{'i'}) { + if ($interactive) { if (prompt("Port will be added as module $portname. OK? ")) { do { $module = query("Preferred module name for $module? "); @@ -187,7 +225,6 @@ sub warnx { print STDERR $0 . ": " . $msg . "\n"; } - sub err { my ($ex, $msg) = @_; @@ -226,7 +263,7 @@ print <<EOF; authors: <will\@FreeBSD.org>, <mharo\@FreeBSD.org> SYNOPSIS - $0 [-h host] [-u user] [-s distdir] [-intv] -d directory + $0 [-h host] [-u user] [-s distdir] [-afimnt] -d directory Where "directory" contains the comma-delimited list of root directories of new ports that you wish to @@ -234,25 +271,36 @@ SYNOPSIS *WILL* matter in regards to the repository! OPTIONS - -h host Use a cvshost besides freefall.FreeBSD.org + -a Perform checks on the port to make sure + there are no problems. Recommended. + -f Do not fetch the distfile. + -h host Use a cvshost besides freefall.FreeBSD.org. -i Interactive mode; allow more control over where things are placed. This is required in order to change things like module names etc. + -m Do not checkout ports/Mk (needed for support + of portlinting etc). -n Do not actually commit anything. -s distdir Use a different directory besides the default, for downloading distfiles. This defaults to the temporary directory set up on freefall. + -t Do more port testing. Requires -a. -u user Use a different username (default: $u). - -t Do more port testing + +ENVIRONMENT VARIABLES + $0 supports the following environment variables: + + CVS_RSH - Command to use when connecting to CVS host. + CVSROOT - Location of CVS repository. + USER - Username of user invoking $0. EXAMPLES % addport -n -d greatgame,helpfuldev,shoot Will show what happens but not actually commit ports named "greatgame", "helpfuldev", and "shoot". - % addport -t -v thisport - Will not perform testing (does not matter in which - order -t and -v are used) on port "thisport" but just add it. + % addport + Displays this message. :-) EOF } |