1dnl Process this file with autoconf to produce a configure script. 2dnl This config.in requires autoconf 2.5 or greater. 3 4AC_PREREQ([2.68]) 5AC_INIT([qpdf],[10.5.0]) 6 7AC_CONFIG_MACRO_DIR([m4]) 8AC_CONFIG_FILES([autoconf.mk]) 9AC_CONFIG_FILES([libqpdf.pc]) 10AC_CONFIG_FILES([libqpdf.map]) 11AC_CONFIG_HEADERS([libqpdf/qpdf/qpdf-config.h]) 12 13AC_ARG_ENABLE(check-autofiles, 14 AS_HELP_STRING([--enable-check-autofiles], 15 [if specified, verify checksums on automatically generated files (default=yes); package maintainers may want to disable this]), 16 [if test "$enableval" = "no"; then 17 CHECK_AUTOFILES=0 18 else 19 CHECK_AUTOFILES=1 20 fi], 21 [CHECK_AUTOFILES=1]) 22 23# Check to see if automatically generated files are outdated and if we 24# can update them. 25AC_CHECK_PROG(AUTOCONF,autoconf,1,0) 26AC_CHECK_PROG(AUTOHEADER,autoheader,1,0) 27AC_CHECK_PROG(ACLOCAL,aclocal,1,0) 28AC_CHECK_PROG(SHA256SUM,sha256sum,1,0) 29if test "$CHECK_AUTOFILES$AUTOCONF$AUTOHEADER$ACLOCAL$SHA256SUM" = "11111"; then 30 if ! sha256sum -c autofiles.sums; then 31 AC_MSG_ERROR(autofiles are outdated; rerun autogen.sh) 32 fi 33fi 34 35AC_PROG_CC 36AC_PROG_CC_C99 37AC_PROG_CXX 38AX_CXX_COMPILE_STDCXX([14], [noext], [mandatory]) 39AC_HEADER_STDC 40LT_INIT([win32-dll]) 41 42# * If any interfaces have been removed or changed, or if any private 43# member variables or virtual functions have been added to any 44# class, we are not binary compatible. Increment LT_CURRENT, and set 45# LT_AGE and LT_REVISION to 0. 46# 47# * Otherwise, if any interfaces have been added since the last public 48# release, then increment LT_CURRENT and LT_AGE, and set LT_REVISION 49# to 0. 50# 51# * Otherwise, increment LT_REVISION 52 53# LT = libtool 54LT_CURRENT=33 55LT_AGE=5 56LT_REVISION=0 57AC_SUBST(LT_CURRENT) 58AC_SUBST(LT_REVISION) 59AC_SUBST(LT_AGE) 60LT_SONAME=$(expr $LT_CURRENT - $LT_AGE) 61AC_SUBST(LT_SONAME) 62 63AC_MSG_CHECKING(for whether to use -rpath) 64AC_ARG_ENABLE(rpath, 65 AS_HELP_STRING([--enable-rpath], 66 [whether to pass -rpath to the linker when building libraries]), 67 [if test "$enableval" = "yes"; then 68 qpdf_USE_RPATH=1; 69 else 70 qpdf_USE_RPATH=0; 71 fi], [qpdf_USE_RPATH=1]) 72if test "$qpdf_USE_RPATH" = "1"; then 73 AC_MSG_RESULT(yes) 74 RPATH='-rpath $(libdir)' 75else 76 AC_MSG_RESULT(no) 77fi 78AC_SUBST(RPATH) 79 80AC_MSG_CHECKING(for -fvisibility=hidden) 81try_flags=-fvisibility=hidden 82oCXXFLAGS=$CXXFLAGS 83CXXFLAGS="$CXXFLAGS $try_flags" 84AC_LANG_PUSH([C++]) 85AC_LINK_IFELSE([AC_LANG_PROGRAM( 86 [[class X 87{ 88 public: 89 __attribute__ ((visibility ("default"))) 90 X() {} 91 __attribute__ ((visibility ("default"))) 92 void f() {} 93}; 94 ]],[[X x; x.f();]])], 95 [qpdf_VISIBILITY_HIDDEN=1], 96 [qpdf_VISIBILITY_HIDDEN=0]) 97AC_LANG_POP 98if test "$qpdf_VISIBILITY_HIDDEN" = "0"; then 99 AC_MSG_RESULT(no) 100 CXXFLAGS=$oCXXFLAGS 101else 102 AC_MSG_RESULT(yes) 103 CFLAGS="$CFLAGS $try_flags" 104fi 105 106AC_MSG_CHECKING(whether to use insecure random numbers) 107AC_ARG_ENABLE(insecure-random, 108 AS_HELP_STRING([--enable-insecure-random], 109 [whether to use stdlib's random number generator (default is no)]), 110 [if test "$enableval" = "yes"; then 111 qpdf_INSECURE_RANDOM=1; 112 else 113 qpdf_INSECURE_RANDOM=0; 114 fi], [qpdf_INSECURE_RANDOM=0]) 115if test "$qpdf_INSECURE_RANDOM" = "1"; then 116 AC_MSG_RESULT(yes) 117 AC_DEFINE([USE_INSECURE_RANDOM], [1], [Whether to use insecure random numbers]) 118else 119 AC_MSG_RESULT(no) 120fi 121 122AC_MSG_CHECKING(whether to use OS-provided secure random numbers) 123AC_ARG_ENABLE(os-secure-random, 124 AS_HELP_STRING([--enable-os-secure-random], 125 [whether to try to use OS-provided secure random numbers (default is yes)]), 126 [if test "$enableval" = "yes"; then 127 qpdf_OS_SECURE_RANDOM=1; 128 else 129 qpdf_OS_SECURE_RANDOM=0; 130 fi], [qpdf_OS_SECURE_RANDOM=1]) 131if test "$qpdf_OS_SECURE_RANDOM" = "1"; then 132 AC_MSG_RESULT(yes) 133else 134 AC_MSG_RESULT(no) 135 AC_DEFINE([SKIP_OS_SECURE_RANDOM], [1], [Whether to suppress use of OS-provided secure random numbers]) 136fi 137 138AX_RANDOM_DEVICE 139 140AC_MSG_CHECKING(whether to avoid Windows HANDLE type) 141AC_ARG_ENABLE(avoid-windows-handle, 142 AS_HELP_STRING([--enable-avoid-windows-handle], 143 [whether to avoid use of HANDLE, useful for some embedded Windows builds (default is no)]), 144 [if test "$enableval" = "yes"; then 145 qpdf_AVOID_HANDLE=1; 146 else 147 qpdf_AVOID_HANDLE=0; 148 fi], [qpdf_AVOID_HANDLE=0]) 149if test "$qpdf_AVOID_HANDLE" = "1"; then 150 AC_MSG_RESULT(yes) 151 AC_DEFINE([AVOID_WINDOWS_HANDLE], [1], [Whether to avoid use of HANDLE in Windows]) 152else 153 AC_MSG_RESULT(no) 154fi 155 156USE_EXTERNAL_LIBS=0 157AC_MSG_CHECKING(for whether to use external libraries distribution) 158AC_ARG_ENABLE(external-libs, 159 AS_HELP_STRING([--enable-external-libs], 160 [whether to use external libraries distribution]), 161 [if test "$enableval" = "yes"; then 162 USE_EXTERNAL_LIBS=1; 163 else 164 USE_EXTERNAL_LIBS=0; 165 fi], [BUILD_INTERNAL_LIBS=0]) 166if test "$BUILD_INTERNAL_LIBS" = "0"; then 167 AC_MSG_RESULT(no) 168else 169 AC_MSG_RESULT(yes) 170fi 171 172AC_CHECK_SIZEOF([size_t]) 173if test "$ac_cv_sizeof_size_t" = "4"; then 174 IS_32BIT=1 175 WINDOWS_WORDSIZE=32 176else 177 IS_32BIT=0 178 WINDOWS_WORDSIZE=64 179fi 180AC_SUBST(IS_32BIT) 181AC_SUBST(WINDOWS_WORDSIZE) 182 183PKG_PROG_PKG_CONFIG 184if test "$BUILD_INTERNAL_LIBS" = "0"; then 185 if test "$PKG_CONFIG" != ""; then 186 PKG_CHECK_MODULES([pc_zlib], [zlib], 187 [CFLAGS="$CFLAGS $pc_zlib_CFLAGS" 188 CXXFLAGS="$CXXFLAGS $pc_zlib_CFLAGS $pc_zlib_CXXFLAGS" 189 LIBS="$LIBS $pc_zlib_LIBS" 190 ], [:]) 191 PKG_CHECK_MODULES([pc_libjpeg], [libjpeg], 192 [CFLAGS="$CFLAGS $pc_libjpeg_CFLAGS" 193 CXXFLAGS="$CXXFLAGS $pc_libjpeg_CFLAGS $pc_libjpeg_CXXFLAGS" 194 LIBS="$LIBS $pc_libjpeg_LIBS" 195 ],[:]) 196 fi 197 if test "$pc_zlib_LIBS" = ""; then 198 AC_CHECK_HEADER(zlib.h,,[MISSING_ZLIB_H=1; MISSING_ANY=1]) 199 AC_SEARCH_LIBS(deflate,z zlib,,[MISSING_ZLIB=1; MISSING_ANY=1]) 200 fi 201 if test "$pc_libjpeg_LIBS" = ""; then 202 AC_CHECK_HEADER(jpeglib.h,,[MISSING_JPEG_H=1; MISSING_ANY=1]) 203 AC_SEARCH_LIBS(jpeg_destroy,jpeg,,[MISSING_JPEG=1; MISSING_ANY=1]) 204 fi 205 if test "$LIBS" != ""; then 206 nLIBS="" 207 for x in $LIBS; do 208 if echo $x | grep -q '^-L'; then 209 LDFLAGS="$LDFLAGS $x" 210 else 211 nLIBS="$nLIBS $x" 212 fi 213 LIBS=$nLIBS 214 done 215 fi 216fi 217 218qpdf_USE_WMAIN=0 219AC_LANG_PUSH([C++]) 220AC_SUBST(WINDOWS_WMAIN_COMPILE) 221AC_SUBST(WINDOWS_WMAIN_LINK) 222for i in 0 1; do 223 if test "$qpdf_USE_WMAIN" = "0"; then 224 oLDFLAGS="$LDFLAGS" 225 if test "$i" = "1"; then 226 nLDFLAGS="-municode" 227 LDFLAGS="$LDFLAGS $nLDFLAGS" 228 msg="checking for wmain with $nLDFLAGS" 229 else 230 nLDFLAGS= 231 msg="checking for wmain" 232 fi 233 AC_MSG_CHECKING($msg) 234 AC_LINK_IFELSE([AC_LANG_SOURCE( 235 [[#include <windows.h> 236 #include <string.h> 237 #include <stdio.h> 238 extern "C" 239 int wmain(int argc, wchar_t* argv[]) 240 { 241 size_t x = wcslen(argv[0]); 242 return 0; 243 } 244 ]])], 245 [qpdf_USE_WMAIN=1], 246 [qpdf_USE_WMAIN=0]) 247 LDFLAGS="$oLDFLAGS" 248 if test "$qpdf_USE_WMAIN" = "1"; then 249 AC_MSG_RESULT(yes) 250 WINDOWS_WMAIN_COMPILE="-DWINDOWS_WMAIN $nLDFLAGS" 251 WINDOWS_WMAIN_LINK="$nLDFLAGS" 252 else 253 AC_MSG_RESULT(no) 254 fi 255 fi 256done 257AC_LANG_POP 258 259AC_LANG_PUSH([C++]) 260AC_MSG_CHECKING(whether to use -latomic) 261dnl On some platforms with some versions of gcc, you have to link with 262dnl -latomic in order for std::atomic to work. Passing --as-needed 263dnl prevents unnecessary linking with -latomic. 264oLDFLAGS="$LDFLAGS" 265LDFLAGS="$LDFLAGS -Wl,--as-needed -latomic" 266AC_LINK_IFELSE([AC_LANG_SOURCE( 267 [[#include <atomic> 268 int main() 269 { 270 static std::atomic<int> a{0}; 271 a = a.fetch_add(1); 272 return 0; 273 } 274 ]])], 275 [qpdf_USE_ATOMIC=1], 276 [qpdf_USE_ATOMIC=0]) 277if test "$qpdf_USE_ATOMIC" = "1"; then 278 AC_MSG_RESULT(yes) 279else 280 AC_MSG_RESULT(no) 281 LDFLAGS="$oLDFLAGS" 282fi 283AC_LANG_POP 284 285if test "x$qpdf_OS_SECURE_RANDOM" = "x1"; then 286 OLIBS=$LIBS 287 LIBS="$LIBS Advapi32.lib" 288 AC_MSG_CHECKING(for Advapi32 library) 289 AC_LINK_IFELSE([AC_LANG_PROGRAM( 290 [[#pragma comment(lib, "crypt32.lib") 291 #include <windows.h> 292 #include <wincrypt.h> 293 HCRYPTPROV cp;]], 294 [CryptAcquireContext(&cp, NULL, NULL, PROV_RSA_FULL, 0);] 295 )], 296 [AC_MSG_RESULT(yes) 297 LIBS="$OLIBS -lAdvapi32"], 298 [AC_MSG_RESULT(no) 299 LIBS=$OLIBS]) 300fi 301 302QPDF_LARGE_FILE_TEST_PATH= 303AC_SUBST(QPDF_LARGE_FILE_TEST_PATH) 304AC_ARG_WITH(large-file-test-path, 305 AS_HELP_STRING([--with-large-file-test-path=path], 306 [To enable testing of files > 4GB, give the path to a directory with at least 11 GB free. The test suite will write temporary files to this directory. Alternatively, just set the QPDF_LARGE_FILE_TEST_PATH environment variable to the path before running the test suite.]), 307 [QPDF_LARGE_FILE_TEST_PATH=$withval], 308 [QPDF_LARGE_FILE_TEST_PATH=]) 309 310AC_SYS_LARGEFILE 311AC_FUNC_FSEEKO 312AC_CHECK_FUNCS([fseeko64 random localtime_r]) 313 314# Check if LD supports linker scripts, and define conditional 315# HAVE_LD_VERSION_SCRIPT if so. This functionality is currently 316# constrained to compilers using GNU ld on ELF systems or systems 317# which provide an adequate emulation thereof. 318AC_ARG_ENABLE([ld-version-script], 319 AS_HELP_STRING([--enable-ld-version-script], 320 [enable linker version script (default is enabled)]), 321 [have_ld_version_script=$enableval], [have_ld_version_script=yes]) 322if test "$have_ld_version_script" != no; then 323 AC_MSG_CHECKING([if LD -Wl,--version-script works]) 324 save_LDFLAGS="$LDFLAGS" 325 LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" 326 cat > conftest.map <<EOF 327VERS_1 { 328 global: sym; 329}; 330 331VERS_2 { 332 global: sym; 333} VERS_1; 334EOF 335 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], 336 [have_ld_version_script=yes], [have_ld_version_script=no]) 337 rm -f conftest.map 338 LDFLAGS="$save_LDFLAGS" 339 AC_MSG_RESULT($have_ld_version_script) 340fi 341if test "$have_ld_version_script" = "yes"; then 342 HAVE_LD_VERSION_SCRIPT=1 343else 344 HAVE_LD_VERSION_SCRIPT=0 345fi 346AC_SUBST(HAVE_LD_VERSION_SCRIPT) 347 348make_okay=0 349for make_prog in make gmake; do 350 this_make_okay=0 351 AC_MSG_CHECKING(for gnu make >= 3.81 ($make_prog)) 352 if $make_prog --version >/dev/null 2>&1; then 353 v=`$make_prog --version | grep 'GNU Make' | sed -e 's/.*Make //'` 354 maj=`echo $v | cut -d. -f 1` 355 min=`echo $v | cut -d. -f 2` 356 if test $maj -gt 3 -o '(' $maj -eq 3 -a $min -ge 81 ')'; then 357 this_make_okay=1 358 make_okay=1 359 fi 360 fi 361 if test "$this_make_okay" = "1"; then 362 AC_MSG_RESULT(yes) 363 else 364 AC_MSG_RESULT(no) 365 fi 366done 367 368if test "$make_okay" = "0"; then 369 dnl Don't set MISSING_ANY=1 -- maybe user calls make something else 370 MISSING_MAKE_381=1 371 ISSUE_WARNINGS=1 372fi 373 374AC_SUBST(GENDEPS) 375GENDEPS=0 376AC_MSG_CHECKING(for whether $CC supports -MD -MF x.dep -MP) 377oCFLAGS=$CFLAGS 378rm -f x.dep 379CFLAGS="$CFLAGS -MD -MF x.dep -MP" 380AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 381 [[#include <stdio.h>]], [[FILE* a = stdout]] 382 )], 383 [qpdf_DEPFLAGS=yes], 384 [qpdf_DEPFLAGS=no]) 385CFLAGS=$oCFLAGS 386if test "$qpdf_DEPFLAGS" = "yes"; then 387 if ! grep stdio.h x.dep >/dev/null 2>&1; then 388 qpdf_DEPFLAGS=no 389 fi 390fi 391rm -f x.dep 392if test "$qpdf_DEPFLAGS" = "yes"; then 393 AC_MSG_RESULT(yes) 394 GENDEPS=1 395else 396 AC_MSG_RESULT(no) 397fi 398 399AC_MSG_CHECKING(which build rules to use) 400AC_SUBST(BUILDRULES) 401AC_ARG_WITH(buildrules, 402 AS_HELP_STRING([--with-buildrules=rules], 403 [which build rules to use; see README.md]), 404 [BUILDRULES=$withval], 405 [BUILDRULES=libtool]) 406AC_MSG_RESULT($BUILDRULES) 407 408AC_SUBST(WFLAGS) 409AC_SUBST(CXXWFLAGS) 410qpdf_USE_EXTRA_WARNINGS=0 411if test "$BUILDRULES" = "msvc"; then 412 dnl /w14996 makes warning 4996 a level 1 warning. This warning 413 dnl reports on functions that Microsoft considers unsafe or 414 dnl deprecated. Removing these warnings helps people who want to 415 dnl write applications based on qpdf that can be Windows 8 416 dnl certified. 417 try_flags="-w14996" 418else 419 try_flags="-Wall" 420fi 421AC_MSG_CHECKING(for whether $CC supports $try_flags) 422oCFLAGS=$CFLAGS 423CFLAGS="$CFLAGS $try_flags" 424AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int a = 1; int b = a; a = b;]])], 425 [qpdf_USE_EXTRA_WARNINGS=1],[qpdf_USE_EXTRA_WARNINGS=0]) 426CFLAGS=$oCFLAGS 427if test "$qpdf_USE_EXTRA_WARNINGS" = "1"; then 428 AC_MSG_RESULT(yes) 429 WFLAGS="$try_flags" 430else 431 AC_MSG_RESULT(no) 432fi 433if test "$BUILDRULES" != "msvc"; then 434 qpdf_USE_EXTRA_WARNINGS=0 435 try_flags="-Wold-style-cast" 436 AC_MSG_CHECKING(for whether $CXX supports $try_flags) 437 oCXXFLAGS=$CXXFLAGS 438 CXXFLAGS="$CXXFLAGS $try_flags" 439 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int a = 1; int b = a; a = b;]])], 440 [qpdf_USE_EXTRA_WARNINGS=1],[qpdf_USE_EXTRA_WARNINGS=0]) 441 CXXFLAGS=$oCXXFLAGS 442 if test "$qpdf_USE_EXTRA_WARNINGS" = "1"; then 443 AC_MSG_RESULT(yes) 444 CXXWFLAGS="$try_flags" 445 else 446 AC_MSG_RESULT(no) 447 fi 448fi 449 450if test "$BUILDRULES" = "msvc"; then 451 try_flags=-FS 452 AC_MSG_CHECKING(for whether $CC supports $try_flags) 453 oCFLAGS=$CFLAGS 454 CFLAGS="$CFLAGS $try_flags" 455 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int a = 1; int b = a; a = b;]])], 456 [qpdf_USE_FS=1],[qpdf_USE_FS=0]) 457 if test "$qpdf_USE_FS" = "1"; then 458 AC_MSG_RESULT(yes) 459 CXXFLAGS="$CXXFLAGS $try_flags" 460 else 461 AC_MSG_RESULT(no) 462 CFLAGS=$oCFLAGS 463 fi 464fi 465 466if test "$BUILDRULES" = "msvc"; then 467 try_flags="-WX" 468else 469 try_flags="-Werror" 470fi 471AC_MSG_CHECKING(for whether to use $try_flags) 472AC_ARG_ENABLE(werror, 473 AS_HELP_STRING([--enable-werror], 474 [whether to treat warnings as errors (default is no)]), 475 [if test "$enableval" = "yes"; then 476 qpdf_USE_WERROR=1; 477 else 478 qpdf_USE_WERROR=0; 479 fi], [qpdf_USE_WERROR=0]) 480if test "$qpdf_USE_WERROR" = "1"; then 481 AC_MSG_RESULT(yes) 482 WFLAGS="$WFLAGS $try_flags" 483else 484 AC_MSG_RESULT(no) 485fi 486 487if test "$BUILDRULES" = "msvc"; then 488 try_flags="-W3" 489else 490 try_flags="-Wconversion -Wsign-conversion" 491fi 492oCFLAGS=$CFLAGS 493CFLAGS="$CFLAGS $try_flags" 494AC_MSG_CHECKING(for whether to use $try_flags) 495AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int a = 1; int b = a; a = b;]])], 496 [qpdf_INT_WARNINGS=1],[qpdf_INT_WARNINGS=0]) 497if test "$qpdf_INT_WARNINGS" = "1"; then 498 AC_MSG_RESULT(yes) 499 CXXFLAGS="$CXXFLAGS $try_flags" 500else 501 AC_MSG_RESULT(no) 502 CFLAGS=$oCFLAGS 503fi 504 505if test "$BUILDRULES" != "msvc"; then 506 try_flags="-Wshadow=local" 507 oCFLAGS=$CFLAGS 508 CFLAGS="$CFLAGS $try_flags -Werror" 509 AC_MSG_CHECKING(for whether to use $try_flags) 510 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int a = 1; int b = a; a = b;]])], 511 [qpdf_SHADOW_WARNINGS=1],[qpdf_SHADOW_WARNINGS=0]) 512 if test "$qpdf_SHADOW_WARNINGS" = "1"; then 513 AC_MSG_RESULT(yes) 514 CFLAGS="$oCFLAGS $try_flags" 515 CXXFLAGS="$CXXFLAGS $try_flags" 516 else 517 AC_MSG_RESULT(no) 518 CFLAGS=$oCFLAGS 519 fi 520fi 521 522AC_MSG_CHECKING(for tm_gmtoff in struct tm) 523AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 524 #include <time.h> 525 ]],[[ 526 struct tm tm; 527 tm.tm_gmtoff = 1; 528 ]])], [qpdf_TM_GMTOFF=1], [qpdf_TM_GMTOFF=0]) 529if test "$qpdf_TM_GMTOFF" = "1"; then 530 AC_MSG_RESULT(yes) 531 AC_DEFINE([HAVE_TM_GMTOFF], [1], [Whether struct tm has tm_gmtoff]) 532else 533 AC_MSG_RESULT(no) 534fi 535 536AC_MSG_CHECKING(for extern long timezone) 537AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 538 #include <time.h> 539 #include <stdio.h> 540 ]],[[ 541 tzset(); 542 printf("%ld\n", timezone); 543 ]])], [qpdf_EXTERN_LONG_TIMEZONE=1], [qpdf_EXTERN_LONG_TIMEZONE=0]) 544if test "$qpdf_EXTERN_LONG_TIMEZONE" = "1"; then 545 AC_MSG_RESULT(yes) 546 AC_DEFINE([HAVE_EXTERN_LONG_TIMEZONE], [1], [Whether extern long timezone is available]) 547else 548 AC_MSG_RESULT(no) 549fi 550 551LL_FMT="" 552oCFLAGS=$CFLAGS 553CFLAGS="$WFLAGS $CFLAGS" 554for fmt in "%lld" "%I64d" "%I64lld"; do 555 if test "$LL_FMT" = ""; then 556 AC_MSG_CHECKING(printf format for long long: $fmt) 557 AC_RUN_IFELSE([AC_LANG_PROGRAM( 558 [[ 559 #define _CRT_SECURE_NO_WARNINGS 560 #include <stdio.h> 561 #include <string.h> 562 ]], 563 [[ 564 long long int a = 123456789012345ll; 565 char s[30]; 566 sprintf(s, "]$fmt[", a); 567 return (strcmp(s, "123456789012345") == 0) ? 0 : 1 568 ]] 569 )], 570 [LL_FMT=$fmt],[],[LL_FMT="%lld"]) 571 if test "$LL_FMT" != ""; then 572 AC_MSG_RESULT(yes) 573 else 574 AC_MSG_RESULT(no) 575 fi 576 fi 577done 578CFLAGS=$oCFLAGS 579if test "LL_FMT" = ""; then 580 LL_FMT="%lld%" 581fi 582AC_DEFINE_UNQUOTED([LL_FMT], ["$LL_FMT"], [printf format for long long]) 583 584AC_SUBST(WINDOWS_WMAIN_XLINK_FLAGS) 585AC_SUBST(WINDOWS_MAIN_XLINK_FLAGS) 586if test "$BUILDRULES" = "msvc"; then 587 WINDOWS_WMAIN_XLINK_FLAGS="-link wsetargv.obj" 588 WINDOWS_MAIN_XLINK_FLAGS="-link setargv.obj" 589fi 590 591dnl BEGIN CRYPTO 592 593dnl By default, we build in support for every crypto provider that we 594dnl can. If implicit crypto is disabled, we don't build support for 595dnl any crypto that is not explicitly enabled. Test for various crypto 596dnl providers in increasing order of priority. The last one found 597dnl becomes the default unless a default is explicitly specified. 598 599AC_MSG_CHECKING(for whether to use implicit crypto) 600AC_ARG_ENABLE(implicit-crypto, 601 AS_HELP_STRING([--enable-implicit-crypto], 602 [whether to enable available crypto providers that are not explicitly requested; true by default]), 603 [if test "$enableval" = "yes"; then 604 IMPLICIT_CRYPTO=1 605 else 606 IMPLICIT_CRYPTO=0 607 fi], 608 [IMPLICIT_CRYPTO=1]) 609if test "$IMPLICIT_CRYPTO" = "1"; then 610 AC_MSG_RESULT(yes) 611else 612 AC_MSG_RESULT(no) 613fi 614 615dnl Native crypto is always available unless explicitly disabled. 616 617AC_SUBST(USE_CRYPTO_NATIVE) 618AC_ARG_ENABLE(crypto-native, 619 AS_HELP_STRING([--enable-crypto-native], 620 [whether to include support for native crypto provider]), 621 [if test "$enableval" = "yes"; then 622 USE_CRYPTO_NATIVE=1 623 else 624 USE_CRYPTO_NATIVE=0 625 fi], 626 [USE_CRYPTO_NATIVE=$IMPLICIT_CRYPTO]) 627if test "$USE_CRYPTO_NATIVE" = "1"; then 628 AC_DEFINE([USE_CRYPTO_NATIVE], 1, [Whether to use the native crypto provider]) 629 DEFAULT_CRYPTO=native 630fi 631 632dnl If the openssl/BoringSSL provider is explicitly requested, require openssl. 633dnl If the openssl provider is not explicitly disabled, enable it if 634dnl openssl is available. If the openssl provider is explicitly 635dnl disabled, do not link with openssl even if present. 636 637if test "$USE_EXTERNAL_LIBS" = "1"; then 638 OPENSSL_FOUND=1 639else 640 PKG_CHECK_MODULES([pc_openssl], [openssl >= 1.1.0], 641 [OPENSSL_FOUND=1], [OPENSSL_FOUND=0]) 642fi 643 644dnl Override pkg-config if headers and libraries are present. 645AS_IF([test "$OPENSSL_FOUND" = "0"], 646 [AC_CHECK_HEADER( 647 [openssl/evp.h], 648 [AC_SEARCH_LIBS(EVP_MD_CTX_new,crypto,[OPENSSL_FOUND=1])]) 649 ]) 650 651IMPLICIT_OPENSSL=0 652USE_CRYPTO_OPENSSL=0 653AC_SUBST(USE_CRYPTO_OPENSSL) 654AC_ARG_ENABLE(crypto-openssl, 655 AS_HELP_STRING([--enable-crypto-openssl], 656 [whether to include support for the openssl crypto provider]), 657 [if test "$enableval" = "yes"; then 658 USE_CRYPTO_OPENSSL=1 659 else 660 USE_CRYPTO_OPENSSL=0 661 fi], 662 [IMPLICIT_OPENSSL=$IMPLICIT_CRYPTO]) 663 664if test "$IMPLICIT_OPENSSL" = "1"; then 665 USE_CRYPTO_OPENSSL=$OPENSSL_FOUND 666 if test "$USE_CRYPTO_OPENSSL" = "1"; then 667 AC_MSG_NOTICE(enabling openssl crypto provider since openssl is available) 668 else 669 AC_MSG_NOTICE(not enabling openssl crypto provider since openssl was not found) 670 fi 671fi 672 673if test "$USE_CRYPTO_OPENSSL" = "1" -a "$OPENSSL_FOUND" = "0"; then 674 AC_MSG_ERROR(unable to use requested openssl crypto provider without openssl) 675fi 676 677if test "$USE_CRYPTO_OPENSSL" = "1"; then 678 CFLAGS="$CFLAGS $pc_openssl_CFLAGS" 679 CXXFLAGS="$CXXFLAGS $pc_openssl_CFLAGS $pc_openssl_CXXFLAGS" 680 LIBS="$LIBS $pc_openssl_LIBS" 681 AC_DEFINE([USE_CRYPTO_OPENSSL], 1, [Whether to use the openssl crypto provider]) 682 DEFAULT_CRYPTO=openssl 683elif test "$OPENSSL_FOUND" = "1"; then 684 AC_MSG_NOTICE(not linking with openssl even though it is available) 685fi 686 687dnl If the gnutls provider is explicitly requested, require gnutls. If 688dnl the gnutls provider is not explicitly disabled, enable it if 689dnl gnutls is available. If the gnutls provider is explicitly 690dnl disabled, do not link with gnutls even if present. 691 692PKG_CHECK_MODULES([pc_gnutls], [gnutls], [GNUTLS_FOUND=1], [GNUTLS_FOUND=0]) 693if test "$GNUTLS_FOUND" = "0"; then 694 AC_CHECK_HEADER(gnutls/gnutls.h,[GNUTLS_FOUND=1],[GNUTLS_FOUND=0]) 695 AC_SEARCH_LIBS(gnutls_hash_init,gnutls,[GNUTLS_FOUND=1],[GNUTLS_FOUND=0]) 696fi 697 698IMPLICIT_GNUTLS=0 699USE_CRYPTO_GNUTLS=0 700AC_SUBST(USE_CRYPTO_GNUTLS) 701AC_ARG_ENABLE(crypto-gnutls, 702 AS_HELP_STRING([--enable-crypto-gnutls], 703 [whether to include support for gnutls crypto provider]), 704 [if test "$enableval" = "yes"; then 705 USE_CRYPTO_GNUTLS=1 706 else 707 USE_CRYPTO_GNUTLS=0 708 fi], 709 [IMPLICIT_GNUTLS=$IMPLICIT_CRYPTO]) 710 711if test "$IMPLICIT_GNUTLS" = "1"; then 712 USE_CRYPTO_GNUTLS=$GNUTLS_FOUND 713 if test "$USE_CRYPTO_GNUTLS" = "1"; then 714 AC_MSG_NOTICE(enabling gnutls crypto provider since gnutls is available) 715 else 716 AC_MSG_NOTICE(not enabling gnutls crypto provider since gnutls was not found) 717 fi 718fi 719 720if test "$USE_CRYPTO_GNUTLS" = "1" -a "$GNUTLS_FOUND" = "0"; then 721 AC_MSG_ERROR(unable to use requested gnutls crypto provider without gnutls) 722fi 723 724if test "$USE_CRYPTO_GNUTLS" = "1"; then 725 CFLAGS="$CFLAGS $pc_gnutls_CFLAGS" 726 CXXFLAGS="$CXXFLAGS $pc_gnutls_CFLAGS $pc_gnutls_CXXFLAGS" 727 LIBS="$LIBS $pc_gnutls_LIBS" 728 AC_DEFINE([USE_CRYPTO_GNUTLS], 1, [Whether to use the gnutls crypto provider]) 729 DEFAULT_CRYPTO=gnutls 730elif test "$GNUTLS_FOUND" = "1"; then 731 AC_MSG_NOTICE(not linking with gnutls even though it is available) 732fi 733 734dnl Allow the default crypto provider to be specified explicitly. 735 736AC_MSG_CHECKING(which crypto to use by default) 737AC_SUBST(DEFAULT_CRYPTO) 738AC_ARG_WITH(default-crypto, 739 AS_HELP_STRING([--with-default-crypto=provider], 740 [which crypto provider to use by default; see README.md]), 741 [DEFAULT_CRYPTO=$withval], 742 []) 743AC_MSG_RESULT($DEFAULT_CRYPTO) 744AC_DEFINE_UNQUOTED([DEFAULT_CRYPTO], "$DEFAULT_CRYPTO", [Default crypto provider]) 745 746dnl Make sure the default crypto provider is actually being built. 747 748bad_crypto=0 749case "$DEFAULT_CRYPTO" in 750 "native") 751 if test "$USE_CRYPTO_NATIVE" != "1"; then 752 bad_crypto=1 753 fi 754 ;; 755 "openssl") 756 if test "$USE_CRYPTO_OPENSSL" != "1"; then 757 bad_crypto=1 758 fi 759 ;; 760 "gnutls") 761 if test "$USE_CRYPTO_GNUTLS" != "1"; then 762 bad_crypto=1 763 fi 764 ;; 765 *) 766 bad_crypto=1 767 ;; 768esac 769if test "$bad_crypto" = "1"; then 770 AC_MSG_ERROR(Unsupported default crypto: $DEFAULT_CRYPTO) 771fi 772 773dnl END CRYPTO 774 775AC_SUBST(QPDF_SKIP_TEST_COMPARE_IMAGES) 776AC_ARG_ENABLE(test-compare-images, 777 AS_HELP_STRING([--enable-test-compare-images], 778 [whether to compare images in test suite; disabled by default, enabling requires ghostscript and tiffcmp to be available]), 779 [if test "$enableval" = "no"; then 780 QPDF_SKIP_TEST_COMPARE_IMAGES=1 781 else 782 QPDF_SKIP_TEST_COMPARE_IMAGES=0 783 fi], 784 [QPDF_SKIP_TEST_COMPARE_IMAGES=1]) 785 786AC_SUBST(SHOW_FAILED_TEST_OUTPUT) 787AC_ARG_ENABLE(show-failed-test-output, 788 AS_HELP_STRING([--enable-show-failed-test-output], 789 [if specified, write failed test output to the console; useful for building on build servers where you can't easily open the test output files]), 790 [if test "$enableval" = "no"; then 791 SHOW_FAILED_TEST_OUTPUT=0 792 else 793 SHOW_FAILED_TEST_OUTPUT=1 794 fi], 795 [SHOW_FAILED_TEST_OUTPUT=0]) 796 797AC_CHECK_PROG(LATEX,latex,latex,[]) 798AC_CHECK_PROG(PDFLATEX,pdflatex,pdflatex,[]) 799AC_CHECK_PROG(LATEXMK,latexmk,latexmk,[]) 800AC_CHECK_PROG(SPHINX,sphinx-build,sphinx-build,[]) 801 802AC_ARG_ENABLE(doc-maintenance, 803 AS_HELP_STRING([--enable-doc-maintenance], 804 [if set, enables all documentation options]), 805 [if test "$enableval" = "yes"; then 806 doc_default=1; 807 else 808 doc_default=0; 809 fi], 810 [doc_default=0]) 811 812BUILD_HTML=0 813AC_SUBST(BUILD_HTML) 814AC_ARG_ENABLE(html-doc, 815 AS_HELP_STRING([--enable-html-doc], 816 [whether to build HTML documents]), 817 [if test "$enableval" = "yes"; then 818 BUILD_HTML=1; 819 else 820 BUILD_HTML=0; 821 fi], 822 [BUILD_HTML=$doc_default]) 823BUILD_PDF=0 824AC_SUBST(BUILD_PDF) 825AC_ARG_ENABLE(pdf-doc, 826 AS_HELP_STRING([--enable-pdf-doc], 827 [whether to build PDF documents]), 828 [if test "$enableval" = "yes"; then 829 BUILD_PDF=1; 830 else 831 BUILD_PDF=0; 832 fi], 833 [BUILD_PDF=$doc_default]) 834 835AC_SUBST(OSS_FUZZ) 836AC_ARG_ENABLE(oss-fuzz, 837 AS_HELP_STRING([--enable-oss-fuzz], 838 [if set, build static fuzzers for oss-fuzz]), 839 [if test "$enableval" = "yes"; then 840 OSS_FUZZ=1; 841 else 842 OSS_FUZZ=0; 843 fi], 844 [OSS_FUZZ=0]) 845 846if test "$BUILD_HTML" = "1"; then 847 if test "$SPHINX" = ""; then 848 MISSING_SPHINX=1 849 MISSING_ANY=1 850 fi 851fi 852if test "$BUILD_PDF" = "1"; then 853 if test "$SPHINX" = ""; then 854 MISSING_SPHINX=1 855 MISSING_ANY=1 856 fi 857 if test "$LATEX" = ""; then 858 MISSING_LATEX=1 859 MISSING_ANY=1 860 fi 861 if test "$LATEXMK" = ""; then 862 MISSING_LATEXMK=1 863 MISSING_ANY=1 864 fi 865 if test "$PDFLATEX" = ""; then 866 MISSING_PDFLATEX=1 867 MISSING_ANY=1 868 fi 869fi 870 871if test "$MISSING_ANY" = "1"; then 872 ISSUE_WARNINGS=1 873fi 874if test "$ISSUE_WARNINGS" = "1"; then 875 echo "" 876 echo "" 877fi 878 879if test "$MISSING_MAKE_381" = "1"; then 880 AC_MSG_WARN(gnu make >= 3.81 is required) 881fi 882 883if test "$MISSING_ZLIB_H" = "1"; then 884 AC_MSG_WARN(unable to find required header zlib.h) 885fi 886 887if test "$MISSING_ZLIB" = "1"; then 888 AC_MSG_WARN(unable to find required library z (or zlib)) 889fi 890 891if test "$MISSING_JPEG_H" = "1"; then 892 AC_MSG_WARN(unable to find required header jpeglib.h) 893fi 894 895if test "$MISSING_JPEG" = "1"; then 896 AC_MSG_WARN(unable to find required library jpeg) 897fi 898 899if test "$MISSING_LATEX" = "1"; then 900 AC_MSG_WARN(latex is required to build PDF documentation) 901fi 902 903if test "$MISSING_LATEXMK" = "1"; then 904 AC_MSG_WARN(latexmk is required to build PDF documentation) 905fi 906 907if test "$MISSING_PDFLATEX" = "1"; then 908 AC_MSG_WARN(pdflatex is required to build PDF documentation) 909fi 910 911if test "$MISSING_SPHINX" = "1"; then 912 AC_MSG_WARN(sphinx-build is required to build documentation) 913fi 914 915if test "$ISSUE_WARNINGS" = "1"; then 916 echo "" 917 echo "" 918fi 919 920if test "$MISSING_ANY" = "1"; then 921 AC_MSG_ERROR(some required prerequisites were not found) 922fi 923 924# Do this last so it doesn't interfere with other tests. 925if test "$USE_EXTERNAL_LIBS" = "1"; then 926 # Don't actually check for the presence of this -- we document that 927 # the user can run this and then edit autoconf.mk if they have too 928 # much trouble getting it to work with a different compiler. 929 CPPFLAGS="$CPPFLAGS -Iexternal-libs/include" 930 LDFLAGS="$LDFLAGS -Lexternal-libs/lib-$BUILDRULES$WINDOWS_WORDSIZE" 931 LIBS="$LIBS -lz -ljpeg -lssl -lcrypto -lmsvcrt -lws2_32 -lshell32 -ladvapi32 -lgdi32 -luser32 -lcrypt32" 932fi 933 934AC_OUTPUT 935