ExtUtils::Constant version 0.16 =============================== A module to generate XS code to import C header constants. This module arose during the development track for perl 5.8, as part of the reworking of h2xs, the perl program that creates boilerplate for perl extensions. h2xs contains routines to extract constants from specified C header files and make them available in the module's perl namespace. h2xs does this by building C code that delivers the value of constants on demand at run time. Prior to 5.8, h2xs wrote out a potentially massive switch statement in initial XS file, then left it up to the programmer to add any new constants needed. The switch statement wasn't overly efficient, could be large enough to make compiler optimisers choke, and attempting to add new constants or make other changes was prone to error (eg try finding the value of POSIX::ELOOP on perl 5.004_04 and earlier) h2xs as of 5.8.0 uses a new strategy of embedding the information about which constants it found in the Makefile.PL, and using a new module, ExtUtils::Constant, to build the switch table up at Makefile.PL run time. This means that you can add more constants easily, by just editing the definition, and you have more flexibility in what your "macros" can do, and what types they return. For example, Fcntl's XS file after its initial #includes is now down to these 5 lines: #include "const-c.inc" MODULE = Fcntl PACKAGE = Fcntl INCLUDE: const-xs.inc and the massive switch statement is now stored as instructions in Makefile.PL to rebuild it. ExtUtils::Constant also uses a radically different strategy to build the C code, in an attempt to maximise the chance that the compiler will use branch tables making the initial switch statements more efficient, and choosing a switch strategy to minimise the amount of linear searching of similar constant names. The documentation is arguably a bit scant currently, with the best examples probably being the various Makefile.PL files in the ext/ subdirectory of the 5.8.0 distribution. I do plan to improve it; however I feel it better to get this working version up on CPAN and let people use it, rather than sit on it until the documentation is up to scratch. I believe ExtUtils::Constant is completely Unicode safe, but as a consequence of running various pathological cases as regression tests, the tests will fail on perl5.6.0, due to its numerous Unicode bugs. Please upgrade to 5.6.1, or better still 5.8.0. Bug reports from 5.6.0 users (even users on OS X dependent on Apple to ship 5.6.1) will be acknowledged, tested on 5.6.1, and if not repeatable on 5.6.1 will be noted as known failures due to 5.6.0, with no further action taken. I am sorry if this sounds unhelpful, but I have better things to do with the limited free time I can donate to this module than to go chasing bugs known to already have a fix. By all means send patches to work round 5.6.0 features; if they don't conflict with 5.005, 5.6.1, or 5.8.0 they will go in. COPYRIGHT AND LICENCE You may distribute this work under the terms of either the GNU General Public License or the Artistic License, as specified in perl's README file. Copyright © 2001, 2002, 2005 Nicholas Clark