X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=autogen.sh;h=cab3ca62c573e6da0ea81fe05a9c65371a999e58;hp=f82f3d688d72c97dba4782b2a03fec9abdd2e4ac;hb=a14eb495b75c8c2a2a32ddb6eecf50dc174f811c;hpb=ca33cbda05902b0009058d369f88c0a7a43b1bbe diff --git a/autogen.sh b/autogen.sh index f82f3d68..cab3ca62 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,16 +1,239 @@ #!/bin/sh # -# $Id: autogen.sh,v 1.3 2002/03/12 14:37:51 alex Exp $ +# ngIRCd -- The Next Generation IRC Daemon +# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors # +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# Please read the file COPYING, README and AUTHORS for more information. +# +# Usage: +# [VAR=] ./autogen.sh [] +# +# This script generates the ./configure script using GNU automake and +# GNU autoconf. It tries to be smart in finding the correct/usable/available +# installed versions of these tools on your system. +# +# In addition, it enables or disables the "de-ANSI-fication" support of GNU +# automake, which is supported up to autoconf 1.11.x an has been removed +# in automake 1.12 -- make sure to use a version of automake supporting it +# when generating distribution archives! +# +# The following strategy is used for each of aclocal, autoheader, automake, +# and autoconf: first, "tool" (the regular name of the tool, e. g. "autoconf" +# or "automake") is checked. If this fails, "tool" (for example +# "automake16") and "tool-." (e. g. "autoconf-2.54") are tried +# with being 2 for tool of GNU autoconf and 1 for tools of automake; +# is tried from 99 to 0. The first occurrence will be used. +# +# When you pass to autogen.sh it will call the generated +# ./configure script on success and pass these parameters to it. +# +# You can tweak the behaviour using these environment variables: +# +# - ACLOCAL=, AUTOHEADER=, AUTOMAKE=, AUTOCONF= +# Name and optionally path to the particular tool. +# - PREFIX= +# Search the GNU autoconf and GNU automake tools in first. If the +# generated ./configure script will be called, pass "--prefix=" to it. +# - EXIST= +# Use to test for aclocal, autoheader etc. pp. ... +# When not specified, either "type" or "which" is used. +# - VERBOSE=1 +# Output the detected names of the GNU automake and GNU autoconf tools. +# - GO=1 +# Call ./configure even if no arguments have been passed to autogen.sh. +# +# Examples: +# +# - ./autogen.sh +# Generates the ./configure script. +# - GO=1 ./autogen.sh +# Generates the ./configure script and runs it as "./configure". +# - VERBOSE=1 ./autogen.sh --with-ident +# Show tool names, generates the ./configure script, and runs it with +# these arguments: "./configure --with-ident". +# - ACLOCAL=aclocal-1.6 GO=1 PREFIX=$HOME ./autogen.sh +# Uses "aclocal-1.6" as aclocal tool, generates the ./configure script, +# and runs it with these arguments: "./configure --prefix=$HOME". +# + +Search() +{ + [ $# -eq 2 ] || exit 1 + + searchlist="$1" + major="$2" + minor=99 + + [ -n "$PREFIX" ] && searchlist="${PREFIX}/$1 ${PREFIX}/bin/$1 $searchlist" + + for name in $searchlist; do + $EXIST "${name}" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + "${name}" --version 2>&1 \ + | grep -v "environment variable" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "${name}" + return 0 + fi + fi + done + + while [ $minor -ge 0 ]; do + for name in $searchlist; do + $EXIST "${name}${major}${minor}" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "${name}${major}${minor}" + return 0 + fi + $EXIST "${name}-${major}.${minor}" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "${name}-${major}.${minor}" + return 0 + fi + done + minor=`expr $minor - 1` + done + return 1 +} + +Notfound() +{ + echo "Error: $* not found!" + echo "Please install recent versions of GNU autoconf and GNU automake." + exit 1 +} -if [ -f configure ]; then - echo "autogen.sh: configure-Skript existiert bereits ..." +Run() +{ + [ "$VERBOSE" = "1" ] && echo " - running \"$@\" ..." + $@ +} + +# Reset locale settings to suppress warning messages of Perl +unset LC_ALL +unset LANG + +# Which command should be used to detect the automake/autoconf tools? +[ -z "$EXIST" ] && existlist="type which" || existlist="$EXIST" +EXIST="" +for t in $existlist; do + $t /bin/ls >/dev/null 2>&1 + if [ $? -eq 0 ]; then + rm -f /tmp/test.$$ + $t /tmp/test.$$ >/dev/null 2>&1 + [ $? -ne 0 ] && EXIST="$t" + fi + [ -n "$EXIST" ] && break +done +if [ -z "$EXIST" ]; then + echo "Didn't detect a working command to test for the autoconf/automake tools!" + echo "Searchlist: $existlist" + exit 1 fi +[ "$VERBOSE" = "1" ] && echo "Using \"$EXIST\" to test for tools." + +# Try to detect the needed tools when no environment variable already +# specifies one: +echo "Searching for required tools ..." +[ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1` +[ "$VERBOSE" = "1" ] && echo " - ACLOCAL=$ACLOCAL" +[ -z "$AUTOHEADER" ] && AUTOHEADER=`Search autoheader 2` +[ "$VERBOSE" = "1" ] && echo " - AUTOHEADER=$AUTOHEADER" +[ -z "$AUTOMAKE" ] && AUTOMAKE=`Search automake 1` +[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE=$AUTOMAKE" +[ -z "$AUTOCONF" ] && AUTOCONF=`Search autoconf 2` +[ "$VERBOSE" = "1" ] && echo " - AUTOCONF=$AUTOCONF" + +AUTOCONF_VERSION=`echo $AUTOCONF | cut -d'-' -f2-` +[ -n "$AUTOCONF_VERSION" -a "$AUTOCONF_VERSION" != "autoconf" ] \ + && export AUTOCONF_VERSION || unset AUTOCONF_VERSION +[ "$VERBOSE" = "1" ] && echo " - AUTOCONF_VERSION=$AUTOCONF_VERSION" +AUTOMAKE_VERSION=`echo $AUTOMAKE | cut -d'-' -f2-` +[ -n "$AUTOMAKE_VERSION" -a "$AUTOMAKE_VERSION" != "automake" ] \ + && export AUTOMAKE_VERSION || unset AUTOMAKE_VERSION +[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE_VERSION=$AUTOMAKE_VERSION" + +[ $# -gt 0 ] && CONFIGURE_ARGS=" $@" || CONFIGURE_ARGS="" +[ -z "$GO" -a -n "$CONFIGURE_ARGS" ] && GO=1 + +# Verify that all tools have been found +[ -z "$ACLOCAL" ] && Notfound aclocal +[ -z "$AUTOHEADER" ] && Notfound autoheader +[ -z "$AUTOMAKE" ] && Notfound automake +[ -z "$AUTOCONF" ] && Notfound autoconf + +AM_VERSION=`$AUTOMAKE --version | head -n 1 | sed -e 's/.* //g'` +ifs=$IFS; IFS="."; set $AM_VERSION; IFS=$ifs +AM_MAJOR="$1"; AM_MINOR="$2"; AM_PATCHLEVEL="$3" +echo "Detected automake $AM_VERSION ..." + +AM_MAKEFILES="src/ipaddr/Makefile.ng src/ngircd/Makefile.ng src/testsuite/Makefile.ng src/tool/Makefile.ng" -aclocal && \ - autoheader && \ - automake --add-missing && \ - autoconf && \ - echo "Okay, autogen.sh war erfolgreich." +# De-ANSI-fication? +if [ "$AM_MAJOR" -eq "1" -a "$AM_MINOR" -lt "12" ]; then + # automake < 1.12 => automatic de-ANSI-fication support available + echo " - Enabling de-ANSI-fication support." + sed -e "s|^__ng_PROTOTYPES__|AM_C_PROTOTYPES|g" configure.ng >configure.ac + DEANSI_START="" + DEANSI_END="" +else + # automake >= 1.12 => no de-ANSI-fication support available + echo " - Disabling de-ANSI-fication support." + sed -e "s|^__ng_PROTOTYPES__|AC_C_PROTOTYPES|g" configure.ng >configure.ac + DEANSI_START="#" + DEANSI_END=" (disabled by ./autogen.sh script)" +fi +# Serial test harness? +if [ "$AM_MAJOR" -eq "1" -a "$AM_MINOR" -ge "13" ]; then + # automake >= 1.13 => enforce "serial test harness" + echo " - Enforcing serial test harness." + SERIAL_TESTS="serial-tests" +else + # automake < 1.13 => no new test harness, nothing to do + SERIAL_TEST="" +fi + +sed -e "s|^__ng_Makefile_am_template__|AUTOMAKE_OPTIONS = ${SERIAL_TESTS} ${DEANSI_START}ansi2knr${DEANSI_END}|g" \ + src/portab/Makefile.ng >src/portab/Makefile.am +for makefile_ng in $AM_MAKEFILES; do + makefile_am=`echo "$makefile_ng" | sed -e "s|\.ng\$|\.am|g"` + sed -e "s|^__ng_Makefile_am_template__|AUTOMAKE_OPTIONS = ${SERIAL_TESTS} ${DEANSI_START}../portab/ansi2knr${DEANSI_END}|g" \ + $makefile_ng >$makefile_am +done + +export ACLOCAL AUTOHEADER AUTOMAKE AUTOCONF + +# Generate files +echo "Generating files using \"$AUTOCONF\" and \"$AUTOMAKE\" ..." +Run $ACLOCAL && \ + Run $AUTOCONF && \ + Run $AUTOHEADER && \ + Run $AUTOMAKE --add-missing --no-force + +if [ $? -eq 0 -a -x ./configure ]; then + # Success: if we got some parameters we call ./configure and pass + # all of them to it. + NAME=`grep PACKAGE_STRING= configure | cut -d"'" -f2` + if [ "$GO" = "1" ]; then + [ -n "$PREFIX" ] && p=" --prefix=$PREFIX" || p="" + c="./configure${p}${CONFIGURE_ARGS}" + echo "Okay, autogen.sh for $NAME done." + echo "Calling \"$c\" ..." + $c + exit $? + else + echo "Okay, autogen.sh for $NAME done." + echo "Now run the \"./configure\" script." + exit 0 + fi +else + # Failure!? + echo "Error! Check your installation of GNU automake and autoconf!" + exit 1 +fi # -eof-