case $CONFIG in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; elif test -f ../../config.sh; then TOP=../..; elif test -f ../../../config.sh; then TOP=../../..; elif test -f ../../../../config.sh; then TOP=../../../..; else echo "Can't find config.sh."; exit 1 fi . $TOP/config.sh ;; esac case "$0" in */*) cd `expr X$0 : 'X\(.*\)/'` ;; esac echo "Extracting pat/patcol (with variable substitutions)" cat >patcol <>patcol <<'!NO!SUBS!' $progname = &profile; # Read ~/.dist_profile require 'getopts.pl'; &usage unless $#ARGV >= 0; &usage unless &Getopts("acd:f:hnmsCRS:V"); if ($opt_V) { print STDERR "$progname $version PL$patchlevel\n"; exit 0; } elsif ($opt_h) { &usage; } $RCSEXT = ',v' unless $RCSEXT; $NEWMANI = 'MANIFEST.new' unless $NEWMANI = $opt_f; chop($pwd = `pwd`) unless -f '.package'; until (-f '.package') { die "$progname: no .package file! Run packinit.\n" unless $pwd; chdir '..' || die "$progname: can't cd ..: $!"; $pwd =~ s|(.*)/(.*)|$1|; $prefix = $2 . '/' . $prefix; } if ($prefix) { for (@ARGV) { s/^/$prefix/ unless m|^[-/]|; } } # We now are at the top level &readpackage; undef $opt_C unless -f $copyright; ©right'init($copyright) if $opt_C; &makedir($opt_d) if $opt_d; undef $opt_c unless $opt_d; # Disable -c if not -d undef $opt_R unless $opt_d; # Disable -R if not -d push(@sw, '-q') if $opt_s; # Let RCS work quietly if ($opt_n) { &newer; # Look for files newer than patchlevel.h } elsif ($opt_a) { open(MANI, $NEWMANI) || die "No $NEWMANI found.\n"; @ARGV = (); while () { s|^\./||; next if m|^patchlevel.h| && !$opt_d; # This file is built by hand chop; ($_) = split(' '); next if -d; push(@ARGV,$_); } close MANI; } elsif ($opt_m) { open(MODS,"bugs/.mods$bnum") || die "$progname: no modification found.\n"; @ARGV = (); while () { next if m|^patchlevel.h$|; # This file is built by hand chop; ($_) = split(' '); next if -d; push(@ARGV,$_); } close MODS; } elsif ($opt_S) { &readsnapshot($opt_S); foreach $file (sort keys %Snap) { push(@ARGV, $file); } } # Now loop over each file specified, doing a 'co -l' foreach $file (@ARGV) { if ($opt_c && -f $file) { ©_file($file, $opt_d); next; } # Continue only if file does not exist or option -d was used. if (! -f $file || $opt_d) { $files = &rcsargs($file); @files = split(' ', $files); if ($opt_S && ($rev = $Snap{$file}) ne '') { # Use snapshot file &col($rev); next; } $rlog = `rlog -rlastpat- $files 2>&1`; ($revs) = ($rlog =~ /selected revisions: (\d+)/); if (!$revs) { if ($opt_d) { ©_file($file, $opt_d); } else { print STDERR "$progname: $file has never been checked in\n"; } } else { # Look whether there is a branch if ($revs == 1) { $rlog = `rlog -r$revbranch $files 2>&1`; ($revs) = ($rlog =~ /selected revisions: (\d+)/); $revs++; # add the base revision (trunk) } if ($revs == 1) { &col($baserev); } else { &col($revbranch); } } } } # Run co -l on @files, unlock file if it fails and retry. # If '-d' option was used, we check out in the specified # directory, after having made all the necessary directories # in the path name (which should be relative to the top). sub col { local($rev) = shift; # Revision to be checked out. if (! $opt_d) { if (system 'co', "-l$rev", @sw, @files) { print "$progname: unlocking and trying again...\n" unless $opt_s; system 'rcs', '-u', @sw, @files; system 'co', "-l$rev", @sw, @files unless $?; } } else { local($name) = $files[0]; # First element is file name $_ = $name; s|(.*)/.*|\1| && &makedir("$opt_d/$_"); if ($opt_C) { ©right'expand("co -p @sw -r$rev $files[1]", "$opt_d/$name"); } else { system "co -p -r$rev @sw $files[1] > $opt_d/$name"; } system 'perl', '-pi', '-e', 's|Lock[e]r:.*\$|\$|;', "$opt_d/$name" if $opt_R; # If RCS file has x bits set, add them on new file -x $files[1] && chmod(0755, "$opt_d/$name"); } } # Copy file into directory, eventually performing copyright expansion... sub copy_file { local($file, $dir) = @_; local($base) = $file =~ m|^(.*)/.*|; &makedir("$dir/$base"); if ($opt_C) { ©right'expand("cat $file", "$dir/$file"); } else { system 'cp', "$file", "$dir/$file"; } system 'perl', '-pi', '-e', 's|Lock[e]r:.*\$|\$|;', "$dir/$file" if $opt_R; -x $file && chmod(0755, "$dir/$file"); print "$progname: $file has been copied\n" unless $opt_s; } sub usage { print STDERR <>patcol $grep -v '^;#' ../pl/package.pl >>patcol $grep -v '^;#' ../pl/rcsargs.pl >>patcol $grep -v '^;#' ../pl/copyright.pl >>patcol $grep -v '^;#' ../pl/makedir.pl >>patcol $grep -v '^;#' ../pl/snapshot.pl >>patcol $grep -v '^;#' ../pl/tilde.pl >>patcol $grep -v '^;#' ../pl/profile.pl >>patcol chmod +x patcol $eunicefix patcol