configure: libtool 1.5 tweaks
authorYang Tse <yangsita@gmail.com>
Tue, 20 Dec 2011 13:02:00 +0000 (14:02 +0100)
committerYang Tse <yangsita@gmail.com>
Tue, 20 Dec 2011 13:02:57 +0000 (14:02 +0100)
buildconf
configure.ac
m4/.gitignore
m4/cares-override.m4
m4/zz50-xc-ovr.m4 [new file with mode: 0644]

index f2e9ea5..c42f8a1 100755 (executable)
--- a/buildconf
+++ b/buildconf
@@ -1,12 +1,28 @@
 #!/bin/sh
 
 #--------------------------------------------------------------------------
+# die prints argument string to stdout and exits this shell script.
+#
+die(){
+  echo "buildconf: $@"
+  exit 1
+}
+
+#--------------------------------------------------------------------------
 # findtool works as 'which' but we use a different name to make it more
 # obvious we aren't using 'which'! ;-)
 #
 findtool(){
   file="$1"
 
+  if { echo "$file" | grep "/" >/dev/null 2>&1; } then
+    # when file is given with a path check it first
+    if test -f "$file"; then
+      echo "$file"
+      return
+    fi
+  fi
+
   old_IFS=$IFS; IFS=':'
   for path in $PATH
   do
@@ -51,21 +67,89 @@ if test ! -f configure.ac ||
 fi
 
 #--------------------------------------------------------------------------
-# this approach that tries 'glibtool' first is some kind of work-around for
-# some BSD-systems I believe that use to provide the GNU libtool named
-# glibtool, with 'libtool' being something completely different.
+# GNU libtool preliminary check
+#
+want_lt_major=1
+want_lt_minor=4
+want_lt_patch=2
+want_lt_version=1.4.2
+
+# This approach that tries 'glibtool' first is intended for systems that
+# have GNU libtool named as 'glibtool' and libtool not being GNU's.
+
 libtool=`findtool glibtool 2>/dev/null`
 if test ! -x "$libtool"; then
   libtool=`findtool ${LIBTOOL:-libtool}`
 fi
+if test -z "$libtool"; then
+  echo "buildconf: libtool not found."
+  echo "            You need GNU libtool $want_lt_version or newer installed."
+  exit 1
+fi
 
+lt_pver=`$libtool --version 2>/dev/null|head -n 1`
+lt_qver=`echo $lt_pver|sed -e "s/([^)]*)//g" -e "s/^[^0-9]*//g"`
+lt_version=`echo $lt_qver|sed -e "s/[- ].*//" -e "s/\([a-z]*\)$//"`
+if test -z "$lt_version"; then
+  echo "buildconf: libtool not found."
+  echo "            You need GNU libtool $want_lt_version or newer installed."
+  exit 1
+fi
+old_IFS=$IFS; IFS='.'; set $lt_version; IFS=$old_IFS
+lt_major=$1
+lt_minor=$2
+lt_patch=$3
+
+if test -z "$lt_major"; then
+  lt_status="bad"
+elif test "$lt_major" -gt "$want_lt_major"; then
+  lt_status="good"
+elif test "$lt_major" -lt "$want_lt_major"; then
+  lt_status="bad"
+elif test -z "$lt_minor"; then
+  lt_status="bad"
+elif test "$lt_minor" -gt "$want_lt_minor"; then
+  lt_status="good"
+elif test "$lt_minor" -lt "$want_lt_minor"; then
+  lt_status="bad"
+elif test -z "$lt_patch"; then
+  lt_status="bad"
+elif test "$lt_patch" -gt "$want_lt_patch"; then
+  lt_status="good"
+elif test "$lt_patch" -lt "$want_lt_patch"; then
+  lt_status="bad"
+else
+  lt_status="good"
+fi
+if test "$lt_status" != "good"; then
+  echo "buildconf: libtool version $lt_version found."
+  echo "            You need GNU libtool $want_lt_version or newer installed."
+  exit 1
+fi
+
+#--------------------------------------------------------------------------
+# GNU libtoolize check
+#
 if test -z "$LIBTOOLIZE"; then
-  # set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
-  # $libtool is already the full path
+  # use (g)libtoolize from same location as (g)libtool
   libtoolize="${libtool}ize"
 else
   libtoolize=`findtool $LIBTOOLIZE`
 fi
+if test ! -f "$libtoolize"; then
+  echo "buildconf: libtoolize not found."
+  echo "            You need GNU libtoolize $want_lt_version or newer installed."
+  exit 1
+fi
+
+#--------------------------------------------------------------------------
+# perl check
+#
+PERL=`findtool ${PERL:-perl}`
+if test -z "$PERL"; then
+  echo "buildconf: perl not found"
+  exit 1
+fi
 
 #--------------------------------------------------------------------------
 # Remove files generated on previous buildconf/configure run.
@@ -95,6 +179,7 @@ for fname in .deps \
     libcares.pc \
     libtool \
     libtool.m4 \
+    libtool.m4.tmp \
     ltmain.sh \
     ltoptions.m4 \
     ltsugar.m4 \
@@ -110,8 +195,113 @@ done
 # run the correct scripts now
 #
 
-${libtoolize} --copy --automake --force
-${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS
-${AUTOHEADER:-autoheader}
-${AUTOCONF:-autoconf}
-${AUTOMAKE:-automake} --add-missing --copy
+echo "buildconf: running libtoolize"
+${libtoolize} --copy --automake --force || die "libtoolize command failed"
+
+# When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4
+# subdirectory and this local copy is patched to fix some warnings that
+# are triggered when running aclocal and using autoconf 2.62 or later.
+
+if test "$lt_major" = "1" && test "$lt_minor" = "5"; then
+  if test -z "$lt_patch" || test "$lt_patch" -lt "26"; then
+    echo "buildconf: copying libtool.m4 to local m4 subdir"
+    ac_dir=`${ACLOCAL:-aclocal} --print-ac-dir`
+    if test -f $ac_dir/libtool.m4; then
+      cp -f $ac_dir/libtool.m4 m4/libtool.m4
+    else
+      echo "buildconf: $ac_dir/libtool.m4 not found"
+    fi
+    if test -f m4/libtool.m4; then
+      echo "buildconf: renaming some variables in local m4/libtool.m4"
+      $PERL -i.tmp -pe \
+        's/lt_prog_compiler_pic_works/lt_cv_prog_compiler_pic_works/g; \
+         s/lt_prog_compiler_static_works/lt_cv_prog_compiler_static_works/g;' \
+        m4/libtool.m4
+      rm -f m4/libtool.m4.tmp
+    fi
+  fi
+fi
+
+if test -f m4/libtool.m4; then
+  echo "buildconf: converting all mv to mv -f in local m4/libtool.m4"
+  $PERL -i.tmp -pe 's/\bmv +([^-\s])/mv -f $1/g' m4/libtool.m4
+  rm -f m4/libtool.m4.tmp
+fi
+
+echo "buildconf: running aclocal"
+${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS || die "aclocal command failed"
+
+echo "buildconf: converting all mv to mv -f in local aclocal.m4"
+$PERL -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
+
+echo "buildconf: running autoheader"
+${AUTOHEADER:-autoheader} || die "autoheader command failed"
+
+echo "buildconf: running autoconf"
+${AUTOCONF:-autoconf} || die "autoconf command failed"
+
+echo "buildconf: running automake"
+${AUTOMAKE:-automake} --add-missing --copy || die "automake command failed"
+
+#--------------------------------------------------------------------------
+# GNU libtool complementary check
+#
+# Depending on the libtool and automake versions being used, config.guess
+# might not be installed in the subdirectory until automake has finished.
+# So we can not attempt to use it until this very last buildconf stage.
+#
+if test ! -f ./config.guess; then
+  echo "buildconf: config.guess not found"
+else
+  buildhost=`./config.guess 2>/dev/null|head -n 1`
+  case $buildhost in
+    *-*-darwin*)
+      need_lt_major=1
+      need_lt_minor=5
+      need_lt_patch=26
+      need_lt_check="yes"
+      ;;
+    *-*-hpux*)
+      need_lt_major=1
+      need_lt_minor=5
+      need_lt_patch=24
+      need_lt_check="yes"
+      ;;
+  esac
+  if test ! -z "$need_lt_check"; then
+    if test -z "$lt_major"; then
+      lt_status="bad"
+    elif test "$lt_major" -gt "$need_lt_major"; then
+      lt_status="good"
+    elif test "$lt_major" -lt "$need_lt_major"; then
+      lt_status="bad"
+    elif test -z "$lt_minor"; then
+      lt_status="bad"
+    elif test "$lt_minor" -gt "$need_lt_minor"; then
+      lt_status="good"
+    elif test "$lt_minor" -lt "$need_lt_minor"; then
+      lt_status="bad"
+    elif test -z "$lt_patch"; then
+      lt_status="bad"
+    elif test "$lt_patch" -gt "$need_lt_patch"; then
+      lt_status="good"
+    elif test "$lt_patch" -lt "$need_lt_patch"; then
+      lt_status="bad"
+    else
+      lt_status="good"
+    fi
+    if test "$lt_status" != "good"; then
+      need_lt_version="$need_lt_major.$need_lt_minor.$need_lt_patch"
+      echo "buildconf: libtool version $lt_version found."
+      echo "            $buildhost requires GNU libtool $need_lt_version or newer installed."
+      rm -f configure
+      exit 1
+    fi
+  fi
+fi
+
+#--------------------------------------------------------------------------
+# Finished successfully.
+#
+echo "buildconf: OK"
+exit 0
index ad6eef4..69dc2e6 100644 (file)
@@ -4,6 +4,7 @@ dnl Version not hardcoded here. Fetched later from ares_version.h
 AC_INIT([c-ares], [-],
   [c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares])
 
+XC_OVR_ZZ50
 CARES_OVERRIDE_AUTOCONF
 
 AC_CONFIG_SRCDIR([ares_ipv6.h])
index 38066dd..f0f1d4d 100644 (file)
@@ -1,4 +1,5 @@
 libtool.m4
+libtool.m4.tmp
 ltoptions.m4
 ltsugar.m4
 ltversion.m4
index 101ca61..afd7aee 100644 (file)
@@ -1,9 +1,8 @@
 #***************************************************************************
-# $Id$
 #***************************************************************************
 
 # File version for 'aclocal' use. Keep it a single number.
-# serial 4
+# serial 5
 
 dnl CARES_OVERRIDE_AUTOCONF
 dnl -------------------------------------------------
@@ -17,16 +16,6 @@ AC_BEFORE([$0],[AC_PROG_LIBTOOL])
 # using cares-override.m4
 ])
 
-dnl Override some Libtool tests
-dnl -------------------------------------------------
-dnl This is done to prevent Libtool 1.5.X from doing
-dnl unnecesary C++, Fortran and Java tests and reduce
-dnl resulting configure script by nearly 300 Kb.
-
-m4_define([AC_LIBTOOL_LANG_CXX_CONFIG],[:])
-m4_define([AC_LIBTOOL_LANG_F77_CONFIG],[:])
-m4_define([AC_LIBTOOL_LANG_GCJ_CONFIG],[:])
-
 dnl Override Autoconf's AC_LANG_PROGRAM (C)
 dnl -------------------------------------------------
 dnl This is done to prevent compiler warning
diff --git a/m4/zz50-xc-ovr.m4 b/m4/zz50-xc-ovr.m4
new file mode 100644 (file)
index 0000000..7e9ae59
--- /dev/null
@@ -0,0 +1,60 @@
+#---------------------------------------------------------------------------
+#
+# zz50-xc-ovr.m4
+#
+# Copyright (c) 2011 Daniel Stenberg <daniel@haxx.se>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#---------------------------------------------------------------------------
+
+# serial 1
+
+
+dnl The funny name of this file is intentional in order to make it
+dnl sort alphabetically after any libtool, autoconf or automake
+dnl provided .m4 macro file that might get copied into this same
+dnl subdirectory. This allows that macro (re)definitions from this
+dnl file may override those provided in other files.
+
+
+dnl Override some language related macros
+dnl -------------------------------------------------
+dnl This is done to prevent Libtool 1.5.X from doing
+dnl unnecesary C++, Fortran and Java tests when only
+dnl using C language and reduce resulting configure
+dnl script by nearly 300 Kb.
+
+m4_ifdef([AC_LIBTOOL_LANG_CXX_CONFIG],
+  [m4_undefine([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_define([AC_LIBTOOL_LANG_CXX_CONFIG],[:])
+
+m4_ifdef([AC_LIBTOOL_LANG_F77_CONFIG],
+  [m4_undefine([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_define([AC_LIBTOOL_LANG_F77_CONFIG],[:])
+
+m4_ifdef([AC_LIBTOOL_LANG_GCJ_CONFIG],
+  [m4_undefine([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_define([AC_LIBTOOL_LANG_GCJ_CONFIG],[:])
+
+
+dnl XC_OVR_ZZ50
+dnl -------------------------------------------------
+dnl Placing a call to this macro in configure.ac will
+dnl make macros in this file visible to other macros
+dnl used for same configure script, overriding those
+dnl provided elsewhere.
+
+AC_DEFUN([XC_OVR_ZZ50],
+  [AC_BEFORE([$0],[AC_PROG_LIBTOOL])])
+