source: trunk/third/perl/Porting/makerel @ 14545

Revision 14545, 4.1 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
Line 
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 { /^#\s*define/ } @patchlevel_h;
24print $patchlevel_h;
25$revision = $1 if $patchlevel_h =~ /PERL_REVISION\s+(\d+)/;
26$patchlevel = $1 if $patchlevel_h =~ /PERL_VERSION\s+(\d+)/;
27$subversion = $1 if $patchlevel_h =~ /PERL_SUBVERSION\s+(\d+)/;
28die "Unable to parse patchlevel.h" unless $subversion >= 0;
29$vers = sprintf("%d.%d.%d", $revision, $patchlevel, $subversion);
30$vms_vers = sprintf("%d_%d_%d", $revision, $patchlevel, $subversion);
31
32# fetch list of local patches
33my (@local_patches, @lpatch_tags, $lpatch_tags);
34@local_patches = grep { /^static.*local_patches/../^};/ } @patchlevel_h;
35@local_patches = grep { !/^\s*,?NULL/  } @local_patches;
36@lpatch_tags   = map  {  /^\s*,"(\w+)/ } @local_patches;
37$lpatch_tags   = join "-", @lpatch_tags;
38
39$perl = "perl-$vers";
40$reldir = "$perl";
41$reldir .= "-$lpatch_tags" if $lpatch_tags;
42
43print "\nMaking a release for $perl in $relroot/$reldir\n\n";
44
45print "Cross-checking the MANIFEST...\n";
46($missfile, $missentry) = fullcheck();
47warn "Can't make a release with MANIFEST files missing.\n" if @$missfile;
48warn "Can't make a release with files not listed in MANIFEST.\n" if @$missentry;
49if ("@$missentry" =~ m/\.orig\b/) {
50    # Handy listing of find command and .orig files from patching work.
51    # I tend to run 'xargs rm' and copy and paste the file list.
52    my $cmd = "find . -name '*.orig' -print";
53    print "$cmd\n";
54    system($cmd);
55}
56die "Aborted.\n" if @$missentry or @$missfile;
57print "\n";
58
59# VMS no longer has hardcoded version numbers descrip.mms
60#print "Updating VMS version specific files with $vms_vers...\n";
61#system("perl -pi -e 's/^\QPERL_VERSION = \E\d\_\d+(\s*\#)/PERL_VERSION = $vms_vers$1/' vms/descrip.mms");
62
63
64
65print "Creating $relroot/$reldir release directory...\n";
66die "$relroot/$reldir release directory already exists\n"   if -e "$relroot/$reldir";
67die "$relroot/$reldir.tar.gz release file already exists\n" if -e "$relroot/$reldir.tar.gz";
68mkdir("$relroot/$reldir", 0755) or die "mkdir $relroot/$reldir: $!\n";
69print "\n";
70
71
72print "Copying files to release directory...\n";
73# ExtUtils::Manifest maniread does not preserve the order
74$cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $relroot/$reldir";
75system($cmd) == 0 or die "$cmd failed";
76print "\n";
77
78chdir "$relroot/$reldir" or die $!;
79
80print "Setting file permissions...\n";
81system("find . -type f -print     | xargs chmod -w");
82system("find . -type d -print     | xargs chmod g-s");
83system("find t -name '*.t' -print | xargs chmod +x");
84my @exe = qw(
85    Configure
86    configpm
87    embed.pl
88    installperl
89    installman
90    keywords.pl
91    opcode.pl
92    perly.fixer
93    t/TEST
94    t/*/*.t
95    *.SH
96    vms/ext/Stdio/test.pl
97    vms/ext/filespec.t
98    x2p/*.SH
99    Porting/patchls
100    Porting/makerel
101);
102system("chmod +x @exe");
103
104my @writables = qw(
105    embed.h
106    embedvar.h
107    ext/B/B/Asmdata.pm
108    ext/ByteLoader/byterun.c
109    ext/ByteLoader/byterun.h
110    global.sym
111    keywords.h
112    lib/warnings.pm
113    objXSUB.h
114    opcode.h
115    pp.sym
116    pp_proto.h
117    regnodes.h
118    warnings.h
119    win32/config_H.bc
120    win32/config_H.gc
121    win32/config_H.vc
122);
123system("chmod +w @writables");
124
125print "Adding CRs to DOSish files...\n";
126my @crlf = qw(
127    djgpp/configure.bat
128    README.dos
129    README.win32
130    win32/Makefile
131    win32/makefile.mk
132);
133system("perl -pi -e 's/\$/\\r/' @crlf");
134print "\n";
135
136chdir ".." or die $!;
137
138print "Creating and compressing the tar file...\n";
139my $src = (-e $perl) ? $perl : 'perl'; # 'perl' in maint branch
140$cmd = "tar cf - $reldir | gzip --best > $reldir.tar.gz";
141system($cmd) == 0 or die "$cmd failed";
142print "\n";
143
144system("ls -ld $perl*");
Note: See TracBrowser for help on using the repository browser.