|
Packit |
7d6a7d |
#!/usr/bin/perl -w
|
|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
# scanprov -- scan Perl headers for provided macros
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
# Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
|
|
Packit |
7d6a7d |
# Version 2.x, Copyright (C) 2001, Paul Marquess.
|
|
Packit |
7d6a7d |
# Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
# This program is free software; you can redistribute it and/or
|
|
Packit |
7d6a7d |
# modify it under the same terms as Perl itself.
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
use strict;
|
|
Packit |
7d6a7d |
use Getopt::Long;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
require './parts/ppptools.pl';
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
our %opt = (
|
|
Packit |
7d6a7d |
mode => 'check',
|
|
Packit |
7d6a7d |
install => '/tmp/perl/install/default',
|
|
Packit |
7d6a7d |
blead => 'bleadperl',
|
|
Packit |
7d6a7d |
);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
GetOptions(\%opt, qw( install=s mode=s blead=s )) or die;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $write = $opt{mode} eq 'write';
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my %embed = map { ( $_->{name} => 1 ) }
|
|
Packit |
7d6a7d |
parse_embed(qw(parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc ));
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my @provided = grep { !exists $embed{$_} }
|
|
Packit |
7d6a7d |
map { /^(\w+)/ ? $1 : () }
|
|
Packit |
7d6a7d |
`$^X ppport.h --list-provided`;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my @perls = sort { $b->{version} <=> $a->{version} }
|
|
Packit |
7d6a7d |
map { { version => `$_ -e 'printf "%.6f", \$]'`, path => $_ } }
|
|
Packit |
7d6a7d |
($opt{blead}, glob "$opt{install}/*/bin/perl5.*");
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for (1 .. $#perls) {
|
|
Packit |
7d6a7d |
$perls[$_]{todo} = $perls[$_-1]{version};
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
shift @perls;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my %v;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for my $p (@perls) {
|
|
Packit |
7d6a7d |
print "checking perl $p->{version}...\n";
|
|
Packit |
7d6a7d |
my $archlib = `$p->{path} -MConfig -l -e 'print \$Config{archlib}'`;
|
|
Packit |
7d6a7d |
chomp $archlib;
|
|
Packit |
7d6a7d |
local @ARGV = glob "$archlib/CORE/*.h";
|
|
Packit |
7d6a7d |
my %sym;
|
|
Packit |
7d6a7d |
while (<>) { $sym{$_}++ for /(\w+)/g; }
|
|
Packit |
7d6a7d |
@provided = map { $sym{$_} or $v{$p->{todo}}{$_}++; $sym{$_} ? $_ : () } @provided;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $out = 'parts/base';
|
|
Packit |
7d6a7d |
my $todo = parse_todo($out);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for my $v (keys %v) {
|
|
Packit |
7d6a7d |
my @new = sort grep { !exists $todo->{$_} } keys %{$v{$v}};
|
|
Packit |
7d6a7d |
@new or next;
|
|
Packit |
7d6a7d |
my $file = $v;
|
|
Packit |
7d6a7d |
$file =~ s/\.//g;
|
|
Packit |
7d6a7d |
$file = "$out/$file";
|
|
Packit |
7d6a7d |
-e $file or die "non-existent: $file\n";
|
|
Packit |
7d6a7d |
print "-- $file --\n";
|
|
Packit |
7d6a7d |
$write and (open F, ">>$file" or die "$file: $!\n");
|
|
Packit |
7d6a7d |
for (@new) {
|
|
Packit |
7d6a7d |
print "adding $_\n";
|
|
Packit |
7d6a7d |
$write and printf F "%-30s # added by $0\n", $_;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
$write and close F;
|
|
Packit |
7d6a7d |
}
|