NAME
Alien::Base::ModuleBuild::API - API Reference for Alien:: Authors
DESCRIPTION
A list of extra properties and methods provided by Alien::Base::ModuleBuild beyond those contained in Module::Build::API. Note that all property and method names are prefixed with alien_
to prevent future collisions Module::Build builtins.
CONSTRUCTOR
Alien::Base::ModuleBuild adds several parameters to the new constructor in Module::Build. Unless otherwise specified all of the parameters listed in Module::Build::API are available and behave identically to the description contained therein.
- alien_name
-
[version 0.001]
The name of the primary library which will be provided. This should be in the form to be passed to
pkg-config
. This name is available in the command interpolation as%n
. - alien_ffi_name
-
[version 0.007]
The name of the shared library for use with FFI. Provided for situations where the shared library name cannot be determined from the
pkg-config
name specified withalien_name
. For examplelibxml2
has apkg-config
oflibxml-2.0
, but a shared library name ofxml2
. By default alien_name is used with anylib
prefix removed. For examplelibarchive
to be translated intoarchive
which is what you want for that package. - alien_temp_dir
-
[version 0.001]
The name of the temporary folder which will house the library when it is downloaded and built. The default name is
_alien
. -
[version 0.001]
The name of the folder which will both serve a stub share directory via Module::Build's
share_dir
/dist_dir
parameter. This directory is added in a smart manner which attempts not to interfere with other author-definedshare_dir
s. The default name is_share
. This folder will hold a README file which is then installed to the target installed share location. It is THAT location that the library will be installed to. - alien_selection_method
-
[not yet implemented]
This is intended to choose the mechanism for selecting one file from many. The default name is
newest
. - alien_build_commands
-
[version 0.001]
An arrayref of commands used to build the library in the directory specified in
alien_temp_dir
. Each command is first passed through the command interpolation engine, so those variables may be used. The default is tailored to the Gnu toolchain, i.e. AutoConf and Make; it is[ '%c --prefix=%s', 'make' ]
.[version 0.009]
Each command may be either a string or a array reference. If the array reference form is used then the multiple argument form of
system
is used. Prior to version 0.009, only the string form was supported. - alien_install_commands
-
[version 0.001]
An arrayref of commands used to install it to the share directory specified by interpolation var
%s
. Each command is first passed through the command interpolation engine, so those variables may be used. The default is tailored to the Gnu toolchain, i.e. AutoConf and Make; it is[ 'make install' ]
.[version 0.009]
Each command may be either a string or a array reference. If the array reference form is used then the multiple argument form of
system
is used. Prior to version 0.009, only the string form was supported. - alien_version_check
-
[version 0.001]
A command to run to check the version of the library installed on the system. The default is
pkg-config --modversion %n
. - alien_provides_cflags
- alien_provides_libs
-
[version 0.001]
These parameters, if specified, augment the information found by pkg-config. If no package config data is found, these are used to generate the necessary information. In that case, if these are not specified, they are attempted to be created from found shared-object files and header files. They both are empty by default.
- alien_repository
-
[version 0.001]
A hashref or arrayref of hashrefs defining the repositories used to find and fetch library tarballs (or zipballs etc.). These attributes are used to create
Alien::Base::ModuleBuild::Repository
objects (or more likely, subclasses thereof). Which class is created is governed by theprotocol
attribute and thealien_repository_class
property below. Available attributes are:- protocol
-
One of
ftp
orhttp
orlocal
. The first two are obvious,local
allows packaging a tarball with the Alien:: module. - protocol_class
-
Defines the protocol handler class. Defaults to 'Net::FTP' or 'HTTP::Tiny' as appropriate.
- host
-
This is either the root server address for the FTP and HTTP classes (i.e.
my.server.com
) - location
-
This key is protocol specific. For FTP this contains the name of the folder to search. For HTTP this is the page to be searched for links; this is specified as a path relative to the
host
. For a local file, this specifies the folder containing the tarball relative to thebase_dir
. - pattern
-
This is a
qr
regex matching acceptable files found in thelocation
. If the pattern contains a capture group, the captured string is interpreted as the version number. N.B. if no versions are found, the files are sorted by filename using version semantics, this mechanism is not likely to be as accurate as specifying a capture group. - exact_filename
-
This key may be specified in place of
pattern
when the filename of the tarball is known, in which case such a file is downloaded from the givenhost
andlocation
. Note that, in general, specifying apattern
gives more flexibility, but there may be cases when you find more convenient to useexact_filename
. - exact_version
-
This key may be specified with the
exact_filename
key when the version of the tarball is known. - platform
-
This attribute is a string telling the repository validator which platform the repository serves. This may be the string
src
(the default) for platform-independent source files, or a string which matches the Module::Build methodos_type
(e.g. "Windows", "Unix", "MacOS", "VMS"). - c_compiler_required
-
If true (the default), then a C compiler is required to build from source.
- alien_isolate_dynamic
-
[version 0.005]
If set to true, then dynamic libraries will be moved from the
lib
directory to a separatedynamic
directory. This makes them available for FFI modules (see FFI::Platypus, or FFI::Raw), while preferring static libraries when creating XS extensions. - alien_autoconf_with_pic
-
[version 0.005]
Add
--with-pic
option to autoconf styleconfigure
script when called. This is the default, and normally a good practice. Normally autoconf will ignore this and any other options that it does not recognize, but some non-autoconfconfigure
scripts may complain. - alien_repository_default
-
[version 0.001]
This property is a shortcut for specifying multiple repositories with similar attributes. If a repository attribute is not defined in its
alien_repository
hashref, but that attribute is defined here, then this value will be used. This hashref is empty by default. - alien_repository_class
-
[version 0.001]
As the repositories in
alien_repository
are converted to objects, this hash controls the type of object that is created. The keys are the relevant protocol. This allows for easy subclassing any or all protocol classes. The defaults are as follows.http => 'Alien::Base::ModuleBuild::Repository::HTTP', ftp => 'Alien::Base::ModuleBuild::Repository::FTP', local => 'Alien::Base::ModuleBuild::Repository::Local', default => 'Alien::Base::ModuleBuild::Repository',
Unlike most Module::Build parameters, authors may specify only those keys which are to be overridden. If any of the above keys are not specified, the above defaults will be used.
- alien_inline_auto_include
-
[version 0.006]
Array reference containing the list of header files to be used automatically by
Inline::C
andInline::CPP
. - alien_msys
-
[version 0.006]
On windows wrap build and install commands in an
MSYS
environment using Alien::MSYS. This option will automatically add Alien::MSYS as a build requirement when building on Windows. - alien_bin_requires
-
[version 0.006]
Hash reference of modules (keys) and versions (values) that specifies
Alien
modules that provide binary tools that are required to build. Any Alien::Base module that includes binaries should work. Also supported are Alien::MSYS, Alien::CMake, Alien::TinyCC and Alien::Autotools.[version 0.007]
These only become required for building if Alien::Base::ModuleBuild determines that a source code build is required.
- alien_stage_install
-
[version 0.016]
Alien packages are installed directly into the blib directory by the `./Build' command rather than to the final location during the `./Build install` step.
[version 0.017]
As of 0.017 this is the default.
PACKAGE AND ENVIRONMENT VARIABLES
A few global variables are used to set gross behavior. For each pair of variables, if both are set, the environment variable takes precedence.
- $Alien::Base::ModuleBuild::Verbose
- $ENV{ALIEN_VERBOSE}
-
Setting the either to a true value will output a little more info from within the module itself. At this point Alien::Base is going to be fairly verbose without this enabled.
- $Alien::Base::ModuleBuild::Force
- $ENV{ALIEN_FORCE}
-
Setting either to a true value will cause the builder to ignore a system-wide installation and build a local version of the library.
- $ENV{ALIEN_BLIB}
-
Setting this to true indicates that you don't intend to actually install your Alien::Base subclass, but rather use it from the built blib directory. This behavior is mostly to support automated testing from CPANtesters and should be automagically determined. If by chance you happen to trip the behavior accidentally, setting this environment variable to false (0) before building should prevent problems.
CONFIG DATA
The Alien::Base system needs to store some data to be used in other phases of the build and eventual use. This is done via the mechanism provided by Module::Build::ConfigData. During the build-phase this information is mutable and is available through the Module::Build::config_data
method. As the build-phase ends the data is serialized and stored as Alien::MyModule::ConfigData
(assuming you are authoring Alien::MyModule
). Then during the use-phase, the Alien::MyModule::ConfigData::config
method (via the Alien::MyModule::config
wrapper) is used to query the information. This data is not strictly immutable, but it changing it involves file permissions and is best left alone.
Config keys of interest are:
- working_directory
-
Holder for the full path to the extracted source of the library. This is used to munge the pkg-config data later on.
- pkgconfig
-
A hashref of Alien::Base::PkgConfig objects created from .pc files found in
working_directory
. One extra object (whose key is_manual
is created from thealien_provides_*
information. - install_type
-
Remembers if the library was found system-wide (value:
system
) or was installed during build (value:share
). - version
-
The version number installed or available.
- name
-
Holder for
alien_name
as needed by pkg-config.
COMMAND INTERPOLATION
Before Alien::Base::ModuleBuild executes system commands, it replaces a few special escape sequences with useful data. This is needed especially for referencing the full path to the alien_share_dir
before this path is known. The availble sequences are:
- %s
-
The full path to the final installed location of the share directory (builder method
alien_library_destination
). This is where the library should install itself; for autoconf style installs this will look like--prefix=%s
- %c
-
Platform independent incantation for running autoconf
configure
script. On *nix systems this is./configure
, on Windows this issh configure
. On windows Alien::MSYS is injected as a dependency and all commands are executed in anMSYS
environment. - %p
-
Platform independent "local command prefix". On *nix systems this is
./
, on Windows it is an empty string.%pconfigure
- %n
-
Shortcut for the name stored in
alien_name
pkg-config --modversion %n
- %v
-
Captured version of the original archive.
- %x
-
The current Perl interpreter (aka $^X)
- %%
-
A literal
%
.
AUTHOR
Original author: Joel Berger, <joel.a.berger@gmail.com>
Current maintainer: Graham Ollis <plicease@cpan.org> and the Alien::Base team
SEE ALSO
COPYRIGHT AND LICENSE
Copyright (C) 2012-2015 by Joel Berger
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.