Richard W.M. Jones
2015-Oct-23 21:30 UTC
[Libguestfs] [PATCH v3] perl: Switch to using Module::Build.
version 3: - Split requires into configure_requires/etc. - Use lists for extra_compiler_flags, extra_linker_flags. - Suppress .packlist file. - Set the release_status field. Rich.
Richard W.M. Jones
2015-Oct-23 21:30 UTC
[Libguestfs] [PATCH v3] perl: Switch to using Module::Build.
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@/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@/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