1 dnl @synopsis GP_CHECK_LIBRARY([VARNAMEPART],[libname],[VERSION-REQUIREMENT],
2 dnl [headername],[functionname],
3 dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
4 dnl [OPTIONAL-REQUIRED-ETC],[WHERE-TO-GET-IT])
6 dnl Checks for the presence of a certain library.
10 dnl VARNAMEPART partial variable name for variable definitions
11 dnl libname name of library
12 dnl VERSION-REQUIREMENT check for the version using pkg-config.
14 dnl headername name of header file
16 dnl functionname name of function name in library
18 dnl ACTION-IF-FOUND shell action to execute if found
20 dnl ACTION-IF-NOT-FOUND shell action to execute if not found
22 dnl OPTIONAL-REQUIRED-ETC one of "mandatory", "default-on", "default-off"
23 dnl "disable-explicitly"
24 dnl default: [mandatory]
25 dnl WHERE-TO-GET-IT place where to find the library, e.g. a URL
28 dnl What the ACTION-IFs can do:
30 dnl * change the variable have_[$1] to "yes" or "no" and thus change
31 dnl the outcome of the test
32 dnl * execute additional checks to define more specific variables, e.g.
33 dnl for different API versions
35 dnl What the OPTIONAL-REQUIRED-ETC options mean:
37 dnl mandatory Absolute requirement, cannot be disabled.
38 dnl default-on If found, it is used. If not found, it is not used.
39 dnl default-off In case of --with-libfoo, detect it. Without
40 dnl --with-libfoo, do not look for and use it.
41 dnl disable-explicitly Required by default, but can be disabled by
42 dnl explicitly giving --without-libfoo.
44 dnl These results have happened after calling GP_CHECK_LIBRARY:
46 dnl AM_CONDITIONAL([HAVE_VARPREFIX],[ if found ])
47 dnl AM_SUBST([have_VARPREFIX], [ "yes" if found, "no" if not found ])
48 dnl AM_SUBST([VARPREFIX_CFLAGS],[ -I, -D and stuff ])
49 dnl AM_SUBST([VARPREFIX_LIBS], [ /path/to/libname.la -L/path -lfoo ])
51 dnl Parameters to ./configure which influence the GP_CHECK_LIBRARY results:
53 dnl * VARNAMEPART_LIBS=/foobar/arm-palmos/lib/libname.la
54 dnl VARNAMEPART_CFLAGS=-I/foobar/include
55 dnl * --without-libfoo
56 dnl * --with-libfoo=/usr/local
57 dnl * --with-libfoo-include-dir=/foobar/include
58 dnl * --with-libfoo-lib=/foobar/arm-palmos/lib
59 dnl * --with-libfoo=autodetect
62 dnl GP_CHECK_LIBRARY([LIBEXIF], [libexif])dnl
63 dnl GP_CHECK_LIBRARY([LIBEXIF], [libexif-gtk], [>= 0.3.3])dnl
66 dnl Possible enhancements:
68 dnl * Derive VAR_PREFIX directly from libname
69 dnl This will change the calling conventions, so be aware of that.
70 dnl * Give names of a header file and function name and to a test
73 AC_DEFUN([_GP_CHECK_LIBRARY_SOEXT],[dnl
74 AC_MSG_CHECKING([for dynamic library extension])
77 *linux*) soext=".so" ;;
78 *sunos*) soext=".so" ;;
79 *solaris*) soext=".so" ;;
81 *darwin*) soext=".dylib" ;;
82 *w32*) soext=".dll" ;;
84 if test "x$soext" = "x"; then
86 AC_MSG_RESULT([${soext}])
88 Host system "${host}" not recognized, defaulting to "${soext}".
91 AC_MSG_RESULT([${soext}])
95 AC_DEFUN([_GP_CHECK_LIBRARY],[
96 # ----------------------------------------------------------------------
97 # [GP_CHECK_LIBRARY]([$1],[$2],[$3],
103 # ----------------------------------------------------------------------
105 AC_REQUIRE([GP_CONFIG_MSG])dnl
106 AC_REQUIRE([GP_PKG_CONFIG])dnl
107 AC_REQUIRE([_GP_CHECK_LIBRARY_SOEXT])dnl
108 dnl Use _CFLAGS and _LIBS given to configure.
109 dnl This makes it possible to set these vars in a configure script
110 dnl and AC_CONFIG_SUBDIRS this configure.
111 AC_ARG_VAR([$1][_CFLAGS], [CFLAGS for compiling with ][$2])dnl
112 AC_ARG_VAR([$1][_LIBS], [LIBS to add for linking against ][$2])dnl
114 AC_MSG_CHECKING([for ][$2][ to use])
117 if test "x${[$1][_LIBS]}" = "x" && test "x${[$1][_CFLAGS]}" = "x"; then
118 dnl define --with/--without argument
119 m4_if([$8], [default-off],
120 [m4_pushdef([gp_lib_arg],[--without-][$2])dnl
123 [m4_pushdef([gp_lib_arg],[--with-][$2])dnl
126 AC_ARG_WITH([$2],[AS_HELP_STRING([gp_lib_arg][=PREFIX],[where to find ][$2][, "no" or "auto"])],[try_][$1][="$withval"])
127 if test "x${[try_][$1]}" = "xauto"; then [try_][$1]=autodetect; fi
128 AC_MSG_RESULT([${try_][$1][}])
129 m4_popdef([gp_lib_arg])dnl
130 if test "x${[try_][$1]}" = "xautodetect"; then
131 dnl OK, we have to autodetect.
132 dnl We start autodetection with the cleanest known method: pkg-config
133 if test "x${[have_][$1]}" = "xno"; then
134 dnl we need that line break after the PKG_CHECK_MODULES
136 [PKG_CHECK_MODULES([$1],[$2][ $3],[have_][$1][=yes],[:])],
137 [PKG_CHECK_MODULES([$1],[$2], [have_][$1][=yes],[:])]
140 dnl If pkg-config didn't find anything, try the libfoo-config program
141 dnl certain known libraries ship with.
142 if test "x${[have_][$1]}" = "xno"; then
143 AC_MSG_WARN([The `$2' library could not be found using pkg-config.
144 No version checks will be performed if it is found using any other method.])
145 AC_MSG_CHECKING([$2][ config program])
146 m4_pushdef([gp_lib_config],[m4_if([$2],[libusb],[libusb-config],
147 [$2],[libgphoto2],[gphoto2-config],
148 [$2],[libgphoto2_port],[gphoto2-port-config],
150 AC_MSG_RESULT([gp_lib_config])
151 AC_PATH_PROG([$1][_CONFIG_PROG],[gp_lib_config])
152 if test -n "${[$1][_CONFIG_PROG]}" &&
153 test "${[$1][_CONFIG_PROG]}" != "none"; then
154 AC_MSG_CHECKING([for ][$2][ parameters from ][gp_lib_config])
155 [$1]_LIBS="$(${[$1][_CONFIG_PROG]} --libs || echo "*error*")"
156 [$1]_CFLAGSS="$(${[$1][_CONFIG_PROG]} --cflags || echo "*error*")"
157 if test "x${[$1]_LIBS}" = "*error*" ||
158 test "x${[$1]_CFLAGS}" = "*error*"; then
159 AC_MSG_RESULT([error])
165 m4_popdef([gp_lib_config])dnl
167 dnl Neither pkg-config, nor the libfoo-config program have found anything.
168 dnl So let's just probe the system.
169 if test "x${[have_][$1]}" = "xno"; then
171 IFS=":" # FIXME: for W32 and OS/2 we may need ";" here
175 "${prefix}/lib64" "${prefix}/lib" \
176 /usr/lib64 /usr/lib \
177 /usr/local/lib64 /usr/local/lib \
181 for _soext_ in .la ${soext} .a; do
182 if test -f "${_libdir_}/[$2]${_soext_}"
184 if test "x${_soext_}" = "x.la" ||
185 test "x${_soext_}" = "x.a"; then
186 [$1]_LIBS="${_libdir_}/[$2]${_soext_}"
188 [$1]_LIBS="-L${_libdir_} -l$(echo "$2" | sed 's/^lib//')"
193 if test "x${[$1][_LIBS]}" != "x"; then
198 if test "x${[$1][_LIBS]}" != "x"; then
202 elif test "x${[try_][$1]}" = "xno"; then
205 [$1][_LIBS]="-L${[try_][$1]}/lib -l$(echo "$2" | sed 's/^lib//')"
206 [$1][_CFLAGS]="-I${[try_][$1]}/include"
208 elif test "x${[$1][_LIBS]}" != "x" && test "x${[$1][_CFLAGS]}" != "x"; then
209 AC_MSG_RESULT([user-defined])
213 AC_MSG_RESULT([broken call])
216 * When calling configure for ${PACKAGE_TARNAME}
218 * either set both [$1][_LIBS] *and* [$1][_CFLAGS]
226 if test "x${[have_][$1]}" = "xyes"; then
232 dnl ACTION-IF-NOT-FOUND
235 if test "x${[have_][$1]}" = "xno"; then
236 # ACTION-IF-NOT-FOUND
241 dnl Run our own test compilation
244 if test "x${[have_][$1]}" = "xyes"; then
245 dnl AC_MSG_CHECKING([whether ][$2][ test compile succeeds])
246 dnl AC_MSG_RESULT([${[have_][$1]}])
247 CPPFLAGS_save="$CPPFLAGS"
248 CPPFLAGS="${[$1]_CFLAGS}"
249 AC_CHECK_HEADER([$4],[have_][$1][=yes],[have_][$1][=no])
250 CPPFLAGS="$CPPFLAGS_save"
254 dnl Run our own test link
255 dnl Does not work for libraries which be built after configure time,
256 dnl so we deactivate it for them (userdef_).
259 if test "x${[userdef_][$1]}" = "xno" && test "x${[have_][$1]}" = "xyes"; then
260 AC_MSG_CHECKING([for function ][$5][ in ][$2])
263 AC_TRY_LINK_FUNC([$5],[],[have_][$1][=no])
265 AC_MSG_RESULT([${[have_][$1]}])
269 dnl Abort configure script if mandatory, but not found
271 m4_if([$8],[mandatory],[
272 if test "x${[have_][$1]}" = "xno"; then
274 PKG_CONFIG_PATH=${PKG_CONFIG_PATH}
275 [$1][_LIBS]=${[$1][_LIBS]}
276 [$1][_CFLAGS]=${[$1][_CFLAGS]}
278 * Fatal: ${PACKAGE_NAME} requires $2 to build.
280 * Possible solutions:
281 * - set PKG_CONFIG_PATH to adequate value
282 * - call configure with [$1][_LIBS]=.. and [$1][_CFLAGS]=..
283 * - call configure with one of the --with-$2 parameters
285 * - get $2 and install it
287 * - get $2 and install it:
292 dnl Abort configure script if not found and not explicitly disabled
294 m4_if([$8],[disable-explicitly],[
295 if test "x${[try_][$1]}" != "xno" && test "x${[have_][$1]}" = "xno"; then
297 PKG_CONFIG_PATH=${PKG_CONFIG_PATH}
298 [$1][_LIBS]=${[$1][_LIBS]}
299 [$1][_CFLAGS]=${[$1][_CFLAGS]}
301 * Fatal: ${PACKAGE_NAME} by default requires $2 to build.
302 * You must explicitly disable $2 to build ${PACKAGE_TARNAME} without it.
304 * Possible solutions:
305 * - call configure with --with-$2=no or --without-$2
306 * - set PKG_CONFIG_PATH to adequate value
307 * - call configure with [$1][_LIBS]=.. and [$1][_CFLAGS]=..
308 * - call configure with one of the --with-$2 parameters
310 * - get $2 and install it
312 * - get $2 and install it:
316 AM_CONDITIONAL([HAVE_][$1], [test "x$have_[$1]" = "xyes"])
317 if test "x$have_[$1]" = "xyes"; then
318 AC_DEFINE([HAVE_][$1], 1, [whether we compile with ][$2][ support])
319 GP_CONFIG_MSG([$2],[yes])dnl
320 AC_MSG_CHECKING([$2][ library flags])
321 AC_MSG_RESULT([${[$1][_LIBS]}])
322 AC_MSG_CHECKING([$2][ cpp flags])
323 AC_MSG_RESULT([${[$1][_CFLAGS]}])
325 GP_CONFIG_MSG([$2],[no])dnl
327 dnl AC_SUBST is done implicitly by AC_ARG_VAR above.
328 dnl AC_SUBST([$1][_LIBS])
329 dnl AC_SUBST([$1][_CFLAGS])
332 dnl ####################################################################
334 AC_DEFUN([_GP_CHECK_LIBRARY_SYNTAX_ERROR],[dnl
335 m4_errprint(__file__:__line__:[ Error:
336 *** Calling $0 macro with old syntax
342 dnl ####################################################################
344 AC_DEFUN([GP_CHECK_LIBRARY],[dnl
345 m4_if([$4], [mandatory], [_GP_CHECK_LIBRARY_SYNTAX_ERROR($0)],
346 [$4], [default-enabled], [_GP_CHECK_LIBRARY_SYNTAX_ERROR($0)],
347 [$4], [default-disabled], [_GP_CHECK_LIBRARY_SYNTAX_ERROR($0)])dnl
349 _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[mandatory],[$9])],
350 [$8], [default-on], [dnl
351 _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[$8],[$9])],
352 [$8], [disable-explicitly], [dnl
353 _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[$8],[$9])],
354 [$8], [default-off], [dnl
355 _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[$8],[$9])],
356 [$8], [mandatory], [dnl
357 _GP_CHECK_LIBRARY([$1],[$2],[$3],[$4],[$5],[$6],[$7],[$8],[$9])],
358 [m4_errprint(__file__:__line__:[ Error:
359 Illegal argument 6 to $0: `$6'
360 It must be one of "default-on", "default-off", "mandatory".
364 m4_pattern_disallow([GP_CHECK_LIBRARY])
365 m4_pattern_disallow([_GP_CHECK_LIBRARY])
366 m4_pattern_disallow([_GP_CHECK_LIBRARY_SYNTAX_ERROR])
367 m4_pattern_disallow([_GP_CHECK_LIBRARY_SOEXT])
369 dnl ####################################################################
371 dnl Please do not remove this:
372 dnl filetype: 6e60b4f0-acb2-4cd5-8258-42014f92bd2c
373 dnl I use this to find all the different instances of this file which
374 dnl are supposed to be synchronized.