[Bioperl-l] Spankin' new (alpha) build system for Bioperl-Run

Mark A. Jensen maj at fortinbras.us
Tue Sep 30 03:41:33 UTC 2014


All (esp. George)-

My work on Issue #11 (https://github.com/bioperl/bioperl-run/issues/11) 
has metastasized.

The proximate problem was tests that fail because of once-local 
prerequisites. The ultimate
problems are

- Why should I have to install every single wrapper when I only want X?
- Why should I care about any test that doesn't deal with X?
- Why doesn't X bring along its own prereq metadata (including Bio 
prereqs),
   rather than tag along with the distro and hope for the best?

(And I think these are the ultimate problems across BioPerl in terms of 
decentralized
distribution.)

My solution was

- Add to the distro real, manually prepared metadata on prerequisites 
for all
   the tools
- Add an interactive selector that allows a user to pick their desired 
tools at
   perl Build.PL-time
- Have Module::Build check only (and ALL) the prereqs of the desired 
tools, and
   inform user of missing ones at perl Build.PL-time
- Make use of the persistence of the config information to skip/run .t 
files as
   appropriate
- Update ALL the tests to check whether to skip based on user selection
- Make M::B install only the relevant distro modules and documentation, 
not everything,
   at ./Build install-time

This is ready for brave alpha-testers at 
https://github.com/bioperl/bioperl-run/tree/topic/issue11.
Just do 'perl Build.PL'.

Pod below has some more details-- comments very welcome

MAJ

NAME
     Bio::Tools::Run::Build - Instrument the build for features

SYNOPSIS

...

DESCRIPTION
     Bio::Tools::Run::Build is a subclass of Module::Build that allows 
an
     author to offer users the ability to select and install 
pre-configured
     subsets of modules that are packaged in a single large M::B-based
     distribution.

     Grouping and selection of distro modules is driven by the optional
     features concept as defined in CPAN::Meta::Spec and used by
     Module::Build.

     The subclass provides the following:

     *   Author specification of features and their prereqs

         The build author develops metadata files in json that follow
         "optional_features" in CPAN::Meta::Spec to group distribution
         modules and dependencies as selectable features.

     *   Interactive user selection of features

         The user can be presented with an interactive selector during
         Build.PL runs.

     *   Prereq checking of user selected features only

         M::B only checks for the presence of selected feature 
dependencies.

     *   Build-persistent recording of user selections

         The build object records the selection of features in the
         $build->feature field. This can be used in test files to 
determine
         whether tests should be skipped (and not failed). See
         Bio::Tools::Run::Build::Test.

     *   Installation only of selected feature modules

         Bio::Tools::Run::Build adds a build action, "deselect", which 
runs
         after the "code" and "docs" actions. "deselect" removes 
unselected
         modules from the blib/lib directory and unneeded documentation 
from
         the blib/libdoc directory. This keeps the "install" action from
         installing unwanted files.

MOTIVATION
     The BioPerl-Run distribution contains a large variety of wrappers 
and
     parsers that handle the execution and output of many different
     bioinformatics tools. It has been provided as a large distro that
     installs and attempts to test all of its modules. Many users need 
only a
     small fraction of the functionality BioPerl-Run provides, relevant 
only
     to the tools they have installed. On the other hand, managing many
     different packages is unwieldy and uninviting for volunteer 
maintainers.

     The system described here is a compromise that enables a user to 
select,
     test and install only those modules that meet the need, yet reduces 
the
     maintenance effort to the management of a set of metadata files in 
a
     single distribution.

...


More information about the Bioperl-l mailing list