autoconf
[Top][All Lists]
Advanced

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

Computed values in AC_INIT, AC_CONFIG_SRCDIR, AC_CONFIG_HEADERS, etc.


From: Olivier Boudeville
Subject: Computed values in AC_INIT, AC_CONFIG_SRCDIR, AC_CONFIG_HEADERS, etc.
Date: Sun, 29 Jan 2006 16:52:52 +0100
User-agent: Mozilla Thunderbird 1.0.7 (X11/20051013)

Hi all,

I do not know well the Autotools, but regarding the past thread 'AC_INIT
receiving PACKAGE_VERSION from outside', I wrote a little shell script 
(attached to this mail)
that allows to generate a version file that can be both sourced by shell
scripts and included by m4, as suggested by Alexandre Duret-Lutz
previously.
This is a work-around to hardcoded version numbers in AC_INIT.

For example, in one's configure.ac there could be :

# Unfortunately, the new syntax for AC_INIT does not allow for variable
# substitution. As it is way simpler to have the version information in only
# one place, this has been achieved thanks to the 'version.inc' file,
which can
# be sourced by shell scripts and included by m4 scripts.
# 'version.inc' can be generated thanks to the 'generateVersionFile.sh'
script.
AC_INIT([Ceylan, m4_normalize(m4_include([conf/build/version.inc])),


./generateVersionFile.sh 3 0 0 

generates following version.inc file :

dnl="This rather convoluted file allows to centralize version numbers while "
dnl="being able to be both sourced by shell scripts and included by m4."
dnl="It can be generated by the 'generateVersionFile.sh' script."
dnl=; MAJOR=0; MINOR=0; RELEASE=3 ; RELEASE_DATE="Sunday, January 29, 2006"; 
m4_hiding_string="\
0.0.3
dnl "

Apparently sourcing it is ok and my autogen process generated
appropriate files with these settings.
No specific dependency is to be enforced, if I understood well.

After having tried this approach, I noticed that at least AC_INIT, 
AC_CONFIG_SRCDIR and AC_CONFIG_HEADERS do not seem to allow variable 
substitution ($A taken litterally instead of its value, am I wrong ?)
I think to using a template that could be filled with settings read from a file 
to generate the expected configure.ac, to ensure one-time assignment and avoid 
multiple definition of the same value, which would be error-prone in my opinion.

Am I missing something obvious ? Is there any way of writing such things :

"""
CEYLAN_MAJOR_VERSION=0
CEYLAN_MINOR_VERSION=3

CEYLAN_VERSION=$CEYLAN_MAJOR_VERSION.$CEYLAN_MINOR_VERSION

CEYLAN_MAILING_LIST_SUPPORT="address@hidden"
CEYLAN_CONFIG_HEADER="code/CeylanConfig.h"

AC_INIT([Ceylan],$CEYLAN_VERSION,$CEYLAN_MAILING_LIST_SUPPORT)
AC_CONFIG_SRCDIR($CEYLAN_CONFIG_HEADER.in)
AC_CONFIG_HEADERS($CEYLAN_CONFIG_HEADER)

...here reusing multiple times CEYLAN_MAJOR_VERSION,
CEYLAN_MAILING_LIST_SUPPORT, etc.
"""

Please feel free to comment on it and propose improvements !

Regards,

Olivier Boudeville.

#!/bin/sh

VERSION_FILENAME="version.inc"

USAGE="Usage : "`basename $0`" <major> <minor> <release> : generates a file 
named '$VERSION_FILENAME' which can set version numbers both when sourced by a 
shell script (setting the MAJOR_VERSION, MINOR_VERSION and RELEASE variables 
appropriately) and included by a m4 script. This is useful as a workaround to 
Autoconf AC_INIT behaviour."

if test "$#" -ne 3 ; then
        echo $USAGE 1>&2
        exit 1
fi 

echo "dnl=\"This rather convoluted file allows to centralize version numbers 
while \"" > $VERSION_FILENAME

echo "dnl=\"being able to be both sourced by shell scripts and included by 
m4.\"" >> $VERSION_FILENAME

echo "dnl=\"It can be generated by the 'generateVersionFile.sh' script.\"" >> 
$VERSION_FILENAME

echo "dnl=; MAJOR=$1; MINOR=$2; RELEASE=$3 ; RELEASE_DATE=\""`date '+%A, %B %e, 
%Y'`"\"; m4_hiding_string=\"\\" >> $VERSION_FILENAME

echo "$1.$2.$3" >> $VERSION_FILENAME
echo "dnl \"" >> $VERSION_FILENAME

echo "'$VERSION_FILENAME' has been generated."



reply via email to

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