| dnl @synopsis AC_CREATE_PREFIX_CONFIG_H [(OUTPUT-HEADER [,PREFIX [,ORIG-HEADER]])] |
| dnl |
| dnl this is a new variant from ac_prefix_config_ |
| dnl this one will use a lowercase-prefix if |
| dnl the config-define was starting with a lowercase-char, e.g. |
| dnl #define const or #define restrict or #define off_t |
| dnl (and this one can live in another directory, e.g. testpkg/config.h |
| dnl therefore I decided to move the output-header to be the first arg) |
| dnl |
| dnl takes the usual config.h generated header file; looks for each of |
| dnl the generated "#define SOMEDEF" lines, and prefixes the defined name |
| dnl (ie. makes it "#define PREFIX_SOMEDEF". The result is written to |
| dnl the output config.header file. The PREFIX is converted to uppercase |
| dnl for the conversions. |
| dnl |
| dnl default OUTPUT-HEADER = $PACKAGE-config.h |
| dnl default PREFIX = $PACKAGE |
| dnl default ORIG-HEADER, derived from OUTPUT-HEADER |
| dnl if OUTPUT-HEADER has a "/", use the basename |
| dnl if OUTPUT-HEADER has a "-", use the section after it. |
| dnl otherwise, just config.h |
| dnl |
| dnl In most cases, the configure.in will contain a line saying |
| dnl AC_CONFIG_HEADER(config.h) |
| dnl somewhere *before* AC_OUTPUT and a simple line saying |
| dnl AC_PREFIX_CONFIG_HEADER |
| dnl somewhere *after* AC_OUTPUT. |
| dnl |
| dnl example: |
| dnl AC_INIT(config.h.in) # config.h.in as created by "autoheader" |
| dnl AM_INIT_AUTOMAKE(testpkg, 0.1.1) # "#undef VERSION" and "PACKAGE" |
| dnl AM_CONFIG_HEADER(config.h) # in config.h.in |
| dnl AC_MEMORY_H # "#undef NEED_MEMORY_H" |
| dnl AC_C_CONST_H # "#undef const" |
| dnl AC_OUTPUT(Makefile) # creates the "config.h" now |
| dnl AC_CREATE_PREFIX_CONFIG_H # creates "testpkg-config.h" |
| dnl and the resulting "testpkg-config.h" contains lines like |
| dnl #ifndef TESTPKG_VERSION |
| dnl #define TESTPKG_VERSION "0.1.1" |
| dnl #endif |
| dnl #ifndef TESTPKG_NEED_MEMORY_H |
| dnl #define TESTPKG_NEED_MEMORY_H 1 |
| dnl #endif |
| dnl #ifndef _testpkg_const |
| dnl #define _testpkg_const const |
| dnl #endif |
| dnl |
| dnl and this "testpkg-config.h" can be installed along with other |
| dnl header-files, which is most convenient when creating a shared |
| dnl library (that has some headers) where some functionality is |
| dnl dependent on the OS-features detected at compile-time. No |
| dnl need to invent some "testpkg-confdefs.h.in" manually. :-) |
| dnl |
| dnl @version $Id: ac_create_prefix_config_h.m4,v 1.1.1.1 2003/02/08 19:32:50 opetzold Exp $ |
| dnl @author Guido Draheim <guidod@gmx.de> |
| |
| AC_DEFUN([AC_CREATE_PREFIX_CONFIG_H], |
| [changequote({, })dnl |
| ac_prefix_conf_OUT=`echo ifelse($1, , ${PACKAGE_TARNAME}-config.h, $1)` |
| ac_prefix_conf_DEF=`echo _$ac_prefix_conf_OUT | sed -e 'y:abcdefghijklmnopqrstuvwxyz./,-:ABCDEFGHIJKLMNOPQRSTUVWXYZ____:'` |
| ac_prefix_conf_PKG=`echo ifelse($2, , ${PACKAGE_TARNAME}, $2)` |
| ac_prefix_conf_LOW=`echo _$ac_prefix_conf_PKG | sed -e 'y:ABCDEFGHIJKLMNOPQRSTUVWXYZ-:abcdefghijklmnopqrstuvwxyz_:'` |
| ac_prefix_conf_UPP=`echo $ac_prefix_conf_PKG | sed -e 'y:abcdefghijklmnopqrstuvwxyz-:ABCDEFGHIJKLMNOPQRSTUVWXYZ_:' -e '/^[0-9]/s/^/_/'` |
| ac_prefix_conf_INP=`echo ifelse($3, , _, $3)` |
| if test "$ac_prefix_conf_INP" = "_"; then |
| case $ac_prefix_conf_OUT in |
| */*) ac_prefix_conf_INP=`basename $ac_prefix_conf_OUT` |
| ;; |
| *-*) ac_prefix_conf_INP=`echo $ac_prefix_conf_OUT | sed -e 's/[a-zA-Z0-9_]*-//'` |
| ;; |
| *) ac_prefix_conf_INP=config.h |
| ;; |
| esac |
| fi |
| changequote([, ])dnl |
| if test -z "$ac_prefix_conf_PKG" ; then |
| AC_MSG_ERROR([no prefix for _PREFIX_PKG_CONFIG_H]) |
| else |
| AC_MSG_RESULT(creating $ac_prefix_conf_OUT - prefix $ac_prefix_conf_UPP for $ac_prefix_conf_INP defines) |
| if test -f $ac_prefix_conf_INP ; then |
| AS_DIRNAME([/* automatically generated */], $ac_prefix_conf_OUT) |
| changequote({, })dnl |
| echo '#ifndef '$ac_prefix_conf_DEF >$ac_prefix_conf_OUT |
| echo '#define '$ac_prefix_conf_DEF' 1' >>$ac_prefix_conf_OUT |
| echo ' ' >>$ac_prefix_conf_OUT |
| echo /'*' $ac_prefix_conf_OUT. Generated automatically at end of configure. '*'/ >>$ac_prefix_conf_OUT |
| |
| echo 's/#undef *\([A-Z_]\)/#undef '$ac_prefix_conf_UPP'_\1/' >conftest.sed |
| echo 's/#undef *\([a-z]\)/#undef '$ac_prefix_conf_LOW'_\1/' >>conftest.sed |
| echo 's/#define *\([A-Z_][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_UPP"_\\1 \\" >>conftest.sed |
| echo '#define '$ac_prefix_conf_UPP"_\\1 \\2 \\" >>conftest.sed |
| echo '#endif/' >>conftest.sed |
| echo 's/#define *\([a-z][A-Za-z0-9_]*\)\(.*\)/#ifndef '$ac_prefix_conf_LOW"_\\1 \\" >>conftest.sed |
| echo '#define '$ac_prefix_conf_LOW"_\\1 \\2 \\" >>conftest.sed |
| echo '#endif/' >>conftest.sed |
| sed -f conftest.sed $ac_prefix_conf_INP >>$ac_prefix_conf_OUT |
| echo ' ' >>$ac_prefix_conf_OUT |
| echo '/*' $ac_prefix_conf_DEF '*/' >>$ac_prefix_conf_OUT |
| echo '#endif' >>$ac_prefix_conf_OUT |
| changequote([, ])dnl |
| else |
| AC_MSG_ERROR([input file $ac_prefix_conf_IN does not exist, dnl |
| skip generating $ac_prefix_conf_OUT]) |
| fi |
| rm -f conftest.* |
| fi]) |
| |