2005-11-02 16:19:10 +03:00
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
2012-09-19 21:45:24 +04:00
set -e
2010-02-23 03:01:31 +03:00
srcdir = ` dirname " $0 " `
2008-02-05 22:27:37 +03:00
test -z " $srcdir " && srcdir = .
2005-11-02 16:19:10 +03:00
THEDIR = ` pwd `
2010-02-23 03:01:31 +03:00
cd " $srcdir "
2005-11-02 16:19:10 +03:00
2006-02-10 11:40:20 +03:00
test -f src/libvirt.c || {
2011-02-11 20:35:54 +03:00
echo "You must run this script in the top-level libvirt directory"
exit 1
2005-11-02 16:19:10 +03:00
}
2009-11-26 17:38:50 +03:00
EXTRA_ARGS =
2011-01-21 19:34:35 +03:00
no_git =
if test " x $1 " = "x--no-git" ; then
no_git = " $1 "
shift
2015-02-06 19:19:03 +03:00
case " $1 $2 " in
--gnulib-srcdir= *) no_git = " $no_git $1 " ; shift ; ;
--gnulib-srcdir\ *) no_git = " $no_git $1 = $2 " ; shift; shift; ;
esac
2011-01-21 19:34:35 +03:00
fi
2012-06-21 17:50:41 +04:00
if test -z " $NOCONFIGURE " ; then
if test " x $1 " = "x--system" ; then
2009-11-26 17:38:50 +03:00
shift
2011-01-19 15:24:26 +03:00
prefix = /usr
libdir = $prefix /lib
sysconfdir = /etc
localstatedir = /var
if [ -d /usr/lib64 ] ; then
libdir = $prefix /lib64
fi
EXTRA_ARGS = " --prefix= $prefix --sysconfdir= $sysconfdir --localstatedir= $localstatedir --libdir= $libdir "
2009-11-26 17:38:50 +03:00
echo " Running ./configure with $EXTRA_ARGS $@ "
2012-06-21 17:50:41 +04:00
else
2010-03-26 02:37:32 +03:00
if test -z " $* " && test ! -f " $THEDIR /config.status " ; then
2014-06-05 01:48:20 +04:00
echo "I am going to run ./configure with no arguments - if you wish"
2005-11-02 16:19:10 +03:00
echo " to pass any to it, please specify them on the $0 command line. "
2009-11-26 17:38:50 +03:00
fi
2012-06-21 17:50:41 +04:00
fi
2005-11-02 16:19:10 +03:00
fi
2010-03-16 23:08:31 +03:00
# Compute the hash we'll use to determine whether rerunning bootstrap
# is required. The first is just the SHA1 that selects a gnulib snapshot.
# The second ensures that whenever we change the set of gnulib modules used
# by this package, we rerun bootstrap to pull in the matching set of files.
2011-11-09 04:06:27 +04:00
# The third ensures that whenever we change the set of local gnulib diffs,
# we rerun bootstrap to pull in those diffs.
2010-03-16 23:08:31 +03:00
bootstrap_hash( )
{
2013-07-04 00:43:11 +04:00
if test " $no_git " ; then
echo no-git
return
fi
2010-03-16 23:08:31 +03:00
git submodule status | sed 's/^[ +-]//;s/ .*//'
git hash-object bootstrap.conf
2011-11-09 04:06:27 +04:00
git ls-tree -d HEAD gnulib/local | awk '{print $3}'
2010-03-16 23:08:31 +03:00
}
2009-07-10 12:01:04 +04:00
# Ensure that whenever we pull in a gnulib update or otherwise change to a
# different version (i.e., when switching branches), we also rerun ./bootstrap.
2010-08-05 00:35:41 +04:00
# Also, running 'make rpm' tends to litter the po/ directory, and some people
# like to run 'git clean -x -f po' to fix it; but only ./bootstrap regenerates
# the required file po/Makevars.
2011-02-11 20:35:54 +03:00
# Only run bootstrap from a git checkout, never from a tarball.
2013-08-29 15:19:45 +04:00
if test -d .git || test -f .git; then
2012-11-09 12:47:04 +04:00
curr_status = .git-module-status t =
2013-07-04 00:43:11 +04:00
if test " $no_git " ; then
t = no-git
elif test -d .gnulib; then
2012-11-09 12:47:04 +04:00
t = $( bootstrap_hash; git diff .gnulib)
fi
build: avoid infinite autogen loop
Several people have reported that if the .gnulib submodule is dirty,
then 'make' will go into an infinite loop attempting to rerun bootstrap,
because that never cleans up the dirty submodule. By default, we
should halt and make the user investigate, but if the user doesn't
know why or care that the submodule is dirty, I also added the ability
to 'make CLEAN_SUBMODULE=1' to get things going again.
Also, while testing this, I noticed that when a submodule update was
needed, 'make' would first run autoreconf, then bootstrap (which
reruns autoreconf); adding a strategic dependency allows for less work.
* .gnulib: Update to latest, for maint.mk improvements.
* cfg.mk (_autogen): Also hook maint.mk, to run before autoreconf.
* autogen.sh (bootstrap): Refuse to run if gnulib is dirty, unless
user requests discarding gnulib changes.
2012-10-01 19:10:20 +04:00
case $t :${ CLEAN_SUBMODULE +set } in
*:set) ; ;
*-dirty*)
echo "error: gnulib submodule is dirty, please investigate" 2>& 1
echo "set env-var CLEAN_SUBMODULE to discard gnulib changes" 2>& 1
exit 1 ; ;
esac
2012-12-04 00:12:09 +04:00
# Keep this test in sync with cfg.mk:_update_required
2011-02-11 20:35:54 +03:00
if test " $t " = " $( cat $curr_status 2>/dev/null) " \
2012-12-04 00:12:09 +04:00
&& test -f "po/Makevars" && test -f AUTHORS; then
2011-02-11 20:35:54 +03:00
# good, it's up to date, all we need is autoreconf
autoreconf -if
else
2013-07-04 00:43:11 +04:00
if test -z " $no_git " && test ${ CLEAN_SUBMODULE +set } ; then
build: avoid infinite autogen loop
Several people have reported that if the .gnulib submodule is dirty,
then 'make' will go into an infinite loop attempting to rerun bootstrap,
because that never cleans up the dirty submodule. By default, we
should halt and make the user investigate, but if the user doesn't
know why or care that the submodule is dirty, I also added the ability
to 'make CLEAN_SUBMODULE=1' to get things going again.
Also, while testing this, I noticed that when a submodule update was
needed, 'make' would first run autoreconf, then bootstrap (which
reruns autoreconf); adding a strategic dependency allows for less work.
* .gnulib: Update to latest, for maint.mk improvements.
* cfg.mk (_autogen): Also hook maint.mk, to run before autoreconf.
* autogen.sh (bootstrap): Refuse to run if gnulib is dirty, unless
user requests discarding gnulib changes.
2012-10-01 19:10:20 +04:00
echo cleaning up submodules...
git submodule foreach 'git clean -dfqx && git reset --hard'
fi
2011-02-11 20:35:54 +03:00
echo running bootstrap$no_git ...
./bootstrap$no_git --bootstrap-sync && bootstrap_hash > $curr_status \
|| { echo "Failed to bootstrap, please investigate." ; exit 1; }
fi
2009-07-10 12:01:04 +04:00
fi
2012-06-21 17:50:41 +04:00
test -n " $NOCONFIGURE " && exit 0
2010-02-23 03:01:31 +03:00
cd " $THEDIR "
2005-11-02 16:19:10 +03:00
2010-02-23 03:01:31 +03:00
if test " x $OBJ_DIR " != x; then
2005-11-02 16:19:10 +03:00
mkdir -p " $OBJ_DIR "
cd " $OBJ_DIR "
fi
2012-06-15 21:46:51 +04:00
if test -z " $* " && test -z " $EXTRA_ARGS " && test -f config.status; then
2010-03-26 02:37:32 +03:00
./config.status --recheck
else
$srcdir /configure $EXTRA_ARGS " $@ "
fi && {
2008-02-05 22:27:37 +03:00
echo
2007-01-26 14:12:56 +03:00
echo "Now type 'make' to compile libvirt."
}