Instead of cloning gnulib manually which can break if upstream gnulib
gets ahead of libvirt.git (which applies patches on the fly etc). By
using submodulefixup we automatically DTRT and use the version of
gnulib specified by the libvirt.git submodule metadata, but with a
runvar override if necessary.
This also removes a whole bunch of faffing in ap-*, cr-daily-branch
and mfi-common to get the version of gnulib to use, which was always a
bit of a wart (ungated for one thing...).
We continue to use --no-git and GNULIB_SRCDIR because otherwise
autogen.sh (via bootstrap) will force its own version, overwriting
what submodulefixup has done. For this we need a way to get the hash
representing the module, so introduce submodule_find (and rework
submodule_have in terms of it).
Tested in standalone mode with build-amd64-libvirt and
build-amd64-rumpuserxen (because I touched submodule_have, AFAICT the
bodges were not run). The libvirt build was tested both with the
automatic revisions and with:
revision_libvirt=
2360fe5d24175835d3f5fd1c7e8e6e13addab629
revision_libvirt_gnulib=
16518d9ed8f25d3e53931dd1aa343072933e4604
(used in successful libvirt flight 32648), in both cases confirming
that the build used the desired versions.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@citrix.com>
---
v2: Honour revision_libvirt_gnulib.
v3: Fix submodule_have, defined(&sub) is always true because defined
is special wrt &sub.
xendist
$xendist
- submodulefixup submodule_have
+ submodulefixup submodule_have submodule_find
);
%EXPORT_TAGS = ( );
return \@submodules;
}
-sub submodule_have ($$) {
+sub submodule_find ($$) {
my ($submodules, $ourname) = @_;
- return !!grep { $_->{OurName} eq $ourname } @$submodules;
+ my @submods = grep { $_->{OurName} eq $ourname } @$submodules;
+ return undef unless @submods;
+ die "more than one $ourname?" if @submods ne 1;
+ return $submods[0];
+}
+
+sub submodule_have ($$) {
+ return !!&submodule_find;
}
1;
: ${PUSH_TREE_LIBVIRT:=$XENBITS:/home/xen/git/libvirt.git}
: ${BASE_TREE_LIBVIRT:=git://xenbits.xen.org/libvirt.git}
-: ${TREE_GNULIB_LIBVIRT:=$(besteffort_repo git://git.sv.gnu.org/gnulib.git)}
-
: ${TREE_RUMPUSERXEN:=https://github.com/rumpkernel/rumprun-xen}
: ${TREEVCS_RUMPUSERXEN:=git}
: ${BASE_TREE_RUMPUSERXEN:=git://xenbits.xen.org/rumpuser-xen.git}
: ${LOCALREV_XEN:=daily-cron.$branch}
: ${LOCALREV_LINUX:=daily-cron.$branch}
: ${LOCALREV_LIBVIRT:=daily-cron.$branch}
-: ${LOCALREV_GNULIB_LIBVIRT:=daily-cron.$branch}
: ${LOCALREV_RUMPUSERXEN:=daily-cron.$branch}
: ${LOCALREV_SEABIOS:=daily-cron.$branch}
repo_tree_rev_fetch_git libvirt \
$TREE_LIBVIRT master $LOCALREV_LIBVIRT
;;
-gnulib-libvirt)
- repo_tree_rev_fetch_git gnulib-libvirt \
- $TREE_GNULIB_LIBVIRT master $LOCALREV_GNULIB_LIBVIRT
- ;;
rumpuserxen)
repo_tree_rev_fetch_git rumpuserxen \
$TREE_RUMPUSERXEN master $LOCALREV_RUMPUSERXEN
repo_tree_rev_fetch_git rumpuserxen \
$BASE_TREE_RUMPUSERXEN xen-tested-master $BASE_LOCALREV_RUMPUSERXEN
;;
-gnulib-libvirt)
- # No push gate, same as ap-fetch-version
- ./ap-fetch-version $branch
- ;;
seabios)
repo_tree_rev_fetch_git seabios \
$BASE_TREE_SEABIOS xen-tested-master $BASE_LOCALREV_SEABIOS
libvirt)
echo $TREE_LIBVIRT
;;
-gnulib-libvirt)
- echo $TREE_GNULIB_LIBVIRT
- ;;
rumpuserxen)
echo $TREE_RUMPUSERXEN
;;
cd $repos/rumpuserxen
git push $TREE_RUMPUSERXEN $revision:xen-tested-master
;;
-gnulib-libvirt)
- # No gate
- echo "gnulib-libvirt has not push gate, refusing to push" >&2
- exit 1
- ;;
seabios)
cd $repos/seabios
git push $TREE_SEABIOS $revision:refs/heads/xen-tested-master
determine_version REVISION_LIBVIRT libvirt LIBVIRT
export REVISION_LIBVIRT
fi
-if [ "x$REVISION_GNULIB_LIBVIRT" = x ]; then
- determine_version REVISION_GNULIB_LIBVIRT gnulib-libvirt GNULIB_LIBVIRT
- export REVISION_GNULIB_LIBVIRT
-fi
if [ "x$REVISION_RUMPUSERXEN" = x ]; then
determine_version REVISION_RUMPUSERXEN rumpuserxen RUMPUSERXEN
export REVISION_RUMPUSERXEN
host_hostflags=$build_hostflags \
buildjob=${bfi}build-$arch \
tree_libvirt=$TREE_LIBVIRT revision_libvirt=$REVISION_LIBVIRT\
- tree_gnulib_libvirt=$TREE_GNULIB_LIBVIRT revision_gnulib_libvirt=$REVISION_GNULIB_LIBVIRT\
fi
selectbuildhost(\@ARGV);
builddirsprops();
+our %submodmap = qw(gnulib gnulib);
+our $submodules;
+
sub libvirtd_init ();
sub checkout () {
xendist();
build_clone($ho, 'libvirt', $builddir, 'libvirt');
- build_clone($ho, 'gnulib_libvirt', $builddir, 'gnulib-libvirt');
+ $submodules = submodulefixup($ho, 'libvirt', 'libvirt', \%submodmap);
}
sub config() {
}
die "no xen prefix" unless $xenprefix;
- # Uses $GNULIB_SRCDIR because ./autogen.sh doesn't propagate
- # --gnulib-srcdir to ./bootstap.
+ # Uses --no-git because otherwise autogen.sh will undo
+ # submodulefixup's attempts to honour
+ # revision_libvirt_gnulib. This in turn requires that we specify
+ # --gnulib-srcdir, but ./autogen.sh doesn't propagate
+ # --gnulib-srcdir to ./bootstap so we use GNULIB_SRCDIR directly.
+ my $gnulib = submodule_find($submodules, "gnulib");
target_cmd_build($ho, 3600, $builddir, <<END);
cd libvirt
CFLAGS="-I$xenprefix/include/" \\
LDFLAGS="-L$xenprefix/lib/ -Wl,-rpath-link=$xenprefix/lib/" \\
- GNULIB_SRCDIR=$builddir/gnulib-libvirt \\
+ GNULIB_SRCDIR=$builddir/libvirt/$gnulib->{Path} \\
./autogen.sh --no-git \\
--with-libxl --without-xen --without-xenapi --without-selinux \\
--without-lxc --without-vbox --without-uml \\
END
}
-sub collectversion_gnulib () {
- store_revision($ho, 'gnulib_libvirt', "$builddir/gnulib-libvirt", 1);
-}
-
checkout();
config();
build();
install();
-collectversion_gnulib();
built_stash($ho, $builddir, 'dist', 'libvirtdist');
sub libvirtd_init () {