Index: head/Tools/scripts/distinfochecker =================================================================== --- head/Tools/scripts/distinfochecker (revision 439335) +++ head/Tools/scripts/distinfochecker (nonexistent) @@ -1,135 +0,0 @@ -#!/usr/bin/env perl -w - -# -# $FreeBSD$ -# -# Author: Edwin Groothuis -# - -# -# Small tool to find distinfo with missing MD5/SHA256/SIZE statements, -# based on the assumption that if there is one of the MD5/SHA256/SIZE -# statements, then there should be all of them (except for SIZE -# when MD5/SHA256 is set to IGNORE). -# -# Usage: distinfochecker [-v] [-d directory] -# -v - verbose (print) -# -d - use directory instead of /usr/ports -# - -use Getopt::Std; -use strict; -use Data::Dumper; - -my $UP="/usr/ports"; -my $verbose=0; - -my %opts=(); -getopt('d:v',\%opts); - -$UP=$opts{d} if (defined $opts{d}); -$verbose=1 if (defined $opts{v}); - -my $errors=0; -my $checked=0; - -opendir(DHUP,$UP); -while (my $c=readdir(DHUP)) { - - next if ($c=~/^\./); - next if ($c=~/^[A-Z]/); - next if ($c=~/^distfiles/); - - opendir(DHUPC,"$UP/$c"); - while (my $p=readdir(DHUPC)) { - next if ($p=~/^\./); - next if ($p=~/^Makefile/); - - if (!-f "$UP/$c/$p/distinfo") { - print "$c/$p - No distinfo found\n" if ($verbose); - next; - } - open(FIN,"$UP/$c/$p/distinfo"); - my @lines=; - chomp(@lines); - close(FIN); - - my %MD5=(); - my %SHA256=(); - my %SIZE=(); - - foreach my $line (@lines) { - if ($line=~/^MD5 \((.+?)\) = (.+?)$/) { - if (defined $MD5{$1}) { - print "$c/$p - Duplicate MD5 for $1\n"; - $errors++; - } - $MD5{$1}=$2; - } - if ($line=~/^SHA256 \((.+?)\) = (.+?)$/) { - if (defined $SHA256{$1}) { - print "$c/$p - Duplicate SHA256 for $1\n"; - $errors++; - } - $SHA256{$1}=$2; - } - if ($line=~/^SIZE \((.+?)\) = (.+?)$/) { - if (defined $SIZE{$1}) { - print "$c/$p - Duplicate SIZE for $1\n"; - $errors++; - } - $SIZE{$1}=$2; - } - } - - foreach my $f (sort(keys(%MD5))) { - if (!defined ($SHA256{$f})) { - print "$c/$p - Missing SHA256 for $f\n"; - $SHA256{$f}="missing"; - $errors++; - } - if ($MD5{$f} ne "IGNORE") { - if (!defined ($SIZE{$f})) { - print "$c/$p - Missing SIZE for $f\n"; - $SIZE{$f}="missing"; - $errors++; - } - } - $checked++; - } - - foreach my $f (sort(keys(%SHA256))) { - if (!defined ($MD5{$f})) { - print "$c/$p - Missing MD5 for $f\n"; - $MD5{$f}="missing"; - $errors++; - } - if ($SHA256{$f} ne "IGNORE") { - if (!defined ($SIZE{$f})) { - print "$c/$p - Missing SIZE for $f\n"; - $SIZE{$f}="missing"; - $errors++; - } - } - } - - foreach my $f (sort(keys(%SIZE))) { - if (!defined ($MD5{$f})) { - print "$c/$p - Missing MD5 for $f\n"; - $MD5{$f}="missing"; - $errors++; - } - if (!defined ($SHA256{$f})) { - print "$c/$p - Missing SHA256 for $f\n"; - $SHA256{$f}="missing"; - $errors++; - } - } - - - } - closedir(DHUPC); -} -closedir(DHUP); - -print "Errors: $errors\nChecked: $checked\n"; Property changes on: head/Tools/scripts/distinfochecker ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/Tools/scripts/bump_revision.pl =================================================================== --- head/Tools/scripts/bump_revision.pl (revision 439335) +++ head/Tools/scripts/bump_revision.pl (revision 439336) @@ -1,212 +1,213 @@ -#!/usr/bin/env perl -w +#!/usr/bin/env perl # $FreeBSD$ # # MAINTAINER= gerald@FreeBSD.org # use Getopt::Std; use strict; +use warnings; use Cwd; use Data::Dumper; use File::Basename; use vars qw/$opt_c $opt_n $opt_i $opt_u/; sub usage { print </] -c - Just check -n - No tmpdir, just use dirname(INDEX) -u - Your freebsd.org username. Defaults to \$ENV{USER}. -i - Use this for INDEX name. Defaults to /usr/ports/INDEX. Improvements, suggestions,questions -> gerald\@FreeBSD.org EOF exit 1; } sub bumpMakefile { my ($p) = @_; my $makefile = "$p/Makefile"; my $fin; unless(open($fin, $makefile)) { print "-- Cannot open Makefile of $p, ignored.\n"; next; } my @lines = <$fin>; close($fin) or die "Can't close $makefile b/c $!"; chomp(@lines); my $revision = 1; foreach my $line (@lines) { last if ($line =~ /^MAINTAINER/); $revision += $1 if ($line =~ /PORTREVISION\??=[ \t]*(\d+)$/); } my $printedrev = 0; open(my $fout, '>', "$makefile"); foreach my $line (@lines) { if (!$printedrev) { if ($line =~ /^CATEGORIES??=/ || $line =~ /^PORTEPOCH??=/) { print $fout "PORTREVISION= $revision\n"; $printedrev = 1; # Fall through! } if ($line =~ /^PORTREVISION\?=/) { print $fout "PORTREVISION?= $revision\n"; $printedrev = 1; next; } if ($line =~ /^PORTREVISION=/) { print $fout "PORTREVISION= $revision\n"; $printedrev = 1; next; } } print $fout "$line\n"; } close($fout) or die "Can't close $makefile b/c $!"; } my $INDEX = "/usr/ports/INDEX"; my $USER = $ENV{USER}; { $opt_i = ""; $opt_u = ""; getopts("cni:u:"); $INDEX = $opt_i if ($opt_i); $USER = $opt_u if ($opt_u); die "$INDEX doesn't seem to exist. Please check the value supplied with -i or use -i." unless(-f $INDEX); } my $PORT = $ARGV[0]; usage() unless($PORT); my $CVSROOT = $ENV{CVSROOT} // ':ext:$USER\@pcvs.freebsd.org:/home/pcvs'; # # Read the index, save some interesting keys # my %index = (); { print "Reading $INDEX\n"; open(my $fin, '<', "$INDEX") or die "Cannot open $INDEX for reading."; my @lines = <$fin>; chomp(@lines); close($fin); foreach my $line (@lines) { my @a = split(/\|/, $line); my @b = split(/\//, $a[1]); my $port = $b[-2]."/".$b[-1]; $index{$port}{portname} = $b[-1]; $index{$port}{portnameversion} = $a[0]; $index{$port}{portdir} = $a[1]; $index{$port}{comment} = $a[3]; $index{$port}{deps} = (); if ($a[8]) { @b = split(" ", $a[8]); foreach my $b (@b) { $index{$port}{deps}{$b} = 1; } } } my @k = keys(%index); print "- Processed ", $#k+1, " entries.\n"; } # # See if the port does really exists. # If specified as category/portname, that should be enough. # If specified as portname, check all indexes for existence or duplicates. # unless (defined $index{$PORT}) { my $count = 0; my $n = ""; foreach my $p (keys(%index)) { if ($p =~ /\/$PORT$/) { $n .= " " if ($n); $n .= $p; $count++; } } if ($count == 0) { die "Cannot find ${PORT} in ${INDEX}."; } elsif ($count == 1) { $PORT = $n; } else { die "Found ${PORT} more than once in ${INDEX}: $n. Try category/portname."; } } my $PORTNAMEVERSION = $index{$PORT}{portnameversion}; print "Found $PORT as $PORTNAMEVERSION\n"; # # Figure out all the ports depending on this one. # my %DEPPORTS = (); my $ports = ""; { print "Searching for ports depending on $PORT\n"; foreach my $p (keys(%index)) { if (defined $index{$p}{deps}{$PORTNAMEVERSION}) { $DEPPORTS{$p} = 1; $ports .= " " if ($ports); $ports .= "ports/$p"; } } my @k = keys(%DEPPORTS); print "- Found ", $#k+1, " ports depending on it.\n"; } # # Create a temp directory and cvs checkout the ports # (don't do error checking, too complicated right now) # my $TMPDIR = File::Basename::dirname($INDEX); unless ($opt_n) { $TMPDIR = getcwd() . "/.tmpdir.$$"; mkdir($TMPDIR, 0755); chdir($TMPDIR); system "cvs -d $CVSROOT co -T $ports"; chdir($TMPDIR); } # # Bump portrevisions # { print "Updating Makefiles\n"; foreach my $p (keys(%DEPPORTS)) { print "- Updating Makefile of $p\n"; next if $opt_c; bumpMakefile "$p"; } } # # Commit the changes. Not automated. # unless ($opt_c) { print </dev/null'; chdir $dir if $dir; exec @_; die; } my @childout = ; close CHILD; map chomp, @childout; return wantarray ? @childout : $childout[0]; } foreach (qw(ARCH OPSYS OSREL OSVERSION UID)) { my @cachedenv = readfrom $portsdir, $make, "-V$_"; $ENV{$_} = $cachedenv[0]; } my %pkgname; my %pkgorigin; my %masterdir; my %pkgmntnr; sub wanted { return if !-d; if (/^.svn$/ || $File::Find::name =~ m"^$portsdir/(?:Mk|Templates|Tools|distfiles|packages)$"os || $File::Find::name =~ m"^$portsdir/[^/]+/pkg$"os) { $File::Find::prune = 1; } elsif ($File::Find::name =~ m"^$portsdir/([^/]+/[^/]+)$"os) { $File::Find::prune = 1; if (-f "$File::Find::name/Makefile") { my @makevar = readfrom $File::Find::name, $make, '-VPKGORIGIN', '-VPKGNAME', '-VMAINTAINER', '-VMASTERDIR'; if ($#makevar == 3 && $makevar[1]) { $pkgorigin{$1} = $makevar[0] if $1 ne $makevar[0]; $pkgname{$1} = $makevar[1]; $pkgmntnr{$1} = $makevar[2]; $masterdir{$1} = $makevar[3]; } } } } if ($allports) { find(\&wanted, $portsdir); } else { my @categories = split ' ', readfrom $portsdir, $make, '-VSUBDIR'; foreach my $category (@categories) { -f "$portsdir/$category/Makefile" || next; my @ports = split ' ', readfrom "$portsdir/$category", $make, '-VSUBDIR'; foreach (map "$category/$_", @ports) { -f "$portsdir/$_/Makefile" || next; my @makevar = readfrom "$portsdir/$_", $make, '-VPKGORIGIN', '-VPKGNAME', '-VMAINTAINER', '-VMASTERDIR'; next if $#makevar != 3 || ! $makevar[1]; $pkgorigin{$_} = $makevar[0] if $_ ne $makevar[0]; $pkgname{$_} = $makevar[1]; $pkgmntnr{$_} = $makevar[2]; $masterdir{$_} = $makevar[3]; } } } my %backwards; my %watched; my %watchedm; if ($useindex) { my $indexname = readfrom $portsdir, $make, '-VINDEXFILE'; $versionfile = "$portsdir/$indexname"; } open VERSIONS, "<$versionfile"; while () { chomp; next if /^(#|$)/; my ($origin, $version, $maintainer); if ($useindex) { ($origin, $version, $maintainer) = (split /\|/)[1,0,5]; $origin =~ s,^.*/([^/]+/[^/]+)/?$,$1,; } else { ($origin, $version, $maintainer) = split /\t/; } if (defined $pkgname{$origin}) { my $newversion = $pkgname{$origin}; my $oldversion = $version; $newversion =~ s/^.*-//; $oldversion =~ s/^.*-//; my $result = $newversion eq $oldversion ? '=' : readfrom '', $pkg_version, '-t', $newversion, $oldversion; $watched{$origin} = "$version -> $pkgname{$origin}" if ($watch_re && $result ne '=' && $origin =~ /^(?:$watch_re)$/o); $watchedm{$origin} = "(was <$maintainer>) $version -> $pkgname{$origin}" if ($watchm_re && $maintainer && $pkgmntnr{$origin} && $maintainer ne $pkgmntnr{$origin} && $origin =~ /^(?:$watchm_re)$/o); if ($result eq '<') { $backwards{$origin} = "$pkgname{$origin} < $version"; $pkgname{$origin} = $version; } } elsif ($origin) { $pkgname{$origin} = $version; $pkgmntnr{$origin} = $maintainer; } } close VERSIONS; if (!$useindex) { system 'mv', '-f', $versionfile, "$versionfile.bak"; open VERSIONS, ">$versionfile"; foreach (sort keys %pkgname) { print VERSIONS "$_\t$pkgname{$_}\t$pkgmntnr{$_}\n"; } close VERSIONS; } my %revision; sub parsemakefile { my ($portdir) = @_; my ($r, $d, $a); open MAKEFILE, "<$portdir/Makefile"; while () { if (m'\$FreeBSD\: [^\$ ]+,v (\d+(?:\.\d+)+) (\d{4}(?:[/-]\d{2}){2} \d{2}(?::\d{2}){2}) (\w+) [\w ]+\$') { ($r, $d, $a) = ($1, $2, $3); } } close MAKEFILE; return ($r, $d, $a); } sub getauthors { my ($ports) = @_; my %author; foreach my $origin (keys %{$ports}) { if (!$revision{$origin}) { my ($r, $d, $a) = parsemakefile "$portsdir/$origin"; push @{$revision{$origin}}, $r; push @{$author{$origin}}, $a; if ($masterdir{$origin} ne "$portsdir/$origin") { ($r, $d, $a) = parsemakefile $masterdir{$origin}; push @{$revision{$origin}}, $r; push @{$author{$origin}}, $a; } } } return %author; } sub printlog { my ($fh, $portdir, $r) = @_; if ($svnblame && -d "$portsdir/.svn") { my @svnlog = readfrom $portdir, $svn, 'log', '-r' . ($r ? $r : '.'), 'Makefile'; foreach (@svnlog) { my $in_log = /^-{28}$/ ... /^(-{28}|={77})$/; print $fh " | $_\n" if ($in_log && $in_log != 1 && $in_log !~ /E0$/); } } } sub blame { my ($fh, $ports) = @_; if (%{$ports}) { foreach my $origin (sort keys %{$ports}) { print $fh "- *$origin* <$pkgmntnr{$origin}>: $ports->{$origin}\n"; printlog $fh, "$portsdir/$origin", $revision{$origin}[0]; if ($masterdir{$origin} ne "$portsdir/$origin") { my $master = $masterdir{$origin}; $master =~ s/^$portsdir\///o; while ($master =~ s/(^|\/)[^\/]+\/\.\.(?:\/|$)/$1/) {} print $fh " (master: $master)\n"; printlog $fh, $masterdir{$origin}, $revision{$origin}[1]; } print $fh "\n"; } print $fh "\n"; } } sub template { my ($from, $rcpt, $replyto, $starttime, $ports) = @_; my $portlist = join ', ', sort keys %{$ports}; substr($portlist, 32) = '...' if length $portlist > 35; my %cclist; my %author = getauthors $ports; if ($cc_author) { foreach (map @{$author{$_} ? $author{$_} : []}, keys %{$ports}) { $cclist{"$_\@FreeBSD.org"} = 1 if $_; } } if ($cc_mntnr) { foreach (map $pkgmntnr{$_}, keys %{$ports}) { $cclist{$_} = 1 if $_; } } my $cc = join ', ', sort keys %cclist; my $header = ''; while () { last if /^\.\n?$/; $_ =~ s/%%FROM%%/$from/og; $_ =~ s/%%RCPT%%/$rcpt/og; $_ =~ s/%%CC%%/$cc/og; $_ =~ s/%%REPLYTO%%/$replyto/og; $_ =~ s/%%SUBJECT%%/$portlist/og; $_ =~ s/%%STARTTIME%%/$starttime/og; $header .= $_; } return $header; } sub mail { my ($template, $rcpt, $ports) = @_; if (%{$ports}) { if ($rcpt) { if (!open MAIL, '|-') { exec $sendmail, '-oi', '-t', '-f', $returnpath; die; } print MAIL $template; blame *MAIL, $ports; close MAIL; } else { $template =~ s/^.*?\n\n//os; print $template; blame *STDOUT, $ports; } } } my $tmpl; $tmpl = template $h_from, $rcpt_orig, $h_replyto, $starttime, \%pkgorigin; mail $tmpl, $rcpt_orig, \%pkgorigin; $tmpl = template $h_from, $rcpt_vers, $h_replyto, $starttime, \%backwards; mail $tmpl, $rcpt_vers, \%backwards; $tmpl = template $h_from, $rcpt_watch, $h_replyto, $starttime, \%watched; mail $tmpl, $rcpt_watch, \%watched; $tmpl = template $h_from, $rcpt_watch, $h_replyto, $starttime, \%watchedm; mail $tmpl, $rcpt_watchm, \%watchedm; exit((%pkgorigin || %backwards) ? 1 : 0); __END__ From: %%FROM%% To: %%RCPT%% CC: %%CC%% Reply-To: %%REPLYTO%% Subject: Ports with a broken PKGORIGIN: %%SUBJECT%% X-FreeBSD-Chkversion: PKGORIGIN ** The following ports have an incorrect PKGORIGIN ** PKGORIGIN connects packaged or installed ports to the directory they originated from. This is essential for tools like pkg_version or portupgrade to work correctly. Wrong PKGORIGINs are often caused by a wrong order of CATEGORIES after a repocopy. Please fix any errors as soon as possible. The ports tree was updated at %%STARTTIME%%. . From: %%FROM%% To: %%RCPT%% CC: %%CC%% Reply-To: %%REPLYTO%% Subject: Ports with version numbers going backwards: %%SUBJECT%% X-FreeBSD-Chkversion: backwards ** The following ports have a version number that sorts before a previous one ** For many package tools to work correctly, it is of utmost importance that version numbers of a port form a monotonic increasing sequence over time. Refer to the FreeBSD Porter's Handbook, 'Package Naming Conventions' for more information. Tools that won't work include pkg_version, portupgrade and portaudit. A common error is an accidental deletion of PORTEPOCH. Please fix any errors as soon as possible. The ports tree was updated at %%STARTTIME%%. . From: %%FROM%% To: %%RCPT%% Reply-To: %%REPLYTO%% Subject: Version changes in your watched ports: %%SUBJECT%% X-FreeBSD-Chkversion: vwatch ** The following ports have changed version numbers ** You have requested to be notified of version changes in the following ports: The ports tree was updated at %%STARTTIME%%. . From: %%FROM%% To: %%RCPT%% Reply-To: %%REPLYTO%% Subject: Maintainer changes in your watched ports: %%SUBJECT%% X-FreeBSD-Chkversion: mwatch ** The following ports have changed maintainers ** You have requested to be notified of maintainer changes in the following ports: The ports tree was updated at %%STARTTIME%%. . Index: head/Tools/scripts/mark_safe.pl =================================================================== --- head/Tools/scripts/mark_safe.pl (revision 439335) +++ head/Tools/scripts/mark_safe.pl (revision 439336) @@ -1,278 +1,278 @@ -#!/usr/bin/env perl -w +#!/usr/bin/env perl # $FreeBSD$ # # MAINTAINER= ports@FreeBSD.org # all committers may commit to this file without approval ## core use strict; use warnings FATAL => 'all'; use Carp; use File::Find (); use Getopt::Long (); use Pod::Usage (); ### constants ## exit codes use constant EXIT_SUCCESS => 0; use constant EXIT_FAILED_INVALID_ARGS_OR_ENV => 1; ## other use constant PROGNAME => $0; ### signal handlers local $SIG{__DIE__} = \&Carp::confess; local $SIG{__WARN__} = \&Carp::cluck; ### version our $VERSION = do { my @r = (q$FreeBSD$ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; ### globals # cmdline options (standard) with defaults my $Help = 0; my $Version = 0; my $Debug = 0; my $Verbose = 0; my $NoExec = 0; # cmdline options (custom) with defaults my $Maintainer = "$ENV{USER}\@FreeBSD.org"; my $Ports = 0; my $Safe = 1; my $Index = 'INDEX-9'; # internals my $PORTSDIR = $ENV{PORTSDIR} || '/usr/ports'; my %RPARTS = ( 0 => 'pkg_name', 1 => 'dir', 2 => 'prefix', 3 => 'comment', 4 => 'pkg_descr', 5 => 'maintainer', 6 => 'categories', 7 => 'ldep', 8 => 'rdep', 9 => 'www', ); my %PARTS = reverse %RPARTS; ### Utility Functions sub error { print STDERR "ERROR: $_[0]" } sub debug { print STDERR "DEBUG: $_[0]" if $Debug } sub verbose { print STDOUT "VERBOSE($_[0]): $_[1]" if $Verbose > $_[0] } ### main sub getopts_wrapper { my $rv = Getopt::Long::GetOptions( "debug|d" => \$Debug, "verbose=i" => \$Verbose, "help|h" => \$Help, "version|V" => \$Version, "noexec|n" => \$NoExec, "maintainer|m=s" => \$Maintainer, "ports|p" => \$Ports, "safe|s=i" => \$Safe, "index|i=s" => \$Index, ); Pod::Usage::pod2usage(-verbose => 1) unless $rv; unless ($Help || valid_args()) { $rv = 0; Pod::Usage::pod2usage(-verbose => 1); } return $rv ? 1 : 0; } sub valid_args { my $errors = 0; ## NoExec implies Verbosity level 1 $Verbose = 1 if $NoExec; return $errors > 0 ? 0 : 1; } sub work { my $rv = EXIT_SUCCESS; my $ports = ports_get(); mark($ports); return $rv; } sub mark { my ($ports) = @_; foreach my $port_dir (@$ports) { my $mfile = "$port_dir/Makefile"; print "Mfile: $mfile\n"; open my $mk, '<', $mfile or die "Can't open [$mfile] b/c [$!]"; my @lines = <$mk>; close $mk or die "Can't close [$mfile] b/c [$!]"; next if grep { /MAKE_JOBS_(?:UN)?SAFE|NO_BUILD/ } @lines; my $i_depends = 0; my $i_comment = 0; my $i_maintainer = 0; my $i = 0; foreach my $line (@lines) { ## ORDER MATTERs, lowest in file is last $i_depends = $i if $line =~ /DEPENDS/; $i_comment = $i if $line =~ /COMMENT/; $i_maintainer = $i if $line =~ /MAINTAINER/; ++$i; } my $loc = $i_depends > 0 ? $i_depends : $i_comment > 0 ? $i_comment : $i_maintainer > 0 ? $i_maintainer : print "Can't find location to insert", next; my @newlines = @lines[0..$loc]; push @newlines, "\n", "MAKE_JOBS_" . ($Safe ? "SAFE" : "UNSAFE") . "=\tyes\n"; push @newlines, @lines[$loc+1..$#lines]; open my $mk_o, '>', $mfile or die "Can't open [$mfile] b/c [$!]"; foreach my $line (@newlines) { print $mk_o $line; } close $mk_o or die "Can't close [$mfile] b/c [$!]"; } return; } sub ports_get { my @ports = (); if ($Ports) { @ports = map { "$PORTSDIR/$_" } @ARGV; } else { my $index = "$PORTSDIR/$Index"; print "Index: $index\n"; open my $fh, '<', $index or die "Can't open [$index] b/c [$!]"; while (<$fh>) { my @parts = split /\|/; my $port_dir = $parts[$PARTS{dir}]; $port_dir =~ s!/usr/ports!$PORTSDIR!; my $maintainer = $parts[$PARTS{maintainer}]; push @ports, $port_dir if $maintainer =~ /^$Maintainer$/io; } close $fh or die "Can't close [$index] b/c [$!]"; } @ports = grep { !/rubygem-/ } @ports; return \@ports; } sub main { getopts_wrapper() or return EXIT_FAILED_INVALID_ARGS_OR_ENV; if ($Help) { Pod::Usage::pod2usage(-verbose => 1); return EXIT_SUCCESS; } if ($Version) { print PROGNAME . " - v$VERSION\n\n"; return EXIT_SUCCESS; } return work(); } MAIN: { exit main(); } __END__ =pod =head1 NAME mark_safe.pl - Mark a port or ports as MAKE_JOBS_(UN)SAFE=yes =head1 SYNOPSIS mark_safe.pl =head1 STD OPTIONS =over 4 =item B<--verbose=1,2,3,4,....> Display messages while running on STDOUT. Increasing the level will increase the amount. DEFAULT: off/0 =item B<--debug|d> Copious messages not useful unless you are a developer AND debuging this script are output to STDERR DEFAULT: off/0 =item B<--help|h> Print this message and exit EXIT_SUCCESS DEFAULT: off/0 =item B<--version|V> Output the version and exit with EXIT_SUCCESS DEFAULT: off/0 =item B<--noexec|n> Any External commands will simply be echo'd and not run Assume all of them suceed. IMPLIES: --verbose=1 DEFAULT: off/0 =head1 Dependencies =head1 EXIT CODES Exits 0 on success Exits > 0 <= 255 on error EXIT_SUCCESS => 0 EXIT_FAILED_INVALID_ARGS_OR_ENV => 1 =head1 HISTORY 20009-04-22 by pgollucci: Created =head1 AUTHOR Philip M. Gollucci Epgollucci@FreeBSD.orgE =cut