[libvirt] [perl PATCH] Switch over to using Module::Build

Daniel P. Berrangé berrange at redhat.com
Wed May 16 09:12:54 UTC 2018


On Wed, May 16, 2018 at 10:49:39AM +0200, Andrea Bolognani wrote:
> On Tue, 2018-05-15 at 20:47 +0100, Daniel P. Berrangé wrote:
> > On Tue, May 15, 2018 at 08:17:09PM +0200, Andrea Bolognani wrote:
> > > + /usr/bin/perl Build.PL installdirs=vendor
> > > Created MYMETA.yml and MYMETA.json
> > > Creating new 'Build' script for 'Sys-Virt' version 'v4.4.0'
> > > + ./Build
> > > Building Sys-Virt
> > > ExtUtils::Mkbootstrap::Mkbootstrap('blib/arch/auto/Sys/Virt/Virt.bs')
> > > gcc -lpthread -shared -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -L/usr/local/lib -fstack-protector-strong -lperl -o blib/arch/auto/Sys/Virt/Virt.so lib/Sys/Virt.o -L/home/test/build/lib
> > > virt/lib -lvirt
> > 
> > This is suspect - on mine it is much longer - in particular it has
> > the -g flag for creating debuginfo packages
> > 
> > 
> > + /usr/bin/perl Build.PL installdirs=vendor
> > Created MYMETA.yml and MYMETA.json
> > Creating new 'Build' script for 'Sys-Virt' version 'v4.4.0'
> > + ./Build
> > Building Sys-Virt
> > gcc -I/usr/lib64/perl5/CORE -DVERSION="v4.4.0" -DXS_VERSION="v4.4.0" -fPIC -I/home/berrange/src/virt/libvirt/include -c -D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -mcet -fcf-protection -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -o lib/Sys/Virt.o lib/Sys/Virt.c
> > ExtUtils::Mkbootstrap::Mkbootstrap('blib/arch/auto/Sys/Virt/Virt.bs')
> > gcc -lpthread -shared -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -L/usr/local/lib -fstack-protector-strong -lperl -o blib/arch/auto/Sys/Virt/Virt.so lib/Sys/Virt.o -L/home/berrange/src/virt/libvirt/src/.libs -lvirt
> 
> Okay, I think I'm getting closer to understanding the problem
> 
> The CI build steps for Module::Build packages, with irrelevant
> details omitted, look like
> 
>   perl Build.PL install_base=...
>   perl Build
>   perl Build manifest
>   perl Build install
>   perl Build test
>   perl Build dist
>   rpmbuild -ta *.tar.gz
> 
> These are the steps I'm following. The prepare-release.sh script,
> however, is slightly different:
> 
>   perl Build.PL install_base=..
>   ./Build
>   ./Build test
>   ./Build install
>   ./Build dist
>   rpmbuild -ta *.tar.gz
> 
> The critical difference is that CI calls 'perl Build manifest',
> while prepare-release.sh doesn't. If I remove that line from the
> CI steps, the build suddenly succeeds on Fedora.
> 
> This is how the manifest is changed by the call, with both the
> initial file and the updated one filtered through 'sort -u' to
> remove the noise caused by some items changing position:
> 
>   --- MANIFEST.old        2018-05-16 08:35:17.568120131 +0000
>   +++ MANIFEST.new        2018-05-16 08:35:12.246110781 +0000
>   @@ -31,10 +31,10 @@
>    examples/vol-upload-all.pl
>    examples/vol-upload-nonblock.pl
>    examples/vol-upload.pl
>   -.gitignore
>    .gitpublish
>    HACKING
>    INSTALL
>   +lib/Sys/Virt.c
>    lib/Sys/Virt/Domain.pm
>    lib/Sys/Virt/DomainSnapshot.pm
>    lib/Sys/Virt/Error.pm
>   @@ -43,6 +43,7 @@
>    lib/Sys/Virt/Network.pm
>    lib/Sys/Virt/NodeDevice.pm
>    lib/Sys/Virt/NWFilter.pm
>   +lib/Sys/Virt.o

Ah ha, this will be what's causing the problem - it'll make RPM build
skip the compile step and just do the link step. So if we drop the
manifest build, the RPM build should work.

>    lib/Sys/Virt.pm
>    lib/Sys/Virt/Secret.pm
>    lib/Sys/Virt/StoragePool.pm
>   @@ -51,6 +52,7 @@
>    lib/Sys/Virt.xs
>    LICENSE
>    Makefile.PL
>   +MANIFEST
>    META.json
>    META.yml
>    perl-Sys-Virt.spec
> 
> Interestingly, CentOS 7 is perfectly fine with the updated manifest;
> only Fedora is bothered by it.
> 
> Another interesting fact is that libvirt-tck doesn't track its
> manifest in git, and generates it a build time by calling the same
> command as above. I'm not sure if that would be appropriate, but
> perhaps a good solution would be to start tracking the manifest in
> git for libvirt-tck too and stop calling 'perl Build manifest' as
> part of the build procedure altogether.

Yeah, we should commit the manifest to git - I've found there is just
too much chance of including random junk when using MANIFEST.SKIP, so
I just pre-created the MANIFEST. I'll send a patch for libvirt-tck to
do this.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list