diff --git a/build/autogen.sh b/build/autogen.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5d77897f135fb43580f9eeb21046f6d9d8b61ad9
--- /dev/null
+++ b/build/autogen.sh
@@ -0,0 +1,128 @@
+#!/bin/bash
+
+# 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
+}
+
+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
+
+		http://downloads.lustre.org/public/tools/autolustre/README.autolustre
+
+		You may be able to download newer version from:
+
+		http://ftp.gnu.org/gnu/$tool/$tool-$required.tar.gz
+	EOF
+	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
+
+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
+}
+
+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 "/$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 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.
+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
+
+check_version automake automake-1.7 "1.7.8"
+check_version autoconf autoconf "2.57"
+
+echo "Running aclocal-1.7 $ACLOCAL_FLAGS..."
+aclocal-1.7 $ACLOCAL_FLAGS || exit 1
+echo "Running autoheader..."
+autoheader || exit 1
+echo "Running automake-1.7..."
+automake-1.7 -a -c || exit 1
+echo "Running autoconf..."
+autoconf || exit 1
+
+# 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..."
+        sh autogen.sh || exit $?
+        popd >/dev/null
+    fi
+done