libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

configure.ac (30305B)


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