freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

autotools version check in autogen.sh (Re: [ft-devel] Mac install instru


From: mpsuzuki
Subject: autotools version check in autogen.sh (Re: [ft-devel] Mac install instructions don't seem to exist)
Date: Wed, 31 Jan 2007 16:14:05 +0900

Dear Sir,

I thank Turner for his quick fix of autogen.sh for Mac OS X's
"glibtool" issue, on 2007-01-11.

On Fri, 29 Dec 2006 00:57:12 +0900
address@hidden wrote:
>>> In my personal opinion, putting some hooks to check autotools
>>> versions into autogen.sh is not bad idea.
>>
>>I don't object, but it doesn't have a high priority for me.
>
>Of course, it's task of me who proposed. I will write version
>checking hooks for autogen.sh, after 2007-01-15. Please wait.

Following is my first manuscript patch to add the version checking
feature to autogen.sh. In addition to basic aclocal/libtoolize/autoconf,
it scans aclocal-1.9, glibtoolize, libtoolize-1.5, autoconf-2.59
for fallbacking.

This is too lengthy for other developers to maintain, possibly
I can reduce to 50% shorter. If more compression is essential,
please let me know.

Regards,
mpsuzuki

--

Index: autogen.sh
===================================================================
RCS file: /sources/freetype/freetype2/autogen.sh,v
retrieving revision 1.6
diff -u -r1.6 autogen.sh
--- autogen.sh  12 Jan 2007 09:28:44 -0000      1.6
+++ autogen.sh  31 Jan 2007 06:43:31 -0000
@@ -20,6 +20,123 @@
   fi
 }
 
+compare_version_number ()
+{
+  r=`( echo $1 ; echo $2 ) | tr ',' ' ' |  \
+      awk 'BEGIN{getline;vn=split($0,v," ")}\
+           {\
+             for(i=1;i<=NF;i++)\
+             {\
+               if(v[i] > $i){print "no";exit}\
+               if($i > v[i]){print "yes";exit}\
+             }\
+             if ( length( v[NF + 1] ) > 0 ) { print "no" } \
+             else { print "yes" } \
+           }'`
+
+  if test x"${r}" = xyes ; then
+    return 0
+  else
+    return 1
+  fi
+}
+
+
+check_program_version ()
+{
+  prog_name=$1
+  min_version=$2
+  vendor_keyword=$3
+
+  matched_prog=""
+
+  p=""
+  for d in `echo ${PATH} | tr ':' ' '`
+  do
+    if test -x ${d}/${prog_name} ; then
+      p=${d}/${prog_name}
+      break;
+    fi
+  done
+
+  if test x = x"${p}" ; then
+    return 1
+  fi
+
+  echo -n 'Checking version of '${p}' (>= '${min_version}')... '
+
+  v=`${p} --version 2>/dev/null | head -1`
+  if test x != x"${v}" ; then
+    v=`${p} --version 2>&1 | head -1`
+  fi
+  case `echo ${v} | wc -w` in
+  0) # cannot extract program version
+    ;;
+
+  1) # assumed format: "[version]"
+    echo -n ${v}", "
+    vn=`echo ${v} | sed 's/[^0-9 ][^0-9 ]*/ & /g;s/  */,/g;s/\.,//g' `
+    vm=`echo ${min_version} | sed 's/\./ /g;s/[^0-9 ]/ &/g;s/  */,/g' `
+    compare_version_number ${vm} ${vn}
+    if test 0 != $? ; then
+      echo "too old"
+    else
+      echo "ok"
+      matched_prog=${p}
+    fi
+    ;;
+
+  3) # assumed format: "[progname] version [version]"
+    vn=`echo ${v} | sed 's/^.* //' `
+    echo -n ${vn}", "
+    vn=`echo ${vn} | sed 's/[^0-9 ][^0-9 ]*/ & /g;s/  */,/g;s/\.,//g' `
+    vm=`echo ${min_version} | sed 's/\./ /g;s/[^0-9 ]/ &/g;s/  */,/g' `
+    compare_version_number ${vm} ${vn}
+    if test 0 != $? ; then
+      echo "too old"
+    else
+      echo "ok"
+      matched_prog=${p}
+    fi
+    ;;
+
+  *) # assumed format: "[progname] ([vendor]) [version] [extra-comment]"
+    v=`echo ${v} | sed 's/  */ /g;s/ /_/g;s/_(/ (/g;s/)_/) /g;s/\.,//g'`
+    vn=`echo ${v} | cut -d" " -f3`
+    echo -n ${vn}", "
+    vn=`echo ${vn} | sed 's/[^0-9 ][^0-9 ]*/ & /g;s/  */,/g;;s/\.,//g' `
+    vm=`echo ${min_version} | sed 's/\./ /g;s/[^0-9 ]/ &/g;s/  */,/g' `
+    compare_version_number ${vm} ${vn}
+    if test 0 != $? ; then
+      echo "too old"
+    else
+      echo "ok"
+
+      vendor=`echo ${v} | cut -d" " -f2`
+      if test x != x"${vendor}" -a x != x"${vendor_keyword}"; then
+        echo -n 'Checking ${p}...'
+        case ${vendor} in
+        *${vendor_keyword}* )
+          echo ' '${vendor_keyword}' '${prog_name}
+          ;;
+        *)
+          echo ' not '${vendor_keyword}' '${prog_name}
+          exit 1
+          ;;
+        esac
+      fi
+      matched_prog=${p}
+    fi
+    ;;
+  esac
+
+  if test x != x"${matched_prog}" ; then
+    return 0
+  else
+    return 1
+  fi
+}
+
 if test ! -f ./builds/unix/configure.raw; then
   echo "You must be in the same directory as \`autogen.sh'."
   echo "Bootstrapping doesn't work if srcdir != builddir."
@@ -40,16 +157,50 @@
 sed -e "s;@VERSION@;$freetype_major$freetype_minor$freetype_patch;" \
     < configure.raw > configure.ac
 
-# On MacOS X, the GNU libtool is named `glibtool'.
-HOSTOS=`uname`
-LIBTOOLIZE=libtoolize
-if test "$HOSTOS"x = Darwinx; then
-  LIBTOOLIZE=glibtoolize
+
+# autotool version check
+for p in aclocal aclocal-1.9
+do
+  if test x = x"${ACLOCAL}" ; then
+    check_program_version $p 1.9.6
+    if test 0 = $? ; then
+      ACLOCAL=$p
+    fi
+  fi
+done
+if test x = x"${ACLOCAL}" ; then
+  exit 1
+fi
+
+for p in libtoolize libtoolize-1.5 glibtoolize
+do
+  if test x = x"${LIBTOOLIZE}" ; then
+    check_program_version $p 1.5.22
+    if test 0 = $? ; then
+      LIBTOOLIZE=$p
+    fi
+  fi
+done
+if test x = x"${LIBTOOLIZE}" ; then
+  exit 1
+fi
+
+for p in autoconf autoconf-2.59
+do
+  if test x = x"${AUTOCONF}" ; then
+    check_program_version $p 2.59c
+    if test 0 = $? ; then
+      AUTOCONF=$p
+    fi
+  fi
+done
+if test x = x"${AUTOCONF}" ; then
+  exit 1
 fi
 
-run aclocal -I . --force
+run $ACLOCAL -I . --force
 run $LIBTOOLIZE --force --copy
-run autoconf --force
+run $AUTOCONF --force
 
 chmod +x mkinstalldirs
 chmod +x install-sh




reply via email to

[Prev in Thread] Current Thread [Next in Thread]