2 ################################################################################
4 # scanprov -- scan Perl headers for provided macros
6 ################################################################################
8 # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
9 # Version 2.x, Copyright (C) 2001, Paul Marquess.
10 # Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
12 # This program is free software; you can redistribute it and/or
13 # modify it under the same terms as Perl itself.
15 ################################################################################
20 require './parts/ppptools.pl';
21 require './parts/inc/inctools';
25 install => '/tmp/perl/install/default',
29 GetOptions(\%opt, qw( install=s mode=s blead=s )) or die;
31 my $write = $opt{mode} eq 'write';
33 my %embed = map { ( $_->{name} => 1 ) }
34 parse_embed(qw(parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc ));
36 my @provided = grep { !exists $embed{$_} }
37 map { /^(\w+)/ ? $1 : () }
38 `$^X ppport.h --list-provided`;
40 my @perls = sort { $b->{version} <=> $a->{version} }
41 map { { version => `$_ -e 'printf "%.6f", \$]'`, path => $_ } }
42 ($opt{blead}, glob "$opt{install}/*/bin/perl5.*");
45 $perls[$_]{todo} = $perls[$_-1]{version};
53 print "checking perl $p->{version}...\n";
54 my $archlib = `$p->{path} -MConfig -l -e 'print \$Config{archlib}'`;
56 local @ARGV = glob "$archlib/CORE/*.h";
58 while (<>) { $sym{$_}++ for /(\w+)/g; }
59 @provided = map { $sym{$_} or $v{$p->{todo}}{$_}++; $sym{$_} ? $_ : () } @provided;
62 my $out = 'parts/base';
63 my $todo = parse_todo($out);
66 my @new = sort dictionary_order grep { !exists $todo->{$_} } keys %{$v{$v}};
71 -e $file or die "non-existent: $file\n";
72 print "-- $file --\n";
73 $write and (open F, ">>$file" or die "$file: $!\n");
76 $write and printf F "%-30s # added by $0\n", $_;