1 # ============================================================================
2 # http://www.gnu.org/software/autoconf-archive/ax_create_pkgconfig_info.html
3 # ============================================================================
7 # AX_CREATE_PKGCONFIG_INFO [(outputfile, [requires [,libs [,summary [,cflags [, ldflags]]]]])]
13 # $1 = $PACKAGE_NAME.pc
15 # $3 = $PACKAGE_LIBS $LIBS (as set at that point in configure.ac)
16 # $4 = $PACKAGE_SUMMARY (or $1 Library)
17 # $5 = $PACKAGE_CFLAGS (as set at the point in configure.ac)
18 # $6 = $PACKAGE_LDFLAGS (as set at the point in configure.ac)
20 # PACKAGE_NAME defaults to $PACKAGE if not set.
21 # PACKAGE_LIBS defaults to -l$PACKAGE_NAME if not set.
23 # The resulting file is called $PACKAGE.pc.in / $PACKAGE.pc
25 # You will find this macro most useful in conjunction with
26 # ax_spec_defaults that can read good initializers from the .spec file. In
27 # consequencd, most of the generatable installable stuff can be made from
28 # information being updated in a single place for the whole project.
32 # Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
33 # Copyright (c) 2008 Sven Verdoolaege <skimo@kotnet.org>
35 # This program is free software; you can redistribute it and/or modify it
36 # under the terms of the GNU General Public License as published by the
37 # Free Software Foundation; either version 3 of the License, or (at your
38 # option) any later version.
40 # This program is distributed in the hope that it will be useful, but
41 # WITHOUT ANY WARRANTY; without even the implied warranty of
42 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
43 # Public License for more details.
45 # You should have received a copy of the GNU General Public License along
46 # with this program. If not, see <http://www.gnu.org/licenses/>.
48 # As a special exception, the respective Autoconf Macro's copyright owner
49 # gives unlimited permission to copy, distribute and modify the configure
50 # scripts that are the output of Autoconf when processing the Macro. You
51 # need not follow the terms of the GNU General Public License when using
52 # or distributing such scripts, even though portions of the text of the
53 # Macro appear in them. The GNU General Public License (GPL) does govern
54 # all other use of the material that constitutes the Autoconf Macro.
56 # This special exception to the GPL applies to versions of the Autoconf
57 # Macro released by the Autoconf Archive. When you make and distribute a
58 # modified version of the Autoconf Macro, you may extend this special
59 # exception to the GPL to apply to your modified version as well.
63 AC_DEFUN([AX_CREATE_PKGCONFIG_INFO],[dnl
64 AS_VAR_PUSHDEF([PKGCONFIG_suffix],[ax_create_pkgconfig_suffix])dnl
65 AS_VAR_PUSHDEF([PKGCONFIG_libdir],[ax_create_pkgconfig_libdir])dnl
66 AS_VAR_PUSHDEF([PKGCONFIG_libfile],[ax_create_pkgconfig_libfile])dnl
67 AS_VAR_PUSHDEF([PKGCONFIG_libname],[ax_create_pkgconfig_libname])dnl
68 AS_VAR_PUSHDEF([PKGCONFIG_version],[ax_create_pkgconfig_version])dnl
69 AS_VAR_PUSHDEF([PKGCONFIG_description],[ax_create_pkgconfig_description])dnl
70 AS_VAR_PUSHDEF([PKGCONFIG_requires],[ax_create_pkgconfig_requires])dnl
71 AS_VAR_PUSHDEF([PKGCONFIG_pkglibs],[ax_create_pkgconfig_pkglibs])dnl
72 AS_VAR_PUSHDEF([PKGCONFIG_libs],[ax_create_pkgconfig_libs])dnl
73 AS_VAR_PUSHDEF([PKGCONFIG_ldflags],[ax_create_pkgconfig_ldflags])dnl
74 AS_VAR_PUSHDEF([PKGCONFIG_cppflags],[ax_create_pkgconfig_cppflags])dnl
75 AS_VAR_PUSHDEF([PKGCONFIG_generate],[ax_create_pkgconfig_generate])dnl
76 AS_VAR_PUSHDEF([PKGCONFIG_src_libdir],[ax_create_pkgconfig_src_libdir])dnl
77 AS_VAR_PUSHDEF([PKGCONFIG_src_headers],[ax_create_pkgconfig_src_headers])dnl
79 # we need the expanded forms...
80 test "x$prefix" = xNONE && prefix=$ac_default_prefix
81 test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
83 AC_MSG_CHECKING(our pkgconfig libname)
84 test ".$PKGCONFIG_libname" != "." || \
85 PKGCONFIG_libname="ifelse($1,,${PACKAGE_NAME},`basename $1 .pc`)"
86 test ".$PKGCONFIG_libname" != "." || \
87 PKGCONFIG_libname="$PACKAGE"
88 PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"`
89 PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"`
90 AC_MSG_RESULT($PKGCONFIG_libname)
92 AC_MSG_CHECKING(our pkgconfig version)
93 test ".$PKGCONFIG_version" != "." || \
94 PKGCONFIG_version="${PACKAGE_VERSION}"
95 test ".$PKGCONFIG_version" != "." || \
96 PKGCONFIG_version="$VERSION"
97 PKGCONFIG_version=`eval echo "$PKGCONFIG_version"`
98 PKGCONFIG_version=`eval echo "$PKGCONFIG_version"`
99 AC_MSG_RESULT($PKGCONFIG_version)
101 AC_MSG_CHECKING(our pkgconfig_libdir)
102 test ".$pkgconfig_libdir" = "." && \
103 pkgconfig_libdir='${libdir}/pkgconfig'
104 PKGCONFIG_libdir=`eval echo "$pkgconfig_libdir"`
105 PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"`
106 PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"`
107 AC_MSG_RESULT($pkgconfig_libdir)
108 test "$pkgconfig_libdir" != "$PKGCONFIG_libdir" && (
109 AC_MSG_RESULT(expanded our pkgconfig_libdir... $PKGCONFIG_libdir))
110 AC_SUBST([pkgconfig_libdir])
112 AC_MSG_CHECKING(our pkgconfig_libfile)
113 test ".$pkgconfig_libfile" != "." || \
114 pkgconfig_libfile="ifelse($1,,$PKGCONFIG_libname.pc,`basename $1`)"
115 PKGCONFIG_libfile=`eval echo "$pkgconfig_libfile"`
116 PKGCONFIG_libfile=`eval echo "$PKGCONFIG_libfile"`
117 AC_MSG_RESULT($pkgconfig_libfile)
118 test "$pkgconfig_libfile" != "$PKGCONFIG_libfile" && (
119 AC_MSG_RESULT(expanded our pkgconfig_libfile... $PKGCONFIG_libfile))
120 AC_SUBST([pkgconfig_libfile])
122 AC_MSG_CHECKING(our package / suffix)
123 PKGCONFIG_suffix="$program_suffix"
124 test ".$PKGCONFIG_suffix" != .NONE || PKGCONFIG_suffix=""
125 AC_MSG_RESULT(${PACKAGE_NAME} / ${PKGCONFIG_suffix})
127 AC_MSG_CHECKING(our pkgconfig description)
128 PKGCONFIG_description="ifelse($4,,$PACKAGE_SUMMARY,$4)"
129 test ".$PKGCONFIG_description" != "." || \
130 PKGCONFIG_description="$PKGCONFIG_libname Library"
131 PKGCONFIG_description=`eval echo "$PKGCONFIG_description"`
132 PKGCONFIG_description=`eval echo "$PKGCONFIG_description"`
133 AC_MSG_RESULT($PKGCONFIG_description)
135 AC_MSG_CHECKING(our pkgconfig requires)
136 PKGCONFIG_requires="ifelse($2,,$PACKAGE_REQUIRES,$2)"
137 PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"`
138 PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"`
139 AC_MSG_RESULT($PKGCONFIG_requires)
141 AC_MSG_CHECKING(our pkgconfig ext libs)
142 PKGCONFIG_pkglibs="$PACKAGE_LIBS"
143 test ".$PKGCONFIG_pkglibs" != "." || PKGCONFIG_pkglibs="-l$PKGCONFIG_libname"
144 PKGCONFIG_libs="ifelse($3,,$PKGCONFIG_pkglibs $LIBS,$3)"
145 PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"`
146 PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"`
147 AC_MSG_RESULT($PKGCONFIG_libs)
149 AC_MSG_CHECKING(our pkgconfig cppflags)
150 PKGCONFIG_cppflags="ifelse($5,,$PACKAGE_CFLAGS,$5)"
151 PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"`
152 PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"`
153 AC_MSG_RESULT($PKGCONFIG_cppflags)
155 AC_MSG_CHECKING(our pkgconfig ldflags)
156 PKGCONFIG_ldflags="ifelse($6,,$PACKAGE_LDFLAGS,$5)"
157 PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"`
158 PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"`
159 AC_MSG_RESULT($PKGCONFIG_ldflags)
161 test ".$PKGCONFIG_generate" != "." || \
162 PKGCONFIG_generate="ifelse($1,,$PKGCONFIG_libname.pc,$1)"
163 PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"`
164 PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"`
165 test "$pkgconfig_libfile" != "$PKGCONFIG_generate" && (
166 AC_MSG_RESULT(generate the pkgconfig later... $PKGCONFIG_generate))
168 if test ".$PKGCONFIG_src_libdir" = "." ; then
169 PKGCONFIG_src_libdir=`pwd`
170 PKGCONFIG_src_libdir=`AS_DIRNAME("$PKGCONFIG_src_libdir/$PKGCONFIG_generate")`
171 test ! -d $PKGCONFIG_src_libdir/src || \
172 PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/src"
174 *libs) PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/$objdir" ;; esac
175 AC_MSG_RESULT(noninstalled pkgconfig -L $PKGCONFIG_src_libdir)
178 if test ".$PKGCONFIG_src_headers" = "." ; then
179 PKGCONFIG_src_headers=`pwd`
181 test ".$v" != "." || v="$ax_spec_dir"
182 test ".$v" != "." || v="$srcdir"
183 case "$v" in /*) PKGCONFIG_src_headers="" ;; esac
184 PKGCONFIG_src_headers=`AS_DIRNAME("$PKGCONFIG_src_headers/$v/x")`
185 test ! -d $PKGCONFIG_src_headers/incl[]ude || \
186 PKGCONFIG_src_headers="$PKGCONFIG_src_headers/incl[]ude"
187 AC_MSG_RESULT(noninstalled pkgconfig -I $PKGCONFIG_src_headers)
191 dnl AC_CONFIG_COMMANDS crap disallows to use $PKGCONFIG_libfile here...
192 AC_CONFIG_COMMANDS([$ax_create_pkgconfig_generate],[
193 pkgconfig_generate="$ax_create_pkgconfig_generate"
194 if test ! -f "$pkgconfig_generate.in"
196 elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null
198 else generate="false";
201 AC_MSG_NOTICE(creating $pkgconfig_generate.in)
202 cat > $pkgconfig_generate.in <<AXEOF
203 # generated by configure / remove this line to disable regeneration
205 exec_prefix=@exec_prefix@
208 datarootdir=@datarootdir@
210 sysconfdir=@sysconfdir@
211 includedir=@includedir@
216 Description: @PACKAGE_DESCRIPTION@
217 Version: @PACKAGE_VERSION@
218 Requires: @PACKAGE_REQUIRES@
219 Libs: -L\${libdir} @LDFLAGS@ @LIBS@
220 Cflags: -I\${includedir} @CPPFLAGS@
222 fi # DONE generate $pkgconfig_generate.in
223 AC_MSG_NOTICE(creating $pkgconfig_generate)
224 cat >conftest.sed <<AXEOF
225 s|@prefix@|${pkgconfig_prefix}|
226 s|@exec_prefix@|${pkgconfig_execprefix}|
227 s|@bindir@|${pkgconfig_bindir}|
228 s|@libdir@|${pkgconfig_libdir}|
229 s|@datarootdir@|${pkgconfig_datarootdir}|
230 s|@datadir@|${pkgconfig_datadir}|
231 s|@sysconfdir@|${pkgconfig_sysconfdir}|
232 s|@includedir@|${pkgconfig_includedir}|
233 s|@suffix@|${pkgconfig_suffix}|
234 s|@PACKAGE@|${pkgconfig_package}|
235 s|@PACKAGE_NAME@|${pkgconfig_libname}|
236 s|@PACKAGE_DESCRIPTION@|${pkgconfig_description}|
237 s|@PACKAGE_VERSION@|${pkgconfig_version}|
238 s|@PACKAGE_REQUIRES@|${pkgconfig_requires}|
239 s|@LIBS@|${pkgconfig_libs}|
240 s|@LDFLAGS@|${pkgconfig_ldflags}|
241 s|@CPPFLAGS@|${pkgconfig_cppflags}|
243 sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_generate
244 if test ! -s $pkgconfig_generate ; then
245 AC_MSG_ERROR([$pkgconfig_generate is empty])
246 fi ; rm conftest.sed # DONE generate $pkgconfig_generate
247 pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'`
248 AC_MSG_NOTICE(creating $pkgconfig_uninstalled)
249 cat >conftest.sed <<AXEOF
250 s|@prefix@|${pkgconfig_prefix}|
251 s|@exec_prefix@|${pkgconfig_execprefix}|
252 s|@bindir@|${pkgconfig_bindir}|
253 s|@libdir@|${pkgconfig_src_libdir}|
254 s|@datarootdir@|${pkgconfig_datarootdir}|
255 s|@datadir@|${pkgconfig_datadir}|
256 s|@sysconfdir@|${pkgconfig_sysconfdir}|
257 s|@includedir@|${pkgconfig_src_headers}|
258 s|@suffix@|${pkgconfig_suffix}|
259 s|@PACKAGE@|${pkgconfig_package}|
260 s|@PACKAGE_NAME@|${pkgconfig_libname}|
261 s|@PACKAGE_DESCRIPTION@|${pkgconfig_description}|
262 s|@PACKAGE_VERSION@|${pkgconfig_version}|
263 s|@PACKAGE_REQUIRES@|${pkgconfig_requires}|
264 s|@LIBS@|${pkgconfig_libs}|
265 s|@LDFLAGS@|${pkgconfig_ldflags}|
266 s|@CPPFLAGS@|${pkgconfig_cppflags}|
268 sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled
269 if test ! -s $pkgconfig_uninstalled ; then
270 AC_MSG_ERROR([$pkgconfig_uninstalled is empty])
271 fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled
272 pkgconfig_requires_add=`echo ${pkgconfig_requires}`
273 if test ".$pkgconfig_requires_add" != "." ; then
274 pkgconfig_requires_add="pkg-config $pkgconfig_requires_add"
275 else pkgconfig_requires_add=":" ; fi
276 pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'`
277 AC_MSG_NOTICE(creating $pkgconfig_uninstalled)
278 cat >conftest.sed <<AXEOF
279 s|@prefix@|\"${pkgconfig_prefix}\"|
280 s|@exec_prefix@|\"${pkgconfig_execprefix}\"|
281 s|@bindir@|\"${pkgconfig_bindir}\"|
282 s|@libdir@|\"${pkgconfig_src_libdir}\"|
283 s|@datarootdir@|\"${pkgconfig_datarootdir}\"|
284 s|@datadir@|\"${pkgconfig_datadir}\"|
285 s|@sysconfdir@|\"${pkgconfig_sysconfdir}\"|
286 s|@includedir@|\"${pkgconfig_src_headers}\"|
287 s|@suffix@|\"${pkgconfig_suffix}\"|
288 s|@PACKAGE@|\"${pkgconfig_package}\"|
289 s|@PACKAGE_NAME@|\"${pkgconfig_libname}\"|
290 s|@PACKAGE_DESCRIPTION@|\"${pkgconfig_description}\"|
291 s|@PACKAGE_VERSION@|\"${pkgconfig_version}\"|
292 s|@PACKAGE_REQUIRES@|\"${pkgconfig_requires}\"|
293 s|@LIBS@|\"${pkgconfig_libs}\"|
294 s|@LDFLAGS@|\"${pkgconfig_ldflags}\"|
295 s|@CPPFLAGS@|\"${pkgconfig_cppflags}\"|
296 s>Name:>for option\\; do case \"\$option\" in --list-all|--name) echo >
297 s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of >
298 s>Version: *>\\;\\; --modversion|--version) echo >
299 s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add>
300 s>Libs: *>\\;\\; --libs) echo >
301 s>Cflags: *>\\;\\; --cflags) echo >
303 $pkgconfig_requires_add
305 $pkgconfig_requires_add\\
306 ;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\
307 ;; --uninstalled) exit 0 \\
310 sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled
311 if test ! -s $pkgconfig_uninstalled ; then
312 AC_MSG_ERROR([$pkgconfig_uninstalled is empty])
313 fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled
315 dnl AC_CONFIG_COMMANDS crap, the AS_PUSHVAR defines are invalid here...
316 ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate"
317 pkgconfig_prefix='$prefix'
318 pkgconfig_execprefix='$exec_prefix'
319 pkgconfig_bindir='$bindir'
320 pkgconfig_libdir='$libdir'
321 pkgconfig_includedir='$includedir'
322 pkgconfig_datarootdir='$datarootdir'
323 pkgconfig_datadir='$datadir'
324 pkgconfig_sysconfdir='$sysconfdir'
325 pkgconfig_suffix='$ax_create_pkgconfig_suffix'
326 pkgconfig_package='$PACKAGE_NAME'
327 pkgconfig_libname='$ax_create_pkgconfig_libname'
328 pkgconfig_description='$ax_create_pkgconfig_description'
329 pkgconfig_version='$ax_create_pkgconfig_version'
330 pkgconfig_requires='$ax_create_pkgconfig_requires'
331 pkgconfig_libs='$ax_create_pkgconfig_libs'
332 pkgconfig_ldflags='$ax_create_pkgconfig_ldflags'
333 pkgconfig_cppflags='$ax_create_pkgconfig_cppflags'
334 pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir'
335 pkgconfig_src_headers='$ax_create_pkgconfig_src_headers'
337 AS_VAR_POPDEF([PKGCONFIG_suffix])dnl
338 AS_VAR_POPDEF([PKGCONFIG_libdir])dnl
339 AS_VAR_POPDEF([PKGCONFIG_libfile])dnl
340 AS_VAR_POPDEF([PKGCONFIG_libname])dnl
341 AS_VAR_POPDEF([PKGCONFIG_version])dnl
342 AS_VAR_POPDEF([PKGCONFIG_description])dnl
343 AS_VAR_POPDEF([PKGCONFIG_requires])dnl
344 AS_VAR_POPDEF([PKGCONFIG_pkglibs])dnl
345 AS_VAR_POPDEF([PKGCONFIG_libs])dnl
346 AS_VAR_POPDEF([PKGCONFIG_ldflags])dnl
347 AS_VAR_POPDEF([PKGCONFIG_cppflags])dnl
348 AS_VAR_POPDEF([PKGCONFIG_generate])dnl
349 AS_VAR_POPDEF([PKGCONFIG_src_libdir])dnl
350 AS_VAR_POPDEF([PKGCONFIG_src_headers])dnl