Split elf dependency extraction out of librpmbuild to external helper
[platform/upstream/rpm.git] / configure.ac
1 AC_PREREQ(2.61)
2 AC_INIT(rpm, 4.8.90, rpm-maint@lists.rpm.org)
3
4 AC_CONFIG_SRCDIR([rpmqv.c])
5 AC_CONFIG_HEADERS([config.h])
6 AC_CONFIG_MACRO_DIR([m4])
7
8 AM_INIT_AUTOMAKE([1.10 foreign tar-ustar dist-bzip2 subdir-objects nostdinc])
9
10 AC_CONFIG_TESTDIR(tests)
11
12 AC_USE_SYSTEM_EXTENSIONS
13
14 AC_DISABLE_STATIC
15
16 dnl Checks for programs.
17 AC_PROG_CXX
18 AC_PROG_AWK
19 AC_PROG_CC
20 AC_PROG_CPP
21 AC_PROG_INSTALL
22 AC_PROG_LN_S
23 AC_PROG_MAKE_SET
24 AC_PROG_LIBTOOL
25 AC_PROG_YACC
26
27 AC_SUBST(__CC, $CC)
28 AC_PROG_CC_C99
29 if test "$ac_cv_prog_cc_c99" = no; then
30     AC_MSG_ERROR([ISO C99 capable compiler required])
31 fi
32
33 AS=${AS-as}
34 AC_SUBST(AS)
35 if test "$GCC" = yes; then
36     CFLAGS="$CFLAGS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wno-char-subscripts"
37     # XXX disabled for now due to noise from NSPR headers
38     # CFLAGS="$CFLAGS -Wstrict-prototypes"
39     cflags_to_try="-fno-strict-aliasing -fstack-protector -Wempty-body"
40     AC_MSG_CHECKING([supported compiler flags])
41     old_cflags=$CFLAGS
42     echo
43     for flag in $cflags_to_try; do
44         CFLAGS="$CFLAGS $flag"
45         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
46                 echo "   $flag"
47                 RPMCFLAGS="$RPMCFLAGS $flag"
48         ],[])
49         CFLAGS=$old_cflags
50     done
51     CFLAGS="$CFLAGS $RPMCFLAGS"
52 fi
53 export CFLAGS
54
55 AC_SYS_LARGEFILE
56
57 dnl
58 dnl look for POSIX chmod attributes
59 dnl
60 AC_MSG_CHECKING(POSIX chmod)
61 touch foo.chmodtest
62 chmod 744 foo.chmodtest
63 chmod +X foo.chmodtest 2>/dev/null
64 a=`ls -l foo.chmodtest | awk '{print substr($1,1,10)}'`
65 rm -f foo.chmodtest
66 if test "$a" = "-rwxr-xr-x"; then
67     AC_MSG_RESULT(yes)
68     FIXPERMS=a+rX,u+w,g-w,o-w 
69 else
70     AC_MSG_RESULT(no (tell your OS vendor about GNU fileutils))
71     FIXPERMS=a+r,u+w,g-w,o-w 
72 fi
73 AC_SUBST(FIXPERMS)
74
75 dnl AM_DISABLE_SHARED
76 AM_PROG_LIBTOOL
77
78 AC_CHECK_TOOL(AR, ar, :)
79
80 dnl
81 dnl use defaults if cross-compiling, otherwise use the default path.
82 dnl
83 if test "$cross_compiling" = "yes"; then
84     MYPATH=":"
85 else
86     MYPATH=$PATH
87 fi
88
89 dnl
90 dnl Find some common programs
91 dnl
92 AC_PATH_PROG(__BZIP2, bzip2, /usr/bin/bzip2, $MYPATH)
93 AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH)
94 AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH)
95 AC_PATH_PROG(__CHMOD, chmod, /bin/chmod, $MYPATH)
96 AC_PATH_PROG(__CHOWN, chown, /bin/chown, $MYPATH)
97 AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH)
98 AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH)
99 AC_PATH_PROG(__CURL, curl, /usr/bin/curl, $MYPATH)
100 AC_PATH_PROG(__FILE, file, /usr/bin/file, $MYPATH)
101 AC_PATH_PROG(__GPG, gpg, /usr/bin/gpg, $MYPATH)
102 AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH)
103 AC_PATH_PROG(__GZIP, gzip, /bin/gzip, $MYPATH)
104 AC_PATH_PROG(__UNZIP, unzip, /usr/bin/unzip, $MYPATH)
105 AC_PATH_PROG(__ID, id, /usr/bin/id, $MYPATH)
106 AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH)
107 AC_PATH_PROG(__XZ, xz, /usr/bin/xz, $MYPATH)
108 AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH)
109 AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH)
110 AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH)
111 AC_PATH_PROG(__PATCH, patch, /usr/bin/patch, $MYPATH)
112 AC_MSG_CHECKING(old version of patch)
113     PATCHVERSION=`patch --version 2>&1`
114
115     if test "$PATCHVERSION" = "Patch version 2.1"; then
116         AC_DEFINE(HAVE_OLDPATCH_21, 1,
117                 [Define if the patch call you'll be using is 2.1 or older])
118         AC_MSG_RESULT(patch older then 2.2 found)
119     else
120         AC_MSG_RESULT(patch later then 2.2 found)
121     fi
122
123 AC_PATH_PROG(__PERL, perl, /usr/bin/perl, $MYPATH)
124 AC_PATH_PROG(__PGP, pgp, /usr/bin/pgp, $MYPATH)
125 AC_PATH_PROG(__PYTHON, python, /usr/bin/python, $MYPATH) 
126 AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH)
127 AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH)
128 AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH)
129 AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH)
130 AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH)
131
132 AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH)
133 AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH)
134 AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH)
135 AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH)
136 AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH)
137 AC_PATH_PROG(__FAKECHROOT, fakechroot, /usr/bin/fakechroot, $MYPATH)
138
139 dnl see if we have a mkdir that supports `-p' for rpmbuild's purposes
140 AC_PROG_MKDIR_P
141 if ! echo $MKDIR_P | grep -q mkdir; then 
142   __MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`"
143 else
144   __MKDIR_P=$MKDIR_P
145 fi
146 AC_DEFINE_UNQUOTED(__MKDIR_P, "${__MKDIR_P}",
147 [A full path to a program, possibly with arguments, that will create a
148    directory and all necessary parent directories, ala 'mkdir -p'])
149 AC_SUBST(__MKDIR_P)
150
151 #=================
152 # Check for zlib library. 
153
154 WITH_ZLIB_INCLUDE=
155 WITH_ZLIB_LIB=
156
157 AC_CHECK_HEADERS([zlib.h],[
158   AS_IF([test -z "${WITH_ZLIB_LIB}"],[
159     for zlib in z gz ; do
160       AC_CHECK_LIB(${zlib}, gzread, 
161         [WITH_ZLIB_LIB="-l${zlib}"; break])
162     done
163
164 dnl zlib-1.0.4 has not gzseek
165     AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])])
166   ])
167 ])
168
169 AC_SUBST(WITH_ZLIB_INCLUDE)
170 AC_SUBST(WITH_ZLIB_LIB)
171
172 #=================
173 # Check for bzip2 library.
174
175 AC_CHECK_HEADERS([bzlib.h],[
176   AC_CHECK_LIB(bz2, bzread, [WITH_BZ2_LIB=-lbz2],
177   [
178     AC_CHECK_LIB(bz2, BZ2_bzread,[ 
179       WITH_BZ2_LIB="-lbz2"
180       AC_DEFINE(HAVE_BZ2_1_0, 1, [Define as 1 if you bzip2 1.0])
181     ]) 
182   ])
183 ])
184 AC_SUBST(WITH_BZ2_LIB)
185
186 #=================
187 # Check for lzma library.
188
189 AC_CHECK_HEADERS([lzma.h],[
190   AC_CHECK_LIB(lzma, lzma_easy_encoder, [WITH_LZMA_LIB=-llzma])
191 ])
192 AC_SUBST(WITH_LZMA_LIB)
193
194 #=================
195
196 dnl
197 dnl Check for features
198 dnl
199
200 dnl Checks for libraries.
201
202 AC_CHECK_FUNC(gethostname, [], [
203     AC_CHECK_LIB(nsl, gethostname)
204 ])
205
206 AC_CHECK_HEADERS(poll.h)
207
208 AC_CHECK_HEADERS(pthread.h)
209
210 AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [
211   dnl OSF 5.0 has the the symbols prefixed with __ in libpthread.
212   AC_CHECK_LIB(pthread, __pthread_mutex_trylock, [], [
213     AC_CHECK_LIB(thread, mutex_lock)
214   ])
215 ])
216
217 AC_SEARCH_LIBS(aio_read, [c rt aio posix4])
218
219 dnl Temporary hack for MiNT.  Some functions (writev, snprintf) are
220 dnl not in the libc but in libport (for political reasons).  This check
221 dnl can hopefully be removed soon.  Please use the default action
222 dnl for this macro (not LIBS=...), otherwise the check for dbopen
223 dnl will fail.
224 AC_CHECK_LIB(port, writev)
225
226 #=================
227 # Check for libelf library. Prefer external, otherwise none.
228 WITH_LIBELF_LIB=
229 AC_CHECK_HEADER([libelf.h])
230 AC_CHECK_HEADERS([gelf.h], [
231         AC_CHECK_LIB(elf, gelf_getvernaux, [
232             AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).])
233             WITH_LIBELF_LIB="-lelf"
234             WITH_LIBELF=yes
235         ])
236 ])
237 AC_SUBST(WITH_LIBELF_LIB)
238 AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes])
239
240 AC_CHECK_HEADERS([dwarf.h], [
241   WITH_LIBDWARF=yes
242 ])
243 AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes])
244
245 #=================
246 # Check for NSS library.
247 # We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS 
248 # have a header named nss.h... so make extra check for NSS's sechash.h 
249 # which we use too and hopefully is slightly more unique to NSS.
250 WITH_NSS_INCLUDE=
251 WITH_NSS_LIB=
252 AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [
253   AC_MSG_ERROR([missing required NSPR / NSS header])
254 ])
255 AC_CHECK_LIB(nss3, NSS_NoDB_Init, [
256   WITH_NSS_LIB=-lnss3
257 ], [
258   AC_MSG_ERROR([missing required NSS library 'nss3'])
259 ])
260 AC_SUBST(WITH_NSS_INCLUDE)
261 AC_SUBST(WITH_NSS_LIB)
262
263 #=================
264 # Check for magic library.
265 WITH_MAGIC_INCLUDE=
266 WITH_MAGIC_LIB=
267
268 AC_CHECK_HEADER([magic.h], [
269     AC_CHECK_LIB(magic, magic_open, [
270       WITH_MAGIC_INCLUDE=
271       WITH_MAGIC_LIB="-lmagic"
272     ],[
273       AC_MSG_ERROR([missing required library 'libmagic']) 
274     ])
275 ],[
276       AC_MSG_ERROR([missing required header magic.h]) 
277 ])
278
279 AC_SUBST(WITH_MAGIC_INCLUDE)
280 AC_SUBST(WITH_MAGIC_LIB)
281
282 #=================
283 # Check for popt library.
284 WITH_POPT_INCLUDE=
285 WITH_POPT_LIB=
286
287 AC_CHECK_HEADER([popt.h], [
288   AC_CHECK_LIB(popt, poptGetContext, [
289       WITH_POPT_INCLUDE=
290       WITH_POPT_LIB="-lpopt"
291   ],[
292     AC_MSG_ERROR([missing required library popt])
293   ])
294 ],[
295   AC_MSG_ERROR([missing required header popt.h])
296 ])
297
298 AC_SUBST(WITH_POPT_INCLUDE)
299 AC_SUBST(WITH_POPT_LIB)
300
301 #=================
302 # Process --with/without-external-db
303 AC_ARG_WITH(external_db, [AS_HELP_STRING([--with-external-db],[build against an external Berkeley db])],
304 [case "$with_external_db" in
305 yes|no) ;;
306 *) AC_MSG_ERROR([invalid argument to --with-external-db]) ;;
307 esac],
308 [with_external_db=no])
309
310 case "$with_external_db" in
311 yes )
312   AC_CHECK_HEADERS([db.h],[
313     AC_CHECK_TYPE([db_threadid_t],[],
314       [AC_MSG_WARN([missing type db_threadid_t])],
315       [#include <db.h>])
316     save_LIBS="$LIBS"
317     AC_CHECK_LIB([db],[db_create],[],[
318       AC_MSG_ERROR([missing db_create in libdb])
319       ])
320     AC_CHECK_LIB([db],[db_env_create],[],[
321       AC_MSG_ERROR([missing db_env_create in libdb])
322       ])
323     AC_CHECK_LIB([db],[db_env_set_func_fsync],[],[
324       AC_MSG_ERROR([missing db_env_set_func_fsync in libdb])
325       ])
326     AC_CHECK_LIB([db],[db_strerror],[],[
327       AC_MSG_ERROR([missing db_strerror in libdb])
328       ])
329     WITH_DB_LIB=-ldb
330     LIBS="$save_LIBS"
331   ],[
332     AC_MSG_ERROR([missing required header db.h])
333   ])
334   ;;
335 * ) # Fall back to internal db if available
336   if [ test -x db/dist/configure ]; then
337     AC_DEFINE(HAVE_DB_H, 1, [Define if you have the <db3/db.h> header file])
338   else
339     AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL])
340   fi
341   ;;
342 esac
343
344 AC_SUBST([WITH_DB_LIB])
345
346 AM_GNU_GETTEXT_VERSION([0.16.1])
347 AM_GNU_GETTEXT([external])
348
349 dnl Checks for header files we can live without.
350 AC_HEADER_STDC
351 AC_HEADER_MAJOR
352 AC_HEADER_DIRENT
353
354 AC_CHECK_HEADERS(limits.h)
355 AC_CHECK_HEADERS(fcntl.h getopt.h memory.h)
356
357 AC_CHECK_HEADERS(sys/ipc.h)
358 AC_CHECK_HEADERS(sys/utsname.h)
359
360 AC_CHECK_HEADERS(sys/systemcfg.h)
361 AC_CHECK_HEADERS(sys/param.h)
362 AC_CHECK_HEADERS(libio.h)
363 AC_CHECK_HEADERS(mcheck.h)
364
365 AC_CHECK_HEADERS(glob.h)
366
367 dnl statfs portability fiddles.
368 dnl
369 dnl We should really emulate/steal sections of the statfs and struct statfs
370 dnl checks from GNU fileutils.
371 dnl
372 AC_MSG_CHECKING(for struct statfs)
373
374 dnl
375 dnl this is easier than nesting AC_TRY_COMPILEs...
376 dnl
377 found_struct_statfs=no
378
379 if test X$found_struct_statfs = Xno ; then
380 dnl Solaris 2.6+ wants to use statvfs
381 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
382 #ifdef HAVE_SYS_TYPES_H
383 #include <sys/types.h>
384 #endif
385 #include <sys/statvfs.h> ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
386         AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
387                 [statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
388         found_struct_statfs=yes],[])
389 fi
390
391 if test X$found_struct_statfs = Xno ; then
392 dnl first try including sys/vfs.h
393 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
394 #ifdef HAVE_SYS_TYPES_H
395 #include <sys/types.h>
396 #endif
397 #include <sys/vfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
398         AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
399         found_struct_statfs=yes],[])
400 fi
401
402 if test X$found_struct_statfs = Xno ; then
403 dnl ...next try including sys/mount.h
404 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
405 #ifdef HAVE_SYS_TYPES_H
406 #include <sys/types.h>
407 #endif
408 #ifdef HAVE_SYS_PARAM_H
409 #include <sys/param.h>
410 #endif
411 #include <sys/mount.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/mount.h)
412         AC_DEFINE(STATFS_IN_SYS_MOUNT, 1, [statfs in <sys/mount.h> (for Digital Unix 4.0D systems)])
413         found_struct_statfs=yes],[])
414 fi
415
416 if test X$found_struct_statfs = Xno ; then
417 dnl ...still no joy.  Try sys/statfs.h
418 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
419 #ifdef HAVE_SYS_TYPES_H
420 #include <sys/types.h>
421 #endif
422 #include <sys/statfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/statfs.h)
423         AC_DEFINE(STATFS_IN_SYS_STATFS, 1, [statfs in <sys/statfs.h> (for Irix 6.4 systems)])
424         found_struct_statfs=yes],[])
425 fi
426
427 if test X$found_struct_statfs = Xno ; then
428 dnl ...no luck.  Warn the user of impending doom.
429 AC_MSG_WARN(not found)
430 fi
431
432 dnl
433 dnl if we found the struct, see if it has the f_bavail member.  Some OSes
434 dnl don't, including IRIX 6.5+
435 dnl
436 if test X$found_struct_statfs = Xyes ; then
437 AC_MSG_CHECKING(for f_bavail member in struct statfs)
438 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
439 #ifdef HAVE_SYS_TYPES_H
440 #include <sys/types.h>
441 #endif
442 #if STATFS_IN_SYS_STATVFS
443 # include <sys/statvfs.h>
444   typedef struct statvfs STATFS_t;
445 #else
446   typedef struct statfs STATFS_t;
447 # if STATFS_IN_SYS_VFS
448 #  include <sys/vfs.h>
449 # elif STATFS_IN_SYS_MOUNT
450 #  include <sys/mount.h>
451 # elif STATFS_IN_SYS_STATFS
452 #  include <sys/statfs.h>
453 # endif
454 #endif ]], [[STATFS_t sfs;
455         sfs.f_bavail = 0;]])],[AC_MSG_RESULT(yes)
456         AC_DEFINE(STATFS_HAS_F_BAVAIL, 1, [Define if struct statfs has the f_bavail member])],[AC_MSG_RESULT(no)
457 ])
458 fi
459
460 if test X$found_struct_statfs = Xyes ; then
461 dnl
462 dnl now check to see if we have the 4-argument variant of statfs()
463 dnl this pretty much requires AC_RUN_IFELSE([AC_LANG_SOURCE([[]])],[],[],[])
464 dnl
465 AC_MSG_CHECKING([if statfs() requires 4 arguments])
466 AC_RUN_IFELSE([AC_LANG_SOURCE([[
467 #ifdef HAVE_SYS_TYPES_H
468 #include <sys/types.h>
469 #endif
470 #ifdef STATFS_IN_SYS_VFS
471 #include <sys/vfs.h>
472 #elif STATFS_IN_SYS_MOUNT
473 #include <sys/mouht.h>
474 #elif STATFS_IN_SYS_STATFS
475 #include <sys/statfs.h>
476 #endif
477 main() {
478         struct statfs sfs;
479         exit (statfs(".", &sfs, sizeof(sfs), 0));
480 }
481 ]])],[AC_MSG_RESULT(yes)
482         AC_DEFINE(STAT_STATFS4, 1, [Define if the statfs() call takes 4 arguments])],[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)
483 ])
484 fi
485
486 dnl look for libc features
487
488 dnl Check for missing typedefs
489 AC_TYPE_MODE_T
490 AC_TYPE_OFF_T
491 AC_TYPE_PID_T
492 AC_TYPE_SIZE_T
493
494 dnl Checks for library functions.
495 AC_FUNC_MMAP
496
497 AC_CHECK_FUNCS(mtrace)
498 AC_CHECK_FUNCS(putenv)
499 AC_CHECK_FUNCS(ftok)
500
501 AC_REPLACE_FUNCS(stpcpy stpncpy)
502
503 AC_CHECK_FUNCS(__secure_getenv)
504
505 AC_CHECK_FUNCS(
506    [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown],
507    [], [AC_MSG_ERROR([function required by rpm])])
508
509 dnl XXX Glob *is* broken on linux with libc5, solaris and possibly aix when
510 dnl %files gets something like
511 dnl     /usr/*/locale/*/LC_MESSAGES/*.mo
512 dnl (Note: more than one asterisk in glob pattern.)
513 dnl
514 dnl XXX Glob is "fixed" in glibc-2.3.3-61, but the cost is that
515 dnl dangling symlinks are no longer globbed. Always use the internal glob.
516 AC_DEFINE(USE_GNU_GLOB, 1, [Use the included glob.c?])
517 AC_LIBOBJ(glob)
518 AC_LIBOBJ(fnmatch)
519
520 dnl check if python is requested
521 AC_ARG_ENABLE(python, [AS_HELP_STRING([--enable-python],[build rpm python bindings])],
522 [case "$enable_python" in
523 yes|no) ;;
524 *) AC_MSG_ERROR([invalid argument to --enable-python])
525   ;;
526 esac],
527 [enable_python=no])
528
529 AS_IF([test "$enable_python" = yes],[
530   AM_PATH_PYTHON([2.6],[
531     WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'`
532     WITH_PYTHON_SUBPACKAGE=1
533     save_CPPFLAGS="$CPPFLAGS"
534     CPPFLAGS="$CPPFLAGS -I$WITH_PYTHON_INCLUDE"
535     AC_CHECK_HEADER([Python.h],[],
536       [AC_MSG_ERROR([missing Python.h])
537       ])
538     CPPFLAGS="$save_CPPFLAGS"
539     save_LIBS="$LIBS"
540     AC_SEARCH_LIBS([Py_Main],[python${PYTHON_VERSION} python],[
541       WITH_PYTHON_LIB="$ac_res"
542     ],[AC_MSG_ERROR([missing python library])
543     ])
544     LIBS="$save_LIBS"
545   ])
546 ],[
547     WITH_PYTHON_INCLUDE=
548     WITH_PYTHON_LIB=
549     WITH_PYTHON_SUBPACKAGE=0
550 ])
551
552 AC_SUBST(WITH_PYTHON_INCLUDE)
553 AC_SUBST(WITH_PYTHON_LIB)
554
555 AM_CONDITIONAL(PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1])
556
557 AC_PATH_PROG(DOXYGEN, doxygen, no)
558 dnl
559 dnl Only build internal API + source hacking docs on request
560 dnl
561 AC_ARG_WITH(hackingdocs, [AS_HELP_STRING([--with-hackingdocs],[build rpm hacking docs])],,[with_hackingdocs=no])
562
563 case "$with_hackingdocs" in
564 auto)
565   AS_IF([test "$DOXYGEN" = no],[with_hackingdocs=no],[with_hackingdocs=no])
566   ;;
567 yes)
568   AS_IF([test "$DOXYGEN" = no],
569     [AC_MSG_ERROR([rpm hacking docs eeds doxygen in PATH])])
570   ;;
571 esac
572 AC_CHECK_PROG(HAVE_DOT,[dot],[YES],[NO])
573
574 WITH_SELINUX_LIB=
575 AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux],[build with selinux support])],
576 [case "$with_selinux" in
577 yes|no) ;;
578 *) AC_MSG_ERROR([invalid argument to --with-selinux])
579   ;;
580 esac],
581 [with_selinux=no])
582
583 AS_IF([test "$with_selinux" = yes],[
584   AC_CHECK_HEADER([selinux/selinux.h],[
585     AC_CHECK_LIB(selinux,[is_selinux_enabled],[with_selinux=yes],[
586       AC_MSG_ERROR([--with-selinux given, but libselinux not found])])
587   ],[
588     AC_MSG_ERROR([--with-selinux given, but selinux/selinux.h not found])
589   ])
590 ])
591
592 AS_IF([test "$with_selinux" = yes],[
593   AC_DEFINE(WITH_SELINUX, 1, [Build with selinux support?])
594   WITH_SELINUX_LIB="-lselinux"
595 ])
596 AC_SUBST(WITH_SELINUX_LIB)
597 AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes])
598
599 # libcap
600 WITH_CAP_LIB=
601 AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])],
602 [case "$with_cap" in
603 yes|no) ;;
604 *) AC_MSG_ERROR([invalid argument to --with-cap])
605   ;;
606 esac],
607 [with_cap=no])
608
609 AS_IF([test "$with_cap" = yes],[
610   AC_CHECK_HEADER([sys/capability.h],[
611     AC_CHECK_LIB(cap,[cap_get_file], [
612       with_cap=yes
613       save_LIBS="$LIBS"
614       AC_CHECK_LIB(cap,[cap_compare], [
615         AC_DEFINE(HAVE_CAP_COMPARE, 1, [Have cap_compare function?])
616       ])
617       LIBS="$save_LIBS"
618     ],[
619       AC_MSG_ERROR([--with-cap given, but libcap not found])])
620   ],[
621     AC_MSG_ERROR([--with-cap given, but sys/capability.h not found])
622   ])
623 ])
624
625 AS_IF([test "$with_cap" = yes],[
626   AC_DEFINE(WITH_CAP, 1, [Build with capability support?])
627   WITH_CAP_LIB="-lcap"
628 ])
629 AC_SUBST(WITH_CAP_LIB)
630 AM_CONDITIONAL(CAP,[test "$with_cap" = yes])
631
632 WITH_ACL_LIB=
633 AC_ARG_WITH(acl, [AS_HELP_STRING([--with-acl],[build with acl support])],
634 [case "$with_acl" in
635 yes|no) ;;
636 *) AC_MSG_ERROR([invalid argument to --with-acl])
637   ;;
638 esac],
639 [with_acl=no])
640
641 AS_IF([test "$with_acl" = yes],[
642   dnl verification uses non-portable acl_equiv_mode() 
643   AC_CHECK_HEADER([acl/libacl.h],[
644     AC_CHECK_LIB(acl,[acl_equiv_mode],[with_acl=yes],[
645       AC_MSG_ERROR([--with-acl given, but libacl not found or not suitable])])
646   ],[
647     AC_MSG_ERROR([--with-acl given, but acl/libacl.h not found])
648   ])
649 ])
650
651 AS_IF([test "$with_acl" = yes],[
652   AC_DEFINE(WITH_ACL, 1, [Build with acl support?])
653   WITH_ACL_LIB="-lacl"
654 ])
655 AC_SUBST(WITH_ACL_LIB)
656 AM_CONDITIONAL(ACL,[test "$with_acl" = yes])
657
658 WITH_LUA_LIB=
659 WITH_LUA_INCLUDE=
660 AC_ARG_WITH(lua, [AS_HELP_STRING([--with-lua],[build with lua support])],,[with_lua=yes])
661 AS_IF([test "$with_lua" = yes],[
662   AC_CHECK_HEADER([lua.h],[
663     AC_CHECK_LIB(lua,[luaL_openlibs],[with_lua=yes],[
664       AC_MSG_ERROR([--with-lua given, but liblua not found])
665     ], 
666     [-lm])
667   ],[
668       AC_MSG_ERROR([--with-lua given, but lua.h not found])
669   ])
670 ])
671
672 AS_IF([test "$with_lua" = yes],[
673   AC_DEFINE(WITH_LUA, 1, [Build with lua support?])
674   WITH_LUA_INCLUDE=
675   WITH_LUA_LIB="-llua -lm" 
676 ])
677 AC_SUBST(WITH_LUA_LIB)
678 AC_SUBST(WITH_LUA_INCLUDE)
679 AM_CONDITIONAL(WITH_LUAEXT,[test "$with_lua" = yes])
680
681 with_dmalloc=no
682 AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])])
683 if test "$with_dmalloc" = yes ; then
684   AC_DEFINE(DMALLOC, 1, [Build with dmalloc support?])
685   LIBS="$LIBS -ldmalloc"
686 fi
687
688 AC_CHECK_FUNCS(getpassphrase)
689
690 #
691 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os
692 #
693 host_os_gnu=-gnu
694 if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then
695         host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'`
696 fi
697 if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then
698         host_os=`echo "${host_os}" | sed 's/-gnueabi$//'`
699         host_os_gnu=-gnueabi
700 fi
701 if echo "$host_os" | grep '.*-gnu' > /dev/null ; then
702         host_os=`echo "${host_os}" | sed 's/-gnu$//'`
703 fi
704
705 changequote(<, >)
706 host_os_exact="${host_os}"
707 host_os_major=`echo "${host_os}" | sed 's/\..*$//'`
708 host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'`
709 changequote([, ])
710
711 rm -f ./find-provides
712 if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ; then
713         echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov for automatic provides generation"
714     ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ./find-provides
715 elif test -f ${srcdir}/autodeps/${host_os_exact}.prov ; then
716         echo "using ${srcdir}/autodeps/${host_os_exact}.prov for automatic provides generation"
717     ln -s ${srcdir}/autodeps/${host_os_exact}.prov ./find-provides
718 elif test -f ${srcdir}/autodeps/${host_os_major}.prov ; then
719         echo "using ${srcdir}/autodeps/${host_os_major}.prov for automatic provides generation"
720     ln -s ${srcdir}/autodeps/${host_os_major}.prov ./find-provides
721 elif test -f ${srcdir}/autodeps/${host_os_noversion}.prov ; then
722         echo "using ${srcdir}/autodeps/${host_os_noversion}.prov for automatic provides generation"
723     ln -s ${srcdir}/autodeps/${host_os_noversion}.prov ./find-provides
724 else
725     echo "*** no default provides information is available for ${host_os_noversion}"
726     ln -s ${srcdir}/autodeps/none ./find-provides
727 fi
728
729 rm -f ./find-requires
730 if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ; then
731         echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req for automatic requires generation"
732     ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ./find-requires
733 elif test -f ${srcdir}/autodeps/${host_os_exact}.req ; then
734         echo "using ${srcdir}/autodeps/${host_os_exact}.req for automatic requires generation"
735     ln -s ${srcdir}/autodeps/${host_os_exact}.req ./find-requires
736 elif test -f ${srcdir}/autodeps/${host_os_major}.req ; then
737         echo "using ${srcdir}/autodeps/${host_os_major}.req for automatic requires generation"
738     ln -s ${srcdir}/autodeps/${host_os_major}.req ./find-requires
739 elif test -f ${srcdir}/autodeps/${host_os_noversion}.req ; then
740         echo "using ${srcdir}/autodeps/${host_os_noversion}.req for automatic requires generation"
741     ln -s ${srcdir}/autodeps/${host_os_noversion}.req ./find-requires
742 else
743     echo "*** no default requires information is available for ${host_os_noversion}"
744     ln -s ${srcdir}/autodeps/none ./find-requires
745 fi
746
747 dnl Determine the canonical arch-vendor-os for the host machine
748 case "${host_cpu}" in
749 *86)            RPMCANONCOLOR=0; RPMCANONARCH=i386 ;;
750 ia32e*)         RPMCANONCOLOR=3; RPMCANONARCH=ia32e ;;
751 amd64*)         RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;;
752 x86_64*)        RPMCANONCOLOR=3; RPMCANONARCH=x86_64 ;;
753 alpha*)         RPMCANONCOLOR=0; RPMCANONARCH=alpha ;;
754 sparc64*)       RPMCANONCOLOR=3; RPMCANONARCH=sparc64 ;;
755 sparc*)         RPMCANONCOLOR=3; RPMCANONARCH=sparc ;;
756 ia64*)          RPMCANONCOLOR=2; RPMCANONARCH=ia64 ;;
757 s390x*)         RPMCANONCOLOR=3; RPMCANONARCH=s390x ;;
758 s390*)          RPMCANONCOLOR=0; RPMCANONARCH=s390 ;;
759 powerpc64*|ppc64*)      RPMCANONCOLOR=3; RPMCANONARCH=ppc64 ;;
760 powerpc*|ppc*)  RPMCANONCOLOR=0; RPMCANONARCH=ppc ;;
761 arm*)           RPMCANONCOLOR=0; RPMCANONARCH=arm ;;
762 mipsel*)        RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;;
763 mips*)          RPMCANONCOLOR=0; RPMCANONARCH=mips ;;
764 m68k*)          RPMCANONCOLOR=0; RPMCANONARCH=m68k ;;
765 sh3*)           RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;;
766 sh4*)           RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;;
767 *)              RPMCANONCOLOR=0; RPMCANONARCH=unknown ;;
768 esac
769 case "${host_os_noversion}" in
770 mint)           RPMCANONARCH=m68kmint ;;
771 esac
772 RPMCANONVENDOR="$build_vendor"
773 case "${build_vendor}" in
774 unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
775         test -f /etc/redhat-release &&          RPMCANONVENDOR=redhat
776         test -f /etc/SuSE-release &&            RPMCANONVENDOR=suse
777         test -f /etc/pld-release &&             RPMCANONVENDOR=pld
778         test -f /etc/mandrake-release &&        RPMCANONVENDOR=mandrake
779         test -f /etc/conectiva-release &&       RPMCANONVENDOR=conectiva
780         test -f /etc/lvr-release &&             RPMCANONVENDOR=lvr
781         test -f /etc/yellowdog-release &&       RPMCANONVENDOR=yellowdog
782         test -f /etc/caos-release &&            RPMCANONVENDOR=caos
783         ;;
784 esac
785 RPMCANONOS="$host_os_noversion"
786 RPMCANONGNU="$host_os_gnu"
787 AC_SUBST(RPMCANONCOLOR)
788 AC_SUBST(RPMCANONARCH)
789 AC_SUBST(RPMCANONVENDOR)
790 AC_SUBST(RPMCANONOS)
791 AC_SUBST(RPMCANONGNU)
792 AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor])
793
794 if test X"$prefix" = XNONE ; then
795     usrprefix="$ac_default_prefix"
796 else
797     usrprefix=$prefix
798 fi
799
800 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
801 AC_SUBST(RPMCONFIGDIR)
802
803 AC_SUBST(OBJDUMP)
804
805 if test "$with_external_db" = no; then
806     AC_CONFIG_SUBDIRS(db3)
807 fi
808
809 AM_CONDITIONAL([WITH_INTERNAL_DB],[test "$with_external_db" = no])
810 AM_CONDITIONAL([DOXYGEN],[test "$DOXYGEN" != no])
811 AM_CONDITIONAL([HACKINGDOCS],[test "$with_hackingdocs" = yes])
812
813 AC_PATH_PROG(AUTOM4TE,autom4te,:)
814
815 AC_SUBST([dirstamp],[\${am__leading_dot}dirstamp])
816
817 AC_CONFIG_FILES([Makefile
818         rpmio/Makefile lib/Makefile build/Makefile
819         po/Makefile.in scripts/Makefile 
820         misc/Makefile 
821         doc/Makefile
822         python/Makefile
823         luaext/Makefile
824         tests/Makefile
825   ])
826 AC_OUTPUT