Merge from emacs-24; up to 2014-05-15T16:55:18Z!jan.h.d@swipnet.se
[bpt/emacs.git] / autogen.sh
index 880f21f..32f86ab 100755 (executable)
@@ -32,7 +32,7 @@
 
 ## Tools we need:
 ## Note that we respect the values of AUTOCONF etc, like autoreconf does.
 
 ## Tools we need:
 ## Note that we respect the values of AUTOCONF etc, like autoreconf does.
-progs="autoconf automake"
+progs="autoconf automake pkg-config"
 
 ## Minimum versions we need:
 autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac`
 
 ## Minimum versions we need:
 autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac`
@@ -41,6 +41,7 @@ autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac`
 ## AM_INIT_AUTOMAKE call.
 automake_min=`sed -n 's/^ *AM_INIT_AUTOMAKE(\([0-9\.]*\)).*/\1/p' configure.ac`
 
 ## AM_INIT_AUTOMAKE call.
 automake_min=`sed -n 's/^ *AM_INIT_AUTOMAKE(\([0-9\.]*\)).*/\1/p' configure.ac`
 
+pkg_config_min=`sed -n 's/^ *PKG_PROG_PKG_CONFIG(\([0-9\.]*\)).*/\1/p' configure.ac`
 
 ## $1 = program, eg "autoconf".
 ## Echo the version string, eg "2.59".
 
 ## $1 = program, eg "autoconf".
 ## Echo the version string, eg "2.59".
@@ -50,7 +51,7 @@ automake_min=`sed -n 's/^ *AM_INIT_AUTOMAKE(\([0-9\.]*\)).*/\1/p' configure.ac`
 get_version ()
 {
     ## Remove eg "./autogen.sh: line 50: autoconf: command not found".
 get_version ()
 {
     ## Remove eg "./autogen.sh: line 50: autoconf: command not found".
-    $1 --version 2>&1 | sed -e '/not found/d' -n -e '1 s/.* \([1-9][0-9\.]*\).*/\1/p'
+    $1 --version 2>&1 | sed -e '/not found/d' -e 's/.* //' -n -e '1 s/\([0-9][0-9\.]*\).*/\1/p'
 }
 
 ## $1 = version string, eg "2.59"
 }
 
 ## $1 = version string, eg "2.59"
@@ -76,7 +77,7 @@ minor_version ()
 check_version ()
 {
     ## Respect eg $AUTOMAKE if it is set, like autoreconf does.
 check_version ()
 {
     ## Respect eg $AUTOMAKE if it is set, like autoreconf does.
-    uprog=`echo $1 | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+    uprog=`echo $1 | sed -e 's/-/_/g' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
 
     eval uprog=\$${uprog}
 
 
     eval uprog=\$${uprog}
 
@@ -114,7 +115,9 @@ missing=
 
 for prog in $progs; do
 
 
 for prog in $progs; do
 
-    eval min=\$${prog}_min
+    sprog=`echo "$prog" | sed 's/-/_/g'`
+
+    eval min=\$${sprog}_min
 
     echo "Checking for $prog (need at least version $min)..."
 
 
     echo "Checking for $prog (need at least version $min)..."
 
@@ -133,7 +136,7 @@ for prog in $progs; do
 
     if [ $retval -ne 0 ]; then
         missing="$missing $prog"
 
     if [ $retval -ne 0 ]; then
         missing="$missing $prog"
-        eval ${prog}_why=\""$stat"\"
+        eval ${sprog}_why=\""$stat"\"
     fi
 
 done
     fi
 
 done
@@ -147,7 +150,9 @@ Building Emacs from Bzr requires the following specialized programs:
 EOF
 
     for prog in $progs; do
 EOF
 
     for prog in $progs; do
-        eval min=\$${prog}_min
+        sprog=`echo "$prog" | sed 's/-/_/g'`
+
+        eval min=\$${sprog}_min
 
         echo "$prog (minimum version $min)"
     done
 
         echo "$prog (minimum version $min)"
     done
@@ -159,7 +164,9 @@ Your system seems to be missing the following tool(s):
 EOF
 
     for prog in $missing; do
 EOF
 
     for prog in $missing; do
-        eval why=\$${prog}_why
+        sprog=`echo "$prog" | sed 's/-/_/g'`
+
+        eval why=\$${sprog}_why
 
         echo "$prog ($why)"
     done
 
         echo "$prog ($why)"
     done
@@ -188,7 +195,7 @@ this script.
 If you know that the required versions are in your PATH, but this
 script has made an error, then you can simply run
 
 If you know that the required versions are in your PATH, but this
 script has made an error, then you can simply run
 
-autoreconf -i -I m4
+autoreconf -fi -I m4
 
 instead of this script.
 
 
 instead of this script.
 
@@ -198,18 +205,108 @@ EOF
     exit 1
 fi
 
     exit 1
 fi
 
-echo "Your system has the required tools, running autoreconf..."
+# If automake is installed in a nonstandard location, find the standard
+# location if possible and append it to ACLOCAL_PATH.  That way, it will
+# find the pkg.m4 that is installed in the standard location.
+echo "Checking for pkg.m4..."
+AUTORECONF_ENV=
+env_space=
+ac_dir=`aclocal --print-ac-dir` || {
+    cat <<EOF
+There was a problem running 'aclocal --print-ac-dir'.
+The aclocal program is part of automake.
+Please check your automake installation.
+EOF
+
+    exit 1
+}
+
+test -n "$ac_dir" && test -r "$ac_dir/pkg.m4" || {
+
+  # Maybe ACLOCAL_PATH is already set-up.
+  if test -n "$ACLOCAL_PATH"; then
+    oIFS=$IFS
+    IFS=:
+    for dir in $ACLOCAL_PATH; do
+      if test -r "$dir/pkg.m4"; then
+       AUTORECONF_ENV="ACLOCAL_PATH='$ACLOCAL_PATH'"
+        env_space=' '
+       break
+      fi
+    done
+    IFS=$oIFS
+  fi
+
+  if test -z "$AUTORECONF_ENV"; then
+    oIFS=$IFS
+    IFS=:
+    before_first_aclocal=true
+    for dir in $PATH; do
+      if test -x "$dir/aclocal"; then
+        if $before_first_aclocal; then
+          before_first_aclocal=false
+        elif ac_dir=`"$dir/aclocal" --print-ac-dir` && test -r "$ac_dir/pkg.m4"
+        then
+          case $ACLOCAL_PATH in
+            '') ACLOCAL_PATH=$ac_dir;;
+            ?*) ACLOCAL_PATH=$ACLOCAL_PATH:$ac_dir;;
+          esac
+          export ACLOCAL_PATH
+          AUTORECONF_ENV="ACLOCAL_PATH='$ACLOCAL_PATH'"
+          env_space=' '
+          break
+        fi
+      fi
+    done
+    IFS=$oIFS
+  fi
+
+  ## OK, maybe pkg-config is in a weird place (eg on hydra).
+  if test -z "$AUTORECONF_ENV"; then
+    oIFS=$IFS
+    IFS=:
+    for dir in $PATH; do
+      if test -x "$dir/pkg-config"; then
+        ac_dir=`echo "$dir" | sed 's|bin$|share/aclocal|'`
+        if test -r "$ac_dir/pkg.m4"; then
+          case $ACLOCAL_PATH in
+            '') ACLOCAL_PATH=$ac_dir;;
+            ?*) ACLOCAL_PATH=$ACLOCAL_PATH:$ac_dir;;
+          esac
+          export ACLOCAL_PATH
+          AUTORECONF_ENV="ACLOCAL_PATH='$ACLOCAL_PATH'"
+          env_space=' '
+          break
+        fi
+      fi
+    done
+    IFS=$oIFS
+  fi
+
+  if test -z "$AUTORECONF_ENV"; then
+    cat <<EOF
+The version of aclocal that you are using cannot find the pkg.m4 file that
+pkg-config provides.  If it is installed in some unusual directory /FOO/BAR,
+set ACLOCAL_PATH='/FOO/BAR' in the environment and run this script again.
+EOF
+    exit 1
+  fi
+}
+echo ok
+
+echo 'Your system has the required tools.'
+echo "Running \"$AUTORECONF_ENV${env_space}autoreconf -fi -I m4\" ..."
 
 
 ## Let autoreconf figure out what, if anything, needs doing.
 ## Use autoreconf's -f option in case autoreconf itself has changed.
 
 
 ## Let autoreconf figure out what, if anything, needs doing.
 ## Use autoreconf's -f option in case autoreconf itself has changed.
-autoreconf -f -i -I m4 || exit $?
+autoreconf -fi -I m4 || exit $?
 
 ## Create a timestamp, so that './autogen.sh; make' doesn't
 ## cause 'make' to needlessly run 'autoheader'.
 echo timestamp > src/stamp-h.in || exit
 
 
 ## Create a timestamp, so that './autogen.sh; make' doesn't
 ## cause 'make' to needlessly run 'autoheader'.
 echo timestamp > src/stamp-h.in || exit
 
-echo "You can now run \`./configure'."
+echo "You can now run \"./configure$env_space$AUTORECONF_ENV\"."
 
 exit 0
 
 
 exit 0