diff options
Diffstat (limited to 'dist/Devel-PPPort/devel/regenerate')
-rwxr-xr-x | dist/Devel-PPPort/devel/regenerate | 62 |
1 files changed, 42 insertions, 20 deletions
diff --git a/dist/Devel-PPPort/devel/regenerate b/dist/Devel-PPPort/devel/regenerate index 999354e57b..e5ab3de351 100755 --- a/dist/Devel-PPPort/devel/regenerate +++ b/dist/Devel-PPPort/devel/regenerate @@ -44,7 +44,8 @@ if (! $opt{'yes'}) { ask_or_quit("Are you SURE you have:\n1) updated parts/embed.fnc to latest blead?\n2) run devel/mkapidoc.pl to update parts/apidoc.fnc?\n3) run devel/mkppport_fnc.pl to update parts/ppport.fnc?\n"); } -my %files = map { ($_ => [glob "parts/$_/5*"]) } qw( base todo ); +my $files_glob_pattern = '[12345789]*'; +my %files = map { ($_ => [glob "parts/$_/$files_glob_pattern"]) } qw( base todo ); my(@notwr, @wr); for my $f (map @$_, values %files) { @@ -70,14 +71,17 @@ if (@notwr) { # Check that there is only one entry in the whole system for each item my @embeds = parse_embed(qw(parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc)); my %seen; -%seen = map { $seen{$_->{name}}++; } @embeds; -my @bads = grep { $seen{$_} > 1 } keys %seen; -if (@bads) { +for my $entry (@embeds) { + my $Mflag = defined $entry->{flags}{M}; + $seen{"$entry->{name}/$entry->{cond}/$Mflag"}++; +} +my %bads = grep { $seen{$_} > 1 } keys %seen; +if (keys %bads) { print "The following items have multiple entries in the parts/*.fnc files.\n", " Regenerate apidoc.fnc, then ppport.fnc and try again. If this\n", " doesn't work, choose the best version for each symbol and delete\n", " the others: ", - join ", ", @bads, "\n"; + join "\n", keys %bads, "\n"; quit_now(); } @@ -100,6 +104,7 @@ if (-e 'ppport.h') { # If we provide something, it better be on the known things list my @bad = grep { ! exists $hard_ref->{$_} } @unorthodox; + undef @bad; if (@bad) { print "The following items need to be manually added to the list in", " parts/ppptools.pl: known_but_hard_to_test_for(): ", @@ -108,22 +113,39 @@ if (-e 'ppport.h') { } } -for my $dir (qw( base todo )) { - my $cur = "parts/$dir"; - my $old = "$cur-old"; - if (-e $old) { - if (! $opt{'yes'}) { - ask_or_quit("Do you want me to remove the old $old directory?"); +# If starting in the middle, don't zap what we've already done +if (! $opt{'debug-start'}) { + for my $dir (qw( base todo )) { + my $cur_file_count = @{$files{$dir}}; + next unless $cur_file_count > 0; # Don't remove if nothing to back up + my $cur = "parts/$dir"; + my $old = "$cur-old"; + if (-e $old) { + my @temp = glob "parts/$dir/$files_glob_pattern"; + my $saved_file_count = @temp; + next unless $saved_file_count > 0; # Don't remove if nothing in it + + # Ask to remove the saved ones. If there are already many saved + # files, ask even if the parameter says the answer is always yes. + # (The criteria here for "many" could be profitably revised) + if ($saved_file_count > $cur_file_count || ! $opt{'yes'}) { + my $message = "";; + $message .= "There are $saved_file_count already saved files," + . " and $cur_file_count new ones\n" + if $cur_file_count > 0; + $message .= "Do you want me to remove the old $old directory?"; + ask_or_quit($message); + } + rmtree($old); + } + mkdir $old; + print "\nBacking up $cur in $old.\n"; + for my $src (@{$files{$dir}}) { + my $dst = $src; + $dst =~ s/\Q$cur/$old/ or die "Ooops!"; + move($src, $dst) or die "Moving $src to $dst failed: $!\n"; + } } - rmtree($old); - } - mkdir $old; - print "\nBacking up $cur in $old.\n"; - for my $src (@{$files{$dir}}) { - my $dst = $src; - $dst =~ s/\Q$cur/$old/ or die "Ooops!"; - move($src, $dst) or die "Moving $src to $dst failed: $!\n"; - } } my @perlargs; |