2 ################################################################################
4 # scanprov -- scan Perl headers for provided macros
6 ################################################################################
10 # $Date: 2005/01/31 08:10:50 +0100 $
12 ################################################################################
14 # Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz.
15 # Version 2.x, Copyright (C) 2001, Paul Marquess.
16 # Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
18 # This program is free software; you can redistribute it and/or
19 # modify it under the same terms as Perl itself.
21 ################################################################################
24 require 'parts/ppptools.pl';
26 die "Usage: $0 [check|write]\n" unless @ARGV && $ARGV[0] =~ /^(check|write)$/;
29 my %embed = map { ( $_->{name} => 1 ) }
30 parse_embed(qw(parts/embed.fnc parts/apidoc.fnc));
32 my @provided = grep { !exists $embed{$_} }
33 map { /^(\w+)/ ? $1 : () }
34 `$^X ppport.h --list-provided`;
36 my $install = '/tmp/perl/install/default';
38 my @perls = sort { $b->{version} <=> $a->{version} }
39 map { { version => `$_ -e 'printf "%.6f", \$]'`, path => $_ } }
40 ('bleadperl', glob "$install/*/bin/perl5.*");
43 $perls[$_]{todo} = $perls[$_-1]{version};
51 print "checking perl $p->{version}...\n";
52 my $archlib = `$p->{path} -MConfig -l -e 'print \$Config{archlib}'`;
54 local @ARGV = glob "$archlib/CORE/*.h";
56 while (<>) { $sym{$_}++ for /(\w+)/g; }
57 @provided = map { $sym{$_} or $v{$p->{todo}}{$_}++; $sym{$_} ? $_ : () } @provided;
60 my $out = 'parts/base';
61 my $todo = parse_todo($out);
64 my @new = sort grep { !exists $todo->{$_} } keys %{$v{$v}};
69 -e $file or die "non-existent: $file\n";
70 print "-- $file --\n";
71 $mode eq 'write' and (open F, ">>$file" or die "$file: $!\n");
74 $mode eq 'write' and printf F "%-30s # added by $0\n", $_;
76 $mode eq 'write' and close F;