On Tue, Sep 08, 2009 at 10:33:02AM +0100, Nicholas Clark wrote:
> On Mon, Sep 07, 2009 at 05:15:51PM -0500, Craig A. Berry wrote:
> > There's also dynamic_ext, right? Shouldn't dynamic_ext plus
> > nonxs_extensions equal known_extensions?
>
> Well, probably it should, but what actually happens is:
>
> $ cat extensions.pl
> #!perl -w
> use strict;
> use Config;
>
> printf "%-24s", 'extensions';
>
> my @types = qw(static_ext dynamic_ext nonxs_ext known_extensions);
> my %lookup;
> my %short;
> foreach (@types) {
> my $short = $_;
> $short =~ s/_.*//;
> $short{$_} = $short;
>
> printf "%-8s", $short;
> $lookup{$_} = {map {$_, 1} split/ /, $Config{$_}};
> }
> print "\n\n";
>
> foreach my $ext (sort split / /, $Config{extensions}) {
> printf "%-24s", $ext;
> foreach (@types) {
> printf "%-8s", $lookup{$_}{$ext} ? $short{$_} : '';
> }
> print "\n";
> }
>
> __END__
> "extensions" is everything.
>
> "known_extensions" = "static_ext" + "dynamic_ext"
> "extensions" = "nonxs_ext" + "known_extensions"
>
>
> which isn't logical, but I suspect is due to something historical.
Oops. I'm not correct.
I *think I am here:
0: DynaLoader doesn't count as an extension
1: known_extensions are all known XS extensions
2: static_ext, dynamic_ext and nonxs_ext are actually what they say they are,
assuming you were thinking about "extensions we have configured here"
3: extensions is the sum of the 3 immediately above
Hence if you have not built some XS extensions on your platform (which, I
think, is always true, as you can't build both VMS and Win32 extensions
anywhere), there will always be something in known_extensions that is not
in extensions.
Likewise, if you *have* build something nonxs (which you have do, as you can't
build DynaLoader without (at least) ExtUtils::ParseXS), there will always be
something in extensions that isn't in known_extensions.
Good, eh?
As an encore, the Unix Configure script teases you with -Dnoextensions
to disable extensions, but only actually honours it for XS extensions.
Right know it assumes that all nonxs extensions will work everywhere.
Nicholas Clark