1# Process this file with autoconf to produce a configure script.
2#
3#  This file is part of GNU libextractor
4#  Copyright (C) 2003-2020 Christian Grothoff
5#
6#  GNU libextractor is free software; you can redistribute it and/or modify it under the
7#  terms of the GNU General Public License as published by the Free Software
8#  Foundation; either version 3, or (at your option) any later version.
9#
10#  GNU libextractor is distributed in the hope that it will be useful, but WITHOUT ANY
11#  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12#  A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13#
14#  You should have received a copy of the GNU General Public License along with
15#  GNU libextractor; see the file COPYING.  If not, If not, see <http://www.gnu.org/license>
16#
17#
18AC_PREREQ(2.61)
19AC_INIT([libextractor], [1.11], [bug-libextractor@gnu.org])
20AC_CONFIG_AUX_DIR([build-aux])
21AC_CONFIG_HEADERS([config.h])
22AC_CONFIG_MACRO_DIR([m4])
23AH_TOP([#define _GNU_SOURCE  1])
24AC_CANONICAL_TARGET
25AC_CANONICAL_HOST
26AC_CANONICAL_SYSTEM
27
28LIB_VERSION_CURRENT=4
29LIB_VERSION_REVISION=8
30LIB_VERSION_AGE=1
31AC_SUBST(LIB_VERSION_CURRENT)
32AC_SUBST(LIB_VERSION_REVISION)
33AC_SUBST(LIB_VERSION_AGE)
34
35AM_INIT_AUTOMAKE([silent-rules])
36
37# Checks for programs.
38AC_USE_SYSTEM_EXTENSIONS
39AC_PROG_AWK
40AC_PROG_CC
41AM_PROG_CC_C_O
42AC_PROG_CPP
43AC_PROG_CXX
44AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
45AC_PROG_INSTALL
46AC_PROG_LN_S
47AC_PROG_MAKE_SET
48AC_CANONICAL_HOST
49AC_PROG_LIBTOOL
50# save LIBS, libtool does a AC_SEARCH_LIBS(dlopen, dl), but plugins
51# need not have -ldl added
52LT_INIT([disable-static dlopen win32-dll])
53AC_SUBST(MKDIR_P)
54
55AC_CHECK_DECLS([_stati64])
56
57AS_CASE(["$target_os"],
58  [*linux-gnu],[
59     AC_DEFINE(GNU_LINUX,1,[This is a GNU/Linux system])
60     AC_DEFINE_UNQUOTED(GNU_LINUX,1,[This is a GNU/Linux system])
61     AM_CONDITIONAL(HAVE_GNU_LD, true)
62     AM_CONDITIONAL(SOMEBSD, false)
63     AM_CONDITIONAL(WINDOWS, false)
64     XTRA_CPPLIBS=-lstdc++
65     LIBEXT=.so
66  ],
67  [freebsd*],[
68     AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
69     AC_CHECK_LIB(c_r, pthread_create)
70     AM_CONDITIONAL(HAVE_GNU_LD, true)
71     AM_CONDITIONAL(SOMEBSD, true)
72     AM_CONDITIONAL(WINDOWS, false)
73     XTRA_CPPLIBS=-lstdc++
74     LIBEXT=.so
75  ],
76  [openbsd*],[
77     AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
78     AC_CHECK_LIB(c_r, pthread_create)
79     AM_CONDITIONAL(HAVE_GNU_LD, true)
80     AM_CONDITIONAL(SOMEBSD, true)
81     AM_CONDITIONAL(WINDOWS, false)
82     XTRA_CPPLIBS=-lstdc++
83     LIBEXT=.so
84   ],
85  [netbsd*],[
86     AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
87     AC_CHECK_LIB(c_r, pthread_create)
88     AM_CONDITIONAL(HAVE_GNU_LD, true)
89     AM_CONDITIONAL(SOMEBSD, true)
90     AM_CONDITIONAL(WINDOWS, false)
91     XTRA_CPPLIBS=-lstdc++
92     LIBEXT=.so
93  ],
94  [*solaris*],[
95     AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
96     AC_CHECK_LIB(resolv, res_init)
97     XTRA_CPPLIBS=-lstdc++
98     AM_CONDITIONAL(HAVE_GNU_LD, false)
99     AM_CONDITIONAL(SOMEBSD, false)
100     AM_CONDITIONAL(WINDOWS, false)
101     AM_CFLAGS="-D_POSIX_PTHREAD_SEMANTICS $AM_CFLAGS"
102     LIBEXT=.so
103   ],
104  [darwin*],[
105     AC_DEFINE_UNQUOTED(DARWIN,1,[This is a Darwin system])
106     AM_CONDITIONAL(HAVE_GNU_LD, false)
107     AM_CONDITIONAL(SOMEBSD, false)
108     AM_CONDITIONAL(WINDOWS, false)
109     AM_CFLAGS="-fno-common $AM_CFLAGS"
110     LIBEXT=.so
111  ],
112  [cygwin*],[
113     AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a CYGWIN system])
114     AM_CONDITIONAL(SOMEBSD, false)
115     AM_CONDITIONAL(HAVE_GNU_LD, false)
116     AM_CONDITIONAL(WINDOWS, false)
117     LIBEXT=.dll
118  ],
119  [mingw*],[
120     AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
121     AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
122     AC_CHECK_LIB(intl, gettext)
123     # Sufficiently new Windows XP
124     AM_CFLAGS="-D__MSVCRT_VERSION__=0x0601 $AM_CFLAGS"
125     AM_CPPFLAGS="-DFTRUNCATE_DEFINED=1 $AM_CPPFLAGS"
126
127    AC_MSG_CHECKING(for PlibC)
128    plibc=0
129    AC_ARG_WITH(plibc,
130       [  --with-plibc=PFX    Base of PliBC installation],
131       [AC_MSG_RESULT([$with_plibc])
132        AS_CASE([$with_plibc],
133          [no],[],
134          [yes],[
135            AC_CHECK_HEADERS([plibc.h],
136              AC_CHECK_LIB([plibc], [plibc_init],
137                plibc=1))
138          ],[
139            AM_LDFLAGS="-L$with_plibc/lib $AM_LDFLAGS"
140            AM_CPPFLAGS="-I$with_plibc/include $AM_CPPFLAGS"
141            AC_CHECK_HEADERS([plibc.h],
142              AC_CHECK_LIB([plibc], [plibc_init],
143                EXT_LIB_PATH="-L$with_plibc/lib $EXT_LIB_PATH"
144                plibc=1))
145          ])
146       ],
147       [AC_MSG_RESULT([--with-plibc not specified])
148        AM_LDFLAGS="-L/usr/lib $AM_LDFLAGS"
149        AM_CPPFLAGS="-I/usr/include $AM_CPPFLAGS"
150        AC_CHECK_HEADERS([plibc.h],
151              AC_CHECK_LIB([plibc], [plibc_init],
152                EXT_LIB_PATH="-L$with_plibc/lib $EXT_LIB_PATH"
153                plibc=1))])
154
155     AS_IF([test $plibc -ne 1],
156           [AC_MSG_ERROR([libextractor requires PlibC])],
157           [LIBS="$LIBS -lplibc"])
158
159     AM_LDFLAGS="$AM_LDFLAGS -Wl,--export-all-symbols"
160     AM_CONDITIONAL(HAVE_GNU_LD, true)
161     AM_CONDITIONAL(SOMEBSD, false)
162     AM_CONDITIONAL(WINDOWS, true)
163     LIBEXT=.dll
164   ],[
165     AC_MSG_RESULT(Unrecognised OS $host_os)
166     AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
167     AC_MSG_RESULT(otheros)
168     AC_DEFINE(GNU_LINUX,1,[We hope this is a GNU/Linux-compatible system])
169     AC_DEFINE_UNQUOTED(GNU_LINUX,1,[We hope this is a GNU/Linux-compatible system])
170     AM_CONDITIONAL(HAVE_GNU_LD, false)
171     AM_CONDITIONAL(SOMEBSD, false)
172     AM_CONDITIONAL(WINDOWS, false)
173     LIBEXT=.so
174  ]
175)
176
177AM_ICONV
178
179# We define the paths here, because MinGW/GCC expands paths
180# passed through the command line ("-DLOCALEDIR=..."). This would
181# lead to hard-coded paths ("C:\mingw\mingw\bin...") that do
182# not contain the actual installation.
183AC_DEFINE_DIR([LOCALEDIR], [datarootdir/locale], [gettext catalogs])
184
185ISOPFX=`pkg-config --variable=prefix iso-codes`
186pkg-config --variable=prefix iso-codes 2> /dev/null || ISOPFX=/usr
187AC_DEFINE_DIR([ISOLOCALEDIR], [ISOPFX/share/locale], [iso-639 catalog])
188
189# relative plugin directory
190rplugindir="libextractor"
191AC_ARG_WITH(plugindirname,
192	AC_HELP_STRING(
193		[--with-plugindirname],
194		[install directory for plugins (always relative to libdir)]),
195	[rplugindir=$withval])
196AC_SUBST(RPLUGINDIR, $rplugindir)
197
198# large file support
199AC_SYS_LARGEFILE
200AC_FUNC_FSEEKO
201
202AM_CONDITIONAL(CYGWIN, test "$build_os" = "cygwin")
203AM_CONDITIONAL(MINGW, test "$build_os" = "mingw32")
204
205
206# use '-fno-strict-aliasing', but only if the compiler can take it
207AS_IF([gcc -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1],
208      [AM_CFLAGS="-fno-strict-aliasing $AM_CFLAGS"])
209
210AM_CONDITIONAL(HAVE_CXX, test "x$HAVE_CXX" = "xyes")
211
212
213# Adam shostack suggests the following for Windows:
214# -D_FORTIFY_SOURCE=2 -fstack-protector-all
215AC_ARG_ENABLE(gcc-hardening,
216  [AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks)],
217  [AS_IF([test x$enableval = xyes],
218         [AM_CFLAGS="$AM_CFLAGS -D_FORTIFY_SOURCE=2 -fstack-protector-all"
219          AM_CFLAGS="$AM_CFLAGS -fwrapv -fPIE -Wstack-protector"
220          AM_CFLAGS="$AM_CFLAGS --param ssp-buffer-size=1"
221          AM_LDFLAGS="$AM_LDFLAGS -pie"])])
222
223
224# Linker hardening options
225# Currently these options are ELF specific - you can't use this with MacOSX
226AC_ARG_ENABLE(linker-hardening,
227  [AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups)],
228  [AS_IF([x$enableval = xyes],
229         [AM_LDFLAGS="$AM_LDFLAGS -z relro -z now"])])
230
231
232# Support for hiding non-public symbols
233HIDDEN_VISIBILITY_CFLAGS=""
234AS_CASE(["$host"],
235 [*-*-mingw*],[
236    # mingw32 we do -fvisibility=hidden and __declspec(dllexport)
237    AC_DEFINE([_EXTRACTOR_EXTERN], [__attribute__((visibility("default"))) __declspec(dllexport) extern],
238              [defines how to decorate public symbols while building])
239    HIDDEN_VISIBILITY_CFLAGS="-fvisibility=hidden"
240 ],[
241    # other compilers, check if we can do -fvisibility=hidden
242    AX_CHECK_LINK_FLAG([-fvisibility=hidden],
243      [AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],
244                           [AC_DEFINE([_EXTRACTOR_EXTERN], [__attribute__((visibility("default"))) extern],
245                                       [defines how to decorate public symbols while building])
246                            HIDDEN_VISIBILITY_CFLAGS="-fvisibility=hidden"])])
247 ])
248AC_SUBST(HIDDEN_VISIBILITY_CFLAGS)
249
250
251
252# Checks for libraries.
253
254AC_CHECK_HEADERS([langinfo.h])
255
256# Check for libltdl header (#2999)
257ltdl=0
258AC_MSG_CHECKING(for libltdl)
259AC_ARG_WITH(ltdl,
260   [  --with-ltdl=PFX    base of libltdl installation],
261   [AC_MSG_RESULT([$with_ltdl])
262    AS_CASE([$with_ltdl],
263      [no],[],
264      [yes],[
265        AC_CHECK_HEADERS(ltdl.h,
266          AC_CHECK_LIB([ltdl], [lt_dlopenext],
267            ltdl=1))
268      ],[
269        OLD_LIBS="$LIBS"
270        LIBS="-L$with_ltdl/lib $LIBS"
271        AM_CPPFLAGS="-I$with_ltdl/include $AM_CPPFLAGS"
272        AC_CHECK_HEADERS(ltdl.h,
273          AC_CHECK_LIB([ltdl], [lt_dlopenext],
274            EXT_LIB_PATH="-L$with_ltdl/lib $EXT_LIB_PATH"
275            ltdl=1))
276        LIBS="$OLD_LIBS"
277      ])
278   ],
279   [AC_MSG_RESULT([--with-ltdl not specified])
280    AC_CHECK_HEADERS(ltdl.h,
281     AC_CHECK_LIB([ltdl], [lt_dlopenext],
282      ltdl=1))])
283AS_IF([test x$ltdl = x1],
284      [AC_MSG_RESULT([libltdl found])],
285      [AC_MSG_ERROR([libextractor requires libltdl (from GNU libtool), try installing libltdl-dev])])
286
287# check for apparmor
288AC_CHECK_LIB(apparmor, aa_change_profile,
289        [AC_CHECK_HEADERS([sys/apparmor.h],
290          AM_CONDITIONAL(HAVE_APPARMOR, true)
291          AC_DEFINE(HAVE_APPARMOR,1,[Have apparmor]),
292          AM_CONDITIONAL(HAVE_APPARMOR, false)
293          AC_DEFINE(HAVE_APPARMOR,0,[lacking apparmor]))],
294        AM_CONDITIONAL(HAVE_APPARMOR, false),
295        -lapparmor)
296
297# FIXME: allow --with-oggvorbis=PFX
298
299# test if we have vorbisfile
300# prior versions had ov_open_callbacks in libvorbis, test that, too.
301AC_CHECK_LIB(vorbisfile, ov_open_callbacks,
302        [AC_CHECK_HEADERS([vorbis/vorbisfile.h],
303          AM_CONDITIONAL(HAVE_VORBISFILE, true)
304          AC_DEFINE(HAVE_VORBISFILE,1,[Have vorbisfile]),
305          AM_CONDITIONAL(HAVE_VORBISFILE, false)
306          AC_DEFINE(HAVE_VORBISFILE,0,[lacking vorbisfile]))],
307        AM_CONDITIONAL(HAVE_VORBISFILE, false),
308        -lvorbis -logg)
309AC_CHECK_LIB(FLAC, FLAC__stream_decoder_init_stream,
310        [AC_CHECK_HEADERS([FLAC/all.h],
311         AM_CONDITIONAL(HAVE_FLAC, true)
312          AC_DEFINE(HAVE_FLAC,1,[Have flac]),
313         AM_CONDITIONAL(HAVE_FLAC, false))],
314        AM_CONDITIONAL(HAVE_FLAC, false),
315        -logg)
316# test without -logg to see whether we really need it (libflac can be without)
317AC_CHECK_LIB(FLAC, FLAC__stream_decoder_init_ogg_stream,
318         AM_CONDITIONAL(HAVE_FLAC, true)
319         AC_DEFINE(HAVE_FLAC,1,[Have flac])
320         AM_CONDITIONAL(NEED_OGG, false),
321        [AM_CONDITIONAL(NEED_OGG, true)])
322AC_CHECK_LIB(vorbisfile, vorbis_comment_query,
323        AM_CONDITIONAL(NEED_VORBIS, false),
324        AM_CONDITIONAL(NEED_VORBIS, true),
325        -logg)
326
327AC_CHECK_LIB(z, inflate,
328        [AC_CHECK_HEADERS([zlib.h],
329         AM_CONDITIONAL(HAVE_ZLIB, true)
330         AC_DEFINE(HAVE_ZLIB,1,[Have zlib]),
331         AM_CONDITIONAL(HAVE_ZLIB, false))],
332         AM_CONDITIONAL(HAVE_ZLIB, false))
333
334AC_CHECK_LIB(bz2, BZ2_bzDecompress,
335        [AC_CHECK_HEADERS([bzlib.h],
336          AM_CONDITIONAL(HAVE_BZ2, true)
337          AC_DEFINE(HAVE_LIBBZ2,1,[Have libbz2]),
338         AM_CONDITIONAL(HAVE_BZ2, false))],
339         AM_CONDITIONAL(HAVE_BZ2, false))
340
341AC_CHECK_LIB(rpm, rpmReadPackageFile,
342        [AC_CHECK_HEADERS([rpm/rpmlib.h],
343          AM_CONDITIONAL(HAVE_LIBRPM, true)
344          AC_DEFINE(HAVE_LIBRPM,1,[Have librpm]),
345         AM_CONDITIONAL(HAVE_LIBRPM, false))],
346         AM_CONDITIONAL(HAVE_LIBRPM, false))
347
348AC_CHECK_LIB(mpeg2, mpeg2_init,
349        [AC_CHECK_HEADERS([mpeg2dec/mpeg2.h],
350           AM_CONDITIONAL(HAVE_MPEG2, true)
351           AC_DEFINE(HAVE_MPEG2,1,[Have libmpeg2]),
352         AM_CONDITIONAL(HAVE_MPEG2, false))],
353         AM_CONDITIONAL(HAVE_MPEG2, false))
354
355AC_CHECK_LIB(mp4v2, MP4ReadProvider,
356        [AC_CHECK_HEADERS([mp4v2/mp4v2.h],
357           AM_CONDITIONAL(HAVE_MP4, true)
358           AC_DEFINE(HAVE_MP4,1,[Have libmp4v2]),
359         AM_CONDITIONAL(HAVE_MP4, false))],
360         AM_CONDITIONAL(HAVE_MP4, false))
361
362AC_CHECK_LIB(jpeg, jpeg_mem_src,
363        [AC_CHECK_HEADERS([jpeglib.h],
364           AM_CONDITIONAL(HAVE_JPEG, true)
365           AC_DEFINE(HAVE_JPEG,1,[Have libjpeg]),
366         AM_CONDITIONAL(HAVE_JPEG, false))],
367         AM_CONDITIONAL(HAVE_JPEG, false))
368
369AC_CHECK_LIB(tiff, TIFFClientOpen,
370        [AC_CHECK_HEADERS([tiffio.h],
371           AM_CONDITIONAL(HAVE_TIFF, true)
372           AC_DEFINE(HAVE_TIFF,1,[Have libtiff]),
373         AM_CONDITIONAL(HAVE_TIFF, false))],
374         AM_CONDITIONAL(HAVE_TIFF, false))
375
376AC_CHECK_LIB(archive, archive_read_open,
377        [AC_CHECK_HEADERS([archive.h],
378           AM_CONDITIONAL(HAVE_ARCHIVE, true)
379           AC_DEFINE(HAVE_ARCHIVE,1,[Have libarchive]),
380         AM_CONDITIONAL(HAVE_ARCHIVE, false))],
381         AM_CONDITIONAL(HAVE_ARCHIVE, false))
382
383# should experimental code be compiled (code that may not yet compile)?
384AC_MSG_CHECKING(whether to compile experimental code)
385AC_ARG_ENABLE([experimental],
386   [AS_HELP_STRING([--enable-experimental], [enable compiling experimental code])],
387   [enable_experimental=${enableval}],
388   [enable_experimental=no])
389AC_MSG_RESULT($enable_experimental)
390AM_CONDITIONAL([HAVE_EXPERIMENTAL], [test "x$enable_experimental" = "xyes"])
391
392
393AC_MSG_CHECKING(for ImageFactory::iptcData in -lexiv2)
394AC_LANG_PUSH(C++)
395SAVED_AM_LDFLAGS=$AM_LDFLAGS
396AM_LDFLAGS="$AM_LDFLAGS -lexiv2"
397AC_LINK_IFELSE(
398  [AC_LANG_PROGRAM([[#include <iostream>
399#include <exiv2/exif.hpp>
400#include <exiv2/image.hpp>
401#include <exiv2/futils.hpp>]],
402    [[Exiv2::Image *foo = NULL; foo->iptcData(); ]])],
403  [AC_MSG_RESULT(yes)
404   AM_CONDITIONAL(HAVE_EXIV2, true)
405   AC_DEFINE(HAVE_EXIV2,1,[Have exifData in libexiv2])],
406  [AC_MSG_RESULT(no)
407   AM_CONDITIONAL(HAVE_EXIV2, false)])
408AM_LDFLAGS=$SAVED_AM_LDFLAGS
409AC_LANG_POP(C++)
410
411
412AC_MSG_CHECKING(for DGifOpen -lgif)
413SAVED_AM_LDFLAGS=$AM_LDFLAGS
414AC_CHECK_LIB(gif, DGifOpen,
415  [AC_CHECK_HEADERS([gif_lib.h],
416   AM_CONDITIONAL(HAVE_GIF, true)
417   AC_DEFINE(HAVE_GIF,1,[Have libgif]),
418   AM_CONDITIONAL(HAVE_GIF, false))],
419  AM_CONDITIONAL(HAVE_GIF, false))
420
421AC_MSG_CHECKING(for magic_open -lmagic)
422SAVED_AM_LDFLAGS=$AM_LDFLAGS
423AC_CHECK_LIB(magic, magic_open,
424  [AC_CHECK_HEADERS([magic.h],
425   AM_CONDITIONAL(HAVE_MAGIC, true),
426   AM_CONDITIONAL(HAVE_MAGIC, false))],
427  AM_CONDITIONAL(HAVE_MAGIC, false))
428
429AC_MSG_CHECKING(for tidyNodeGetValue -ltidy)
430AC_LANG_PUSH(C++)
431SAVED_LIBS=$LIBS
432LIBS="$LIBS -ltidy"
433AC_LINK_IFELSE(
434  [AC_LANG_PROGRAM([[#include <tidy/tidy.h>]],
435    [[ Bool b = tidyNodeGetValue (NULL, NULL, NULL); ]])],
436  [AC_MSG_RESULT(yes)
437   AM_CONDITIONAL(HAVE_TIDY, true)
438   AC_DEFINE(HAVE_TIDY,1,[Have tidyNodeGetValue in libtidy])],
439  [AC_MSG_RESULT(no)
440   AM_CONDITIONAL(HAVE_TIDY, false)])
441LIBS=$SAVED_LIBS
442AC_LANG_POP(C++)
443
444# restore LIBS
445LIBS=$LIBSOLD
446
447
448
449# should 'make check' run tests?
450AC_MSG_CHECKING(whether to run tests)
451AC_ARG_ENABLE([testruns],
452   [AS_HELP_STRING([--disable-testruns], [disable running tests on make check (default is YES)])],
453   [enable_tests_run=${enableval}],
454   [enable_tests_run=yes])
455AC_MSG_RESULT($enable_test_run)
456AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
457
458
459
460# Checks for header files.
461AC_HEADER_STDC
462AC_HEADER_DIRENT
463AC_HEADER_STDBOOL
464AC_CHECK_HEADERS([iconv.h fcntl.h netinet/in.h stdlib.h string.h unistd.h libintl.h limits.h stddef.h zlib.h])
465
466# Checks for typedefs, structures, and compiler characteristics.
467AC_C_INLINE
468AC_TYPE_SIZE_T
469AC_TYPE_PID_T
470GNUPG_CHECK_ENDIAN
471
472# Checks for library functions.
473AC_FUNC_MEMCMP
474AC_FUNC_VPRINTF
475AC_FUNC_MMAP
476AC_FUNC_STAT
477AC_FUNC_ERROR_AT_LINE
478AC_SEARCH_LIBS(dlopen, dl)
479AC_SEARCH_LIBS(shm_open, rt)
480AC_CHECK_FUNCS([mkstemp strndup munmap strcasecmp strdup strncasecmp memmove memset strtoul floor getcwd pow setenv sqrt strchr strcspn strrchr strnlen strndup ftruncate shm_open shm_unlink lseek64])
481
482
483# is kind of tedious, but simple and straightforward
484sockets=no
485AC_MSG_CHECKING(for sockets)
486AC_LANG_PUSH(C)
487SAVED_LIBS="$LIBS"
488SOCKET_LIBS=
489AC_LINK_IFELSE(
490  [
491    AC_LANG_PROGRAM(
492      [[#include <sys/socket.h>]],
493      [[int s = socket (AF_INET, SOCK_STREAM, 6);]]
494    )
495  ],
496  [
497    sockets=yes
498  ],
499  [
500    LIBS="$SAVED_LIBS -lsocket"
501    AC_LINK_IFELSE(
502      [
503        AC_LANG_PROGRAM(
504          [[#include <sys/socket.h>]],
505          [[int s = socket (AF_INET, SOCK_STREAM, 6);]]
506        )
507      ],
508      [
509        sockets=yes
510        SOCKET_LIBS="-lsocket"
511      ],
512      [
513        AC_LINK_IFELSE(
514          [
515            AC_LANG_PROGRAM(
516              [[#include <winsock2.h>]],
517              [[int s = socket (AF_INET, SOCK_STREAM, 6);]]
518            )
519          ],
520          [
521            sockets=yes
522          ],
523          [
524            LIBS="$SAVED_LIBS -lws2_32"
525            AC_LINK_IFELSE(
526              [
527                AC_LANG_PROGRAM(
528                  [[#include <winsock2.h>]],
529                  [[int s = socket (AF_INET, SOCK_STREAM, 6);]]
530                )
531              ],
532              [
533                sockets=yes
534                SOCKET_LIBS="-lws2_32"
535              ],
536              [
537                sockets=no
538              ]
539            )
540          ]
541        )
542      ]
543    )
544  ]
545)
546LIBS="$SAVED_LIBS $SOCKET_LIBS"
547AC_LANG_POP(C)
548AC_MSG_RESULT([$sockets])
549AS_IF([test "x$sockets" = "xno"],
550      [AC_MSG_ERROR([libextractor requires some kind of socket library])])
551AC_SUBST([SOCKET_LIBS],[$SOCKET_LIBS])
552
553LE_LIB_LIBS=$LIBS
554LIBS=$LIBSOLD
555
556AM_GNU_GETTEXT_VERSION([0.16.1])
557AM_GNU_GETTEXT([external])
558
559# check for GNU LD
560AC_LIB_PROG_LD_GNU
561
562# check for glib >= 2.0.0
563AC_MSG_CHECKING(for glib)
564AM_PATH_GLIB_2_0(2.0.0,
565	         without_glib=false,
566                 without_glib=true)
567AC_MSG_CHECKING([whether glib is disabled])
568AC_ARG_ENABLE(glib,
569  [AC_HELP_STRING([--disable-glib],[disable glib support])],
570  [case "$enableval" in
571   no)  AC_MSG_RESULT(disabled)
572        without_glib=true
573        ;;
574   *)   AC_MSG_RESULT(allowed)
575        ;;
576   esac],
577  AC_MSG_RESULT(allowed))
578
579AS_IF([test x$without_glib != xtrue],
580      [AS_IF([test $with_gnu_ld = yes],
581             [# We need both GNU LD and GLIB here!
582              AM_CONDITIONAL(HAVE_GLIB,true)
583              AC_DEFINE(HAVE_GLIB, 1, [Have glib])],
584             [# We may have GLIB, but without GNU LD we must not use it!
585              AM_CONDITIONAL(HAVE_GLIB,false)
586              AC_DEFINE(HAVE_GLIB, 0, [Have glib, but not GNU LD])])],
587     [AM_CONDITIONAL(HAVE_GLIB,false)
588      AC_DEFINE(HAVE_GLIB, 0, [Have glib])])
589
590# smf requires glib.h
591CFLAGS_OLD="$CFLAGS"
592CPPFLAGS_OLD="$CPPFLAGS"
593CFLAGS="$AM_CFLAGS $GLIB_CFLAGS"
594CPPFLAGS="$AM_CPPFLAGS $GLIB_CFLAGS"
595
596AC_CHECK_LIB(smf, smf_load_from_memory,
597        [AC_CHECK_HEADERS([smf.h],
598           AM_CONDITIONAL(HAVE_SMF, true)
599           AC_DEFINE(HAVE_MPEG2,1,[Have libsmf]),
600         AM_CONDITIONAL(HAVE_SMF, false))],
601         AM_CONDITIONAL(HAVE_SMF, false))
602
603# check for gdk-pixbuf >= 2.4
604AC_MSG_CHECKING(for gdk-pixbuf)
605PKG_CHECK_MODULES([GDK_PIXBUF], [gdk-pixbuf-2.0 >= 2.4], [have_gdk_pixbuf=yes], [have_gdk_pixbuf=no])
606
607AM_CONDITIONAL(HAVE_GDK_PIXBUF, test x$have_gdk_pixbuf != xno)
608AS_IF([test $have_gdk_pixbuf != no],
609      [have_gdk_pixbuf=1],
610      [have_gdk_pixbuf=0
611      AC_MSG_NOTICE([Cannot find Gdk-pixbuf: Is pkg-config in path?])])
612AC_DEFINE_UNQUOTED([HAVE_GDK_PIXBUF], [$have_gdk_pixbuf], [We have Gdk-pixbuf])
613
614CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS"
615CPPFLAGS="$CPPFLAGS $GDK_PIXBUF_CFLAGS"
616LIBS="$LIBS $GDK_PIXBUF_LIBS"
617
618
619AC_ARG_WITH([gstreamer], AS_HELP_STRING([--with-gstreamer], [Build with the GStreamer plugin]), [], [with_gstreamer=yes])
620
621have_gstreamer=no
622have_gstreamer_pbutils=no
623have_gstreamer_tag=no
624have_gstreamer_app=no
625AS_IF([test "x$with_gstreamer" = "xyes"], [
626   PKG_CHECK_MODULES([GSTREAMER], [gstreamer-1.0 >= 0.11.93], [have_gstreamer=yes], [have_gstreamer=no])
627   PKG_CHECK_MODULES([GSTREAMER_PBUTILS], [gstreamer-pbutils-1.0 >= 0.11.93], [have_gstreamer_pbutils=yes], [have_gstreamer_pbutils=no])
628   PKG_CHECK_MODULES([GSTREAMER_TAG], [gstreamer-tag-1.0 >= 0.11.93], [have_gstreamer_tag=yes], [have_gstreamer_tag=no])
629   PKG_CHECK_MODULES([GSTREAMER_APP], [gstreamer-app-1.0 >= 0.11.93], [have_gstreamer_app=yes], [have_gstreamer_app=no])
630])
631
632AM_CONDITIONAL(HAVE_GSTREAMER, test x$have_gstreamer = xyes -a x$have_gstreamer_pbutils = xyes -a x$have_gstreamer_tag = xyes -a x$have_gstreamer_app = xyes -a ! x$without_glib = xtrue)
633
634ABI_GSF
635
636AM_CONDITIONAL(HAVE_GSF, test "x$have_gsf" = "xtrue")
637
638# produce new line
639echo ""
640AC_CHECK_LIB(gsf-1, gsf_init, AC_DEFINE(HAVE_GSF_INIT,1,[gsf_init supported]))
641AC_CHECK_LIB(gsf-1, gsf_doc_meta_data_read_from_msole, AC_DEFINE(HAVE_GSF_DOC_META_DATA_READ_FROM_MSOLE,1,[gsf_doc_meta_data_read_from_msole supported]))
642
643
644CFLAGS="$CFLAGS_OLD"
645CPPFLAGS="$CPPFLAGS_OLD"
646
647
648AC_CHECK_PROG([HAVE_ZZUF],[zzuf], 1, 0)
649AM_CONDITIONAL(HAVE_ZZUF, test 0 != $HAVE_ZZUF)
650
651AC_MSG_CHECKING([whether to enable the FFmpeg thumbnail extractor])
652new_ffmpeg=0
653AC_ARG_ENABLE(ffmpeg,
654 [AC_HELP_STRING([--enable-ffmpeg],[Enable FFmpeg support])
655  AC_HELP_STRING([--disable-ffmpeg],[Disable FFmpeg support])],
656 [AS_CASE(["$enableval"],
657   [no],[
658      AC_MSG_RESULT(no)
659      ffmpeg_enabled=0
660   ],[
661      AC_MSG_RESULT(yes)
662      ffmpeg_enabled=1
663   ])],
664  [     AC_MSG_RESULT(yes)
665        ffmpeg_enabled=1])
666AS_IF([test x$ffmpeg_enabled = x1],
667 [ffmpeg_enabled=0
668  new_ffmpeg=0
669  AC_CHECK_HEADERS([libavutil/avutil.h libavformat/avformat.h libavcodec/avcodec.h libavutil/frame.h],
670    AC_CHECK_HEADERS([libavresample/avresample.h],
671      AC_CHECK_LIB(avutil, av_audio_fifo_alloc,
672        new_ffmpeg=1)))
673
674  AC_CHECK_LIB(swscale, sws_getContext,
675    AC_CHECK_LIB(avcodec, avcodec_alloc_context3,
676      ffmpeg_enabled=1))
677  AC_CHECK_HEADERS([libavutil/avutil.h ffmpeg/avutil.h libavformat/avformat.h ffmpeg/avformat.h libavcodec/avcodec.h ffmpeg/avcodec.h libswscale/swscale.h ffmpeg/swscale.h])
678 ])
679AM_CONDITIONAL(HAVE_FFMPEG, test x$ffmpeg_enabled != x0)
680AM_CONDITIONAL(HAVE_FFMPEG_NEW, test x$new_ffmpeg != x0)
681
682
683LE_INTLINCL=""
684LE_LIBINTL="$LTLIBINTL"
685AC_ARG_ENABLE(framework, [  --enable-framework      enable Mac OS X framework build helpers],enable_framework_build=$enableval)
686AM_CONDITIONAL(WANT_FRAMEWORK, test x$enable_framework_build = xyes)
687AS_IF([test x$enable_framework_build = xyes],
688 [AC_DEFINE([FRAMEWORK_BUILD], 1, [Build a Mac OS X Framework])
689  LE_INTLINCL='-I$(top_srcdir)/src/intlemu'
690  LE_LIBINTL='$(top_builddir)/src/intlemu/libintlemu.la -framework CoreFoundation'
691  AC_LIB_APPENDTOVAR([AM_CPPFLAGS], [$LE_INTLINCL])
692 ])
693
694LE_LIB_LDFLAGS="-export-dynamic -no-undefined"
695LE_PLUGIN_LDFLAGS="-export-dynamic -avoid-version -module -no-undefined"
696
697
698# TODO insert a proper check here
699AC_CACHE_CHECK([whether -export-symbols-regex works],
700 gn_cv_export_symbols_regex_works,
701 [AS_CASE(["$host_os"],
702   [mingw*],[gn_cv_export_symbols_regex_works=no],
703   [gn_cv_export_symbols_regex_works=yes])
704 ])
705AS_IF([test "x$gn_cv_export_symbols_regex_works" = "xyes"],
706 [LE_LIB_LDFLAGS="$LE_LIB_LDFLAGS -export-symbols-regex \"(EXTRACTOR|pl)_@<:@a-zA-Z0-9_@:>@*\""
707 LE_PLUGIN_LDFLAGS="$LE_PLUGIN_LDFLAGS -export-symbols-regex \"(EXTRACTOR|pl)_@<:@a-zA-Z0-9_@:>@*_.......\""
708 ])
709
710# restore LIBS
711LIBS=$LIBSOLD
712
713AC_SUBST(LE_LIB_LDFLAGS)
714AC_SUBST(LE_PLUGIN_LDFLAGS)
715AC_SUBST(LE_INTLINCL)
716AC_SUBST(LE_LIBINTL)
717AC_SUBST(LE_LIB_LIBS)
718
719AC_SUBST(QT_CPPFLAGS)
720AC_SUBST(QT_LDFLAGS)
721AC_SUBST(XTRA_CPPLIBS)
722AC_SUBST(LIBEXT)
723
724PACKAGE_VERSION_NOALPHA=`echo $PACKAGE_VERSION | sed "s/@<:@A-Za-z@:>@*//g;"`
725AC_SUBST(PACKAGE_VERSION_NOALPHA)
726
727# gcov compilation
728AC_MSG_CHECKING(whether to compile with support for code coverage analysis)
729AC_ARG_ENABLE([coverage],
730              AS_HELP_STRING([--enable-coverage],
731                             [compile the library with code coverage support]),
732              [use_gcov=${enableval}],
733              [use_gcov=no])
734AC_MSG_RESULT($use_gcov)
735AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])
736
737
738
739AC_CONFIG_FILES([Makefile
740po/Makefile.in
741m4/Makefile
742contrib/macosx/Info.plist
743contrib/macosx/Pkg-Info.plist
744doc/Makefile
745src/Makefile
746src/include/Makefile
747src/intlemu/Makefile
748src/common/Makefile
749src/main/Makefile
750src/plugins/Makefile
751])
752
753AX_CREATE_PKGCONFIG_INFO([libextractor.pc],,[-lextractor],[Metadata extraction library],,)
754
755AC_OUTPUT
756
757AS_IF([test "x$HAVE_ZLIB_TRUE" = "x#"],
758  [AC_MSG_NOTICE([NOTICE: zlib not found, zlib support disabled])])
759
760AS_IF([test "x$HAVE_BZ2_TRUE" = "x#"],
761  [AC_MSG_NOTICE([NOTICE: libbz2 not found, bz2 support disabled])])
762
763AS_IF([test "x$HAVE_EXIV2_TRUE" = "x#"],
764  [AC_MSG_NOTICE([NOTICE: libexiv2 not found, exiv2 disabled])])
765
766AS_IF([test "x$HAVE_TIFF_TRUE" = "x#"],
767  [AC_MSG_NOTICE([NOTICE: libtiff not found, tiff disabled])])
768
769AS_IF([test "x$HAVE_JPEG_TRUE" = "x#"],
770  [AC_MSG_NOTICE([NOTICE: libjpeg not found, jpeg disabled])])
771
772AS_IF([test "x$HAVE_GIF_TRUE" = "x#"],
773  [AC_MSG_NOTICE([NOTICE: libgif not found, gif disabled])])
774
775AS_IF([test "x$have_gsf" != "xtrue"],
776  [AC_MSG_NOTICE([NOTICE: libgsf not found, no OLE2 (MS Office) support])])
777
778AS_IF([test "x$ffmpeg_enabled" = "x0"],
779  [AC_MSG_NOTICE([NOTICE: FFmpeg thumbnailer plugin disabled])])
780
781AS_IF([test "x$new_ffmpeg" = "x0"],
782  [AC_MSG_NOTICE([NOTICE: FFmpeg/opus audio preview plugin disabled, It needs libav >= 10, or a FFmpeg with --enable-libavresample])])
783
784AS_IF([test "x$have_gdk_pixbuf" = "x0"],
785  [AC_MSG_NOTICE([NOTICE: libgdk-pixbuf not found, gtk thumbnail support disabled])])
786
787AS_IF([test "x$HAVE_VORBISFILE_TRUE" = "x#"],
788  [AC_MSG_NOTICE([NOTICE: libvorbis not found, vorbis support disabled])])
789
790AS_IF([test "x$HAVE_FLAC_TRUE" = "x#"],
791  [AC_MSG_NOTICE([NOTICE: libflac not found, flac support disabled])])
792
793AS_IF([test "x$HAVE_SMF_TRUE" = "x#"],
794  [AC_MSG_NOTICE([NOTICE: libsmf not found, midi support disabled])])
795
796AS_IF([test "x$HAVE_MPEG2_TRUE" = "x#"],
797  [AC_MSG_NOTICE([NOTICE: libmpeg2 not found, mpeg2 support disabled])])
798
799AS_IF([test "x$HAVE_MP4V2_TRUE" = "x#"],
800  [AC_MSG_NOTICE([NOTICE: libmp4v2 not found, mp4 support disabled])])
801
802AS_IF([test "x$HAVE_CXX" != "xyes"],
803  [AC_MSG_NOTICE([NOTICE: no C++ compiler found (not compiling plugins that require C++)])])
804
805AS_IF([test x$have_gstreamer = xyes -a x$have_gstreamer_pbutils = xyes -a x$have_gstreamer_tag = xyes -a x$have_gstreamer_app = xyes -a ! x$without_glib = xtrue],
806  [AS_IF([test x$enable_experimental = xyes],
807    [AC_MSG_NOTICE([NOTICE: gstreamer enabled])])],
808  [AC_MSG_NOTICE([NOTICE: gstreamer not found, gstreamer support disabled])])
809
810AS_IF([test "x$HAVE_APPARMOR_TRUE" = "x#"],
811 [AC_MSG_NOTICE([NOTICE: libapparmor not found, apparmor support disabled])])
812