Title: RE: ExtUtils::MakeMaker or Module::Build

> > But as we start to put this together we run across
> Module::Build.  In
> > the past I have always used ExtUtils::MakaMaker.  Is there
> a preference
> > (if one were starting from scratch), to using one over the other?

Personally my feeling is that Module::Build isn't mature enough for release ready code.

The fact that without manual intervention what it produces isnt compatible with CPAN is IMO a serious argument against using it, and poses serious questions in my mind about its suitability in 5.10.  Luckily it will be a long time before 5.10 is released, so Ken has lots of time to get it right.

BTW, it shouldnt be seen that I am critical of Kens efforts, I actually think his project is quite a good idea and will eventually be an excellent replacement for older tools. But IMO it is not production worthy code at the current time.

I dont know the logic behind using Build.pl instead of makefile.pl, but the fact that it doesnt create the later by defualt (or so I have been told) is in my eyes a serious mistake that will greatly reduce its overall uptake in the market.  And for those people releasing code without a Makefile.pl, I wonder at the point of putting such things on CPAN. (Others such as Randal Schwartz have said the same thing)

Another serious issue with Module::Build is that for the last ages on Win32 it doesnt. Have a look at the transaction report of trying to install it (using itself) from CPAN.  It doesnt play nicely with CPAN's prerequisite system, (a Makefile.pl program would have caused CPAN to autoload these prerequisites on my system by default) and fails build.

  CPAN.pm: Going to build K/KW/KWILLIAMS/Module-Build-0.21.tar.gz

E:\Perl\bin\perl.exe Build.PL
Checking whether your kit is complete...
Looks good
WARNING: ExtUtils::ParseXS: Prerequisite ExtUtils::ParseXS isn't installed
WARNING: Archive::Tar: Version 0.072 is installed, but we need version >= 1.00
ERRORS/WARNINGS FOUND IN PREREQUISITES.  You may wish to install the versions
 of the modules indicated above before proceeding with this installation.

Creating new 'Build' script for 'Module-Build' version '0.21'

Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation.  All rights reserved.

        E:\Perl\bin\perl.exe Build
lib/Module/Build/Platform/darwin.pm -> blib\lib\Module\Build\Platform\darwin.pm
lib/Module/Build/Platform/VMS.pm -> blib\lib\Module\Build\Platform\VMS.pm
lib/Module/Build/Platform/EBCDIC.pm -> blib\lib\Module\Build\Platform\EBCDIC.pm
lib/Module/Build/Compat.pm -> blib\lib\Module\Build\Compat.pm
lib/Module/Build/Platform/cygwin.pm -> blib\lib\Module\Build\Platform\cygwin.pm
lib/Module/Build/Platform/MacOS.pm -> blib\lib\Module\Build\Platform\MacOS.pm
lib/Module/Build/Platform/VOS.pm -> blib\lib\Module\Build\Platform\VOS.pm
lib/Module/Build.pm -> blib\lib\Module\Build.pm
lib/Module/Build/Platform/Default.pm -> blib\lib\Module\Build\Platform\Default.pm
lib/Module/Build/Base.pm -> blib\lib\Module\Build\Base.pm
lib/Module/Build/Cookbook.pm -> blib\lib\Module\Build\Cookbook.pm
lib/Module/Build/PPMMaker.pm -> blib\lib\Module\Build\PPMMaker.pm
lib/Module/Build/Platform/Amiga.pm -> blib\lib\Module\Build\Platform\Amiga.pm
lib/Module/Build/Platform/Windows.pm -> blib\lib\Module\Build\Platform\Windows.pm
lib/Module/Build/Platform/MPEiX.pm -> blib\lib\Module\Build\Platform\MPEiX.pm
lib/Module/Build/Platform/Unix.pm -> blib\lib\Module\Build\Platform\Unix.pm
lib/Module/Build/Platform/RiscOS.pm -> blib\lib\Module\Build\Platform\RiscOS.pm
  E:\DotNet\VC7\BIN\nmake.EXE  -- OK
Running make test

Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation.  All rights reserved.

        E:\Perl\bin\perl.exe Build test
t\basic.........ok
t\compat........ok
t\extend........ok
t\install.......FAILED test 19
        Failed 1/23 tests, 95.65% okay
se of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 117.
t\manifypods....ok 2/17se of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 118.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 119.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 120.
Use of uninitialized value in string eq at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 125.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 126.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 127.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 128.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 117.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 118.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 119.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 120.
Use of uninitialized value in string eq at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 125.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 126.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 127.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 128.
t\manifypods....ok
t\notes.........ok
t\runthrough....FAILED test 20
        Failed 1/27 tests, 96.30% okay
t\signature.....skipped
        all skipped: Skipping unless $ENV{TEST_SIGNATURE} is true
t\versions......ok
t\xs............ok
Failed Test    Stat Wstat Total Fail  Failed  List of Failed
-------------------------------------------------------------------------------
t\install.t                  23    1   4.35%  19
t\runthrough.t               27    1   3.70%  20
1 test skipped.
Failed 2/10 test scripts, 80.00% okay. 2/157 subtests failed, 98.73% okay.
NMAKE : fatal error U1077: 'E:\Perl\bin\perl.exe' : return code '0xff'
Stop.
  E:\DotNet\VC7\BIN\nmake.EXE test -- NOT OK
Running make install
  make test had returned bad status, won't install without force


And then when I MANUALLY follow the prerequisites It still fails to build:

cpan> install Module::Build
Running install for module Module::Build
Running make for K/KW/KWILLIAMS/Module-Build-0.21.tar.gz
  Is already unwrapped into directory E:\.cpan\build\Module-Build-0.21
  Has already been processed within this session
Running make test

Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation.  All rights reserved.

        E:\Perl\bin\perl.exe Build test
t\basic.........ok
t\compat........ok
t\extend........ok
t\install.......FAILED test 19
        Failed 1/23 tests, 95.65% okay
t\manifypods....ok 2/17Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 117.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 118.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 119.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 120.
Use of uninitialized value in string eq at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 125.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 126.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 127.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 128.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 117.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 118.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 119.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 120.
Use of uninitialized value in string eq at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 121.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 122.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 125.
Use of uninitialized value in substitution (s///) at E:\Perl\lib/File/Spec/Win32.pm line 126.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 127.
Use of uninitialized value in pattern match (m//) at E:\Perl\lib/File/Spec/Win32.pm line 128.
t\manifypods....ok
t\notes.........ok
t\runthrough....ok 19/27Unable to add file: 'Sample-0.01' at E:\.cpan\build\Module-Build-0.21\blib\lib/Module/Build/Base

.pm line 1706
Unable to add file: 'Sample-0.01/lib' at E:\.cpan\build\Module-Build-0.21\blib\lib/Module/Build/Base.pm line 1706
Unable to add file: 'Sample-0.01/lib/Sample' at E:\.cpan\build\Module-Build-0.21\blib\lib/Module/Build/Base.pm line 1706

Unable to add file: 'Sample-0.01/bin' at E:\.cpan\build\Module-Build-0.21\blib\lib/Module/Build/Base.pm line 1706
t\runthrough....ok
t\signature.....skipped
        all skipped: Skipping unless $ENV{TEST_SIGNATURE} is true
t\versions......ok
t\xs............ok
Failed Test Stat Wstat Total Fail  Failed  List of Failed
-------------------------------------------------------------------------------
t\install.t               23    1   4.35%  19
1 test skipped.
Failed 1/10 test scripts, 90.00% okay. 1/157 subtests failed, 99.36% okay.
NMAKE : fatal error U1077: 'E:\Perl\bin\perl.exe' : return code '0xff'
Stop.
  E:\DotNet\VC7\BIN\nmake.EXE test -- NOT OK
Running make install
  make test had returned bad status, won't install without force

All in all, this says to me that Module::Build is at this time insufficiently production ready, compatible or portable enough to be used for serious work.

> There are nearly 200 distinct distributions on CPAN that now use
> Module::Build. And the number continues to inch upward. M::B is
> scheduled to appear in perl 5.10 and ultimately to replace MakeMaker,
> see perldelta. M::B doesn't require a make tool, so on
> platforms that do not include easy access to make, users can still build and
> install pure perl modules.

I agree that the makeless make is a worthy objective, and Kens efforts are to be applauded. But IMO currently its a bit of a waste that these modules use it and are on CPAN. First off this means that they are unavailable to Win32 users, a group that make up the majority of the Perl user base (whatever the *nixens think). And for those that havent bothered including Makefile.pl's and only Build.pl's, well that code wont install cleanly from the cpan shell.

Anyway,
thats my take on using Module::Build.

Yves

Reply via email to