Whamcloud - gitweb
LU-1187 tests: add create remote directory to racer
[fs/lustre-release.git] / autogen.sh
index d8ccf52..d87fbb6 100644 (file)
-#!/bin/bash
+#!/bin/sh
+
+# NOTE: Please avoid bashisms (bash specific syntax) in this script
+
+# install Lustre Git commit hooks by default - LU-2083
+for HOOK in commit-msg prepare-commit-msg; do
+       [ -e .git/hooks/$HOOK ] || ln -sf ../build/$HOOK .git/hooks/
+done
 
 # taken from gnome-common/macros2/autogen.sh
 compare_versions() {
-    ch_min_version=$1
-    ch_actual_version=$2
-    ch_status=0
-    IFS="${IFS=         }"; ch_save_IFS="$IFS"; IFS="."
-    set $ch_actual_version
-    for ch_min in $ch_min_version; do
-        ch_cur=`echo $1 | sed 's/[^0-9].*$//'`; shift # remove letter suffixes
-        if [ -z "$ch_min" ]; then break; fi
-        if [ -z "$ch_cur" ]; then ch_status=1; break; fi
-        if [ $ch_cur -gt $ch_min ]; then break; fi
-        if [ $ch_cur -lt $ch_min ]; then ch_status=1; break; fi
-    done
-    IFS="$ch_save_IFS"
-    return $ch_status
+       ch_min_version=$1
+       ch_actual_version=$2
+       ch_status=0
+       IFS="${IFS=     }"; ch_save_IFS="$IFS"; IFS="."
+       set $ch_actual_version
+       for ch_min in $ch_min_version; do
+               # remove letter suffixes
+               ch_cur=$(echo $1 | sed 's/[^0-9].*$//'); shift
+               if [ -z "$ch_min" ]; then break; fi
+               if [ -z "$ch_cur" ]; then ch_status=1; break; fi
+               if [ $ch_cur -gt $ch_min ]; then break; fi
+               if [ $ch_cur -lt $ch_min ]; then ch_status=1; break; fi
+       done
+       IFS="$ch_save_IFS"
+       return $ch_status
 }
 
 error_msg() {
-       echo "$cmd is $1.  version $required is required to build Lustre."
-
-       if [ -e /usr/lib/autolustre/bin/$cmd ]; then
-               cat >&2 <<-EOF
-               You apparently already have Lustre-specific autoconf/make RPMs
-               installed on your system at /usr/lib/autolustre/share/$cmd.
-               Please set your PATH to point to those versions:
-
-               export PATH="/usr/lib/autolustre/bin:\$PATH"
-               EOF
-       else
-               cat >&2 <<-EOF
-               CFS provides RPMs which can be installed alongside your
-               existing autoconf/make RPMs, if you are nervous about
-               upgrading.  See
-
-               ftp://ftp.lustre.org/pub/other/autolustre/README.autolustre
-
-               You may be able to download newer version from:
-
-               http://ftp.gnu.org/gnu/$cmd/$cmd-$required.tar.gz
-       EOF
+       echo "$cmd is $1.  Version $required (or higher) is"\
+            " required to build Lustre."
+
+       if [ ! -x /usr/bin/lsb_release ]; then
+               echo "lsb_release could not be found.  "\
+                    "If it were available more help on how to resolve this"
+               echo "situation would be available."
+                exit 1
        fi
-       [ "$cmd" = "autoconf" -a "$required" = "2.57" ] && cat >&2 <<EOF
-
-or for RH9 systems you can use:
 
-ftp://fr2.rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/autoconf-2.57-3.noarch.rpm
+       local dist_id="$(lsb_release -is)"
+       local howto=""
+       howto() {
+               echo -e "To install $cmd, you can use the command:\n# $1"
+       }
+       case $dist_id in
+                Ubuntu|Debian) howto "apt-get install $cmd" ;;
+       CentOS|RedHat*|Fedora*) howto "yum install $cmd" ;;
+                        SUSE*) howto "yast -i $cmd" ;;
+                            *) cat <<EOF
+Installation instructions for the package $cmd on $dist_id are not known.
+If you know how to install the required package, please file a bug at
+http://bugs.whamcloud.com/ and include your distribution and the output from:
+"lsb_release -is" is: "$dist_id"
 EOF
-       [ "$cmd" = "automake-1.7" -a "$required" = "1.7.8" ] && cat >&2 <<EOF
-
-or for RH9 systems you can use:
+                       ;;
+       esac
 
-ftp://fr2.rpmfind.net/linux/fedora/core/1/i386/os/Fedora/RPMS/automake-1.7.8-1.noarch.rpm
-EOF
        exit 1
 }
 
 check_version() {
-    local tool
-    local cmd
-    local required
-    local version
-
-    tool=$1
-    cmd=$2
-    required=$3
-    echo -n "checking for $cmd $required... "
-    if ! $cmd --version >/dev/null ; then
-       error_msg "missing"
-    fi
-    version=$($cmd --version | awk "BEGIN { IGNORECASE=1 } /$tool \(GNU $tool\)/ { print \$4 }")
-    echo "found $version"
-    if ! compare_versions "$required" "$version" ; then
-       error_msg "too old"
-    fi
+       local tool
+       local cmd
+       local required
+       local version
+
+       tool=$1
+       cmd=$2
+       required=$3
+       echo -n "checking for $cmd >= $required... "
+       if ! $cmd --version >/dev/null ; then
+               error_msg "missing"
+       fi
+       version=$($cmd --version | awk "/$tool \(GNU/ { print \$4 }")
+       echo "found $version"
+       if ! compare_versions "$required" "$version" ; then
+               error_msg "too old"
+       fi
 }
 
 echo "Checking for a complete tree..."
-if ! [ -d build -a -d portals -a -d lustre ] ; then
-    cat >&2 <<EOF
-    This seems to be an incomplete checkout.  Please read
-    README.lustrecvs for details.
+REQUIRED_DIRS="build libcfs lnet lustre"
+OPTIONAL_DIRS="snmp portals"
+CONFIGURE_DIRS="libsysio lustre-iokit ldiskfs"
+
+for dir in $REQUIRED_DIRS ; do
+       if [ ! -d "$dir" ] ; then
+               cat >&2 <<EOF
+Your tree seems to be missing $dir.
+Please read README.lustrecvs for details.
 EOF
+               exit 1
+       fi
+       ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $PWD/$dir/autoconf"
+done
+# optional directories for Lustre
+for dir in $OPTIONAL_DIRS; do
+       if [ -d "$dir" ] ; then
+               ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $PWD/$dir/autoconf"
+       fi
+done
+
+found=false
+for AMVER in 1.9 1.10 1.11; do
+       if which automake-$AMVER 2> /dev/null; then
+               found=true
+               break
+       fi
+done
+
+if ! $found; then
+       cmd=automake required="1.9" error_msg "not found"
+       exit 1
 fi
 
-check_version automake automake-1.7 "1.7.8"
+[ "${AMVER#1.}" -ge "10" ] && AMOPT="-W no-portability"
+
+check_version automake automake-$AMVER "1.9"
 check_version autoconf autoconf "2.57"
-echo "Running aclocal..."
-aclocal-1.7
-echo "Running autoheader..."
-autoheader
-echo "Running automake..."
-automake-1.7 -a -c
-echo "Running autoconf..."
-autoconf
 
+run_cmd()
+{
+       cmd="$@"
+       echo -n "Running $cmd"
+       eval $cmd
+       res=$?
+       if [ $res -ne 0 ]; then
+               echo " failed: $res"
+               echo "Aborting"
+               exit 1
+       fi
+       echo
+}
+
+export ACLOCAL="aclocal-$AMVER"
+export AUTOMAKE="automake-$AMVER"
+
+run_cmd "$ACLOCAL $ACLOCAL_FLAGS"
+run_cmd "autoheader"
+run_cmd "$AUTOMAKE -a -c $AMOPT"
+run_cmd autoconf
+
+# Run autogen.sh in these directories
+PWD_SAVE=$PWD
+for dir in $CONFIGURE_DIRS; do
+       if [ -d $dir ] ; then
+               cd $dir
+               echo "Running autogen for $dir..."
+               run_cmd "sh autogen.sh"
+       fi
+       cd $PWD_SAVE
+done