From 192e304b94f239de13b0f10ca01f6694fe6eea40 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Sun, 23 Sep 2012 17:55:48 +0200 Subject: [PATCH] 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 ... --- .gitignore | 1 + autogen.sh | 44 ++++++++++++++++++---- configure.in => configure.ng | 10 ++++- src/ipaddr/.gitignore | 1 + src/ipaddr/{Makefile.am => Makefile.ng} | 2 +- src/ngircd/.gitignore | 1 + src/ngircd/{Makefile.am => Makefile.ng} | 2 +- src/portab/.gitignore | 1 + src/portab/{Makefile.am => Makefile.ng} | 2 +- src/testsuite/.gitignore | 1 + src/testsuite/{Makefile.am => Makefile.ng} | 2 +- src/tool/.gitignore | 1 + src/tool/{Makefile.am => Makefile.ng} | 2 +- 13 files changed, 57 insertions(+), 13 deletions(-) rename configure.in => configure.ng (97%) create mode 100644 src/ipaddr/.gitignore rename src/ipaddr/{Makefile.am => Makefile.ng} (88%) rename src/ngircd/{Makefile.am => Makefile.ng} (98%) rename src/portab/{Makefile.am => Makefile.ng} (97%) rename src/testsuite/{Makefile.am => Makefile.ng} (98%) create mode 100644 src/tool/.gitignore rename src/tool/{Makefile.am => Makefile.ng} (94%) diff --git a/.gitignore b/.gitignore index 19900414..bfa35421 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ build-stamp-ngircd* config.log config.status configure +configure.in configure.lineno cscope.out debian diff --git a/autogen.sh b/autogen.sh index cca200b2..d47d7504 100755 --- a/autogen.sh +++ b/autogen.sh @@ -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" (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 diff --git a/configure.in b/configure.ng similarity index 97% rename from configure.in rename to configure.ng index 949a383a..25654f9c 100644 --- a/configure.in +++ b/configure.ng @@ -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- diff --git a/src/ipaddr/.gitignore b/src/ipaddr/.gitignore new file mode 100644 index 00000000..08a6d725 --- /dev/null +++ b/src/ipaddr/.gitignore @@ -0,0 +1 @@ +Makefile.am diff --git a/src/ipaddr/Makefile.am b/src/ipaddr/Makefile.ng similarity index 88% rename from src/ipaddr/Makefile.am rename to src/ipaddr/Makefile.ng index 6ce299f2..3d5a5db9 100644 --- a/src/ipaddr/Makefile.am +++ b/src/ipaddr/Makefile.ng @@ -3,7 +3,7 @@ # (c) 2008 Florian Westphal , public domain. # -AUTOMAKE_OPTIONS = ../portab/ansi2knr +__ng_Makefile_am_template__ INCLUDES = -I$(srcdir)/../portab diff --git a/src/ngircd/.gitignore b/src/ngircd/.gitignore index c25ba5e3..d1148bfb 100644 --- a/src/ngircd/.gitignore +++ b/src/ngircd/.gitignore @@ -1,3 +1,4 @@ +Makefile.am check-help check-version ngircd diff --git a/src/ngircd/Makefile.am b/src/ngircd/Makefile.ng similarity index 98% rename from src/ngircd/Makefile.am rename to src/ngircd/Makefile.ng index 3a411a96..db3ecfe9 100644 --- a/src/ngircd/Makefile.am +++ b/src/ngircd/Makefile.ng @@ -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 diff --git a/src/portab/.gitignore b/src/portab/.gitignore index 839a69fd..9bac6ac1 100644 --- a/src/portab/.gitignore +++ b/src/portab/.gitignore @@ -1 +1,2 @@ +Makefile.am portabtest diff --git a/src/portab/Makefile.am b/src/portab/Makefile.ng similarity index 97% rename from src/portab/Makefile.am rename to src/portab/Makefile.ng index a57ea495..5681a530 100644 --- a/src/portab/Makefile.am +++ b/src/portab/Makefile.ng @@ -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 diff --git a/src/testsuite/.gitignore b/src/testsuite/.gitignore index 5884a486..b33a08f4 100644 --- a/src/testsuite/.gitignore +++ b/src/testsuite/.gitignore @@ -1,3 +1,4 @@ +Makefile.am T-ngircd1 T-ngircd2 channel-test diff --git a/src/testsuite/Makefile.am b/src/testsuite/Makefile.ng similarity index 98% rename from src/testsuite/Makefile.am rename to src/testsuite/Makefile.ng index 9dc76a7d..fe642e89 100644 --- a/src/testsuite/Makefile.am +++ b/src/testsuite/Makefile.ng @@ -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 diff --git a/src/tool/.gitignore b/src/tool/.gitignore new file mode 100644 index 00000000..08a6d725 --- /dev/null +++ b/src/tool/.gitignore @@ -0,0 +1 @@ +Makefile.am diff --git a/src/tool/Makefile.am b/src/tool/Makefile.ng similarity index 94% rename from src/tool/Makefile.am rename to src/tool/Makefile.ng index 8d6cda46..807f24bc 100644 --- a/src/tool/Makefile.am +++ b/src/tool/Makefile.ng @@ -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 -- 2.39.2