This patch add a simple autogen.sh for buildstrapping
the gnu build system. It also check the minimun version
of the gnu buildtool necessary for clamav.

Signed-off-by: Elia Pinto <gitter.spi...@gmail.com>
---
 Makefile.am   |    2 +-
 README-prereq |   10 +++
 autogen.sh    |  200 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 211 insertions(+), 1 deletions(-)
 create mode 100644 README-prereq
 create mode 100755 autogen.sh

diff --git a/Makefile.am b/Makefile.am
index 3970e2e..b3c02a5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,7 +19,7 @@
 ACLOCAL_AMFLAGS=-I m4
 
 SUBDIRS = libltdl libclamav clamscan clamd clamdscan freshclam sigtool 
clamconf database docs etc clamav-milter test clamdtop clambc unit_tests
-EXTRA_DIST = FAQ examples BUGS shared libclamav.pc.in 
libclamunrar_iface/Makefile.am libclamunrar_iface/Makefile.in UPGRADE 
COPYING.bzip2 COPYING.lzma COPYING.unrar COPYING.LGPL COPYING.llvm COPYING.file 
COPYING.zlib COPYING.getopt COPYING.regex COPYING.sha256 platform.h.in 
clamdscan/clamdscan.map win32
+EXTRA_DIST = FAQ examples BUGS shared libclamav.pc.in 
libclamunrar_iface/Makefile.am libclamunrar_iface/Makefile.in UPGRADE 
COPYING.bzip2 COPYING.lzma COPYING.unrar COPYING.LGPL COPYING.llvm COPYING.file 
COPYING.zlib COPYING.getopt COPYING.regex COPYING.sha256 platform.h.in 
clamdscan/clamdscan.map win32 README-prereq
 
 bin_SCRIPTS=clamav-config
 
diff --git a/README-prereq b/README-prereq
new file mode 100644
index 0000000..71169fe
--- /dev/null
+++ b/README-prereq
@@ -0,0 +1,10 @@
+This gives some notes on obtaining the tools required for development.
+I.E. the tools checked for by the bootstrap script and include:
+
+- Autoconf  <http://www.gnu.org/software/autoconf/> - version 2.59   or higher
+- Automake  <http://www.gnu.org/software/automake/> - version 1.11.1 or higher
+- libtool   <http://www.gnu.org/software/libtool/>  - version 2.2.10 or 
higher. 
+
+Note please try to install/build official packages for your system.
+If these programs are not available refer to the above site for
+instruction for installing it.
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..f41e365
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,200 @@
+#!/bin/sh
+#
+# $Id$
+# autogen.sh: autogen.sh script for clamav projects
+#
+# Copyright (c) 2010-2011 Elia Pinto <gitter.spi...@gmail.com>
+#
+# This program have the same copyright notice as clamav
+# itself
+#
+# Global Function and Variables
+#
+_PROGNAME="$0"
+#
+red=; grn=; lgn=; blu=; std=; 
+test "X$$TERM" != Xdumb \
+&&  test -t 1 2>/dev/null  \
+&& { \
+  red=''; \
+  grn=''; \
+  lgn=''; \
+  blu=''; \
+  std=''; \
+}
+
+Die()    {
+        color="$red"
+       echo "${color}${_PROGNAME}: Error: $@${std}" >&2
+       exit 1
+}
+
+Notice() {
+        color="$grn"
+       echo "${color}${_PROGNAME}: $@${std}" 
+}
+
+
+# Function Used for checking the Version Used for building
+# 
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+sort_ver() { # sort -V is not generally available
+  ver1="$1"
+  ver2="$2"
+
+  # split on '.' and compare each component
+  i=1
+  while : ; do
+    p1=$(echo "$ver1" | cut -d. -f$i)
+    p2=$(echo "$ver2" | cut -d. -f$i)
+    if [ ! "$p1" ]; then
+      echo "$1 $2"
+      break
+    elif [ ! "$p2" ]; then
+      echo "$2 $1"
+      break
+    elif [ ! "$p1" = "$p2" ]; then
+      if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
+        echo "$2 $1"
+      elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
+        echo "$1 $2"
+      else # numeric, then lexicographic comparison
+        lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
+        if [ "$lp" = "$p2" ]; then
+          echo "$1 $2"
+        else
+          echo "$2 $1"
+        fi
+      fi
+      break
+    fi
+    i=$(($i+1))
+  done
+}
+
+get_version() {
+  app=$1
+
+  $app --version >/dev/null 2>&1 || return 1
+
+  $app --version 2>&1 |
+  sed -n '# extract version within line
+          s/.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/
+          t done
+
+          # extract version at start of line
+          s/^\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/
+          t done
+
+          d
+
+          :done
+          #the following essentially does s/5.005/5.5/
+          s/\.0*\([1-9]\)/.\1/g
+          p
+          q'
+}
+
+check_versions() {
+  ret=0
+
+  while read app req_ver; do
+    # Honor $APP variables ($TAR, $AUTOCONF, etc.)
+    appvar=`echo $app | tr '[a-z]' '[A-Z]'`
+    test "$appvar" = TAR && appvar=AMTAR
+    eval "app=\${$appvar-$app}"
+    inst_ver=$(get_version $app)
+    if [ ! "$inst_ver" ]; then
+      echo "Error: '$app' not found" >&2
+      ret=1
+    elif [ ! "$req_ver" = "-" ]; then
+      latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
+      if [ ! "$latest_ver" = "$inst_ver" ]; then
+        echo "Error: '$app' version == $inst_ver is too old" >&2
+        echo "       '$app' version >= $req_ver is required" >&2
+        ret=1
+      fi
+    fi
+  done
+
+  return $ret
+}
+
+print_versions() {
+  echo "Program    Min_version"
+  echo "----------------------"
+  printf "$buildreq"
+  echo "----------------------"
+  # can't depend on column -t
+}
+
+#######################
+# Begin  Bootstrapping
+#######################
+# Build prerequisites
+buildreq="\
+autoconf   2.59
+automake   1.11.1
+libtool           2.2.10
+"
+echo
+Notice "Bootstrapping clamav build system..."
+echo
+# Guess whether we are using configure.ac or configure.in
+if test -f configure.ac; then
+  conffile="configure.ac"
+elif test -f configure.in; then
+  conffile="configure.in"
+else
+  Die "could not find configure.ac or configure.in"
+  echo
+fi
+
+# Libtool
+libtoolize=`which glibtoolize 2>/dev/null`
+case $libtoolize in
+               /*) export LIBTOOL=glibtool;;
+               *)  libtoolize=`which libtoolize 2>/dev/null`
+       case $libtoolize in
+       /*) ;;
+       *)  libtoolize=libtoolize
+       esac
+esac
+
+[ ! -d m4 ]     && mkdir m4
+[ ! -d config ] && mkdir config
+
+if test -z "$libtoolize"; then
+               Die "libtool not found."
+               echo
+else
+  # Check if libtool-ltdl is present 
+  $libtoolize  --force --copy --ltdl >/dev/null 2>&1
+  [ $? -ne 0 ] && Die "libtool libltdl or the static libraries and header 
files for development with ltdl are not found."  
+fi
+
+if ! printf "$buildreq" | check_versions; then
+  test -f README-prereq &&
+  echo
+  echo "See README-prereq for notes on obtaining these prerequisite programs:" 
>&2
+  echo
+  print_versions
+  exit 1
+fi
+
+find . -name "autom4te.cache" | xargs rm -rf 
+
+ls "$po_dir"/*.po 2>/dev/null |
+              sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
+
+#
+echo
+Notice "done.  Now you can run './configure'."
+#######################
+# End  Bootstrapping
+#######################
-- 
1.7.8.rc3.31.g017d1

_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html
Please submit your patches to our Bugzilla: http://bugs.clamav.net

Reply via email to