1
dnl @synopsis AC_CONFIG_LIBCONFIG_IN [(LIBRARY [, DESTINATION [, MODULES]])]
3
dnl Creates a custom LIBRARY-config script. The script supports
4
dnl --cflags, --libs and --version options, as well as all of the
5
dnl standard configure variables e.g. --libdir and --sysconfdir.
6
dnl --prefix and --exec-prefix may be specified to override the
7
dnl defaults. --help gives a complete list of available options.
8
dnl Modules allow multiple sets of --libs, --cflags and --version
9
dnl options to be used, and combined together.
11
dnl This macro saves you all the typing for a library-config.in script;
12
dnl you don't even need to distribute one along. Place this macro
13
dnl in your configure.ac, et voila, you got one that you want to install.
17
dnl $1 = LIBRARY e.g. gtk, ncurses
18
dnl $2 = DESTINATION Directory path, e.g. src/scripts
19
dnl $3 = MODULES Additional library modules, not including the
22
dnl It is suggested that the following CFLAGS and LIBS variables are
23
dnl used in your configure.in. library_libs is *essential*.
24
dnl library_cflags is important, but not always needed. If they do not
25
dnl exist, defaults will be taken from LIBRARY_CFLAGS, LIBRARY_LIBS
26
dnl (should be -llibrary *only*) and LIBRARY_LIBDEPS (-l options for
27
dnl libraries your library depends upon.
28
dnl LIBLIBRARY_LIBS is simply $LIBRARY_LIBS $LIBRARY_LIBDEPS.
29
dnl NB. LIBRARY and library are the name of your library, in upper and
30
dnl lower case repectively e.g. GTK, gtk.
32
dnl LIBRARY_CFLAGS: cflags for compiling libraries and example progs
33
dnl LIBRARY_LIBS: libraries for linking programs
34
dnl LIBRARY_LIBDEPS*: libraries for linking libraries against (needed
36
dnl library_cflags*: cflags to store in library-config
37
dnl library_libs*: libs to store in library-config
38
dnl LIBLIBRARY_LIBS: libs to link programs IN THIS PACKAGE ONLY against
39
dnl LIBRARY_VERSION*: the version of your library (x.y.z recommended)
40
dnl *=required if you want sensible output, otherwise they will be
43
dnl Support for pkg-config is available by default. libs, cflags and
44
dnl version information will be obtained from the pkg-config metadata
45
dnl file library.pc if it exists in the pkgconfig data directory.
46
dnl The above information still needs to be specified, as it will still
47
dnl be used if pkg-config is not found on the host system at configure
50
dnl -I and -L flags will be obtained from *both* pkgconfig and the script.
51
dnl AC_CONFIG_LIBCONFIG_IN_PKGCONFIG enables pkg-config support (default)
52
dnl AC_CONFIG_LIBCONFIG_IN_STATIC disables pkg-config support
54
dnl There is also an AC_SUBST(LIBRARY_CONFIG) that will be set to
55
dnl the name of the file that we output in this macro. Use as:
57
dnl install-exec-local: install-config
59
dnl $(mkinstalldirs) $(DESTDIR)$(bindir)
60
dnl $(INSTALL_EXEC) @LIBRARY_CONFIG@ $(DESTDIR)$(bindir)
62
dnl Or, if using automake:
64
dnl bin_SCRIPTS = @LIBRARY_CONFIG@
66
dnl Based upon AC_CREATE_GENERIC_CONFIG (ac_create_generic_config.m4)
67
dnl by Guido Draheim <guidod@gmx.de> and gtk-config by Owen Taylor.
69
dnl @version $Id: ac_config_libconfig_in.m4,v 1.2 2002/09/12 21:53:35 guidod Exp $
70
dnl @author Roger Leigh <roger@whinlatter.uklinux.net>
72
# AC_CONFIG_LIBCONFIG_IN(LIBRARY, DESTINATION, MODULES)
73
# -----------------------------------------------------
74
# Generate a custom LIBRARY-config script. Create the script in the
75
# DESTINATION directory, including support for MODULES.
76
AC_DEFUN([AC_CONFIG_LIBCONFIG_IN],
77
[# create a custom library-config file ($1-config)
78
m4_if(AC_CONFIG_LIBCONFIG_IN_USEPKGCONFIG, [true],
79
[AC_PATH_PROG(PKG_CONFIG, pkg-config)])
80
pushdef([LIBCONFIG_DIR], [m4_if([$2], , , [$2/])])
81
LIBCONFIG_FILE="LIBCONFIG_DIR[]$1-config.in"
85
dnl create directory if it does not preexist
86
m4_if([$2], , , [AS_MKDIR_P([$2])])
87
AC_MSG_NOTICE([creating $LIBCONFIG_FILE])
88
echo '#! /bin/sh' >$LIBCONFIG_FILE
89
echo "# $1-config library configuration script" >>$LIBCONFIG_FILE
90
echo '# generated by ac_config_libconfig_in.m4' >>$LIBCONFIG_FILE
91
echo ' ' >>$LIBCONFIG_FILE
92
echo 'template_version="1.0.0"' >>$LIBCONFIG_FILE
93
echo ' ' >>$LIBCONFIG_FILE
94
echo 'package="@PACKAGE@"' >>$LIBCONFIG_FILE
95
echo ' ' >>$LIBCONFIG_FILE
96
echo '# usage instructions if no options given' >>$LIBCONFIG_FILE
97
echo 'if test "'"\$""#"'" -eq 0; then' >>$LIBCONFIG_FILE
98
echo ' cat <<EOF' >>$LIBCONFIG_FILE
100
[echo 'Usage: $1-config [[OPTIONS]]' >>$LIBCONFIG_FILE],
101
[echo 'Usage: $1-config [[OPTIONS]] [[LIBRARIES]]' >>$LIBCONFIG_FILE])
102
echo 'Options:' >>$LIBCONFIG_FILE
103
echo ' [[--prefix[=DIR]]]' >>$LIBCONFIG_FILE
104
echo ' [[--exec-prefix[=DIR]]]' >>$LIBCONFIG_FILE
105
echo ' [[--package]]' >>$LIBCONFIG_FILE
106
echo ' [[--version]]' >>$LIBCONFIG_FILE
107
echo ' [[--cflags]]' >>$LIBCONFIG_FILE
108
echo ' [[--libs]]' >>$LIBCONFIG_FILE
109
echo ' [[--help]]' >>$LIBCONFIG_FILE
111
[echo 'Libraries:' >>$LIBCONFIG_FILE
112
for module in $1 $3 ; do
113
echo " $module" >>$LIBCONFIG_FILE ;
115
echo 'EOF' >>$LIBCONFIG_FILE
116
echo 'fi' >>$LIBCONFIG_FILE
117
echo ' ' >>$LIBCONFIG_FILE
118
echo '# parse options' >>$LIBCONFIG_FILE
119
echo 'o=""' >>$LIBCONFIG_FILE
120
echo 'h=""' >>$LIBCONFIG_FILE
121
echo 'for i in $''@; do' >>$LIBCONFIG_FILE
122
echo ' case $i in' >>$LIBCONFIG_FILE
123
options="prefix exec-prefix eprefix package version cflags libs bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir infodir mandir target host build pkgdatadir pkglibdir pkgincludedir template-version help"
124
echo ' --prefix=*) prefix=`echo $i | sed -e "s/--prefix=//"` ;;' >>$LIBCONFIG_FILE
125
echo ' --exec-prefix=*) exec_prefix=`echo $i | sed -e "s/--exec-prefix=//"` ;;' >>$LIBCONFIG_FILE
126
echo ' --eprefix=*) exec_prefix=`echo $i | sed -e "s/--eprefix=//"` ;;' >>$LIBCONFIG_FILE
127
for option in $options ; do
129
exec-prefix) echo " --$option) echo_exec_prefix=\"yes\" ;;" >>$LIBCONFIG_FILE ;;
130
template-version) echo " --$option) echo_template_version=\"yes\" ;;" >>$LIBCONFIG_FILE ;;
131
*) echo " --$option) echo_$option=\"yes\" ;;" >>$LIBCONFIG_FILE ;;
135
[for module in $1 $3 ; do
136
echo " $module) echo_module_$module=\"yes\" ;" >>$LIBCONFIG_FILE ;
137
echo ' echo_module="yes" ;;' >>$LIBCONFIG_FILE ;
139
echo ' //*|/*//*|./*//*) echo_extra="yes" ;;' >>$LIBCONFIG_FILE
140
echo ' *) eval "echo Unknown option: $i" ; exit 1 ;;' >>$LIBCONFIG_FILE
141
echo ' esac' >>$LIBCONFIG_FILE
142
echo 'done' >>$LIBCONFIG_FILE
143
echo ' ' >>$LIBCONFIG_FILE
144
# in the order of occurence a standard automake Makefile
145
echo '# defaults from configure; set only if not set previously' >>$LIBCONFIG_FILE
146
vars="prefix exec_prefix bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir infodir mandir includedir target host build"
147
for var in $vars ; do
148
echo "if test -z \"\$$var\" ; then" >>$LIBCONFIG_FILE
149
echo " $var=\"@$var@\"" >>$LIBCONFIG_FILE
150
echo 'fi' >>$LIBCONFIG_FILE
152
echo ' ' >>$LIBCONFIG_FILE
153
echo '# generate output' >>$LIBCONFIG_FILE
154
echo 'if test x$echo_module != xyes ; then' >>$LIBCONFIG_FILE
155
echo ' echo_module_$1="yes"' >>$LIBCONFIG_FILE
156
echo 'fi' >>$LIBCONFIG_FILE
157
AC_CONFIG_LIBCONFIG_IN_MODULES(m4_if([$3], , [$1], [m4_translit([$1 $3], [ ], [,])]))dnl
158
for option in $options extra; do
160
exec-prefix) echo "if test x\$echo_exec_prefix = xyes ; then" >>$LIBCONFIG_FILE ;;
161
template-version) echo "if test x\$echo_template_version = xyes ; then" >>$LIBCONFIG_FILE ;;
162
*) echo "if test x\$echo_$option = xyes ; then" >>$LIBCONFIG_FILE ;;
165
exec-prefix | eprefix) echo ' o="$o $exec_prefix"' >>$LIBCONFIG_FILE ;;
166
template-version) echo ' o="$o $template_version"' >>$LIBCONFIG_FILE ;;
168
echo ' i=`eval echo "$includedir"`' >>$LIBCONFIG_FILE ;
169
echo ' i=`eval echo "$i"`' >>$LIBCONFIG_FILE ;
170
echo ' if test "_$i" != "_/usr/include" ; then' >>$LIBCONFIG_FILE ;
171
echo ' o="$o -I$includedir"' >>$LIBCONFIG_FILE ;
172
echo ' fi' >>$LIBCONFIG_FILE ;
173
echo ' o="$o $cflags"' >>$LIBCONFIG_FILE ;;
174
libs) echo ' o="$o -L$libdir $libs"' >>$LIBCONFIG_FILE ;;
175
help) echo ' h="1"' >>$LIBCONFIG_FILE ;;
176
pkgdatadir) echo " o=\"$o \${datadir}/\${package}\"" >>$LIBCONFIG_FILE ;;
177
pkglibdir) echo " o=\"$o \${libdir}/\${package}\"" >>$LIBCONFIG_FILE ;;
178
pkgincludedir) echo " o=\"$o \${includedir}/\${package}\"" >>$LIBCONFIG_FILE ;;
180
echo ' v=`echo $i | sed -e s://:\$:g`' >>$LIBCONFIG_FILE ;
181
echo ' v=`eval "echo $v"`' >>$LIBCONFIG_FILE ;
182
echo ' o="$o $v"' >>$LIBCONFIG_FILE ;;
183
*) echo " o=\"$o \$$option\"" >>$LIBCONFIG_FILE
185
echo 'fi' >>$LIBCONFIG_FILE
187
echo ' ' >>$LIBCONFIG_FILE
188
echo '# output data' >>$LIBCONFIG_FILE
189
echo 'o=`eval "echo $o"`' >>$LIBCONFIG_FILE
190
echo 'o=`eval "echo $o"`' >>$LIBCONFIG_FILE
191
echo 'if test -n "$o" ; then ' >>$LIBCONFIG_FILE
192
echo ' eval "echo $o"' >>$LIBCONFIG_FILE
193
echo 'fi' >>$LIBCONFIG_FILE
194
echo ' ' >>$LIBCONFIG_FILE
195
echo '# help text' >>$LIBCONFIG_FILE
196
echo 'if test ! -z "$h" ; then ' >>$LIBCONFIG_FILE
197
echo ' cat <<EOF' >>$LIBCONFIG_FILE
198
echo 'All available options:' >>$LIBCONFIG_FILE
199
echo ' --prefix=DIR and change \$prefix and \$exec-prefix' >>$LIBCONFIG_FILE
200
echo ' --exec-prefix=DIR (affects all other options)' >>$LIBCONFIG_FILE
201
echo ' --prefix \$prefix $prefix' >>$LIBCONFIG_FILE
202
echo ' --exec_prefix or... ' >>$LIBCONFIG_FILE
203
echo ' --eprefix \$exec_prefix $exec_prefix' >>$LIBCONFIG_FILE
204
echo ' --version \$version $version' >>$LIBCONFIG_FILE
205
echo ' --cflags -I\$includedir unless it is /usr/include' >>$LIBCONFIG_FILE
206
echo ' --libs -L\$libdir \$LIBS $libs' >>$LIBCONFIG_FILE
207
echo ' --package \$package $package' >>$LIBCONFIG_FILE
208
echo ' --bindir \$bindir $bindir' >>$LIBCONFIG_FILE
209
echo ' --sbindir \$sbindir $sbindir' >>$LIBCONFIG_FILE
210
echo ' --libexecdir \$libexecdir $libexecdir' >>$LIBCONFIG_FILE
211
echo ' --datadir \$datadir $datadir' >>$LIBCONFIG_FILE
212
echo ' --sysconfdir \$sysconfdir $sysconfdir' >>$LIBCONFIG_FILE
213
echo ' --sharedstatedir \$sharedstatedir$sharedstatedir' >>$LIBCONFIG_FILE
214
echo ' --localstatedir \$localstatedir $localstatedir' >>$LIBCONFIG_FILE
215
echo ' --libdir \$libdir $libdir' >>$LIBCONFIG_FILE
216
echo ' --infodir \$infodir $infodir' >>$LIBCONFIG_FILE
217
echo ' --mandir \$mandir $mandir' >>$LIBCONFIG_FILE
218
echo ' --target \$target $target' >>$LIBCONFIG_FILE
219
echo ' --host \$host $host' >>$LIBCONFIG_FILE
220
echo ' --build \$build $build' >>$LIBCONFIG_FILE
221
echo ' --pkgdatadir \$datadir/\$package ${datadir}/${package}' >>$LIBCONFIG_FILE
222
echo ' --pkglibdir \$libdir/\$package ${libdir}/${package}' >>$LIBCONFIG_FILE
223
echo ' --pkgincludedir \$includedir/\$package ${includedir}/${package}' >>$LIBCONFIG_FILE
224
echo ' --template-version \$template_version $template_version' >>$LIBCONFIG_FILE
225
echo ' --help' >>$LIBCONFIG_FILE
226
echo 'EOF' >>$LIBCONFIG_FILE
227
echo 'fi' >>$LIBCONFIG_FILE
228
m4_pushdef([LIBCONFIG_UP], [m4_translit([$1], [a-z], [A-Z])])dnl
229
LIBCONFIG_UP[]_CONFIG="LIBCONFIG_DIR[]$1-config"
230
AC_SUBST(LIBCONFIG_UP[]_CONFIG)
231
dnl AC_CONFIG_FILES(LIBCONFIG_DIR[]$1[-config], [chmod +x ]LIBCONFIG_DIR[]$1[-config])
232
m4_popdef([LIBCONFIG_DIR])
233
m4_popdef([LIBCONFIG_UP])
237
# AC_CONFIG_LIBCONFIG_IN_MODULES [(MODULE1 [, MODULE2 [, ...]])]
238
# --------------------------------------------------------------
239
#Output shell script using custom module variables.
240
AC_DEFUN([AC_CONFIG_LIBCONFIG_IN_MODULES],
242
[# create module definition for $1
243
dnl we're going to need uppercase, lowercase and user-friendly versions of the
245
m4_pushdef([MODULE_UP], m4_translit([$1], [a-z], [A-Z]))dnl
246
m4_pushdef([MODULE_DOWN], m4_translit([$1], [A-Z], [a-z]))dnl
247
if test -z "$MODULE_DOWN[]_cflags" ; then
248
if test -n "$MODULE_UP[]_CFLAGS" ; then
249
MODULE_DOWN[]_cflags="$MODULE_UP[]_CFLAGS"
251
dnl AC_MSG_WARN([variable `MODULE_DOWN[]_cflags' undefined])
252
MODULE_DOWN[]_cflags=''
255
AC_SUBST(MODULE_DOWN[]_cflags)dnl
256
if test -z "$MODULE_DOWN[]_libs" ; then
257
if test -n "$MODULE_UP[]_LIBS" ; then
258
MODULE_DOWN[]_libs="$MODULE_UP[]_LIBS"
260
AC_MSG_WARN([variable `MODULE_DOWN[]_libs' and `MODULE_UP[]_LIBS' undefined])
261
MODULE_DOWN[]_libs='-l$1'
263
if test -n "$MODULE_UP[]_LIBDEPS" ; then
264
MODULE_DOWN[]_libs="$MODULE_DOWN[]_libs $MODULE_UP[]_LIBDEPS"
267
AC_SUBST(MODULE_DOWN[]_libs)dnl
268
if test -z "$MODULE_UP[]_VERSION" ; then
269
AC_MSG_WARN([variable `MODULE_UP[]_VERSION' undefined])
270
MODULE_UP[]_VERSION="$VERSION"
272
AC_SUBST(MODULE_UP[]_VERSION)dnl
273
echo 'if test x$echo_module_$1 = xyes ; then' >>$LIBCONFIG_FILE
274
AC_CONFIG_LIBCONFIG_IN_MODULES_VARS([cflags], [MODULE_DOWN[]_cflags], [cflags])
275
AC_CONFIG_LIBCONFIG_IN_MODULES_VARS([libs], [MODULE_DOWN[]_libs], [libs])
276
AC_CONFIG_LIBCONFIG_IN_MODULES_VARS([version], [MODULE_UP[]_VERSION], [modversion])
277
echo 'fi' >>$LIBCONFIG_FILE
278
m4_popdef([MODULE_UP])dnl
279
m4_popdef([MODULE_DOWN])dnl
280
AC_CONFIG_LIBCONFIG_IN_MODULES(m4_shift($@))])dnl
284
# AC_CONFIG_LIBCONFIG_IN_MODULES_VARS [(VAR, SUBSTITUTION,
286
# --------------------------------------------------------
287
# Output AC_CONFIG_LIBCONFIG_IN_MODULES variables.
288
# VAR = variable to set
289
# SUBSTITUTION = set if pkg-config is not available
290
# PKGCONFIG_ARGS = args for pkg-config
291
AC_DEFUN([AC_CONFIG_LIBCONFIG_IN_MODULES_VARS],
292
[m4_if(AC_CONFIG_LIBCONFIG_IN_USEPKGCONFIG, [true],
294
echo 'if test -x "`which pkg-config`" ; then' >>$LIBCONFIG_FILE
295
echo ' if pkg-config --atleast-pkgconfig-version=0.7 --exists "MODULE_DOWN"; then' >>$LIBCONFIG_FILE
296
echo ' $1="@S|@$1 `pkg-config --$3 MODULE_DOWN`"' >>$LIBCONFIG_FILE
297
echo ' fi' >>$LIBCONFIG_FILE
298
echo 'else' >>$LIBCONFIG_FILE
299
echo ' $1="@S|@$1 @$2@"' >>$LIBCONFIG_FILE
300
echo 'fi' >>$LIBCONFIG_FILE
302
[echo ' $1="@S|@$1 @$2@"' >>$LIBCONFIG_FILE
306
# AC_CONFIG_LIBCONFIG_IN_PKGCONFIG
307
# --------------------------------
308
# Enable pkgconfig support in libconfig script (default)
309
AC_DEFUN([AC_CONFIG_LIBCONFIG_IN_PKGCONFIG],
310
[m4_define([AC_CONFIG_LIBCONFIG_IN_USEPKGCONFIG], [true])
314
# AC_CONFIG_LIBCONFIG_IN_STATIC
315
# -----------------------------
316
# Disable pkgconfig support in libconfig script
317
AC_DEFUN([AC_CONFIG_LIBCONFIG_IN_STATIC],
318
[m4_define([AC_CONFIG_LIBCONFIG_IN_USEPKGCONFIG], [false])