• S
    maint: improve usage of autogen's --no-git · 0c77a54e
    Stefan Zimmermann 提交于
    If you build libvirt with the --no-git option, then gnulib requires
    either $GNULIB_SRCDIR in the environment or --gnulib-srcdir on the
    command line.  But we had not been supporting its use from the
    command line.  This patch is a bit picky: --gnulib-srcdir must be
    passed immediately after --no-git; but since we don't reorder
    arguments, and since we already required --no-git to be first to
    have any effect, it's not too horrible.  It also does the wrong
    thing if you include spaces in your arguments, but developers
    doing that deserve what they get, right?
    Signed-off-by: NStefan Zimmermann <stzi@linux.vnet.ibm.com>
    Signed-off-by: NEric Blake <eblake@redhat.com>
    0c77a54e
autogen.sh 3.6 KB
#!/bin/sh
# Run this to generate all the initial makefiles, etc.

set -e

srcdir=`dirname "$0"`
test -z "$srcdir" && srcdir=.

THEDIR=`pwd`
cd "$srcdir"

test -f src/libvirt.c || {
    echo "You must run this script in the top-level libvirt directory"
    exit 1
}


EXTRA_ARGS=
no_git=
if test "x$1" = "x--no-git"; then
  no_git=" $1"
  shift
  case "$1 $2" in
    --gnulib-srcdir=*) no_git="$no_git $1"; shift ;;
    --gnulib-srcdir\ *) no_git="$no_git $1=$2"; shift; shift;;
  esac
fi
if test -z "$NOCONFIGURE" ; then
  if test "x$1" = "x--system"; then
    shift
    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"
    echo "Running ./configure with $EXTRA_ARGS $@"
  else
    if test -z "$*" && test ! -f "$THEDIR/config.status"; then
        echo "I am going to run ./configure with no arguments - if you wish"
        echo "to pass any to it, please specify them on the $0 command line."
    fi
  fi
fi

# 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.
# The third ensures that whenever we change the set of local gnulib diffs,
# we rerun bootstrap to pull in those diffs.
bootstrap_hash()
{
    if test "$no_git"; then
        echo no-git
        return
    fi
    git submodule status | sed 's/^[ +-]//;s/ .*//'
    git hash-object bootstrap.conf
    git ls-tree -d HEAD gnulib/local | awk '{print $3}'
}

# 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.
# 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.
# Only run bootstrap from a git checkout, never from a tarball.
if test -d .git || test -f .git; then
    curr_status=.git-module-status t=
    if test "$no_git"; then
        t=no-git
    elif test -d .gnulib; then
        t=$(bootstrap_hash; git diff .gnulib)
    fi
    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
    # Keep this test in sync with cfg.mk:_update_required
    if test "$t" = "$(cat $curr_status 2>/dev/null)" \
        && test -f "po/Makevars" && test -f AUTHORS; then
        # good, it's up to date, all we need is autoreconf
        autoreconf -if
    else
        if test -z "$no_git" && test ${CLEAN_SUBMODULE+set}; then
            echo cleaning up submodules...
            git submodule foreach 'git clean -dfqx && git reset --hard'
        fi
        echo running bootstrap$no_git...
        ./bootstrap$no_git --bootstrap-sync && bootstrap_hash > $curr_status \
            || { echo "Failed to bootstrap, please investigate."; exit 1; }
    fi
fi

test -n "$NOCONFIGURE" && exit 0

cd "$THEDIR"

if test "x$OBJ_DIR" != x; then
    mkdir -p "$OBJ_DIR"
    cd "$OBJ_DIR"
fi

if test -z "$*" && test -z "$EXTRA_ARGS" && test -f config.status; then
    ./config.status --recheck
else
    $srcdir/configure $EXTRA_ARGS "$@"
fi && {
    echo
    echo "Now type 'make' to compile libvirt."
}
反馈
建议
客服 返回
顶部