Change build system to support new and old GNU automake

Starting with GNU automake 1.12, the "de-ANSI-fication support" has been
removed, which ngIRCd used to enable building itself on very old systems.

Now the problem is, that using automake >= 1.12 isn't working because of
the now unsupported M4 macros. Therefore the solution that this patch
implements is to dynamically generate the automake input files with our
own ./autogen.sh script:

  configure.ng => configure.in
  Makefile.ng => Makefile.am

This is quite an ugly approach, but it works and enables us to:

  1. use current automake >= 1.12 for development and "private builds",
  2. still build distribution archives using automake 1.11.x that have
     "de-ANSI-fication support" enabled in the generated Makefile's.

And if you are using Makefile's generated with a automake version newer
than 1.11.x (without "de-ANSI-fication support"), the ./configure script
warns you not to use this generated build system to generate distribution
archives.

Drawback of this patch: you MUST use our autogen.sh script, you can't call
the autoconf/automake commands directly any more; but autoreconf should
still work ...
This commit is contained in:
Alexander Barton 2012-09-23 17:55:48 +02:00
parent 1413a4886f
commit 192e304b94
13 changed files with 57 additions and 13 deletions

1
.gitignore vendored
View File

@ -9,6 +9,7 @@ build-stamp-ngircd*
config.log
config.status
configure
configure.in
configure.lineno
cscope.out
debian

View File

@ -16,6 +16,11 @@
# 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<major><minor>" (for example
@ -129,7 +134,7 @@ fi
# Try to detect the needed tools when no environment variable already
# specifies one:
echo "Searching tools ..."
echo "Searching for required tools ..."
[ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1`
[ "$VERBOSE" = "1" ] && echo " - ACLOCAL=$ACLOCAL"
[ -z "$AUTOHEADER" ] && AUTOHEADER=`Search autoheader 2`
@ -139,9 +144,8 @@ echo "Searching tools ..."
[ -z "$AUTOCONF" ] && AUTOCONF=`Search autoconf 2`
[ "$VERBOSE" = "1" ] && echo " - AUTOCONF=$AUTOCONF"
# Call ./configure when parameters have been passed to this script and
# GO isn't already defined.
[ -z "$GO" -a $# -gt 0 ] && GO=1
[ $# -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
@ -149,10 +153,37 @@ echo "Searching tools ..."
[ -z "$AUTOMAKE" ] && Notfound automake
[ -z "$AUTOCONF" ] && Notfound autoconf
AM_VERSION=`$AUTOMAKE --version | egrep -o "([0-9]+\.[0-9]+\.[0-9]+)"`
ifs=$IFS; IFS="."; set $AM_VERSION; IFS=$ifs
AM_MAJOR="$1"; AM_MINOR="$2"; AM_PATCHLEVEL="$3"
AM_MAKEFILES="src/ipaddr/Makefile.ng src/ngircd/Makefile.ng src/testsuite/Makefile.ng src/tool/Makefile.ng"
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 (automake $AM_VERSION) ..."
sed -e "s|^__ng_PROTOTYPES__|AM_C_PROTOTYPES|g" configure.ng >configure.in
DEANSI_START=""
DEANSI_END=""
else
# automake >= 1.12 => no de-ANSI-fication support available
echo "Disabling de-ANSI-fication support (automake $AM_VERSION) ..."
sed -e "s|^__ng_PROTOTYPES__|AC_C_PROTOTYPES|g" configure.ng >configure.in
DEANSI_START="#"
DEANSI_END=" # disabled by ./autogen.sh script"
fi
sed -e "s|^__ng_Makefile_am_template__|${DEANSI_START}AUTOMAKE_OPTIONS = 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__|${DEANSI_START}AUTOMAKE_OPTIONS = ../portab/ansi2knr${DEANSI_END}|g" \
$makefile_ng >$makefile_am
done
export ACLOCAL AUTOHEADER AUTOMAKE AUTOCONF
# Generate files
echo "Generating files ..."
echo "Generating files using GNU $AUTOCONF and $AUTOMAKE ..."
Run $ACLOCAL && \
Run $AUTOCONF && \
Run $AUTOHEADER && \
@ -164,8 +195,7 @@ if [ $? -eq 0 -a -x ./configure ]; then
NAME=`grep PACKAGE_STRING= configure | cut -d"'" -f2`
if [ "$GO" = "1" ]; then
[ -n "$PREFIX" ] && p=" --prefix=$PREFIX" || p=""
[ -n "$*" ] && a=" $*" || a=""
c="./configure${p}${a}"
c="./configure${p}${CONFIGURE_ARGS}"
echo "Okay, autogen.sh for $NAME done."
echo "Calling \"$c\" ..."
$c

View File

@ -61,7 +61,7 @@ AC_PROG_RANLIB
AC_C_CONST
AC_C_INLINE
AM_C_PROTOTYPES
__ng_PROTOTYPES__
# -- Hard coded system and compiler dependencies/features/options ... --
@ -674,4 +674,12 @@ echo "$x_ssl_lib"
echo
if ! grep "^AUTOMAKE_OPTIONS = ../portab/ansi2knr" src/ngircd/Makefile.am >/dev/null 2>&1; then
echo "WARNING:"
echo "This GNU automake generated build system does not support \"de-ANSI-fication\","
echo "therefore don't use it to generate \"official\" distribution archives!"
echo "(Most probably you want to use GNU automake 1.11.x for this purpose ...)"
echo
fi
# -eof-

1
src/ipaddr/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
Makefile.am

View File

@ -3,7 +3,7 @@
# (c) 2008 Florian Westphal <fw@strlen.de>, public domain.
#
AUTOMAKE_OPTIONS = ../portab/ansi2knr
__ng_Makefile_am_template__
INCLUDES = -I$(srcdir)/../portab

View File

@ -1,3 +1,4 @@
Makefile.am
check-help
check-version
ngircd

View File

@ -9,7 +9,7 @@
# Please read the file COPYING, README and AUTHORS for more information.
#
AUTOMAKE_OPTIONS = ../portab/ansi2knr
__ng_Makefile_am_template__
INCLUDES = -I$(srcdir)/../portab -I$(srcdir)/../tool -I$(srcdir)/../ipaddr

View File

@ -1 +1,2 @@
Makefile.am
portabtest

View File

@ -10,7 +10,7 @@
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
#
AUTOMAKE_OPTIONS = ansi2knr
__ng_Makefile_am_template__
noinst_LIBRARIES = libngportab.a

View File

@ -1,3 +1,4 @@
Makefile.am
T-ngircd1
T-ngircd2
channel-test

View File

@ -10,7 +10,7 @@
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
#
AUTOMAKE_OPTIONS = ../portab/ansi2knr
__ng_Makefile_am_template__
INCLUDES = -I$(srcdir)/../portab

1
src/tool/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
Makefile.am

View File

@ -9,7 +9,7 @@
# Please read the file COPYING, README and AUTHORS for more information.
#
AUTOMAKE_OPTIONS = ../portab/ansi2knr
__ng_Makefile_am_template__
INCLUDES = -I$(srcdir)/../portab