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

Reply via email to