makerel revision 1.2
1#!/bin/env perl -w 2 3# A first attempt at some automated support for making a perl release. 4# Very basic but functional - if you're on a unix system. 5# 6# No matter how automated this gets, you'll always need to read 7# and re-read pumpkin.pod checking for things to be done at various 8# stages of the process. 9# 10# Tim Bunce, June 1997 11 12use ExtUtils::Manifest qw(fullcheck); 13 14$|=1; 15$relroot = ".."; # XXX make an option 16 17die "Must be in root of the perl source tree.\n" 18 unless -f "./MANIFEST" and -f "patchlevel.h"; 19 20open PATCHLEVEL,"<patchlevel.h" or die; 21my @patchlevel_h = <PATCHLEVEL>; 22close PATCHLEVEL; 23my $patchlevel_h = join "", grep { /^#define/ } @patchlevel_h; 24print $patchlevel_h; 25$patchlevel = $1 if $patchlevel_h =~ /PATCHLEVEL\s+(\d+)/; 26$subversion = $1 if $patchlevel_h =~ /SUBVERSION\s+(\d+)/; 27die "Unable to parse patchlevel.h" unless $subversion >= 0; 28$vers = sprintf("5.%03d", $patchlevel); 29$vms_vers = sprintf("5_%03d", $patchlevel); 30if ($subversion) { 31 $vers.= sprintf( "_%02d", $subversion); 32 $vms_vers.= sprintf( "%02d", $subversion); 33} else { 34 $vms_vers.= " "; 35} 36 37# fetch list of local patches 38my (@local_patches, @lpatch_tags, $lpatch_tags); 39@local_patches = grep { /^static.*local_patches/../^};/ } @patchlevel_h; 40@local_patches = grep { !/^\s*,?NULL/ } @local_patches; 41@lpatch_tags = map { /^\s*,"(\w+)/ } @local_patches; 42$lpatch_tags = join "-", @lpatch_tags; 43 44$perl = "perl$vers"; 45$reldir = "$perl"; 46$reldir .= "-$lpatch_tags" if $lpatch_tags; 47 48print "\nMaking a release for $perl in $relroot/$reldir\n\n"; 49 50print "Cross-checking the MANIFEST...\n"; 51($missfile, $missentry) = fullcheck(); 52warn "Can't make a release with MANIFEST files missing.\n" if @$missfile; 53warn "Can't make a release with files not listed in MANIFEST.\n" if @$missentry; 54if ("@$missentry" =~ m/\.orig\b/) { 55 # Handy listing of find command and .orig files from patching work. 56 # I tend to run 'xargs rm' and copy and paste the file list. 57 my $cmd = "find . -name '*.orig' -print"; 58 print "$cmd\n"; 59 system($cmd); 60} 61die "Aborted.\n" if @$missentry or @$missfile; 62print "\n"; 63 64# VMS no longer has hardcoded version numbers descrip.mms 65#print "Updating VMS version specific files with $vms_vers...\n"; 66#system("perl -pi -e 's/^\QPERL_VERSION = \E\d\_\d+(\s*\#)/PERL_VERSION = $vms_vers$1/' vms/descrip.mms"); 67 68 69 70print "Creating $relroot/$reldir release directory...\n"; 71die "$relroot/$reldir release directory already exists\n" if -e "$relroot/$reldir"; 72die "$relroot/$reldir.tar.gz release file already exists\n" if -e "$relroot/$reldir.tar.gz"; 73mkdir("$relroot/$reldir", 0755) or die "mkdir $relroot/$reldir: $!\n"; 74print "\n"; 75 76 77print "Copying files to release directory...\n"; 78# ExtUtils::Manifest maniread does not preserve the order 79$cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $relroot/$reldir"; 80system($cmd) == 0 or die "$cmd failed"; 81print "\n"; 82 83chdir "$relroot/$reldir" or die $!; 84 85print "Setting file permissions...\n"; 86system("find . -type f -print | xargs chmod -w"); 87system("find . -type d -print | xargs chmod g-s"); 88system("find t -name '*.t' -print | xargs chmod +x"); 89my @exe = qw( 90 Configure 91 configpm 92 embed.pl 93 installperl 94 installman 95 keywords.pl 96 myconfig 97 opcode.pl 98 perly.fixer 99 t/TEST 100 t/*/*.t 101 *.SH 102 vms/ext/Stdio/test.pl 103 vms/ext/filespec.t 104 x2p/*.SH 105 Porting/patchls 106 Porting/makerel 107); 108system("chmod +x @exe"); 109 110print "Adding CRs to DOSish files...\n"; 111my @crlf = qw( 112 djgpp/configure.bat 113 README.dos 114 README.win32 115 win32/Makefile 116 win32/makefile.mk 117); 118system("perl -pi -e 's/\$/\\r/' @crlf"); 119print "\n"; 120 121chdir ".." or die $!; 122 123print "Creating and compressing the tar file...\n"; 124my $src = (-e $perl) ? $perl : 'perl'; # 'perl' in maint branch 125$cmd = "tar cf - $reldir | gzip --best > $reldir.tar.gz"; 126system($cmd) == 0 or die "$cmd failed"; 127print "\n"; 128 129system("ls -ld $perl*"); 130