develooper Front page | perl.perl5.porters | Postings from April 2006

[ANNOUNCE] Module::Build 0.28 -> CPAN

Thread Next
Ken Williams
April 28, 2006 10:09
[ANNOUNCE] Module::Build 0.28 -> CPAN
Message ID:
Hi all,

The uploaded file


has entered CPAN as

   file: $CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.28.tar.gz
   size: 180076 bytes
    md5: 8b3d9cf3eadebdfbe5847d80ed3a2d0b

Thanks to those of you who have been patiently (or even non- 
patiently) waiting for this release.  We promise to never take this  
long between major releases again. =)

The list of changes between 0.26xx and 0.28 is very very long.  It's  
listed below, chunked by the beta release in which the features  

Going forward from 0.28, I'm sure there will be some 0.28xx releases  
as we get people's reported bugs smooshed.  I don't plan on creating  
a list of target features for the next big release, though - I think  
that's what significantly slowed down the 0.28 release cycle.  The  
future releases will happen as they happen, with individual features  
being part of whatever release they happen to get done for.



0.28  Thu Apr 27 22:25:00 CDT 2006

- When y_n() or prompt() are called without a default value and the
    build seems to be unattended (e.g. in automatic CPAN testing), we
    now die() with an error message rather than silently returning
    undef for prompt(), or looping indefinitely for y_n().

- When searching for '.modulebuildrc', return the first HOME-like
    directory that actually contains the file instead of the first
    existing directory. Document the search locations and the order
    searched. [Spotted by David Golden]

- Split the API documentation out of Module::Build::Authoring into
    its own document: Module::Build::API.

- We should not emit a warning if a Module::Build subclass is
    required in a Makefile.PL that is not bundled in the current
    distribution; it may be installed on the user's system. [Spotted by
    Tyler MacDonald]

- copy_if_modified() now preserves the executable bit of the source
    file. [Spotted by Julian Mehnle]

- Fixed compatibility of our screen-scraping the Test::Harness output
    so we can recognize the most recent Test::Harness version. [Steve

- Backing out a requirement added in 0.27_06 on the method y_n()
    to always include a default. This behavior would cause existing
    build scripts to start failing. We now fail with a missing default
    only when $ENV{PERL_MM_USE_DEFAULT} is set because there is no
    reasonable default.

- Make install_types() method smarter with respect to custom install

- Add documentation for the install_base_relpaths() and
    prefix_relpaths() methods. Improved their usage for a public API,
    and added tests.

0.27_10  Tue Mar 28 22:50:50 CST 2006

- Added the create_packlist property, default true, which controls
    whether packlist files will be written during installation.  This
    was already part of Module::Build 0.2609, but for some reason we've
    forgotten it in the 0.27_xx series.  [Spotted by Steve Kirkup]

- Document the versions of Module::Build where each feature, action,
    constructor argument, and method was first publicly documented.

- More fixes for find_perl_interpreter() to work with BSD flavored
    UNIX: Ensure we always return absolute paths; throw an exception
    upon failure to find correct interperter; document everything.

- We now include our own work-alike that we can use when the
    real YAML isn't installed.  We might soon even start using it when
    YAML is installed, because the YAML API and dependency chain have
    been changing in unfavorable ways lately. [Stephen Adkins]

- Fixed some shell-argument-quoting issues on VMS.  In the process,
    we have added some support for avoiding tripping over
    shell-argument-quoting issues on other platforms too. [Initial
    patch by Craig A. Berry]

0.27_09  Sat Mar 11 22:48:54 EST 2006

- Fixed find_perl_interpreter() so we can find the perl executable
    when running from uninstalled perl even when $^X contains a
    relative path. [Yitzchak Scott-Thoennes]

- Fixed warning message where we were printing the wrong field names.
    [Chris Dolan]

- Added a 'testpodcoverage' action that runs a POD coverage check for
    all modules in the distribution. [Yanick Champoux]

- Added a Cookbook example of subclassing to modify an action. [Dylan
    Martin and David Golden]

- When building HTML documentation, we were opening the POD file and
    not checking whether the open succeeded, which of course caused
    problems down the line if it failed.  Now we do "or die(...)" like
    everywhere else. [Spotted by Joerg Braun]

0.27_08  Fri Mar  3 21:22:41 CST 2006

- Due to shell quoting issues and differences in syntax between
    various flavors of Windows, the code for the 'pl2bat' utility
    distributed with Perl has been incorporated into M::B::P::Windows.
    [Thanks to Dr Bean and Ron Savage for help testing and isolating
    the problem.]

- Modify add_build_element() so that it only adds elements if they
    don't already exist. [David Wheeler]

- Fixed a bug in the 'pass-through' Makefile.PL in which we would die
    if CPAN::Shell->install returned false, but apparently this return
    value is unreliable.  Now we only die if the module is actually
    unavailable after installation.

- Fixed testing problems on VMS related to non-case-preserving
    filesystems.  We now bundle Tie::CPHash in the distribution (just
    for testing purposes, it doesn't get installed) to help with
    this. [Craig Berry and Yitzchak Scott-Thoennes]

- We incorrectly documented the 'dynamic_config' flag in the META.yml
    file as having a default value of false, but according to the
    META.yml spec (which, for heaven's sake, we wrote) its default
    value is true.  Fixed. [Spotted by Adam Kennedy]

- The have_c_compiler() method was dying if the ExtUtils::CBuilder
    module wasn't around, which is obviously an unhelpful thing to do.
    Now it just returns false. [Spotted by John Peacock]

- Fix detection of $VERSION expressions that are not
    assignments. [Spotted by Chris Dolan]

- Obfuscate one of our constructs that uses a $VERSION variable,
    because it was getting picked up by ExtUtils::MakeMaker's
    version-finder. [Spotted by Randal Schwartz]

- The config_data script for querying and/or setting a module's
    config data was forgetting to call write() after setting config
    values (though setting feature values was working fine).
    Fixed. [Brian Duggan]

- On Windows, remove the pl2bat generated 'Build.bat' script without
    the annoying "The batch file cannot be found." error.  [Solution
    provided by RazTK and foxidrive on newsgroup alt.msdos.batch]

- Our version comparisons should now work correctly with modules that
    use to delcare their versions (e.g. "our $VERSION =
    version->new('1.0.0')"). [John Peacock and Ron Savage]

- We now create a Build.bat script on versions of Windows where it
    makes sense. [Yves]

- Fixed the verbiage around choosing the correct make-alike on
    different platforms to suggest using 'perl -V:make'. [Suggested by
    anonymous user]

0.27_07  Wed Feb  1 20:07:45 CST 2006

- The notes() method now returns the new value when called with two
    arguments, just like when it's called with one argument. [Tyler

- The notes() method now distinguishes among the values undef, 0, and
    the empty string, where previously it didn't. [Tyler MacDonald]

- We now unshift(@INC) rather than push(@INC) for the directory where
    a build subclass lives, so that we're sure to pick up the right
    version and not some already-installed version. [perlmonkey]

- The SIGNATURE file for version 0.27_06 (and I'm sure for lots of
    versions before that too!) was messed up, since we were modifying
    some files after signing.  This has been band-aided for the time
    being by signing twice. [Reported by Chris Dolan]

0.27_06  Mon Jan 23 21:44:54 CST 2006

- Fixed an undefined-variable warning when building the META.yml file
    and the author hasn't used the 'module_name' mechanism. [Chris  

- We should now work with recent (> 0.49) versions of when
    creating the META.yml file. [Yitzchak Scott-Thoennes]

- The y_n() method now requires the default parameter, and the
    prompt() and y_n() methods have been improved with respect to
    how they behave/detect when there is no user to ask.  We're now
    more consistent with MakeMaker, including respecting the
    PERL_MM_USE_DEFAULT environment variable. [Tyler MacDonald and
    Yitzchak Scott-Thoennes]

- When building a README file using Pod::Text, work around a bug in
    Pod::Text 3.01, which expects Pod::Simple::parse_file to take input
    and output filehandles when it actually only takes an input
    filehandle. [Yitzchak Scott-Thoennes]

0.27_05  Thu Jan 12 17:39:21 CST 2006

- In t/, we were attempting to let the user's installed
    Test::More take precedence over ours, but getting thwarted by all
    the test scripts' loading Test::More beforehand.  Fixed. [Spotted
    by Yitzchak Scott-Thoennes]

- In various test scripts, we were outputting some strings that
    weren't strictly conformant with Test::Harness's expected input,
    though it didn't actually cause problems.  Now we're more
    conformant, though not yet strict. [Spotted by Yitzchak

0.27_04  Fri Dec 23 10:43:34 CST 2005

- Removed experimental feature that extended the prerequisite system
    to apply ('requires', 'recommends', and 'conflicts') prereqs to all
    actions. Most of the internal extensiblity has been retained so
    that prereq types can easily be added, more selectively.

- Added a 'prereq_report' action that shows the user a well-formatted
    list of all prerequisites, the versions required, and the versions
    actually installed. [David Wheeler]

- Clarified the directory name that's created during the 'distdir'
    action. [Suggested by Tyler MacDonald]

- Fixed a bug when creating the META.yml file without the help of - some common strings weren't quoted & escaped properly.
    Now only some uncommon ones are. [Spotted by Joshua ben Jore]

- Fixed a bug in which an "UNINST=1" argument specified to a
    passthrough Makefile's "make install" wasn't actually seen by

- Rather than dying when the Build script is run from the wrong
    directory, it now simply chdir()s into the right directory and
    keeps going. [Suggested by Dominique Quatravaux]

- Added an "Examples on CPAN" section to the cookbook, with an
    initial entry pointing to John Peacock's SVN-Notify-Mirror

- Add an invoked_action() method to return the name of the original
    action invoked by the user.

- Add 'meta-spec' field to the generated META.yml file, including the
    version of the specification followed by the current Module::Build
    and the url where the specification can be found.

- Introduced two actions, 'html' & 'manpages', that generate
    documentation for POD when the respective feature is enabled.  The
    actions will generate the documents even if there is no set place
    to install to.  However, if the actions are invoked as a dependency
    of another action (e.g. build), the documentation will only be
    built when there is a default or user-specified place to install to.

- Added support for environment variable, 'MODULEBUILDRC', which can
    be used to specify the full path to an option file to use instead
    of the default location of ~/.modulebuildrc. A special undocumented
    setting of 'NONE' tells Module::Build not to load any user settings,
    so tests can be run without tainting from user options.

- Documented and improved preliminary support for more Getopt::Long
    style options are supported, including boolean options (--verbose,
    --no-verbose), and use of hyphens in option names in addition to

- The option to disable/enable reading of the ~/.modulebuildrc file
    is changed from 'skip_rcfile' to 'use_rcfile'

- Allow the 'distmeta' action to continue when 'MANIFEST' is missing,
    omitting the generation of the 'provieds' field. [Steven Schubiger]

- Fixed some failing regex from generated MANIFEST.SKIP file.

- Fixed an edge case in $VERSION parsing where we thought a package()
    declaration was happening but it wasn't. [David Golden]

- Added docs for the install_destination() and install_types() methods.

0.27_03 (Beta for 0.28)  Mon Oct 10 11:19:23 EDT 2005

- We now use ExtUtils::CBuilder to do all compiling of C code (for
    example, when compiling XS modules).  (This change actually
    occurred in 0.27_01, but it was mistakenly omitted from the Changes

- Fixed an issue on Win32 (and other case-tolerant
    non-case-preserving systems, possibly like VMS?) in which the
    current working directory would sometimes be reported with
    different case, fooling us into thinking that we were in the wrong
    directory. [David Golden]

- The extra_compiler_flags setting was not actually being passed
    along to ExtUtils::CBuilder so it could pass it along to the
    compiler.  Now it is.

- The synonyms 'scripts' and 'prereq' for 'script_files' and
    'requires' were broken in a previous version (0.27_01, probably),
    but now they're fixed. [David Golden]
- Previously, we assumed that any custom subclass of Module::Build
    was located in _build/lib/.  This is only true if the author used
    the subclass() method, though.  We now use %INC to find where the
    custom subclass really is, so that we can "use lib" it.  We also
    issue a warning if it seems to be outside the build directory.
    [Spotted by Peter Tandler]

- Added a URL for each license type that we know about, which will
    appear as resources=>license: in the generated META.yml file.

- If the user passes a no_index parameter to our constructor, we now
    pass that through when building the META.yml file. [Richard
    Soderberg, RT #9603]

- A few more status messages can now be suppressed by using 'quiet'
    mode.  [Dave Rolsky]

- Added some more entries to the default MANIFEST.SKIP file. [Chris

- Our POD parser will now accept "AUTHORS" as well as "AUTHOR" when
    looking for the author list in a module. [David Wheeler]

- When looking for the POD to auto-generate a README file, or for the
    AUTHOR or ABSTRACT for the distribution, we now also look for a
    *.pod with the same name as the *.pm file specified by
    'version_from'. [David Golden]

- The recommended dependency on ExtUtils::ParseXS has been moved into
    the "C_support" auto_feature.

- When building XS files, we now pass the -DVERSION and -DXS_VERSION
    flags to the compiler. [Spotted by Jerry Hedden]

- If a distribution has XS files and Module::Build has not been
    configured with the "C_support" feature, we now issue a
    warning. [Suggested by Jerry Hedden]

- Added a dir_contains() method.

- Some versions of MakeMaker, CPANPLUS, and/or PAUSE thought that a
    certain line of our code was declaring a $VERSION when we didn't
    intend to.  The line has been obscurified so they won't think that
    anymore. [Jos Boumans, RT #14226]

- Added the Apache, MIT, and Mozilla licenses to the list of licenses
    that this module knows about. [Bob Ippolito]

- Fixed a pretty significant typo in the documentation for
    auto_features. [Spotted by Jonas B. Nielsen]

- In order to aid people who want to do customization of the META.yml
    file, we've added a "metafile" property that can then be easily
    overridden in subclasses, changed do_create_meta_yml() to
    do_create_metafile(), and split out the code that actually
    generates the YAML into a new method, write_metafile(). [David

- Fixed a couple of non-helpful behaviors with extra_compiler_flags
    and extra_linker_flags.  These will automatically be run through
    split_like_shell() when given to new() as strings.

- When the user doesn't have ExtUtils::ParseXS installed and we use
    the old 'xsubpp', the displayed command line for creating the .c
    file from the .xs file was missing its newline.  Now it's got it.

0.27_02 (Beta for 0.28)  Fri Jul 15 07:34:58 CDT 2005

- Provided initial support for the --prefix installation parameter,
    which acts like MakeMaker's PREFIX.  It is still highly recommended
    NOT to use it when you could reasonably use --install_base or
    --install_path or --install_dest, but that's just because the way
    --prefix is designed is weird and unpredictable.  Ultimately the
    choice rests with the installing user. [Patches by Michael Schwern
    and Rob Kinyon]

- Fixed a bug in subclass() which prevented people from using it to
    subclass subclasses of Module::Build. [Chris Dolan]

- Added a 'pure_install' action, which for the time being is
    identical to the 'install' action. [Jos Boumans]

- Fixed a POD error in an L<http://...> tag. [Offer Kaye]

- Note several options for automatically creating a new module dev
    tree. [Suggested by Eric Wilhelm]

- Removed some hard-coded references to File::Spec::Unix in the
    creation of HTML docs, which should help that code work in more
    places, and help people not to panic when they look at it. [Spotted
    by Yves]

- We now use Pod::Readme by default (instead of Pod::Text) to
    generate the README file when the 'create_readme' option is used.
    If Pod::Readme is not installed, we will still fall back to using
    Pod::Text.  [Robert Rothenberg]

- The values of the "prefix", "install_base", "install_path", and
    "install_dest" parameters can now begin with "~" or "~user", and
    we'll de-tilde-ify them by using glob().

- The (optional) auto-creation of the README and Makefile.PL files
    have been moved from the 'distdir' action to the 'distmeta'
    action. [David Golden]

- When looking for a .modulebuildrc file, we now use a fancier method
    of trying to find the home directory, because $ENV{HOME} isn't a
    very cross-platform variable. [Robert Rothenberg]

- We now memoize the output of the internal _default_INC() method,
    since it uses backticks and might be kind of slow.

- When processing XS files, we now look for a typemap in lib/ as well
    as using the system's default typemap. [John Peacock]

- The DESTDIR, PREFIX, and INSTALL_BASE arguments to "make install"
    are now supported for pass-through Makefiles (they've been
    supported for quite a while as arguments to "perl
    Makefile.PL"). [Requested by Guillaume Rousse]

- Test::Harness has changed its output format in recent versions,
    which threw off one of our tests.  We now allow for this different
    format. [Reported by Scott Godin]

- Fixed an issue that prevented Module::Build from upgrading itself
    using its own API (which is how CPANPLUS uses it).  There are still
    some issues with this solution, however.  See ticket #13169 in [Reported by Jos Boumans]

- Fixed a fatal error that occurred when a distribution's author
    could not be determined from its POD nor from the call to
    Module::Build->new() in its Build.PL.  See ticket #12318 in [Reported by Jos Boumans]

- Apparently on Windows and cygwin it's not possible to use the "-pi"
    switch to perl without a backup extension, so now we use ".bak" and
    remove the backup file when we're done.  Thus the "dist" action for
    Module::Build itself can now be run on those platforms. [Yitzchak

- Improved the handling of auto_features in the config_data access
    script. [Yitzchak Scott-Thoennes]

0.27_01 (Beta for 0.28)  Fri Apr 15 21:12:57 CDT 2005

Backward-incompatible (but better) changes:

* When using the 'install_base' option to choose a directory for
    installing everything, perl modules now go into lib/perl5/ instead
    of just lib/.  It seems this is more consistent with people's
    expectations, and the way I had it before was a bit peculiar to the
    way I like things in my own home directory. [Michael Schwern]

* When the user is using the 'install_base' option, scripts will now
    be installed by default in $install_base/bin/ rather than
    $install_base/script/ . [Jan Hudec and Michael Schwern]

Major changes:

- The auto_features mechanism will now re-evaluate dependencies every
    time feature() is called for an auto-feature, rather than freezing
    the success/failure value during 'perl Build.PL' and using that
    value for all eternity (or module update, whichever comes first).
    This applies to both $build->feature() and
    FooModule::ConfigData->feature() calls. [Requested by many]

- Added the meta_add and meta_merge mechanisms, which let the module
    author add/merge arbitrary entries into the META.yml file.

- Now reads per-action default options from '$ENV{HOME}/.modulebuildrc'
    if it exists. Command line options override anything set in the  
rc file.

- We now use ExtUtils::CBuilder to do all compiling of C code (for
    example, when compiling XS modules).

- The creation of Unix man pages is no longer a strict necessity - it
    has now been turned into an 'auto-feature' contingent on the
    presence of Pod::Man and a location specified for man pages to go.

- A user-specified 'install_path' setting will now take precedence
    over an 'install_base' setting.  This allows the user to use
    'install_base' to set the base for all elements in one go, and then
    use 'install_path' to override specific paths or add paths for
    additional kinds of targets.

- Split the main documentation from 'Module/' into two
    sections. The user level documentation and overview remains in
    'Module/', while a new document,
    'Module/Build/Authoring.pod', has been created for module authors.

Minor changes:

- new_from_context() was losing its arguments in some cases (and not
    because of inadequate training in forensic debate) - we now pass its
    arguments directly to the Build.PL script rather than merging them
    in afterwards.

- Let resume() return an object blessed into the appropriate class
    if the user has provided a subclass, as specified by the
    'build_class' property. This allows current() and new_from_context()
    to behave more like factory methods returning objects of the correct
    class based on context. [Ray Zimmerman]

- Refactored methods relating to parsing perl module files for
    package, version, and pod data into a new class:
    Module::Build::ModuleInfo.  It should not be considered part of
    Module::Build's API, because we may split it out entirely as a
    separate CPAN module that we depend on.

- Added new method Module::Build::prepare_metadata() for authors to
    override in order to add custom fields to META.yml.

- We now use Test::More for our regression tests.  If the user
    doesn't have it installed, we include a copy in t/lib/ that we can
    use during testing.

- When copying files in the 'distdir' action, set permissions to match
    the original files. [Julian Mehnle]

- When adding files like META.yml to the MANIFEST, we now tell the
    user we're doing so by printing one of the "Added to MANIFEST: ..."
    lines.  [Ron Savage]

- Added a runtime_params() method, which lets a module author see
    which parameters were overridden by the user on the command line
    (or in whatever paradigm the user originally invoked Module::Build
    from). [David Wheeler]

- Added the current_action() method, which, surprisingly, returns the
    name of the currently running action. [David Wheeler]

- Added docs for run_perl_script().

- Added some stuff to the docs about why PREFIX is unsupported, and
    what to use instead. [Steve Purkis]

- The simple get/set accessor methods for all the 'parameters' like
    verbose(), license(), etc. now have auto-generated documentation in

- Created a Cookbook entry for 'Adding new elements to the install

- We now add META.yml to the MANIFEST when META.yml is created, not
    when MANIFEST is created. [Spotted by Ron Savage]

- Added some additional patterns to the suggested MANIFEST.SKIP
    contents, and changed the docs so that we encourage the user to use
    the MANIFEST.SKIP.  [Ron Savage]

- Eliminated a redundant recipe from the Cookbook, now that there are
    some more extensive recipes on how to add stuff to the
    build/install sequences.

- Eliminated an undefined-variable warning when testing under perl 5.005

- When building HTML documentation, 'html_backlink' and 'html_css'
    properties are now first-class properties, so they can be set from
    the command line. [Suggested by Sagar R. Shah]

- Have script_files default to everything in bin.  I believe this is
    the least surprising behavior. [Suggested by Michael Schwern]

- If script_files is given a directory, consider each file in that
    directory tree as a script to be installed.  This avoids having to
    remember to add to the script_files list every time you add a
    program. [Suggested by Michael Schwern]

- We now only load Pod::Man when we actually need to build man pages.

- We now make Test::Harness use our carefully-selected path to a perl
    executable regardless of Test::Harness's version.  Previously we
    let it figure stuff out for itself if it was a reasonably modern
    version, but it's safer to make sure we're using the same perl

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About