From f1a1df1e6c4fed8dc5816f6e09a0cfeed64bb71f Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Tue, 20 Dec 2011 14:02:00 +0100 Subject: [PATCH] configure: libtool 1.5 tweaks --- buildconf | 210 ++++++++++++++++++++++++++++++++++++++++--- configure.ac | 1 + m4/.gitignore | 1 + m4/cares-override.m4 | 13 +-- m4/zz50-xc-ovr.m4 | 60 +++++++++++++ 5 files changed, 263 insertions(+), 22 deletions(-) create mode 100644 m4/zz50-xc-ovr.m4 diff --git a/buildconf b/buildconf index f2e9ea5c..c42f8a16 100755 --- a/buildconf +++ b/buildconf @@ -1,5 +1,13 @@ #!/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'! ;-) @@ -7,6 +15,14 @@ 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 diff --git a/configure.ac b/configure.ac index ad6eef4c..69dc2e63 100644 --- a/configure.ac +++ b/configure.ac @@ -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]) diff --git a/m4/.gitignore b/m4/.gitignore index 38066ddf..f0f1d4db 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -1,4 +1,5 @@ libtool.m4 +libtool.m4.tmp ltoptions.m4 ltsugar.m4 ltversion.m4 diff --git a/m4/cares-override.m4 b/m4/cares-override.m4 index 101ca618..afd7aeed 100644 --- a/m4/cares-override.m4 +++ b/m4/cares-override.m4 @@ -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 index 00000000..7e9ae592 --- /dev/null +++ b/m4/zz50-xc-ovr.m4 @@ -0,0 +1,60 @@ +#--------------------------------------------------------------------------- +# +# zz50-xc-ovr.m4 +# +# Copyright (c) 2011 Daniel Stenberg +# +# 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])]) +