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