1AC_PREREQ(2.61) 2AC_INIT(rpm, 4.16.1.3, rpm-maint@lists.rpm.org) 3 4AC_CONFIG_SRCDIR([rpm.c]) 5AC_CONFIG_HEADERS([config.h]) 6AC_CONFIG_MACRO_DIR([m4]) 7AC_CONFIG_AUX_DIR([build-aux]) 8 9AM_INIT_AUTOMAKE([1.10 foreign tar-pax dist-bzip2 subdir-objects nostdinc]) 10dnl Allow silent build on automake versions that support it 11m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) 12 13AC_CONFIG_TESTDIR(tests) 14 15AC_USE_SYSTEM_EXTENSIONS 16 17AC_DISABLE_STATIC 18 19PKG_PROG_PKG_CONFIG 20 21dnl Checks for programs. 22AC_PROG_CXX 23AC_PROG_AWK 24AC_PROG_CC 25AC_PROG_CPP 26AC_PROG_INSTALL 27AC_PROG_LN_S 28AC_PROG_MAKE_SET 29AC_PROG_LIBTOOL 30 31AC_SUBST(__CC, $CC) 32AC_PROG_CC_C99 33if test "$ac_cv_prog_cc_c99" = no; then 34 AC_MSG_ERROR([ISO C99 capable compiler required]) 35fi 36 37AS=${AS-as} 38AC_SUBST(AS) 39if test "$GCC" = yes; then 40 cflags_to_try="-fno-strict-aliasing -fstack-protector -fno-strict-overflow -fno-delete-null-pointer-checks -Wempty-body" 41 AC_MSG_CHECKING([supported compiler flags]) 42 old_cflags=$CFLAGS 43 echo 44 for flag in $cflags_to_try; do 45 CFLAGS="$CFLAGS $flag -Werror" 46 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[#include <alloca.h> 47 alloca(100);]])],[ 48 echo " $flag" 49 RPMCFLAGS="$RPMCFLAGS $flag" 50 ],[]) 51 CFLAGS=$old_cflags 52 done 53 RPMCFLAGS="-D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes $RPMCFLAGS" 54fi 55AC_ARG_ENABLE(werror, [AS_HELP_STRING([--enable-werror], [build with -Werror])], 56 [RPMCFLAGS="$RPMCFLAGS -Werror"], []) 57AC_SUBST(RPMCFLAGS) 58 59AC_SYS_LARGEFILE 60 61dnl AM_DISABLE_SHARED 62AM_PROG_LIBTOOL 63 64AC_CHECK_TOOL(AR, ar, :) 65 66dnl 67dnl use defaults if cross-compiling, otherwise use the default path. 68dnl 69if test "$cross_compiling" = "yes"; then 70 MYPATH=":" 71else 72 MYPATH=$PATH 73fi 74 75dnl 76dnl Find some common programs 77dnl 78AC_PATH_PROGS(__7ZIP, [7zip 7za 7z], /usr/bin/7za, $MYPATH) 79AC_PATH_PROG(__BZIP2, bzip2, /usr/bin/bzip2, $MYPATH) 80AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH) 81AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH) 82AC_PATH_PROG(__CHMOD, chmod, /bin/chmod, $MYPATH) 83AC_PATH_PROG(__CHOWN, chown, /bin/chown, $MYPATH) 84AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH) 85AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH) 86AC_PATH_PROG(__CURL, curl, /usr/bin/curl, $MYPATH) 87AC_PATH_PROG(__FILE, file, /usr/bin/file, $MYPATH) 88AC_PATH_PROGS(__GPG, gpg2 gpg, /usr/bin/gpg2, $MYPATH) 89AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH) 90AC_PATH_PROG(__GZIP, gzip, /bin/gzip, $MYPATH) 91AC_PATH_PROG(__UNZIP, unzip, /usr/bin/unzip, $MYPATH) 92AC_PATH_PROG(__ID, id, /usr/bin/id, $MYPATH) 93AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH) 94AC_PATH_PROG(__LRZIP, lrzip, /usr/bin/lrzip, $MYPATH) 95AC_PATH_PROG(__LZIP, lzip, /usr/bin/lzip, $MYPATH) 96AC_PATH_PROG(__XZ, xz, /usr/bin/xz, $MYPATH) 97AC_PATH_PROG(__GEM, gem, /usr/bin/gem, $MYPATH) 98AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH) 99AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH) 100AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH) 101AC_PATH_PROG(__PATCH, patch, /usr/bin/patch, $MYPATH) 102AC_PATH_PROG(__RESTORECON, restorecon, /sbin/restorecon, $MYPATH) 103AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH) 104AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH) 105AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH) 106AC_PATH_PROG(__SEMODULE, semodule, /usr/bin/semodule, $MYPATH) 107AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH) 108AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH) 109AC_PATH_PROG(__ZSTD, zstd, /usr/bin/zstd, $MYPATH) 110 111AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH) 112AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH) 113AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH) 114AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH) 115AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH) 116 117AC_PATH_PROG(__GIT, git, /usr/bin/git, $MYPATH) 118AC_PATH_PROG(__HG, hg, /usr/bin/hg, $MYPATH) 119AC_PATH_PROG(__BZR, bzr, /usr/bin/bzr, $MYPATH) 120AC_PATH_PROG(__QUILT, quilt, /usr/bin/quilt, $MYPATH) 121 122AC_PATH_PROG(__FAKECHROOT, fakechroot, no, $MYPATH) 123AM_CONDITIONAL(HAVE_FAKECHROOT, [test "$__FAKECHROOT" != "no"]) 124 125dnl see if we have a mkdir that supports `-p' for rpmbuild's purposes 126AC_PROG_MKDIR_P 127if ! echo $MKDIR_P | grep -q mkdir; then 128 __MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`" 129else 130 __MKDIR_P=$MKDIR_P 131fi 132AC_DEFINE_UNQUOTED(__MKDIR_P, "${__MKDIR_P}", 133[A full path to a program, possibly with arguments, that will create a 134 directory and all necessary parent directories, ala 'mkdir -p']) 135AC_SUBST(__MKDIR_P) 136 137#================= 138# Check for zlib library. 139 140WITH_ZLIB_INCLUDE= 141WITH_ZLIB_LIB= 142 143AC_CHECK_HEADERS([zlib.h],[ 144 AS_IF([test -z "${WITH_ZLIB_LIB}"],[ 145 for zlib in z gz ; do 146 AC_CHECK_LIB(${zlib}, gzread, 147 [WITH_ZLIB_LIB="-l${zlib}"; break]) 148 done 149 150dnl zlib-1.0.4 has not gzseek 151 AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])]) 152 ]) 153],[ 154 AC_MSG_ERROR([missing required header zlib.h]) 155]) 156 157AC_SUBST(WITH_ZLIB_INCLUDE) 158AC_SUBST(WITH_ZLIB_LIB) 159 160#================= 161# Check for bzip2 library. 162 163AC_CHECK_HEADERS([bzlib.h],[ 164 AC_CHECK_LIB(bz2, BZ2_bzread, [WITH_BZ2_LIB=-lbz2]) 165]) 166AC_SUBST(WITH_BZ2_LIB) 167 168#================= 169# Check for lzma library. 170 171AC_CHECK_HEADERS([lzma.h],[ 172 AC_CHECK_LIB(lzma, lzma_easy_encoder, [WITH_LZMA_LIB=-llzma]) 173]) 174AC_SUBST(WITH_LZMA_LIB) 175 176# AC_OPENMP supports --enable/disable-openmp out of the box, but it doesn't 177# actually give us a way to conditionalize the build based on that. Argh. 178# Version 4.5 (201511) introduced "priority" clause for tasks. 179OPENMP_CFLAGS= 180AC_OPENMP 181AS_IF([test "x$ac_cv_prog_c_openmp" != x && 182 test "x$ac_cv_prog_c_openmp" != xunsupported],[ 183 old_CFLAGS=$CFLAGS 184 CFLAGS="$CFLAGS $OPENMP_CFLAGS" 185 AC_MSG_CHECKING([OpenMP is at least version 4.5]) 186 AC_COMPILE_IFELSE( 187 [AC_LANG_PROGRAM( 188 [#include <omp.h>], 189 [#if _OPENMP < 201511 190 #error 191 #endif 192 ] 193 )], 194 [AC_MSG_RESULT([yes]) 195 AC_DEFINE(ENABLE_OPENMP, 1, [Enable multithreading support?]) 196 ], 197 [AC_MSG_RESULT([no]) 198 OPENMP_CFLAGS= 199 if test "$enable_openmp" = "yes"; then 200 AC_MSG_ERROR([OpenMP too old]) 201 fi 202 ] 203 ) 204 CFLAGS=$old_CFLAGS 205]) 206AC_SUBST(OPENMP_CFLAGS) 207 208#================= 209# Check for zstd. 210 211AC_ARG_ENABLE([zstd], 212 [AS_HELP_STRING([--enable-zstd=@<:@yes/no/auto@:>@], 213 [build without zstd support (default=auto)])], 214 [enable_zstd="$enableval"], 215 [enable_zstd=auto]) 216 217AS_IF([test "x$enable_zstd" != "xno"], [ 218 PKG_CHECK_MODULES([ZSTD], [libzstd], [have_zstd=yes], [have_zstd=no]) 219 AS_IF([test "$enable_zstd" = "yes"], [ 220 if test "$have_zstd" = "no"; then 221 AC_MSG_ERROR([--enable-zstd specified, but not available]) 222 fi 223 ]) 224]) 225 226if test "x$have_zstd" = "xyes"; then 227 AC_DEFINE([HAVE_ZSTD], [1], [Define if libzstd is available]) 228 ZSTD_REQUIRES=libzstd 229 AC_SUBST(ZSTD_REQUIRES) 230fi 231AM_CONDITIONAL([HAVE_ZSTD], [test "x$have_zstd" = "xyes"]) 232 233#================= 234 235dnl 236dnl Check for features 237dnl 238 239dnl Checks for libraries. 240 241AC_CHECK_FUNC(gethostname, [], [ 242 AC_CHECK_LIB(nsl, gethostname) 243]) 244 245AC_CHECK_HEADERS(pthread.h) 246 247AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [ 248 dnl OSF 5.0 has the the symbols prefixed with __ in libpthread. 249 AC_CHECK_LIB(pthread, __pthread_mutex_trylock, [], [ 250 AC_CHECK_LIB(thread, mutex_lock) 251 ]) 252]) 253 254AC_SEARCH_LIBS(dlopen, [dl]) 255 256#================= 257# Check for libelf library. Prefer external, otherwise none. 258WITH_LIBELF_LIB= 259AC_CHECK_HEADER([libelf.h]) 260AC_CHECK_HEADERS([gelf.h], [ 261 AC_CHECK_LIB(elf, gelf_getvernaux, [ 262 AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).]) 263 WITH_LIBELF_LIB="-lelf" 264 WITH_LIBELF=yes 265 ]) 266]) 267AC_SUBST(WITH_LIBELF_LIB) 268AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes]) 269 270AC_CHECK_HEADERS([dwarf.h], [ 271 WITH_LIBDWARF=yes 272]) 273AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes]) 274 275#================= 276# Select crypto library 277AC_ARG_WITH(crypto, 278 [AC_HELP_STRING([--with-crypto=CRYPTO_LIB], 279 [The cryptographic library to use (nss|beecrypt|openssl|libgcrypt). The default is libgcrypt. beecrypt and nss are DEPRECATED.]) 280 ],[], 281 [with_crypto=libgcrypt]) 282 283# Check for beecrypt library if requested. 284AC_ARG_WITH(internal_beecrypt, [ --with-internal-beecrypt build with internal beecrypt library (DEPRECATED)],,[with_internal_beecrypt=no]) 285AM_CONDITIONAL([WITH_INTERNAL_BEECRYPT],[test "$with_internal_beecrypt" = yes]) 286if test "$with_internal_beecrypt" = yes ; then 287 with_crypto=beecrypt 288fi 289AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_crypto" = beecrypt]) 290 291WITH_BEECRYPT_INCLUDE= 292WITH_BEECRYPT_LIB= 293if test "$with_crypto" = beecrypt ; then 294 AC_MSG_WARN([Using the beecrypt library with rpm is deprecated and support will be removed in a future release!]) 295 AC_DEFINE(WITH_BEECRYPT, 1, [Build with beecrypt instead of nss3 support?]) 296 if test "$with_internal_beecrypt" = yes ; then 297 WITH_BEECRYPT_INCLUDE="-I\$(top_srcdir)/beecrypt" 298 AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.]) 299 else 300 AC_CHECK_LIB(beecrypt, mpfprintln, [ 301 WITH_BEECRYPT_LIB="-lbeecrypt" 302 ],[ 303 AC_MSG_ERROR([missing required library 'beecrypt']) 304 ]) 305 AC_CHECK_HEADER([beecrypt/api.h], [AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.]) 306 ]) 307 fi 308fi 309AC_SUBST(WITH_BEECRYPT_LIB) 310AC_SUBST(WITH_BEECRYPT_INCLUDE) 311 312#================= 313# Check for OpenSSL library. 314# We need evp.h from OpenSSL. 315 316WITH_OPENSSL_INCLUDE= 317WITH_OPENSSL_LIB= 318if test "$with_crypto" = openssl; then 319# If we have pkgconfig make sure CPPFLAGS are setup correctly for the OpenSSL 320# -I include path. 321AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], [$PATH:/usr/bin:/usr/local/bin]) 322if test "x$PKGCONFIG" != "xno"; then 323 CPPFLAGS="$CPPFLAGS $($PKGCONFIG --cflags libcrypto)" 324 WITH_OPENSSL_LIB=$($PKGCONFIG --libs libcrypto) 325else 326 WITH_OPENSSL_LIB=-lcrypto 327fi 328 329AC_CHECK_HEADERS([openssl/evp.h], [], [ 330 AC_MSG_ERROR([missing required OpenSSL header]) 331]) 332AC_CHECK_HEADERS([openssl/rsa.h], [], [ 333 AC_MSG_ERROR([missing required OpenSSL header]) 334]) 335AC_CHECK_HEADERS([openssl/dsa.h], [], [ 336 AC_MSG_ERROR([missing required OpenSSL header]) 337]) 338 339AC_CHECK_LIB(crypto, EVP_DigestInit_ex, [], [ 340 AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old]) 341]) 342 343AC_CHECK_LIB(crypto, EVP_MD_CTX_new, [ 344 AC_DEFINE(HAVE_EVP_MD_CTX_NEW, 1, [Define to 1 if OpenSSL has EVP_MD_CTX_new]) 345 AC_SUBST(HAVE_EVP_MD_CTX_NEW, [1]) 346 ], [ 347 AC_CHECK_LIB(crypto, EVP_MD_CTX_create, [], [ 348 AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old]) 349 ]) 350]) 351 352AC_CHECK_LIB(crypto, EVP_PKEY_CTX_new, [], [ 353 AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old]) 354]) 355 356AC_CHECK_LIB(crypto, DSA_set0_key, [ 357 AC_DEFINE(HAVE_DSA_SET0_KEY, 1, [Define to 1 if OpenSSL has DSA_set0_key]) 358 AC_SUBST(HAVE_DSA_SET0_KEY, [1]) 359 ], [] 360) 361 362AC_CHECK_LIB(crypto, DSA_set0_pqg, [ 363 AC_DEFINE(HAVE_DSA_SET0_PQG, 1, [Define to 1 if OpenSSL has DSA_set0_pqg]) 364 AC_SUBST(HAVE_DSA_SET0_PQG, [1]) 365 ], [] 366) 367 368AC_CHECK_LIB(crypto, DSA_SIG_set0, [ 369 AC_DEFINE(HAVE_DSA_SIG_SET0, 1, [Define to 1 if OpenSSL has DSA_SIG_set0]) 370 AC_SUBST(HAVE_DSA_SIG_SET0, [1]) 371 ], [] 372) 373 374AC_CHECK_LIB(crypto, RSA_set0_key, [ 375 AC_DEFINE(HAVE_RSA_SET0_KEY, 1, [Define to 1 if OpenSSL has RSA_set0_key]) 376 AC_SUBST(HAVE_RSA_SET0_KEY, [1]) 377 ], [] 378) 379 380AC_CHECK_LIB(crypto, BN_bn2binpad, [ 381 AC_DEFINE(HAVE_BN2BINPAD, 1, [Define to 1 if OpenSSL has BN_bn2binpad]) 382 AC_SUBST(HAVE_BN2BINPAD, [1]) 383 ], [] 384) 385 386fi 387 388AM_CONDITIONAL([WITH_OPENSSL],[test "$with_crypto" = openssl]) 389AC_SUBST(WITH_OPENSSL_INCLUDE) 390AC_SUBST(WITH_OPENSSL_LIB) 391 392#================= 393# Check for libgcrypt library. 394WITH_LIBGCRYPT_INCLUDE= 395WITH_LIBGCRYPT_LIB= 396if test "$with_crypto" = libgcrypt ; then 397 # libgcrypt 1.8.5 onwards ships a pkg-config file so prefer that 398 PKG_CHECK_MODULES([LIBGCRYPT], [libgcrypt], [have_libgcrypt=yes], [have_libgcrypt=no]) 399 if test "$have_libgcrypt" = "yes"; then 400 WITH_LIBGCRYPT_INCLUDE="$LIBGCRYPT_CFLAGS" 401 WITH_LIBGCRYPT_LIB="$LIBGCRYPT_LIBS" 402 else 403 AC_PATH_TOOL(LIBGCRYPT_CONFIG, libgcrypt-config, notfound) 404 if test notfound != "$LIBGCRYPT_CONFIG" ; then 405 WITH_LIBGCRYPT_INCLUDE=`$LIBGCRYPT_CONFIG --cflags` 406 WITH_LIBGCRYPT_LIB=`$LIBGCRYPT_CONFIG --libs` 407 fi 408 if test -z "$WITH_LIBGCRYPT_LIB" ; then 409 AC_MSG_ERROR([libgcrypt not found]) 410 fi 411 fi 412fi 413 414AM_CONDITIONAL([WITH_LIBGCRYPT],[test "$with_crypto" = libgcrypt]) 415AC_SUBST(WITH_LIBGCRYPT_INCLUDE) 416AC_SUBST(WITH_LIBGCRYPT_LIB) 417 418#================= 419# Check for NSS library. 420# We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS 421# have a header named nss.h... so make extra check for NSS's sechash.h 422# which we use too and hopefully is slightly more unique to NSS. 423WITH_NSS_INCLUDE= 424WITH_NSS_LIB= 425if test "$with_crypto" = nss; then 426AC_MSG_WARN([Using the nss library with rpm is deprecated and support will be removed in a future release!]) 427# If we have pkgconfig make sure CPPFLAGS are setup correctly for the nss 428# -I include path. Otherwise the below checks will fail because nspr.h 429# cannot be found. 430AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], [$PATH:/usr/bin:/usr/local/bin]) 431if test "x$PKGCONFIG" != "xno"; then 432 CPPFLAGS="$CPPFLAGS $($PKGCONFIG --cflags nss)" 433fi 434AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [ 435 AC_MSG_ERROR([missing required NSPR / NSS header]) 436]) 437AC_CHECK_LIB(nss3, VFY_VerifyDigestDirect, [ 438 WITH_NSS_LIB=-lnss3 439 AC_CHECK_LIB(nss3, NSS_InitContext, [ 440 AC_DEFINE(HAVE_NSS_INITCONTEXT, 1, [Define to 1 if NSS has NSS_InitContext]) 441 AC_SUBST(HAVE_NSS_INITCONTEXT, [1]) 442 ]) 443], [ 444 AC_MSG_ERROR([required NSS library 'nss3' missing or too old]) 445]) 446fi 447AC_SUBST(WITH_NSS_INCLUDE) 448AC_SUBST(WITH_NSS_LIB) 449 450#================= 451# Check for magic library. 452WITH_MAGIC_INCLUDE= 453WITH_MAGIC_LIB= 454 455AC_CHECK_HEADER([magic.h], [ 456 AC_CHECK_LIB(magic, magic_open, [ 457 WITH_MAGIC_INCLUDE= 458 WITH_MAGIC_LIB="-lmagic" 459 ],[ 460 AC_MSG_ERROR([missing required library 'libmagic']) 461 ]) 462],[ 463 AC_MSG_ERROR([missing required header magic.h]) 464]) 465 466AC_SUBST(WITH_MAGIC_INCLUDE) 467AC_SUBST(WITH_MAGIC_LIB) 468 469#================= 470# Check for popt library. 471WITH_POPT_INCLUDE= 472WITH_POPT_LIB= 473 474AC_CHECK_HEADER([popt.h], [ 475 AC_CHECK_LIB(popt, poptGetContext, [ 476 WITH_POPT_INCLUDE= 477 WITH_POPT_LIB="-lpopt" 478 ],[ 479 AC_MSG_ERROR([missing required library popt]) 480 ]) 481],[ 482 AC_MSG_ERROR([missing required header popt.h]) 483]) 484 485AC_SUBST(WITH_POPT_INCLUDE) 486AC_SUBST(WITH_POPT_LIB) 487 488#================= 489# Check for libarchive library. 490AC_ARG_WITH([archive], [AS_HELP_STRING([--with-archive], [build rpm2archive - requires libarchive])], 491 [], 492 [with_archive=yes]) 493 494WITH_ARCHIVE_INCLUDE= 495WITH_ARCHIVE_LIB= 496AS_IF([test "$with_archive" != no],[ 497 AC_CHECK_HEADER([archive.h], [ 498 AC_CHECK_LIB(archive, archive_write_open_filename, [ 499 WITH_ARCHIVE_INCLUDE= 500 WITH_ARCHIVE_LIB="-larchive" 501 ],[ 502 AC_MSG_ERROR([missing required library 'libarchive']) 503 ]) 504],[ 505 AC_MSG_ERROR([missing required header archive.h]) 506 ]) 507]) 508 509AC_SUBST(WITH_ARCHIVE_INCLUDE) 510AC_SUBST(WITH_ARCHIVE_LIB) 511AM_CONDITIONAL(WITH_ARCHIVE,[test "$with_archive" = yes]) 512 513#================= 514# Check for elfutils libdw library with dwelf_elf_gnu_build_id. 515WITH_LIBDW_LIB= 516HAVE_LIBDW_STRTAB= 517AS_IF([test "$WITH_LIBELF" = yes],[ 518 AC_CHECK_HEADERS([elfutils/libdwelf.h],[ 519 # dwelf_elf_gnu_build_id was introduced in elfutils 0.159 520 AC_CHECK_LIB(dw, dwelf_elf_gnu_build_id, [ 521 AC_DEFINE(HAVE_LIBDW, 1, 522 [Define to 1 if you have elfutils libdw library]) 523 WITH_LIBDW_LIB="-ldw" 524 WITH_LIBDW=yes 525 # If possible we also want the strtab functions from elfutils 0.167. 526 # But we can fall back on the (unsupported) ebl alternatives if not. 527 AC_CHECK_LIB(dw, dwelf_strtab_init, [HAVE_LIBDW_STRTAB=yes]) 528 # whether libdw supports compressed ELF objects 529 AC_CHECK_LIB(dw, dwelf_elf_begin, [ 530 AC_DEFINE(HAVE_DWELF_ELF_BEGIN, 1, [Have dwelf_elf_begin?]) 531 ]) 532 ]) 533 ]) 534]) 535AC_SUBST(WITH_LIBDW_LIB) 536AM_CONDITIONAL(LIBDW,[test "$WITH_LIBDW" = yes]) 537AM_CONDITIONAL(HAVE_LIBDW_STRTAB,[test "$HAVE_LIBDW_STRTAB" = yes]) 538 539#================= 540# Check for BDB support 541AC_ARG_ENABLE([bdb], 542 [AS_HELP_STRING([--enable-bdb=@<:@yes/no/auto@:>@ (DEPRECATED)], 543 [build with Berkeley DB rpm database format support (default=yes)])], 544 [enable_bdb="$enableval"], 545 [enable_bdb=yes]) 546 547have_bdb="no" 548AS_IF([test "x$enable_bdb" != "xno"], [ 549 if [ test -x db/dist/configure ]; then 550 have_bdb="internal" 551 else 552 AC_CHECK_HEADERS([db.h],[ 553 AC_PREPROC_IFELSE([ 554 AC_LANG_SOURCE([ 555 #include <db.h> 556 #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5)) 557 #error Berkeley DB too old 558 #endif 559 ]) 560 ],[ have_bdb="yes" ]) 561 ]) 562 fi 563 AC_MSG_CHECKING(for Berkeley DB >= 4.5) 564 AC_MSG_RESULT($have_bdb) 565 AS_IF([test "x$enable_bdb" = "xyes"], [ 566 if test "x$have_bdb" = "xno"; then 567 AC_MSG_ERROR([--enable-bdb specified, but not available]) 568 fi 569 AC_DEFINE([WITH_BDB], [1], [Define if BDB is available]) 570 WITH_DB_LIB=-ldb 571 AC_SUBST([WITH_DB_LIB]) 572 ]) 573]) 574 575AM_CONDITIONAL([BDB], [test "x$have_bdb" != "xno"]) 576AM_CONDITIONAL([WITH_INTERNAL_DB],[test "x$have_bdb" = "xinternal"]) 577if test "x$have_bdb" = "xinternal"; then 578 AC_CONFIG_SUBDIRS(db3) 579fi 580 581 582#================= 583# Process --enable-ndb 584AC_ARG_ENABLE([ndb], [AS_HELP_STRING([--enable-ndb],[enable the new rpm database format])], 585[case "$enable_ndb" in 586yes|no) ;; 587*) AC_MSG_ERROR([invalid argument to --enable-ndb]) 588 ;; 589esac], 590[enable_ndb=no]) 591AS_IF([test "$enable_ndb" = yes],[ 592 AC_DEFINE(ENABLE_NDB, 1, [Enable new rpm database format?]) 593 AC_CHECK_FUNCS(mremap, [], [], [#include <sys/mman.h>]) 594]) 595AM_CONDITIONAL([NDB], [test "$enable_ndb" = yes]) 596 597#================= 598# Process --enable-bdb-ro 599AC_ARG_ENABLE([bdb-ro], [AS_HELP_STRING([--enable-bdb-ro (EXPERIMENTAL)],[enable the read-only Berkeley DB code])], 600[case "$enable_bdb_ro" in 601yes|no) ;; 602*) AC_MSG_ERROR([invalid argument to --enable-bdb-ro]) 603 ;; 604esac], 605[enable_bdb_ro=no]) 606AS_IF([test "$enable_bdb_ro" = yes],[ 607 AC_DEFINE(WITH_BDB_RO, 1, [Build with read-only Berkeley DB]) 608]) 609AM_CONDITIONAL([BDB_RO], [test "$enable_bdb_ro" = yes]) 610 611# Check for SQLITE support 612AC_ARG_ENABLE([sqlite], 613 [AS_HELP_STRING([--enable-sqlite=@<:@yes/no/auto@:>@)], 614 [build with sqlite rpm database format support (default=auto)])], 615 [enable_sqlite="$enableval"], 616 [enable_sqlite=auto]) 617 618AS_IF([test "x$enable_sqlite" != "xno"], [ 619 PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.22.0], [have_sqlite=yes], [have_sqlite=no]) 620 AS_IF([test "$enable_sqlite" = "yes"], [ 621 if test "$have_sqlite" = "no"; then 622 AC_MSG_ERROR([--enable-sqlite specified, but not available]) 623 fi 624 ]) 625]) 626 627if test "x$have_sqlite" = "xyes"; then 628 AC_DEFINE([WITH_SQLITE], [1], [Define if SQLITE is available]) 629 SQLITE_REQUIRES=sqlite 630 AC_SUBST(SQLITE_REQUIRES) 631fi 632AM_CONDITIONAL([SQLITE], [test "x$have_sqlite" = "xyes"]) 633 634AM_GNU_GETTEXT_VERSION([0.18.2]) 635AM_GNU_GETTEXT([external]) 636AM_ICONV 637 638dnl Checks for header files we can live without. 639AC_HEADER_STDC 640dnl glibc and autoconf don't really play well together. 641dnl glibc will produce a warning when including the wrong header. 642dnl but still define major and minor. Causing us to include the header 643dnl that produces a giant warning for each major/minor use. 644dnl Use -Werror to work around that. 645old_CFLAGS=$CFLAGS 646CFLAGS="$CFLAGS -Werror" 647AC_HEADER_MAJOR 648CFLAGS=$old_CFLAGS 649AC_STRUCT_DIRENT_D_TYPE 650 651AC_CHECK_HEADERS(limits.h) 652AC_CHECK_HEADERS(getopt.h) 653 654AC_CHECK_HEADERS(sys/utsname.h) 655 656AC_CHECK_HEADERS(sys/systemcfg.h) 657AC_CHECK_HEADERS(sys/param.h) 658AC_CHECK_HEADERS(sys/auxv.h) 659 660dnl look for libc features 661 662dnl Check for missing typedefs 663AC_TYPE_MODE_T 664AC_TYPE_OFF_T 665AC_TYPE_PID_T 666AC_TYPE_SIZE_T 667 668dnl Checks for library functions. 669AC_CHECK_FUNCS(putenv) 670AC_CHECK_FUNCS(mempcpy) 671AC_CHECK_FUNCS(fdatasync) 672AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>]) 673AC_CHECK_FUNCS(lutimes) 674AC_CHECK_FUNCS(mergesort) 675AC_CHECK_FUNCS(getauxval) 676AC_CHECK_FUNCS(setprogname, [], [], [#include <stdlib.h>]) 677AC_CHECK_FUNCS(syncfs) 678AC_CHECK_FUNCS(sched_getaffinity, [], [], [#include <sched.h>]) 679AC_CHECK_FUNCS(unshare, [], [], [#include <sched.h>]) 680 681AC_MSG_CHECKING([whether __progname is defined]) 682AC_LINK_IFELSE([AC_LANG_PROGRAM([extern const char *__progname;], 683 [if (*__progname == 0) return 0;])], 684 AC_DEFINE([HAVE___PROGNAME], [1], [Define if __progname is defined]) 685 AC_MSG_RESULT([yes]), 686 AC_MSG_RESULT([no])) 687 688AC_REPLACE_FUNCS(stpcpy stpncpy) 689 690AC_CHECK_FUNCS([secure_getenv __secure_getenv]) 691 692AC_CHECK_FUNCS( 693 [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown \ 694 utimes getline localtime_r statvfs getaddrinfo ], 695 [], [AC_MSG_ERROR([function required by rpm])]) 696 697AC_LIBOBJ(fnmatch) 698 699dnl check if python is requested 700AC_ARG_ENABLE(python, [AS_HELP_STRING([--enable-python],[build rpm python bindings])], 701[case "$enable_python" in 702yes|no) ;; 703*) AC_MSG_ERROR([invalid argument to --enable-python]) 704 ;; 705esac], 706[enable_python=no]) 707 708WITH_PYTHON_SUBPACKAGE=0 709AS_IF([test "$enable_python" = yes],[ 710 PYTHON="${PYTHON:-python3}" 711 AM_PATH_PYTHON([3.1],[ 712 PKG_CHECK_MODULES([PYTHON], [python-${PYTHON_VERSION}], [WITH_PYTHON_SUBPACKAGE=1]) 713 AC_SUBST(PYTHON_CFLAGS) 714 AC_SUBST(PYTHON_LIB) 715 ]) 716]) 717 718AM_CONDITIONAL(ENABLE_PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1]) 719 720AC_PATH_PROG(DOXYGEN, doxygen, no) 721AC_CHECK_PROG(HAVE_DOT,[dot],[YES],[NO]) 722 723WITH_SELINUX_LIB= 724AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux],[build with selinux support])], 725[case "$with_selinux" in 726yes|no) ;; 727*) AC_MSG_ERROR([invalid argument to --with-selinux]) 728 ;; 729esac], 730[with_selinux=no]) 731 732AS_IF([test "$with_selinux" = yes],[ 733 AC_CHECK_HEADER([selinux/selinux.h],[ 734 save_LIBS="$LIBS" 735 AC_CHECK_LIB([selinux],[is_selinux_enabled],[],[ 736 AC_MSG_ERROR([--with-selinux given, but is_selinux_enabled not found in libselinux])]) 737 AC_CHECK_LIB([selinux],[selinux_getpolicytype],[],[ 738 AC_MSG_ERROR([--with-selinux given, but selinux_getpolicytype not found in libselinux])]) 739 AC_CHECK_LIB([selinux],[selinux_reset_config],[],[ 740 AC_MSG_ERROR([--with-selinux given, but selinux_reset_config not found in libselinux])]) 741 AC_CHECK_LIB([selinux],[setexecfilecon],[ 742 AC_DEFINE([HAVE_SETEXECFILECON],[1],[Define to 1 if SELinux setexecfilecon is present])]) 743 LIBS="$save_LIBS" 744 ],[ 745 AC_MSG_ERROR([--with-selinux given, but selinux/selinux.h not found]) 746 ]) 747 748 AC_CHECK_HEADER([selinux/label.h],[ 749 save_LIBS="$LIBS" 750 AC_CHECK_LIB([selinux],[selabel_close],[],[ 751 AC_MSG_ERROR([--with-selinux given, but selabel_close not found in libselinux])]) 752 AC_CHECK_LIB([selinux],[selabel_lookup_raw],[],[ 753 AC_MSG_ERROR([--with-selinux given, but selabel_lookup_raw not found in libselinux])]) 754 AC_CHECK_LIB([selinux],[selabel_open],[],[ 755 AC_MSG_ERROR([--with-selinux given, but selabel_open not found in libselinux])]) 756 LIBS="$save_LIBS" 757 ],[ 758 AC_MSG_ERROR([--with-selinux given, but selinux/label.h not found]) 759 ]) 760]) 761 762AS_IF([test "$with_selinux" = yes],[ 763 AC_DEFINE(WITH_SELINUX, 1, [Build with selinux support?]) 764 WITH_SELINUX_LIB="-lselinux" 765]) 766AC_SUBST(WITH_SELINUX_LIB) 767AC_SUBST(WITH_SEMANAGE_LIB) 768AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes]) 769 770# libimaevm 771with_iamevm=no 772AC_ARG_WITH(imaevm, [AS_HELP_STRING([--with-imaevm],[build with imaevm support])]) 773if test "$with_imaevm" = yes ; then 774 AC_MSG_CHECKING([libimaevm >= 1.0]) 775 AC_COMPILE_IFELSE( 776 [AC_LANG_PROGRAM( 777 [[#include <imaevm.h>]], 778 [[return sign_hash(NULL, NULL, 0, NULL, NULL, NULL);]] 779 )], 780 [AC_MSG_RESULT(yes) 781 AC_DEFINE(WITH_IMAEVM, 1, [Build with imaevm support?]) 782 WITH_IMAEVM_LIB="-limaevm" 783 ], 784 [AC_MSG_ERROR([libimaevm not present or too old (< 1.0)])] 785 ) 786fi 787AM_CONDITIONAL(WITH_IMAEVM,[test "$with_imaevm" = yes]) 788AC_SUBST(WITH_IMAEVM_LIB) 789 790# libcap 791WITH_CAP_LIB= 792AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])], 793[case "$with_cap" in 794yes|no) ;; 795*) AC_MSG_ERROR([invalid argument to --with-cap]) 796 ;; 797esac], 798[with_cap=no]) 799 800AS_IF([test "$with_cap" = yes],[ 801 AC_CHECK_HEADER([sys/capability.h],[ 802 AC_CHECK_LIB(cap,[cap_get_file], [ 803 with_cap=yes 804 save_LIBS="$LIBS" 805 AC_CHECK_LIB(cap,[cap_compare], [ 806 AC_DEFINE(HAVE_CAP_COMPARE, 1, [Have cap_compare function?]) 807 ]) 808 LIBS="$save_LIBS" 809 ],[ 810 AC_MSG_ERROR([--with-cap given, but libcap not found])]) 811 ],[ 812 AC_MSG_ERROR([--with-cap given, but sys/capability.h not found]) 813 ]) 814]) 815 816AS_IF([test "$with_cap" = yes],[ 817 AC_DEFINE(WITH_CAP, 1, [Build with capability support?]) 818 WITH_CAP_LIB="-lcap" 819]) 820AC_SUBST(WITH_CAP_LIB) 821AM_CONDITIONAL(CAP,[test "$with_cap" = yes]) 822 823WITH_ACL_LIB= 824AC_ARG_WITH(acl, [AS_HELP_STRING([--with-acl],[build with acl support])], 825[case "$with_acl" in 826yes|no) ;; 827*) AC_MSG_ERROR([invalid argument to --with-acl]) 828 ;; 829esac], 830[with_acl=no]) 831 832AS_IF([test "$with_acl" = yes],[ 833 dnl verification uses non-portable acl_equiv_mode() 834 AC_CHECK_HEADER([acl/libacl.h],[ 835 AC_CHECK_LIB(acl,[acl_equiv_mode],[with_acl=yes],[ 836 AC_MSG_ERROR([--with-acl given, but libacl not found or not suitable])]) 837 ],[ 838 AC_MSG_ERROR([--with-acl given, but acl/libacl.h not found]) 839 ]) 840]) 841 842AS_IF([test "$with_acl" = yes],[ 843 AC_DEFINE(WITH_ACL, 1, [Build with acl support?]) 844 WITH_ACL_LIB="-lacl" 845]) 846AC_SUBST(WITH_ACL_LIB) 847AM_CONDITIONAL(ACL,[test "$with_acl" = yes]) 848 849AC_ARG_WITH([lua], [AS_HELP_STRING([--with-lua], [build with lua support])], 850 [], 851 [with_lua=yes]) 852 853AS_IF([test "$with_lua" != no],[ 854 PKG_CHECK_MODULES([LUA], 855 [lua >= 5.2], 856 [AC_DEFINE(WITH_LUA, 1, [Build with lua support?])], 857 [AC_MSG_ERROR([lua not present or too old (--without-lua to disable)])]) 858 AC_SUBST(LUA_CFLAGS) 859 AC_SUBST(LUA_LIBS) 860]) 861AM_CONDITIONAL(WITH_LUA,[test "$with_lua" = yes]) 862 863AC_ARG_ENABLE(plugins, [AS_HELP_STRING([--disable-plugins],[build without plugin support])],,[enable_plugins=yes]) 864AS_IF([test "$enable_plugins" = yes],[ 865 AC_DEFINE(ENABLE_PLUGINS, 1, [Build with plugin support?]) 866]) 867AM_CONDITIONAL(ENABLE_PLUGINS,[test "$enable_plugins" = yes]) 868 869AC_ARG_ENABLE(inhibit_plugin, [AS_HELP_STRING([--disable-inhibit-plugin],[build without systemd inhibit plugin])],,[enable_inhibit_plugin=yes]) 870AS_IF([test "$enable_inhibit_plugin" = yes],[ 871 AC_DEFINE(ENABLE_INHIBIT_PLUGIN, 1, [Build with systemd inhibit plugin?]) 872]) 873AM_CONDITIONAL(ENABLE_INHIBIT_PLUGIN,[test "$enable_inhibit_plugin" = yes]) 874 875with_dbus=no 876AS_IF([test "$enable_plugins" != no],[ 877 AS_IF([test "$enable_inhibit_plugin" != no],[ 878 PKG_CHECK_MODULES([DBUS], 879 [dbus-1 >= 1.3], 880 [AC_DEFINE(DBUS, 1, [Build with dbus support?]) with_dbus=yes], 881 [with_dbus=no]) 882 AC_SUBST(DBUS_CFLAGS) 883 AC_SUBST(DBUS_LIBS) 884 ]) 885]) 886AM_CONDITIONAL(DBUS, [test "$with_dbus" = yes]) 887 888AS_IF([test "$enable_plugins" != no],[ 889 AC_CHECK_FUNCS(lsetxattr, [], [], [#include <sys/xattr.h>]) 890]) 891AM_CONDITIONAL(IMA, [test "x$ac_cv_func_lsetxattr" = xyes]) 892 893#================= 894# Check for audit library. 895AC_ARG_WITH(audit, 896AS_HELP_STRING([--with-audit],[Linux audit plugin]), 897with_audit=$withval, 898with_audit=auto) 899 900WITH_AUDIT_LIB= 901AS_IF([test "$enable_plugins" != no],[ 902 AS_IF([test "x$with_audit" != xno],[ 903 AC_SEARCH_LIBS([audit_open],[audit],[ 904 WITH_AUDIT_LIB="$ac_res" 905 AC_DEFINE(WITH_AUDIT, 1, [libaudit support]) 906 with_audit=yes 907 ],[ 908 if test "x$with_audit" != xauto; then 909 AC_MSG_ERROR([missing audit library]) 910 fi 911 ]) 912 ]) 913]) 914AC_SUBST(WITH_AUDIT_LIB) 915AM_CONDITIONAL(AUDIT,[test "$with_audit" = yes]) 916 917user_with_uid0=$(awk -F: '$3==0 {print $1;exit}' /etc/passwd) 918group_with_gid0=$(awk -F: '$3==0 {print $1;exit}' /etc/group) 919AC_DEFINE_UNQUOTED([UID_0_USER],["$user_with_uid0"],[Get the user name having userid 0]) 920AC_DEFINE_UNQUOTED([GID_0_GROUP],["$group_with_gid0"],[Get the group name having groupid 0]) 921 922# 923# get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os 924# 925host_os_gnu=-gnu 926if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then 927 host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'` 928fi 929if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then 930 host_os=`echo "${host_os}" | sed 's/-gnueabi$//'` 931 host_os_gnu=-gnueabi 932fi 933if echo "$host_os" | grep '.*-gnu' > /dev/null ; then 934 host_os=`echo "${host_os}" | sed 's/-gnu$//'` 935fi 936 937changequote(<, >) 938host_os_exact="${host_os}" 939host_os_major=`echo "${host_os}" | sed 's/\..*$//'` 940host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'` 941changequote([, ]) 942 943dnl permit overriding build_vendor for "canonical rpm vendor" 944RPMCANONVENDOR="$build_vendor" 945AC_ARG_WITH([vendor], 946 AS_HELP_STRING([--with-vendor=VENDOR], [specify rpm vendor name]), 947 [RPMCANONVENDOR=$withval]) 948AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor]) 949 950RPMCANONOS="$host_os_noversion" 951RPMCANONGNU="$host_os_gnu" 952AC_SUBST(RPMCANONVENDOR) 953AC_SUBST(RPMCANONOS) 954AC_SUBST(RPMCANONGNU) 955 956RUNDIR="/run" 957AC_ARG_WITH([rundir], 958 AS_HELP_STRING([--with-rundir=RUNDIR], [specify run-time variable directory]), 959 [RUNDIR=$withval]) 960AC_DEFINE_UNQUOTED([RUNDIR],["${RUNDIR}"],[run-time variable directory]) 961AC_SUBST(RUNDIR) 962 963if test X"$prefix" = XNONE ; then 964 usrprefix="$ac_default_prefix" 965else 966 usrprefix=$prefix 967fi 968 969RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`" 970AC_SUBST(RPMCONFIGDIR) 971 972AC_SUBST(OBJDUMP) 973 974AM_CONDITIONAL([DOXYGEN],[test "$DOXYGEN" != no]) 975 976AC_PATH_PROG(AUTOM4TE,autom4te,:) 977 978AC_SUBST([dirstamp],[\${am__leading_dot}dirstamp]) 979 980AC_CONFIG_FILES([Makefile 981 rpmio/Makefile lib/Makefile build/Makefile sign/Makefile 982 po/Makefile.in scripts/Makefile fileattrs/Makefile 983 misc/Makefile 984 doc/Makefile 985 python/Makefile 986 luaext/Makefile 987 tests/Makefile 988 plugins/Makefile 989 python/setup.py 990 ]) 991AC_OUTPUT 992