This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update parts/ppport.fnc
[perl5.git] / dist / Devel-PPPort / devel / regenerate
CommitLineData
0c96388f
MHM
1#!/usr/bin/perl -w
2################################################################################
3#
4# regenerate -- regenerate baseline and todo files
5#
6################################################################################
7#
b2049988 8# Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
0c96388f
MHM
9# Version 2.x, Copyright (C) 2001, Paul Marquess.
10# Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
11#
12# This program is free software; you can redistribute it and/or
13# modify it under the same terms as Perl itself.
14#
15################################################################################
16
17use strict;
18use File::Path;
19use File::Copy;
20use Getopt::Long;
21use Pod::Usage;
22
3d7c117d 23require './devel/devtools.pl';
0c96388f
MHM
24
25our %opt = (
ba120f6f 26 check => 1,
337a666a 27 debug => 0,
ba120f6f 28 verbose => 0,
0c96388f
MHM
29);
30
a58fa8f3 31GetOptions(\%opt, qw( check! verbose install=s blead=s blead-version=s
0f50f756 32 debug=i debug-start=s)) or die pod2usage();
0c96388f
MHM
33
34identify();
35
36unless (-e 'parts/embed.fnc' and -e 'parts/apidoc.fnc') {
37 print "\nOooops, $0 must be run from the Devel::PPPort root directory.\n";
38 quit_now();
39}
40
dfaee99f 41ask_or_quit("Are you SURE you have:\n1) updated parts/embed.fnc to latest blead?\n2) run devel/mkapidoc.sh to update parts/apidoc.fnc?\n3) run devel/mkppport_fnc.pl to update parts/ppport.fnc?\n");
0c96388f
MHM
42
43my %files = map { ($_ => [glob "parts/$_/5*"]) } qw( base todo );
44
45my(@notwr, @wr);
46for my $f (map @$_, values %files) {
47 push @{-w $f ? \@wr : \@notwr}, $f;
48}
49
50if (@notwr) {
51 if (@wr) {
52 print "\nThe following files are not writable:\n\n";
53 print " $_\n" for @notwr;
54 print "\nAre you sure you have checked out these files?\n";
55 }
56 else {
57 print "\nAll baseline / todo file are not writable.\n";
58 ask_or_quit("Do you want to try to check out these files?");
59 unless (runtool("wco", "-l", "-t", "locked by $0", @notwr)) {
60 print "\nSomething went wrong while checking out the files.\n";
61 quit_now();
62 }
63 }
64}
65
66for my $dir (qw( base todo )) {
67 my $cur = "parts/$dir";
68 my $old = "$cur-old";
69 if (-e $old) {
70 ask_or_quit("Do you want me to remove the old $old directory?");
71 rmtree($old);
72 }
73 mkdir $old;
74 print "\nBacking up $cur in $old.\n";
75 for my $src (@{$files{$dir}}) {
76 my $dst = $src;
744ef08f 77 $dst =~ s/\Q$cur/$old/ or die "Ooops!";
0c96388f
MHM
78 move($src, $dst) or die "Moving $src to $dst failed: $!\n";
79 }
80}
81
49ef49fe 82my @perlargs;
0f50f756 83push @perlargs, "--debug=$opt{debug}" if $opt{debug};
0ebe8a01
KW
84push @perlargs, "--install=$opt{install}" if $opt{install};
85push @perlargs, "--blead=$opt{blead}" if $opt{blead};
a58fa8f3 86push @perlargs, "--debug-start=$opt{'debug-start'}" if $opt{'debug-start'};
49ef49fe 87
0c96388f 88my $T0 = time;
ba120f6f
MHM
89my @args = ddverbose();
90push @args, '--nocheck' unless $opt{check};
0ebe8a01 91push @args, "--blead-version=$opt{'blead-version'}" if $opt{'blead-version'};
49ef49fe 92push @args, @perlargs;
0c96388f 93
3bb63d38 94# Find out what symbols were in what releases
0c96388f
MHM
95print "\nBuilding baseline files...\n\n";
96
ba120f6f 97unless (runperl('devel/mktodo', '--base', @args)) {
0c96388f
MHM
98 print "\nSomething went wrong while building the baseline files.\n";
99 quit_now();
100}
101
3bb63d38
KW
102# Then find out what ppport.h buys us by repeating the process above, but
103# using ppport.h
0c96388f
MHM
104print "\nBuilding todo files...\n\n";
105
ba120f6f 106unless (runperl('devel/mktodo', @args)) {
635ff94c 107 print "\nSomething went wrong while building the todo files.\n";
0c96388f
MHM
108 quit_now();
109}
110
40f4ec07 111print "\nAdding remaining info...\n\n";
0c96388f
MHM
112
113unless (runperl('Makefile.PL') and
114 runtool('make') and
49ef49fe 115 runperl('devel/scanprov', '--mode=write', @perlargs)) {
0c96388f
MHM
116 print "\nSomething went wrong while adding the baseline info.\n";
117 quit_now();
118}
119
120my($wall, $usr, $sys, $cusr, $csys) = (time - $T0, times);
121my $cpu = sprintf "%.2f", $usr + $sys + $cusr + $csys;
122$usr = sprintf "%.2f", $usr + $cusr;
123$sys = sprintf "%.2f", $sys + $csys;
124
125print <<END;
126
127API info regenerated successfully.
128
129Finished in $wall wallclock secs ($usr usr + $sys sys = $cpu CPU)
130
131Don't forget to check in the files in parts/base and parts/todo.
132
133END
134
ba120f6f
MHM
135__END__
136
137=head1 NAME
138
c4a2ac43 139regenerate - Automatically regenerate Devel::PPPort's API information
ba120f6f
MHM
140
141=head1 SYNOPSIS
142
143 regenerate [options]
144
145 --nocheck don't recheck symbols that caused an error
146 --verbose show verbose output
147
148=head1 COPYRIGHT
149
b2049988 150Copyright (c) 2006-2013, Marcus Holland-Moritz.
ba120f6f
MHM
151
152This program is free software; you can redistribute it and/or
153modify it under the same terms as Perl itself.
154
155=head1 SEE ALSO
156
157See L<Devel::PPPort> and L<HACKERS>.
158
159=cut