Replace ExtUtils::MakeMaker with Module::Build.
'perllocal.pod' and 'bindtests.pl' are no longer incorrectly
installed.
This change also removes the following phony deps: appliance src_deps
test_images. No other language binding needs explicit dependencies
for their tests, they just rely on the top level build order being
correct (ie. SUBDIRS in /Makefile.am).
---
.gitignore | 12 ++++-----
README | 2 ++
configure.ac | 2 +-
generator/main.ml | 2 +-
perl/Build.PL.in | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++
perl/MANIFEST | 31 +++++++++++++++++++++++
perl/Makefile.PL.in | 31 -----------------------
perl/Makefile.am | 59 ++++++++++++++++---------------------------
perl/run-perl-tests | 2 +-
po/POTFILES | 2 +-
10 files changed, 137 insertions(+), 78 deletions(-)
create mode 100755 perl/Build.PL.in
create mode 100644 perl/MANIFEST
delete mode 100644 perl/Makefile.PL.in
diff --git a/.gitignore b/.gitignore
index d5c5d1e..d17f53f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -371,17 +371,17 @@ Makefile.in
/p2v/virt-p2v-make-disk.1
/p2v/virt-p2v-make-kickstart
/p2v/virt-p2v-make-kickstart.1
+/perl/_build
/perl/bindtests.pl
/perl/blib
+/perl/Build
+/perl/Build.PL
/perl/examples/guestfs-perl.3
/perl/examples/stamp-guestfs-perl.pod
-/perl/Guestfs.bs
-/perl/Guestfs.c
-/perl/Guestfs.xs
+/perl/lib/Sys/Guestfs.bs
+/perl/lib/Sys/Guestfs.c
+/perl/lib/Sys/Guestfs.xs
/perl/lib/Sys/Guestfs.pm
-/perl/Makefile-pl
-/perl/Makefile.PL
-/perl/Makefile-pl.old
/perl/MYMETA.json
/perl/MYMETA.yml
/perl/pm_to_blib
diff --git a/README b/README
index 19a1fb2..2c79c0d 100644
--- a/README
+++ b/README
@@ -192,6 +192,8 @@ The full requirements are described below.
+--------------+-------------+---+-----------------------------------------+
| ocaml-gettext| | O | For localizing OCaml virt-* tools. |
+--------------+-------------+---+-----------------------------------------+
+| Module::Build| 0.19 | O | To build the Perl bindings. |
++--------------+-------------+---+-----------------------------------------+
| Python | 2.2 | O | For the Python bindings. |
+--------------+-------------+---+-----------------------------------------+
| Ruby | | O | >= 1.9 is better than 1.8. |
diff --git a/configure.ac b/configure.ac
index 4f6650e..6b5b47e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1774,8 +1774,8 @@ AC_CONFIG_FILES([Makefile
ocaml/Makefile
ocaml/examples/Makefile
p2v/Makefile
+ perl/Build.PL
perl/Makefile
- perl/Makefile.PL
perl/examples/Makefile
php/Makefile
po-docs/Makefile
diff --git a/generator/main.ml b/generator/main.ml
index 1e0e7d6..35511ce 100644
--- a/generator/main.ml
+++ b/generator/main.ml
@@ -127,7 +127,7 @@ Run it from the top source directory using the command
output_to "ocaml/guestfs-c-actions.c" generate_ocaml_c;
output_to "ocaml/guestfs-c-errnos.c" generate_ocaml_c_errnos;
output_to "ocaml/bindtests.ml" generate_ocaml_bindtests;
- output_to "perl/Guestfs.xs" generate_perl_xs;
+ output_to "perl/lib/Sys/Guestfs.xs" generate_perl_xs;
output_to "perl/lib/Sys/Guestfs.pm" generate_perl_pm;
output_to "perl/bindtests.pl" generate_perl_bindtests;
output_to "python/guestfs-py.c" generate_python_c;
diff --git a/perl/Build.PL.in b/perl/Build.PL.in
new file mode 100755
index 0000000..b868d26
--- /dev/null
+++ b/perl/Build.PL.in
@@ -0,0 +1,72 @@
+#!/usr/bin/env perl
+# libguestfs Perl bindings
+# Copyright (C) 2009-2015 Red Hat Inc.
+# @configure_input@
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use warnings;
+use strict;
+
+use Module::Build;
+
+# The Perl module version doesn't (and can't) use the libguestfs
+# version. It uses '0.<max_proc_nr>' instead. However it's nice to
+# set the release_status correctly here based on the libguestfs minor
+# number (see configure.ac for how this works).
+my $release_status;
+if ('@BRANCH_TYPE@' eq 'stable') { $release_status = "stable"
}
+else { $release_status = "testing" }
+
+my $build = Module::Build->new (
+ module_name => 'Sys::Guestfs',
+ release_status => $release_status,
+ license => 'lgpl', # See COPYING.LIB
+
+ configure_requires => {
+ 'Module::Build' => '0.4004', # test_requires
+ },
+
+ build_requires => {
+ 'ExtUtils::CBuilder' => 0,
+ },
+
+ requires => {
+ perl => '5.6.0',
+ },
+
+ test_requires => {
+ 'Test::More' => 0,
+ },
+
+ create_packlist => 0,
+
+ needs_compiler => 1,
+
+ extra_compiler_flags => [
+ '-DGUESTFS_PRIVATE=1',
+ split (' ', '@CFLAGS@'),
+ ],
+ include_dirs => [
+ '@top_builddir@/src',
+ '@top_srcdir@/src',
+ ],
+ extra_linker_flags => [
+ '-L@top_builddir(a)/src/.libs',
+ '-lguestfs',
+ ],
+);
+
+$build->create_build_script;
diff --git a/perl/MANIFEST b/perl/MANIFEST
new file mode 100644
index 0000000..1123f97
--- /dev/null
+++ b/perl/MANIFEST
@@ -0,0 +1,31 @@
+bindtests.pl
+Build.PL
+Build.PL.in
+examples/create_disk.pl
+examples/guestfs-perl.pod
+examples/inspect_vm.pl
+examples/LICENSE
+examples/Makefile.am
+examples/README
+lib/Sys/Guestfs.pm
+lib/Sys/Guestfs.xs
+Makefile.am
+MANIFEST This list of files
+README
+run-bindtests
+run-perl-tests
+t/010-load.t
+t/020-create.t
+t/030-create-flags.t
+t/040-create-multiple.t
+t/060-handle-properties.t
+t/070-optargs.t
+t/100-launch.t
+t/410-close-event.t
+t/420-log-messages.t
+t/800-explicit-close.t
+t/810-mkdir-eexist.t
+t/900-introspection.t
+t/910-pod.t
+t/920-pod-coverage.t
+typemap
diff --git a/perl/Makefile.PL.in b/perl/Makefile.PL.in
deleted file mode 100644
index 90331cf..0000000
--- a/perl/Makefile.PL.in
+++ /dev/null
@@ -1,31 +0,0 @@
-# libguestfs Perl bindings
-# Copyright (C) 2009-2015 Red Hat Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-use Config;
-use ExtUtils::MakeMaker;
-
-WriteMakefile (
- FIRST_MAKEFILE => 'Makefile-pl',
-
- NAME => 'Sys::Guestfs',
- VERSION => '0.@MAX_PROC_NR@',
-
- LIBS => '-L@top_builddir(a)/src/.libs -lguestfs',
- INC => '-I@top_builddir@/src -I@top_srcdir@/src',
- TYPEMAPS => [ '@srcdir@/typemap' ],
- CCFLAGS => $Config{ccflags} . ' -DGUESTFS_PRIVATE=1 @CFLAGS@',
- );
diff --git a/perl/Makefile.am b/perl/Makefile.am
index 1eb0469..6dd53ec 100644
--- a/perl/Makefile.am
+++ b/perl/Makefile.am
@@ -1,5 +1,5 @@
# libguestfs Perl bindings
-# Copyright (C) 2009 Red Hat Inc.
+# Copyright (C) 2009-2015 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -24,7 +24,7 @@ generator_built = \
EXTRA_DIST = \
$(generator_built) \
- Makefile.PL.in \
+ Build.PL.in \
examples/README \
examples/LICENSE \
examples/*.pl \
@@ -33,54 +33,39 @@ EXTRA_DIST = \
t/*.t \
typemap
+DISTCLEANFILES = Build
+
+# It would be nice to do this, but 'make distclean' runs 'make clean'
+# in parallel, and './Build clean' requires '_build/magicnum' to
+# exist, so you end up deleting a file which is required by the
+# parallel 'make clean' instance.
+#
+#distclean-local:
+# rm -rf _build
+
if HAVE_PERL
-# Interfacing automake and ExtUtils::MakeMaker known to be
-# a nightmare, news at 11.
+all-local: Build
+ ./Build
-# src/ dependencies
-src_deps: $(top_builddir)/src/libguestfs.la $(generator_built)
+clean-local: Build
+ ./Build clean
-# Images used by tests.
-test_images:
- $(MAKE) -C $(top_builddir)/tests/data
+Build: Build.PL
+ $(PERL) $(srcdir)/Build.PL --prefix "@prefix@"
-# Build the appliance.
-appliance:
- $(MAKE) -C $(top_builddir)/appliance
+TESTS_ENVIRONMENT = $(top_builddir)/run --test
TESTS = run-bindtests
-test_prereq = src_deps all test_images
if ENABLE_APPLIANCE
-test_prereq += appliance
TESTS += run-perl-tests
endif
-$(TESTS): $(test_prereq)
-
-TESTS_ENVIRONMENT = $(top_builddir)/run --test
-
+# Packagers may override this, eg using 'make install INSTALLDIRS=vendor'
INSTALLDIRS = site
-all: Makefile-pl src_deps
- $(MAKE) -f Makefile-pl
-
-Makefile-pl: Makefile.PL
- -[ $(srcdir) != $(builddir) ] && cp -rsu $(abs_srcdir)/. $(builddir)/.
- perl Makefile.PL INSTALLDIRS=$(INSTALLDIRS) PREFIX=$(prefix)
-
-# No! Otherwise it is deleted before the clean-local rule runs.
-#CLEANFILES = Makefile-pl
-
-clean-local:
- -$(MAKE) -f Makefile-pl clean
- rm -f Makefile-pl
-
-install-data-hook:
- $(MAKE) -C $(srcdir) -f $(abs_builddir)/Makefile-pl \
- DESTDIR=$(DESTDIR) install
+install-data-hook: Build
+ ./Build install --destdir "$(DESTDIR)" --installdirs $(INSTALLDIRS)
endif
-
-.PHONY: appliance src_deps test_images
diff --git a/perl/run-perl-tests b/perl/run-perl-tests
index 0e7e9ab..8b816b1 100755
--- a/perl/run-perl-tests
+++ b/perl/run-perl-tests
@@ -18,4 +18,4 @@
set -e
-make -f Makefile-pl test "$@"
+./Build test
diff --git a/po/POTFILES b/po/POTFILES
index d90772a..32f88a1 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -278,8 +278,8 @@ p2v/main.c
p2v/miniexpect.c
p2v/ssh.c
p2v/utils.c
-perl/Guestfs.c
perl/bindtests.pl
+perl/lib/Sys/Guestfs.c
perl/lib/Sys/Guestfs.pm
php/extension/guestfs_php.c
python/guestfs-py-byhand.c
--
2.5.0