From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

Module::Build::Convert - Makefile.PL to Build.PL converter

SYNOPSIS

# example arguments (empty %args is sufficient too)
%args = (Path => '/path/to/perl/distribution(s)',
Verbose => 2,
Use_Native_Order => 1,
Len_Indent => 4);
$make = Module::Build::Convert->new(%args);
$make->convert;

DESCRIPTION

This module is highly experimental und use at own risk. It originated when I was a novice programmer, thus I apologize for some messy code.

ExtUtils::MakeMaker has been a de-facto standard for the common distribution of Perl modules; Module::Build is expected to supersede ExtUtils::MakeMaker in some time (part of the Perl core as of 5.9.4).

The transition takes place slowly, as the converting process manually achieved is yet an uncommon practice. The Module::Build::Convert Makefile.PL parser is intended to ease the transition process.

CONSTRUCTOR

new

Options:

  • Path

    Path to a Perl distribution. May point to a single distribution directory or to one containing more than one distribution. Default: ''

  • Makefile_PL

    Filename of the Makefile script. Default: Makefile.PL

  • Build_PL

    Filename of the Build script. Default: Build.PL

  • MANIFEST

    Filename of the MANIFEST file. Default: MANIFEST

  • RC

    Filename of the RC file. Default: .make2buildrc

  • Dont_Overwrite_Auto

    If a Build.PL already exists, output a notification and ask whether it should be overwritten. Default: 1

  • Create_RC

    Create a RC file in the homedir of the current user. Default: 0

  • Parse_PPI

    Parse the Makefile.PL in the PPI Parser mode. Default: 0

  • Exec_Makefile

    Execute the Makefile.PL via 'do Makefile.PL'. Default: 0

  • Verbose

    Verbose mode. If set to 1, overridden defaults and skipped arguments are printed while converting; if set to 2, output of Verbose = 1 and created Build script will be printed. May be set via the make2build switches -v (mode 1) and -vv (mode 2). Default: 0

  • Debug

    Rudimentary debug facility for examining the parsing process. Default: 0

  • Process_Code

    Process code embedded within the arguments list. Default: 0

  • Use_Native_Order

    Native sorting order. If set to 1, the native sorting order of the Makefile arguments will be tried to preserve; it's equal to using the make2build switch -n. Default: 0

  • Len_Indent

    Indentation (character width). May be set via the make2build switch -l. Default: 3

  • DD_Indent

    Data::Dumper indendation mode. Mode 0 will be disregarded in favor of 2. Default: 2

  • DD_Sortkeys

    Data::Dumper sort keys. Default: 1

METHODS

convert

Parses the Makefile.PL's WriteMakefile() arguments and converts them to Module::Build equivalents; subsequently the according Build.PL is created. Takes no arguments.

DATA SECTION

Argument conversion

ExtUtils::MakeMaker arguments followed by their Module::Build equivalents. Converted data structures preserve their native structure, that is, HASH -> HASH, etc.

NAME module_name
DISTNAME dist_name
ABSTRACT dist_abstract
AUTHOR dist_author
VERSION dist_version
VERSION_FROM dist_version_from
PREREQ_PM requires
PL_FILES PL_files
PM pm_files
MAN1PODS pod_files
XS xs_files
INC include_dirs
INSTALLDIRS installdirs
DESTDIR destdir
CCFLAGS extra_compiler_flags
EXTRA_META meta_add
SIGN sign
LICENSE license
clean.FILES @add_to_cleanup

Default arguments

Module::Build default arguments may be specified as key/value pairs. Arguments attached to multidimensional structures are unsupported.

#build_requires HASH
#recommends HASH
#conflicts HASH
license unknown
create_readme 1
create_makefile_pl traditional

Value may be either a string or of type SCALAR, ARRAY, HASH.

Sorting order

Module::Build arguments are sorted as enlisted herein. Additional arguments, that don't occur herein, are lower prioritized and will be inserted in unsorted order after preceedingly sorted arguments.

module_name
dist_name
dist_abstract
dist_author
dist_version
dist_version_from
requires
build_requires
recommends
conflicts
PL_files
pm_files
pod_files
xs_files
include_dirs
installdirs
destdir
add_to_cleanup
extra_compiler_flags
meta_add
sign
license
create_readme
create_makefile_pl

Begin code

Code that preceeds converted Module::Build arguments.

use strict;
$MAKECODE
my $b = Module::Build->new
$INDENT(

End code

Code that follows converted Module::Build arguments.

$INDENT);
$b->create_build_script;
$MAKECODE

INTERNALS

co-opting WriteMakefile()

This behavior is no longer the default way to receive WriteMakefile()'s arguments; the Makefile.PL is now statically parsed unless one forces manually the co-opting of WriteMakefile().

In order to convert arguments, a typeglob from WriteMakefile() to an internal sub will be set; subsequently Makefile.PL will be executed and the arguments are then accessible to the internal sub.

Data::Dumper

Converted ExtUtils::MakeMaker arguments will be dumped by Data::Dumper's Dump() and are then furtherly processed.

BUGS & CAVEATS

Module::Build::Convert should be considered experimental as the parsing of the Makefile.PL doesn't necessarily return valid arguments, especially for Makefiles with bad or even worse, missing intendation.

The parsing process may sometimes hang with or without warnings in such cases. Debugging by using the appropriate option/switch (see CONSTRUCTOR/new) may reveal the root cause.

SEE ALSO

http://www.makemaker.org, ExtUtils::MakeMaker, Module::Build, http://www.makemaker.org/wiki/index.cgi?ModuleBuildConversionGuide

AUTHOR

Steven Schubiger <schubiger@cpan.org>

LICENSE

This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.

See http://dev.perl.org/licenses/