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])])