Download M4 Source Macro History Category Index

ax_create_pkgconfig_info

Synopsis

AX_CREATE_PKGCONFIG_INFO [(outputfile, [requires [,libs [,summary [,cflags [, ldflags]]]]])]

Description

Defaults:

  $1 = $PACKAGE_NAME.pc
  $2 = (empty)
  $3 = $PACKAGE_LIBS $LIBS (as set at that point in configure.ac)
  $4 = $PACKAGE_SUMMARY (or $1 Library)
  $5 = $CPPFLAGS $PACKAGE_CFLAGS (as set at the point in configure.ac)
  $6 = $LDFLAGS $PACKAGE_LDFLAGS (as set at the point in configure.ac)

  PACKAGE_NAME defaults to $PACKAGE if not set.
  PACKAGE_LIBS defaults to -l$PACKAGE_NAME if not set.

The resulting file is called $PACKAGE.pc.in / $PACKAGE.pc

You will find this macro most useful in conjunction with ax_spec_defaults that can read good initializers from the .spec file. In consequencd, most of the generatable installable stuff can be made from information being updated in a single place for the whole project.

Authors

Sven Verdoolaege <skimo*liacs.nl> and Guido U. Draheim <guidod@gmx.de>.

Last Modified

2006-10-13

M4 Source Code

AC_DEFUN([AX_CREATE_PKGCONFIG_INFO],[dnl
AS_VAR_PUSHDEF([PKGCONFIG_suffix],[ax_create_pkgconfig_suffix])dnl
AS_VAR_PUSHDEF([PKGCONFIG_libdir],[ax_create_pkgconfig_libdir])dnl
AS_VAR_PUSHDEF([PKGCONFIG_libfile],[ax_create_pkgconfig_libfile])dnl
AS_VAR_PUSHDEF([PKGCONFIG_libname],[ax_create_pkgconfig_libname])dnl
AS_VAR_PUSHDEF([PKGCONFIG_version],[ax_create_pkgconfig_version])dnl
AS_VAR_PUSHDEF([PKGCONFIG_description],[ax_create_pkgconfig_description])dnl
AS_VAR_PUSHDEF([PKGCONFIG_requires],[ax_create_pkgconfig_requires])dnl
AS_VAR_PUSHDEF([PKGCONFIG_pkglibs],[ax_create_pkgconfig_pkglibs])dnl
AS_VAR_PUSHDEF([PKGCONFIG_libs],[ax_create_pkgconfig_libs])dnl
AS_VAR_PUSHDEF([PKGCONFIG_ldflags],[ax_create_pkgconfig_ldflags])dnl
AS_VAR_PUSHDEF([PKGCONFIG_cppflags],[ax_create_pkgconfig_cppflags])dnl
AS_VAR_PUSHDEF([PKGCONFIG_generate],[ax_create_pkgconfig_generate])dnl
AS_VAR_PUSHDEF([PKGCONFIG_src_libdir],[ax_create_pkgconfig_src_libdir])dnl
AS_VAR_PUSHDEF([PKGCONFIG_src_headers],[ax_create_pkgconfig_src_headers])dnl

# we need the expanded forms...
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

AC_MSG_CHECKING(our pkgconfig libname)
test ".$PKGCONFIG_libname" != "." || \
PKGCONFIG_libname="ifelse($1,,${PACKAGE_NAME},`basename $1 .pc`)"
test ".$PKGCONFIG_libname" != "." || \
PKGCONFIG_libname="$PACKAGE"
PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"`
PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"`
AC_MSG_RESULT($PKGCONFIG_libname)

AC_MSG_CHECKING(our pkgconfig version)
test ".$PKGCONFIG_version" != "." || \
PKGCONFIG_version="${PACKAGE_VERSION}"
test ".$PKGCONFIG_version" != "." || \
PKGCONFIG_version="$VERSION"
PKGCONFIG_version=`eval echo "$PKGCONFIG_version"`
PKGCONFIG_version=`eval echo "$PKGCONFIG_version"`
AC_MSG_RESULT($PKGCONFIG_version)

AC_MSG_CHECKING(our pkgconfig_libdir)
test ".$pkgconfig_libdir" = "." && \
pkgconfig_libdir='${libdir}/pkgconfig'
PKGCONFIG_libdir=`eval echo "$pkgconfig_libdir"`
PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"`
PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"`
AC_MSG_RESULT($pkgconfig_libdir)
test "$pkgconfig_libdir" != "$PKGCONFIG_libdir" && (
AC_MSG_RESULT(expanded our pkgconfig_libdir... $PKGCONFIG_libdir))
AC_SUBST([pkgconfig_libdir])

AC_MSG_CHECKING(our pkgconfig_libfile)
test ".$pkgconfig_libfile" != "." || \
pkgconfig_libfile="ifelse($1,,$PKGCONFIG_libname.pc,`basename $1`)"
PKGCONFIG_libfile=`eval echo "$pkgconfig_libfile"`
PKGCONFIG_libfile=`eval echo "$PKGCONFIG_libfile"`
AC_MSG_RESULT($pkgconfig_libfile)
test "$pkgconfig_libfile" != "$PKGCONFIG_libfile" && (
AC_MSG_RESULT(expanded our pkgconfig_libfile... $PKGCONFIG_libfile))
AC_SUBST([pkgconfig_libfile])

AC_MSG_CHECKING(our package / suffix)
PKGCONFIG_suffix="$program_suffix"
test ".$PKGCONFIG_suffix" != .NONE || PKGCONFIG_suffix=""
AC_MSG_RESULT(${PACKAGE_NAME} / ${PKGCONFIG_suffix})

AC_MSG_CHECKING(our pkgconfig description)
PKGCONFIG_description="ifelse($4,,$PACKAGE_SUMMARY,$4)"
test ".$PKGCONFIG_description" != "." || \
PKGCONFIG_description="$PKGCONFIG_libname Library"
PKGCONFIG_description=`eval echo "$PKGCONFIG_description"`
PKGCONFIG_description=`eval echo "$PKGCONFIG_description"`
AC_MSG_RESULT($PKGCONFIG_description)

AC_MSG_CHECKING(our pkgconfig requires)
PKGCONFIG_requires="ifelse($2,,$PACKAGE_REQUIRES,$2)"
PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"`
PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"`
AC_MSG_RESULT($PKGCONFIG_requires)

AC_MSG_CHECKING(our pkgconfig ext libs)
PKGCONFIG_pkglibs="$PACKAGE_LIBS"
test ".$PKGCONFIG_pkglibs" != "." || PKGCONFIG_pkglibs="-l$PKGCONFIG_libname"
PKGCONFIG_libs="ifelse($3,,$PKGCONFIG_pkglibs $LIBS,$3)"
PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"`
PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"`
AC_MSG_RESULT($PKGCONFIG_libs)

AC_MSG_CHECKING(our pkgconfig cppflags)
PKGCONFIG_cppflags="ifelse($5,,$CPPFLAGS $PACKAGE_CFLAGS,$5)"
PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"`
PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"`
AC_MSG_RESULT($PKGCONFIG_cppflags)

AC_MSG_CHECKING(our pkgconfig ldflags)
PKGCONFIG_ldflags="ifelse($6,,$LDFLAGS $PACKAGE_LDFLAGS,$5)"
PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"`
PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"`
AC_MSG_RESULT($PKGCONFIG_ldflags)

test ".$PKGCONFIG_generate" != "." || \
PKGCONFIG_generate="ifelse($1,,$PKGCONFIG_libname.pc,$1)"
PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"`
PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"`
test "$pkgconfig_libfile" != "$PKGCONFIG_generate" && (
AC_MSG_RESULT(generate the pkgconfig later... $PKGCONFIG_generate))

if test ".$PKGCONFIG_src_libdir" = "." ; then
PKGCONFIG_src_libdir=`pwd`
PKGCONFIG_src_libdir=`AS_DIRNAME("$PKGCONFIG_src_libdir/$PKGCONFIG_generate")`
test ! -d $PKGCONFIG_src_libdir/src || \
PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/src"
case ".$objdir" in
*libs) PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/$objdir" ;; esac
AC_MSG_RESULT(noninstalled pkgconfig -L $PKGCONFIG_src_libdir)
fi

if test ".$PKGCONFIG_src_headers" = "." ; then
PKGCONFIG_src_headers=`pwd`
v="$ac_top_srcdir" ;
test ".$v" != "." || v="$ax_spec_dir"
test ".$v" != "." || v="$srcdir"
case "$v" in /*) PKG_CONFIG_src_headers="" ;; esac
PKGCONFIG_src_headers=`AS_DIRNAME("$PKGCONFIG_src_headers/$v/x")`
test ! -d $PKGCONFIG_src_headers/incl[]ude || \
PKGCONFIG_src_headers="$PKGCONFIG_src_headers/incl[]ude"
AC_MSG_RESULT(noninstalled pkgconfig -I $PKGCONFIG_src_headers)
fi


dnl AC_CONFIG_COMMANDS crap disallows to use $PKGCONFIG_libfile here...
AC_CONFIG_COMMANDS([$ax_create_pkgconfig_generate],[
pkgconfig_generate="$ax_create_pkgconfig_generate"
if test ! -f "$pkgconfig_generate.in"
then generate="true"
elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null
then generate="true"
else generate="false";
fi
if $generate ; then
AC_MSG_NOTICE(creating $pkgconfig_generate.in)
cat > $pkgconfig_generate.in <<AXEOF
# generated by configure / remove this line to disable regeneration
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
libdir=@libdir@
datadir=@datadir@
sysconfdir=@sysconfdir@
includedir=@includedir@
package=@PACKAGE@
suffix=@suffix@

Name: @PACKAGE_NAME@
Description: @PACKAGE_DESCRIPTION@
Version: @PACKAGE_VERSION@
Requires: @PACKAGE_REQUIRES@
Libs: -L\${libdir} @LDFLAGS@ @LIBS@
Cflags: -I\${includedir} @CPPFLAGS@
AXEOF
fi # DONE generate $pkgconfig_generate.in
AC_MSG_NOTICE(creating $pkgconfig_generate)
cat >conftest.sed <<AXEOF
s|@prefix@|${pkgconfig_prefix}|
s|@exec_prefix@|${pkgconfig_execprefix}|
s|@bindir@|${pkgconfig_bindir}|
s|@libdir@|${pkgconfig_libdir}|
s|@datadir@|${pkgconfig_datadir}|
s|@sysconfdir@|${pkgconfig_sysconfdir}|
s|@includedir@|${pkgconfig_includedir}|
s|@suffix@|${pkgconfig_suffix}|
s|@PACKAGE@|${pkgconfig_package}|
s|@PACKAGE_NAME@|${pkgconfig_libname}|
s|@PACKAGE_DESCRIPTION@|${pkgconfig_description}|
s|@PACKAGE_VERSION@|${pkgconfig_version}|
s|@PACKAGE_REQUIRES@|${pkgconfig_requires}|
s|@LIBS@|${pkgconfig_libs}|
s|@LDFLAGS@|${pkgconfig_ldflags}|
s|@CPPFLAGS@|${pkgconfig_cppflags}|
AXEOF
sed -f conftest.sed  $pkgconfig_generate.in > $pkgconfig_generate
if test ! -s $pkgconfig_generate ; then
    AC_MSG_ERROR([$pkgconfig_generate is empty])
fi ; rm conftest.sed # DONE generate $pkgconfig_generate
pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'`
AC_MSG_NOTICE(creating $pkgconfig_uninstalled)
cat >conftest.sed <<AXEOF
s|@prefix@|${pkgconfig_prefix}|
s|@exec_prefix@|${pkgconfig_execprefix}|
s|@bindir@|${pkgconfig_bindir}|
s|@libdir@|${pkgconfig_src_libdir}|
s|@datadir@|${pkgconfig_datadir}|
s|@sysconfdir@|${pkgconfig_sysconfdir}|
s|@includedir@|${pkgconfig_src_headers}|
s|@suffix@|${pkgconfig_suffix}|
s|@PACKAGE@|${pkgconfig_package}|
s|@PACKAGE_NAME@|${pkgconfig_libname}|
s|@PACKAGE_DESCRIPTION@|${pkgconfig_description}|
s|@PACKAGE_VERSION@|${pkgconfig_version}|
s|@PACKAGE_REQUIRES@|${pkgconfig_requires}|
s|@LIBS@|${pkgconfig_libs}|
s|@LDFLAGS@|${pkgconfig_ldflags}|
s|@CPPFLAGS@|${pkgconfig_cppflags}|
AXEOF
sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled
if test ! -s $pkgconfig_uninstalled ; then
    AC_MSG_ERROR([$pkgconfig_uninstalled is empty])
fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled
           pkgconfig_requires_add=`echo ${pkgconfig_requires}`
if test ".$pkgconfig_requires_add" != "." ; then
           pkgconfig_requires_add="pkg-config $pkgconfig_requires_add"
    else   pkgconfig_requires_add=":" ; fi
pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'`
AC_MSG_NOTICE(creating $pkgconfig_uninstalled)
cat >conftest.sed <<AXEOF
s|@prefix@|\"${pkgconfig_prefix}\"|
s|@exec_prefix@|\"${pkgconfig_execprefix}\"|
s|@bindir@|\"${pkgconfig_bindir}\"|
s|@libdir@|\"${pkgconfig_src_libdir}\"|
s|@datadir@|\"${pkgconfig_datadir}\"|
s|@sysconfdir@|\"${pkgconfig_sysconfdir}\"|
s|@includedir@|\"${pkgconfig_src_headers}\"|
s|@suffix@|\"${pkgconfig_suffix}\"|
s|@PACKAGE@|\"${pkgconfig_package}\"|
s|@PACKAGE_NAME@|\"${pkgconfig_libname}\"|
s|@PACKAGE_DESCRIPTION@|\"${pkgconfig_description}\"|
s|@PACKAGE_VERSION@|\"${pkgconfig_version}\"|
s|@PACKAGE_REQUIRES@|\"${pkgconfig_requires}\"|
s|@LIBS@|\"${pkgconfig_libs}\"|
s|@LDFLAGS@|\"${pkgconfig_ldflags}\"|
s|@CPPFLAGS@|\"${pkgconfig_cppflags}\"|
s>Name:>for option\\; do case \"\$option\" in --list-all|--name) echo >
s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of >
s>Version: *>\\;\\; --modversion|--version) echo >
s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add>
s>Libs: *>\\;\\; --libs) echo >
s>Cflags: *>\\;\\; --cflags) echo >
/--libs)/a\\
       $pkgconfig_requires_add
/--cflags)/a\\
       $pkgconfig_requires_add\\
;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\
;; --uninstalled) exit 0 \\
;; *) ;; esac done
AXEOF
sed -f conftest.sed  $pkgconfig_generate.in > $pkgconfig_uninstalled
if test ! -s $pkgconfig_uninstalled ; then
    AC_MSG_ERROR([$pkgconfig_uninstalled is empty])
fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled
],[
dnl AC_CONFIG_COMMANDS crap, the AS_PUSHVAR defines are invalid here...
ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate"
pkgconfig_prefix='$prefix'
pkgconfig_execprefix='$exec_prefix'
pkgconfig_bindir='$bindir'
pkgconfig_libdir='$libdir'
pkgconfig_includedir='$includedir'
pkgconfig_datadir='$datadir'
pkgconfig_sysconfdir='$sysconfdir'
pkgconfig_suffix='$ax_create_pkgconfig_suffix'
pkgconfig_package='$PACKAGE_NAME'
pkgconfig_libname='$ax_create_pkgconfig_libname'
pkgconfig_description='$ax_create_pkgconfig_description'
pkgconfig_version='$ax_create_pkgconfig_version'
pkgconfig_requires='$ax_create_pkgconfig_requires'
pkgconfig_libs='$ax_create_pkgconfig_libs'
pkgconfig_ldflags='$ax_create_pkgconfig_ldflags'
pkgconfig_cppflags='$ax_create_pkgconfig_cppflags'
pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir'
pkgconfig_src_headers='$ax_create_pkgconfig_src_headers'
])dnl
AS_VAR_POPDEF([PKGCONFIG_suffix])dnl
AS_VAR_POPDEF([PKGCONFIG_libdir])dnl
AS_VAR_POPDEF([PKGCONFIG_libfile])dnl
AS_VAR_POPDEF([PKGCONFIG_libname])dnl
AS_VAR_POPDEF([PKGCONFIG_version])dnl
AS_VAR_POPDEF([PKGCONFIG_description])dnl
AS_VAR_POPDEF([PKGCONFIG_requires])dnl
AS_VAR_POPDEF([PKGCONFIG_pkglibs])dnl
AS_VAR_POPDEF([PKGCONFIG_libs])dnl
AS_VAR_POPDEF([PKGCONFIG_ldflags])dnl
AS_VAR_POPDEF([PKGCONFIG_cppflags])dnl
AS_VAR_POPDEF([PKGCONFIG_generate])dnl
AS_VAR_POPDEF([PKGCONFIG_src_libdir])dnl
AS_VAR_POPDEF([PKGCONFIG_src_headers])dnl
])

License

Copyright © 2006 Sven Verdoolaege <skimo*liacs.nl>
Copyright © 2006 Guido U. Draheim <guidod@gmx.de>

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.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

As a special exception, the respective Autoconf Macro's copyright owner gives unlimited permission to copy, distribute and modify the configure scripts that are the output of Autoconf when processing the Macro. You need not follow the terms of the GNU General Public License when using or distributing such scripts, even though portions of the text of the Macro appear in them. The GNU General Public License (GPL) does govern all other use of the material that constitutes the Autoconf Macro.

This special exception to the GPL applies to versions of the Autoconf Macro released by the Autoconf Macro Archive. When you make and distribute a modified version of the Autoconf Macro, you may extend this special exception to the GPL to apply to your modified version as well.