Whamcloud - gitweb
LU-831 header: struct bit field should be unsigned type
[fs/lustre-release.git] / build / autogen.sh
index e32e26a..cd7e601 100644 (file)
@@ -19,41 +19,25 @@ compare_versions() {
 }
 
 error_msg() {
-       echo "$cmd is $1.  version $required is required to build Lustre."
+       echo "$cmd is $1.  Version $required (or higher) 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/$tool/$tool-$required.tar.gz
-       EOF
+       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\nsituation 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
-EOF
-       [ "$cmd" = "automake-1.7" -a "$required" = "1.7.8" ] && cat >&2 <<EOF
+       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" ;;
+                            *) echo -e "\nInstallation instructions for the package $cmd on $dist_id are not known.\nIf you know how to install the required package, please file a bug at\nhttp://bugs.whamcloud.com/ and include your distribution and the output from:\n\"lsb_release -is\" is: \"$dist_id\"" ;;
+       esac
 
-or for RH9 systems you can use:
-
-ftp://fr2.rpmfind.net/linux/fedora/core/1/i386/os/Fedora/RPMS/automake-1.7.8-1.noarch.rpm
-EOF
        exit 1
 }
 
@@ -66,7 +50,7 @@ check_version() {
     tool=$1
     cmd=$2
     required=$3
-    echo -n "checking for $cmd $required... "
+    echo -n "checking for $cmd >= $required... "
     if ! $cmd --version >/dev/null ; then
        error_msg "missing"
     fi
@@ -78,8 +62,17 @@ check_version() {
 }
 
 echo "Checking for a complete tree..."
-# required directories
-for dir in build lnet lustre ; do
+if [ -d kernel_patches ] ; then
+    # This is ldiskfs
+    REQUIRED_DIRS="build"
+    CONFIGURE_DIRS=""
+else
+    REQUIRED_DIRS="build libcfs lnet lustre"
+    OPTIONAL_DIRS="snmp portals"
+    CONFIGURE_DIRS="libsysio lustre-iokit ldiskfs"
+fi
+
+for dir in $REQUIRED_DIRS ; do
     if [ ! -d "$dir" ] ; then
        cat >&2 <<EOF
 Your tree seems to be missing $dir.
@@ -89,28 +82,59 @@ EOF
     fi
     ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $PWD/$dir/autoconf"
 done
-# some are optional
-for dir in snmp ; do
+# optional directories for Lustre
+for dir in $OPTIONAL_DIRS; do
     if [ -d "$dir" ] ; then
        ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $PWD/$dir/autoconf"
     fi
 done
 
-check_version automake automake-1.7 "1.7.8"
-check_version autoconf autoconf "2.57"
+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
 
-echo "Running aclocal-1.7 $ACLOCAL_FLAGS..."
-aclocal-1.7 $ACLOCAL_FLAGS
-echo "Running autoheader..."
-autoheader
-echo "Running automake-1.7..."
-automake-1.7 -a -c
-echo "Running autoconf..."
-autoconf
-
-if [ -d libsysio ] ; then
-    pushd libsysio >/dev/null
-    echo "Running autogen for libsysio..."
-    sh autogen.sh
-    popd >/dev/null
+if ! $found; then
+    cmd=automake required="1.9" error_msg "not found"
+    exit 1
 fi
+
+[ "${AMVER#1.}" -ge "10" ] && AMOPT="-W no-portability"
+
+check_version automake automake-$AMVER "1.9"
+check_version autoconf autoconf "2.57"
+
+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
+for dir in $CONFIGURE_DIRS; do
+    if [ -d $dir ] ; then
+        pushd $dir >/dev/null
+        echo "Running autogen for $dir..."
+        run_cmd "sh autogen.sh"
+        popd >/dev/null
+    fi
+done