145 lines
4.1 KiB
Perl
Executable File
145 lines
4.1 KiB
Perl
Executable File
#!/bin/env perl -w
|
|
|
|
# A first attempt at some automated support for making a perl release.
|
|
# Very basic but functional - if you're on a unix system.
|
|
#
|
|
# No matter how automated this gets, you'll always need to read
|
|
# and re-read pumpkin.pod checking for things to be done at various
|
|
# stages of the process.
|
|
#
|
|
# Tim Bunce, June 1997
|
|
|
|
use ExtUtils::Manifest qw(fullcheck);
|
|
|
|
$|=1;
|
|
$relroot = ".."; # XXX make an option
|
|
|
|
die "Must be in root of the perl source tree.\n"
|
|
unless -f "./MANIFEST" and -f "patchlevel.h";
|
|
|
|
open PATCHLEVEL,"<patchlevel.h" or die;
|
|
my @patchlevel_h = <PATCHLEVEL>;
|
|
close PATCHLEVEL;
|
|
my $patchlevel_h = join "", grep { /^#\s*define/ } @patchlevel_h;
|
|
print $patchlevel_h;
|
|
$revision = $1 if $patchlevel_h =~ /PERL_REVISION\s+(\d+)/;
|
|
$patchlevel = $1 if $patchlevel_h =~ /PERL_VERSION\s+(\d+)/;
|
|
$subversion = $1 if $patchlevel_h =~ /PERL_SUBVERSION\s+(\d+)/;
|
|
die "Unable to parse patchlevel.h" unless $subversion >= 0;
|
|
$vers = sprintf("%d.%d.%d", $revision, $patchlevel, $subversion);
|
|
$vms_vers = sprintf("%d_%d_%d", $revision, $patchlevel, $subversion);
|
|
|
|
# fetch list of local patches
|
|
my (@local_patches, @lpatch_tags, $lpatch_tags);
|
|
@local_patches = grep { /^static.*local_patches/../^};/ } @patchlevel_h;
|
|
@local_patches = grep { !/^\s*,?NULL/ } @local_patches;
|
|
@lpatch_tags = map { /^\s*,"(\w+)/ } @local_patches;
|
|
$lpatch_tags = join "-", @lpatch_tags;
|
|
|
|
$perl = "perl-$vers";
|
|
$reldir = "$perl";
|
|
$reldir .= "-$lpatch_tags" if $lpatch_tags;
|
|
|
|
print "\nMaking a release for $perl in $relroot/$reldir\n\n";
|
|
|
|
print "Cross-checking the MANIFEST...\n";
|
|
($missfile, $missentry) = fullcheck();
|
|
warn "Can't make a release with MANIFEST files missing.\n" if @$missfile;
|
|
warn "Can't make a release with files not listed in MANIFEST.\n" if @$missentry;
|
|
if ("@$missentry" =~ m/\.orig\b/) {
|
|
# Handy listing of find command and .orig files from patching work.
|
|
# I tend to run 'xargs rm' and copy and paste the file list.
|
|
my $cmd = "find . -name '*.orig' -print";
|
|
print "$cmd\n";
|
|
system($cmd);
|
|
}
|
|
die "Aborted.\n" if @$missentry or @$missfile;
|
|
print "\n";
|
|
|
|
# VMS no longer has hardcoded version numbers descrip.mms
|
|
#print "Updating VMS version specific files with $vms_vers...\n";
|
|
#system("perl -pi -e 's/^\QPERL_VERSION = \E\d\_\d+(\s*\#)/PERL_VERSION = $vms_vers$1/' vms/descrip.mms");
|
|
|
|
|
|
|
|
print "Creating $relroot/$reldir release directory...\n";
|
|
die "$relroot/$reldir release directory already exists\n" if -e "$relroot/$reldir";
|
|
die "$relroot/$reldir.tar.gz release file already exists\n" if -e "$relroot/$reldir.tar.gz";
|
|
mkdir("$relroot/$reldir", 0755) or die "mkdir $relroot/$reldir: $!\n";
|
|
print "\n";
|
|
|
|
|
|
print "Copying files to release directory...\n";
|
|
# ExtUtils::Manifest maniread does not preserve the order
|
|
$cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $relroot/$reldir";
|
|
system($cmd) == 0 or die "$cmd failed";
|
|
print "\n";
|
|
|
|
chdir "$relroot/$reldir" or die $!;
|
|
|
|
print "Setting file permissions...\n";
|
|
system("find . -type f -print | xargs chmod -w");
|
|
system("find . -type d -print | xargs chmod g-s");
|
|
system("find t -name '*.t' -print | xargs chmod +x");
|
|
my @exe = qw(
|
|
Configure
|
|
configpm
|
|
embed.pl
|
|
installperl
|
|
installman
|
|
keywords.pl
|
|
opcode.pl
|
|
perly.fixer
|
|
t/TEST
|
|
t/*/*.t
|
|
*.SH
|
|
vms/ext/Stdio/test.pl
|
|
vms/ext/filespec.t
|
|
x2p/*.SH
|
|
Porting/patchls
|
|
Porting/makerel
|
|
);
|
|
system("chmod +x @exe");
|
|
|
|
my @writables = qw(
|
|
embed.h
|
|
embedvar.h
|
|
ext/B/B/Asmdata.pm
|
|
ext/ByteLoader/byterun.c
|
|
ext/ByteLoader/byterun.h
|
|
global.sym
|
|
keywords.h
|
|
lib/warnings.pm
|
|
objXSUB.h
|
|
opcode.h
|
|
pp.sym
|
|
pp_proto.h
|
|
regnodes.h
|
|
warnings.h
|
|
win32/config_H.bc
|
|
win32/config_H.gc
|
|
win32/config_H.vc
|
|
);
|
|
system("chmod +w @writables");
|
|
|
|
print "Adding CRs to DOSish files...\n";
|
|
my @crlf = qw(
|
|
djgpp/configure.bat
|
|
README.dos
|
|
README.win32
|
|
win32/Makefile
|
|
win32/makefile.mk
|
|
);
|
|
system("perl -pi -e 's/\$/\\r/' @crlf");
|
|
print "\n";
|
|
|
|
chdir ".." or die $!;
|
|
|
|
print "Creating and compressing the tar file...\n";
|
|
my $src = (-e $perl) ? $perl : 'perl'; # 'perl' in maint branch
|
|
$cmd = "tar cf - $reldir | gzip --best > $reldir.tar.gz";
|
|
system($cmd) == 0 or die "$cmd failed";
|
|
print "\n";
|
|
|
|
system("ls -ld $perl*");
|