Preparing for 4.9.0-rc1
[platform/upstream/rpm.git] / configure.ac
1 AC_PREREQ(2.61)
2 AC_INIT(rpm, 4.9.0-rc1, 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_PATH_PROG(__RESTORECON, restorecon, /sbin/restorecon, $MYPATH)
113 AC_MSG_CHECKING(old version of patch)
114     PATCHVERSION=`patch --version 2>&1`
115
116     if test "$PATCHVERSION" = "Patch version 2.1"; then
117         AC_DEFINE(HAVE_OLDPATCH_21, 1,
118                 [Define if the patch call you'll be using is 2.1 or older])
119         AC_MSG_RESULT(patch older then 2.2 found)
120     else
121         AC_MSG_RESULT(patch later then 2.2 found)
122     fi
123
124 AC_PATH_PROG(__PERL, perl, /usr/bin/perl, $MYPATH)
125 AC_PATH_PROG(__PGP, pgp, /usr/bin/pgp, $MYPATH)
126 AC_PATH_PROG(__PYTHON, python, /usr/bin/python, $MYPATH) 
127 AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH)
128 AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH)
129 AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH)
130 AC_PATH_PROG(__SEMODULE, semodule, /usr/bin/semodule, $MYPATH)
131 AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH)
132 AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH)
133
134 AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH)
135 AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH)
136 AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH)
137 AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH)
138 AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH)
139 AC_PATH_PROG(__FAKECHROOT, fakechroot, /usr/bin/fakechroot, $MYPATH)
140
141 dnl see if we have a mkdir that supports `-p' for rpmbuild's purposes
142 AC_PROG_MKDIR_P
143 if ! echo $MKDIR_P | grep -q mkdir; then 
144   __MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`"
145 else
146   __MKDIR_P=$MKDIR_P
147 fi
148 AC_DEFINE_UNQUOTED(__MKDIR_P, "${__MKDIR_P}",
149 [A full path to a program, possibly with arguments, that will create a
150    directory and all necessary parent directories, ala 'mkdir -p'])
151 AC_SUBST(__MKDIR_P)
152
153 #=================
154 # Check for zlib library. 
155
156 WITH_ZLIB_INCLUDE=
157 WITH_ZLIB_LIB=
158
159 AC_CHECK_HEADERS([zlib.h],[
160   AS_IF([test -z "${WITH_ZLIB_LIB}"],[
161     for zlib in z gz ; do
162       AC_CHECK_LIB(${zlib}, gzread, 
163         [WITH_ZLIB_LIB="-l${zlib}"; break])
164     done
165
166 dnl zlib-1.0.4 has not gzseek
167     AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])])
168   ])
169 ])
170
171 AC_SUBST(WITH_ZLIB_INCLUDE)
172 AC_SUBST(WITH_ZLIB_LIB)
173
174 #=================
175 # Check for bzip2 library.
176
177 AC_CHECK_HEADERS([bzlib.h],[
178   AC_CHECK_LIB(bz2, bzread, [WITH_BZ2_LIB=-lbz2],
179   [
180     AC_CHECK_LIB(bz2, BZ2_bzread,[ 
181       WITH_BZ2_LIB="-lbz2"
182       AC_DEFINE(HAVE_BZ2_1_0, 1, [Define as 1 if you bzip2 1.0])
183     ]) 
184   ])
185 ])
186 AC_SUBST(WITH_BZ2_LIB)
187
188 #=================
189 # Check for lzma library.
190
191 AC_CHECK_HEADERS([lzma.h],[
192   AC_CHECK_LIB(lzma, lzma_easy_encoder, [WITH_LZMA_LIB=-llzma])
193 ])
194 AC_SUBST(WITH_LZMA_LIB)
195
196 #=================
197
198 dnl
199 dnl Check for features
200 dnl
201
202 dnl Checks for libraries.
203
204 AC_CHECK_FUNC(gethostname, [], [
205     AC_CHECK_LIB(nsl, gethostname)
206 ])
207
208 AC_CHECK_HEADERS(poll.h)
209
210 AC_CHECK_HEADERS(pthread.h)
211
212 AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [
213   dnl OSF 5.0 has the the symbols prefixed with __ in libpthread.
214   AC_CHECK_LIB(pthread, __pthread_mutex_trylock, [], [
215     AC_CHECK_LIB(thread, mutex_lock)
216   ])
217 ])
218
219 AC_SEARCH_LIBS(aio_read, [c rt aio posix4])
220 AC_SEARCH_LIBS(dlopen, [dl])
221
222 dnl Temporary hack for MiNT.  Some functions (writev, snprintf) are
223 dnl not in the libc but in libport (for political reasons).  This check
224 dnl can hopefully be removed soon.  Please use the default action
225 dnl for this macro (not LIBS=...), otherwise the check for dbopen
226 dnl will fail.
227 AC_CHECK_LIB(port, writev)
228
229 #=================
230 # Check for libelf library. Prefer external, otherwise none.
231 WITH_LIBELF_LIB=
232 AC_CHECK_HEADER([libelf.h])
233 AC_CHECK_HEADERS([gelf.h], [
234         AC_CHECK_LIB(elf, gelf_getvernaux, [
235             AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).])
236             WITH_LIBELF_LIB="-lelf"
237             WITH_LIBELF=yes
238         ])
239 ])
240 AC_SUBST(WITH_LIBELF_LIB)
241 AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes])
242
243 AC_CHECK_HEADERS([dwarf.h], [
244   WITH_LIBDWARF=yes
245 ])
246 AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes])
247
248 #=================
249 # Check for NSS library.
250 # We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS 
251 # have a header named nss.h... so make extra check for NSS's sechash.h 
252 # which we use too and hopefully is slightly more unique to NSS.
253 WITH_NSS_INCLUDE=
254 WITH_NSS_LIB=
255 AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [
256   AC_MSG_ERROR([missing required NSPR / NSS header])
257 ])
258 AC_CHECK_LIB(nss3, NSS_NoDB_Init, [
259   WITH_NSS_LIB=-lnss3
260 ], [
261   AC_MSG_ERROR([missing required NSS library 'nss3'])
262 ])
263 AC_SUBST(WITH_NSS_INCLUDE)
264 AC_SUBST(WITH_NSS_LIB)
265
266 #=================
267 # Check for magic library.
268 WITH_MAGIC_INCLUDE=
269 WITH_MAGIC_LIB=
270
271 AC_CHECK_HEADER([magic.h], [
272     AC_CHECK_LIB(magic, magic_open, [
273       WITH_MAGIC_INCLUDE=
274       WITH_MAGIC_LIB="-lmagic"
275     ],[
276       AC_MSG_ERROR([missing required library 'libmagic']) 
277     ])
278 ],[
279       AC_MSG_ERROR([missing required header magic.h]) 
280 ])
281
282 AC_SUBST(WITH_MAGIC_INCLUDE)
283 AC_SUBST(WITH_MAGIC_LIB)
284
285 #=================
286 # Check for popt library.
287 WITH_POPT_INCLUDE=
288 WITH_POPT_LIB=
289
290 AC_CHECK_HEADER([popt.h], [
291   AC_CHECK_LIB(popt, poptGetContext, [
292       WITH_POPT_INCLUDE=
293       WITH_POPT_LIB="-lpopt"
294   ],[
295     AC_MSG_ERROR([missing required library popt])
296   ])
297 ],[
298   AC_MSG_ERROR([missing required header popt.h])
299 ])
300
301 AC_SUBST(WITH_POPT_INCLUDE)
302 AC_SUBST(WITH_POPT_LIB)
303
304 #=================
305 # Process --with/without-external-db
306 AC_ARG_WITH(external_db, [AS_HELP_STRING([--with-external-db],[build against an external Berkeley db])],
307 [case "$with_external_db" in
308 yes|no) ;;
309 *) AC_MSG_ERROR([invalid argument to --with-external-db]) ;;
310 esac],
311 [with_external_db=no])
312
313 case "$with_external_db" in
314 yes )
315   AC_CHECK_HEADERS([db.h],[
316     AC_PREPROC_IFELSE([
317         #include <db.h>
318         #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5))
319         #error Berkeley DB too old
320         #endif
321     ],[ WITH_DB_LIB=-ldb ], 
322       [ AC_MSG_ERROR([Berkeley DB version >= 4.5 required])
323     ])
324   ],[
325     AC_MSG_ERROR([missing required header db.h])
326   ])
327   ;;
328 * ) # Fall back to internal db if available
329   if [ test -x db/dist/configure ]; then
330     AC_DEFINE(HAVE_DB_H, 1, [Define if you have the <db3/db.h> header file])
331   else
332     AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL])
333   fi
334   ;;
335 esac
336
337 AC_SUBST([WITH_DB_LIB])
338
339 AM_GNU_GETTEXT_VERSION([0.16.1])
340 AM_GNU_GETTEXT([external])
341
342 dnl Checks for header files we can live without.
343 AC_HEADER_STDC
344 AC_HEADER_MAJOR
345 AC_HEADER_DIRENT
346
347 AC_CHECK_HEADERS(limits.h)
348 AC_CHECK_HEADERS(fcntl.h getopt.h memory.h)
349
350 AC_CHECK_HEADERS(sys/ipc.h)
351 AC_CHECK_HEADERS(sys/utsname.h)
352
353 AC_CHECK_HEADERS(sys/systemcfg.h)
354 AC_CHECK_HEADERS(sys/param.h)
355 AC_CHECK_HEADERS(libio.h)
356 AC_CHECK_HEADERS(mcheck.h)
357
358 AC_CHECK_HEADERS(glob.h)
359
360 dnl statfs portability fiddles.
361 dnl
362 dnl We should really emulate/steal sections of the statfs and struct statfs
363 dnl checks from GNU fileutils.
364 dnl
365 AC_MSG_CHECKING(for struct statfs)
366
367 dnl
368 dnl this is easier than nesting AC_TRY_COMPILEs...
369 dnl
370 found_struct_statfs=no
371
372 if test X$found_struct_statfs = Xno ; then
373 dnl Solaris 2.6+ wants to use statvfs
374 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
375 #ifdef HAVE_SYS_TYPES_H
376 #include <sys/types.h>
377 #endif
378 #include <sys/statvfs.h> ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
379         AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
380                 [statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
381         found_struct_statfs=yes],[])
382 fi
383
384 if test X$found_struct_statfs = Xno ; then
385 dnl first try including sys/vfs.h
386 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
387 #ifdef HAVE_SYS_TYPES_H
388 #include <sys/types.h>
389 #endif
390 #include <sys/vfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
391         AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
392         found_struct_statfs=yes],[])
393 fi
394
395 if test X$found_struct_statfs = Xno ; then
396 dnl ...next try including sys/mount.h
397 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
398 #ifdef HAVE_SYS_TYPES_H
399 #include <sys/types.h>
400 #endif
401 #ifdef HAVE_SYS_PARAM_H
402 #include <sys/param.h>
403 #endif
404 #include <sys/mount.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/mount.h)
405         AC_DEFINE(STATFS_IN_SYS_MOUNT, 1, [statfs in <sys/mount.h> (for Digital Unix 4.0D systems)])
406         found_struct_statfs=yes],[])
407 fi
408
409 if test X$found_struct_statfs = Xno ; then
410 dnl ...still no joy.  Try sys/statfs.h
411 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
412 #ifdef HAVE_SYS_TYPES_H
413 #include <sys/types.h>
414 #endif
415 #include <sys/statfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/statfs.h)
416         AC_DEFINE(STATFS_IN_SYS_STATFS, 1, [statfs in <sys/statfs.h> (for Irix 6.4 systems)])
417         found_struct_statfs=yes],[])
418 fi
419
420 if test X$found_struct_statfs = Xno ; then
421 dnl ...no luck.  Warn the user of impending doom.
422 AC_MSG_WARN(not found)
423 fi
424
425 dnl
426 dnl if we found the struct, see if it has the f_bavail member.  Some OSes
427 dnl don't, including IRIX 6.5+
428 dnl
429 if test X$found_struct_statfs = Xyes ; then
430 AC_MSG_CHECKING(for f_bavail member in struct statfs)
431 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
432 #ifdef HAVE_SYS_TYPES_H
433 #include <sys/types.h>
434 #endif
435 #if STATFS_IN_SYS_STATVFS
436 # include <sys/statvfs.h>
437   typedef struct statvfs STATFS_t;
438 #else
439   typedef struct statfs STATFS_t;
440 # if STATFS_IN_SYS_VFS
441 #  include <sys/vfs.h>
442 # elif STATFS_IN_SYS_MOUNT
443 #  include <sys/mount.h>
444 # elif STATFS_IN_SYS_STATFS
445 #  include <sys/statfs.h>
446 # endif
447 #endif ]], [[STATFS_t sfs;
448         sfs.f_bavail = 0;]])],[AC_MSG_RESULT(yes)
449         AC_DEFINE(STATFS_HAS_F_BAVAIL, 1, [Define if struct statfs has the f_bavail member])],[AC_MSG_RESULT(no)
450 ])
451 fi
452
453 if test X$found_struct_statfs = Xyes ; then
454 dnl
455 dnl now check to see if we have the 4-argument variant of statfs()
456 dnl this pretty much requires AC_RUN_IFELSE([AC_LANG_SOURCE([[]])],[],[],[])
457 dnl
458 AC_MSG_CHECKING([if statfs() requires 4 arguments])
459 AC_RUN_IFELSE([AC_LANG_SOURCE([[
460 #ifdef HAVE_SYS_TYPES_H
461 #include <sys/types.h>
462 #endif
463 #ifdef STATFS_IN_SYS_VFS
464 #include <sys/vfs.h>
465 #elif STATFS_IN_SYS_MOUNT
466 #include <sys/mouht.h>
467 #elif STATFS_IN_SYS_STATFS
468 #include <sys/statfs.h>
469 #endif
470 main() {
471         struct statfs sfs;
472         exit (statfs(".", &sfs, sizeof(sfs), 0));
473 }
474 ]])],[AC_MSG_RESULT(yes)
475         AC_DEFINE(STAT_STATFS4, 1, [Define if the statfs() call takes 4 arguments])],[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)
476 ])
477 fi
478
479 dnl look for libc features
480
481 dnl Check for missing typedefs
482 AC_TYPE_MODE_T
483 AC_TYPE_OFF_T
484 AC_TYPE_PID_T
485 AC_TYPE_SIZE_T
486
487 dnl Checks for library functions.
488 AC_FUNC_MMAP
489
490 AC_CHECK_FUNCS(mtrace)
491 AC_CHECK_FUNCS(putenv)
492
493 AC_REPLACE_FUNCS(stpcpy stpncpy)
494
495 AC_CHECK_FUNCS(__secure_getenv)
496
497 AC_CHECK_FUNCS(
498    [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown],
499    [], [AC_MSG_ERROR([function required by rpm])])
500
501 dnl XXX Glob *is* broken on linux with libc5, solaris and possibly aix when
502 dnl %files gets something like
503 dnl     /usr/*/locale/*/LC_MESSAGES/*.mo
504 dnl (Note: more than one asterisk in glob pattern.)
505 dnl
506 dnl XXX Glob is "fixed" in glibc-2.3.3-61, but the cost is that
507 dnl dangling symlinks are no longer globbed. Always use the internal glob.
508 AC_DEFINE(USE_GNU_GLOB, 1, [Use the included glob.c?])
509 AC_LIBOBJ(glob)
510 AC_LIBOBJ(fnmatch)
511
512 dnl check if python is requested
513 AC_ARG_ENABLE(python, [AS_HELP_STRING([--enable-python],[build rpm python bindings])],
514 [case "$enable_python" in
515 yes|no) ;;
516 *) AC_MSG_ERROR([invalid argument to --enable-python])
517   ;;
518 esac],
519 [enable_python=no])
520
521 AS_IF([test "$enable_python" = yes],[
522   AM_PATH_PYTHON([2.6],[
523     WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'`
524     WITH_PYTHON_SUBPACKAGE=1
525     save_CPPFLAGS="$CPPFLAGS"
526     CPPFLAGS="$CPPFLAGS -I$WITH_PYTHON_INCLUDE"
527     AC_CHECK_HEADER([Python.h],[],
528       [AC_MSG_ERROR([missing Python.h])
529       ])
530     CPPFLAGS="$save_CPPFLAGS"
531     save_LIBS="$LIBS"
532     AC_SEARCH_LIBS([Py_Main],[python${PYTHON_VERSION} python],[
533       WITH_PYTHON_LIB="$ac_res"
534     ],[AC_MSG_ERROR([missing python library])
535     ])
536     LIBS="$save_LIBS"
537   ])
538 ],[
539     WITH_PYTHON_INCLUDE=
540     WITH_PYTHON_LIB=
541     WITH_PYTHON_SUBPACKAGE=0
542 ])
543
544 AC_SUBST(WITH_PYTHON_INCLUDE)
545 AC_SUBST(WITH_PYTHON_LIB)
546
547 AM_CONDITIONAL(ENABLE_PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1])
548
549 AC_PATH_PROG(DOXYGEN, doxygen, no)
550 dnl
551 dnl Only build internal API + source hacking docs on request
552 dnl
553 AC_ARG_WITH(hackingdocs, [AS_HELP_STRING([--with-hackingdocs],[build rpm hacking docs])],,[with_hackingdocs=no])
554
555 case "$with_hackingdocs" in
556 auto)
557   AS_IF([test "$DOXYGEN" = no],[with_hackingdocs=no],[with_hackingdocs=no])
558   ;;
559 yes)
560   AS_IF([test "$DOXYGEN" = no],
561     [AC_MSG_ERROR([rpm hacking docs eeds doxygen in PATH])])
562   ;;
563 esac
564 AC_CHECK_PROG(HAVE_DOT,[dot],[YES],[NO])
565
566 WITH_SELINUX_LIB=
567 AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux],[build with selinux support])],
568 [case "$with_selinux" in
569 yes|no) ;;
570 *) AC_MSG_ERROR([invalid argument to --with-selinux])
571   ;;
572 esac],
573 [with_selinux=no])
574
575 AS_IF([test "$with_selinux" = yes],[
576   AC_CHECK_HEADER([selinux/selinux.h],[
577     save_LIBS="$LIBS"
578     AC_CHECK_LIB([selinux],[is_selinux_enabled],[],[
579       AC_MSG_ERROR([--with-selinux given, but is_selinux_enabled not found in libselinux])])
580     AC_CHECK_LIB([selinux],[selinux_getpolicytype],[],[
581       AC_MSG_ERROR([--with-selinux given, but selinux_getpolicytype not found in libselinux])])
582     AC_CHECK_LIB([selinux],[selinux_reset_config],[],[
583       AC_MSG_ERROR([--with-selinux given, but selinux_reset_config not found in libselinux])])
584     LIBS="$save_LIBS"
585   ],[
586     AC_MSG_ERROR([--with-selinux given, but selinux/selinux.h not found])
587   ])
588
589   AC_CHECK_HEADER([selinux/label.h],[
590     save_LIBS="$LIBS"
591     AC_CHECK_LIB([selinux],[selabel_close],[],[
592       AC_MSG_ERROR([--with-selinux given, but selabel_close not found in libselinux])])
593     AC_CHECK_LIB([selinux],[selabel_lookup_raw],[],[
594       AC_MSG_ERROR([--with-selinux given, but selabel_lookup_raw not found in libselinux])])
595     AC_CHECK_LIB([selinux],[selabel_open],[],[
596       AC_MSG_ERROR([--with-selinux given, but selabel_open not found in libselinux])])
597     LIBS="$save_LIBS"
598   ],[
599     AC_MSG_ERROR([--with-selinux given, but selinux/label.h not found])
600   ])
601
602   dnl FIXME: semanage is only needed for the sepolicy plugin
603   AC_CHECK_HEADER([semanage/semanage.h],[
604     save_LIBS="$LIBS"
605     AC_CHECK_LIB([semanage],[semanage_begin_transaction],[],[
606       AC_MSG_ERROR([--with-selinux given, but semanage_begin_transaction missing in libsemanage])])
607     AC_CHECK_LIB([semanage],[semanage_commit],[],[
608       AC_MSG_ERROR([--with-selinux given, but semanage_commit missing in libsemanage])])
609     AC_CHECK_LIB([semanage],[semanage_connect],[],[
610       AC_MSG_ERROR([--with-selinux given, but semanage_connect missing in libsemanage])])
611     AC_CHECK_LIB([semanage],[semanage_disconnect],[],[
612       AC_MSG_ERROR([--with-selinux given, but semanage_disconnect missing in libsemanage])])
613     AC_CHECK_LIB([semanage],[semanage_handle_create],[],[
614       AC_MSG_ERROR([--with-selinux given, but semanage_handle_create missing in libsemanage])])
615     AC_CHECK_LIB([semanage],[semanage_handle_destroy],[],[
616       AC_MSG_ERROR([--with-selinux given, but semanage_handle_destroy missing in libsemanage])])
617     AC_CHECK_LIB([semanage],[semanage_is_connected],[],[
618       AC_MSG_ERROR([--with-selinux given, but semanage_is_connected missing in libsemanage])])
619     AC_CHECK_LIB([semanage],[semanage_module_install_base_file],[],[
620       AC_MSG_ERROR([--with-selinux given, but semanage_module_install_base_file missing in libsemanage])])
621     AC_CHECK_LIB([semanage],[semanage_module_install_file],[],[
622       AC_MSG_ERROR([--with-selinux given, but semanage_module_install_file missing in libsemanage])])
623     AC_CHECK_LIB([semanage],[semanage_module_remove],[],[
624       AC_MSG_ERROR([--with-selinux given, but semanage_module_remove missing in libsemanage])])
625     AC_CHECK_LIB([semanage],[semanage_select_store],[],[
626       AC_MSG_ERROR([--with-selinux given, but semanage_select_store missing in libsemanage])])
627     AC_CHECK_LIB([semanage],[semanage_set_check_contexts],[],[
628       AC_MSG_ERROR([--with-selinux given, but semanage_set_check_contexts missing in libsemanage])])
629     AC_CHECK_LIB([semanage],[semanage_set_create_store],[],[
630       AC_MSG_ERROR([--with-selinux given, but semanage_set_create_store missing in libsemanage])])
631     AC_CHECK_LIB([semanage],[semanage_set_reload],[],[
632       AC_MSG_ERROR([--with-selinux given, but semanage_set_reload missing in libsemanage])])
633     LIBS="$save_LIBS"
634   ],[
635     AC_MSG_ERROR([--with-selinux given, but semanage/semanage.h not found])
636   ])
637 ])
638
639 AS_IF([test "$with_selinux" = yes],[
640   AC_DEFINE(WITH_SELINUX, 1, [Build with selinux support?])
641   WITH_SELINUX_LIB="-lselinux"
642   WITH_SEMANAGE_LIB="-lsemanage"
643 ])
644 AC_SUBST(WITH_SELINUX_LIB)
645 AC_SUBST(WITH_SEMANAGE_LIB)
646 AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes])
647
648 # libcap
649 WITH_CAP_LIB=
650 AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])],
651 [case "$with_cap" in
652 yes|no) ;;
653 *) AC_MSG_ERROR([invalid argument to --with-cap])
654   ;;
655 esac],
656 [with_cap=no])
657
658 AS_IF([test "$with_cap" = yes],[
659   AC_CHECK_HEADER([sys/capability.h],[
660     AC_CHECK_LIB(cap,[cap_get_file], [
661       with_cap=yes
662       save_LIBS="$LIBS"
663       AC_CHECK_LIB(cap,[cap_compare], [
664         AC_DEFINE(HAVE_CAP_COMPARE, 1, [Have cap_compare function?])
665       ])
666       LIBS="$save_LIBS"
667     ],[
668       AC_MSG_ERROR([--with-cap given, but libcap not found])])
669   ],[
670     AC_MSG_ERROR([--with-cap given, but sys/capability.h not found])
671   ])
672 ])
673
674 AS_IF([test "$with_cap" = yes],[
675   AC_DEFINE(WITH_CAP, 1, [Build with capability support?])
676   WITH_CAP_LIB="-lcap"
677 ])
678 AC_SUBST(WITH_CAP_LIB)
679 AM_CONDITIONAL(CAP,[test "$with_cap" = yes])
680
681 WITH_ACL_LIB=
682 AC_ARG_WITH(acl, [AS_HELP_STRING([--with-acl],[build with acl support])],
683 [case "$with_acl" in
684 yes|no) ;;
685 *) AC_MSG_ERROR([invalid argument to --with-acl])
686   ;;
687 esac],
688 [with_acl=no])
689
690 AS_IF([test "$with_acl" = yes],[
691   dnl verification uses non-portable acl_equiv_mode() 
692   AC_CHECK_HEADER([acl/libacl.h],[
693     AC_CHECK_LIB(acl,[acl_equiv_mode],[with_acl=yes],[
694       AC_MSG_ERROR([--with-acl given, but libacl not found or not suitable])])
695   ],[
696     AC_MSG_ERROR([--with-acl given, but acl/libacl.h not found])
697   ])
698 ])
699
700 AS_IF([test "$with_acl" = yes],[
701   AC_DEFINE(WITH_ACL, 1, [Build with acl support?])
702   WITH_ACL_LIB="-lacl"
703 ])
704 AC_SUBST(WITH_ACL_LIB)
705 AM_CONDITIONAL(ACL,[test "$with_acl" = yes])
706
707 WITH_LUA_LIB=
708 WITH_LUA_INCLUDE=
709 AC_ARG_WITH(lua, [AS_HELP_STRING([--with-lua],[build with lua support])],,[with_lua=yes])
710 AS_IF([test "$with_lua" = yes],[
711   AC_CHECK_HEADER([lua.h],[
712     AC_CHECK_LIB(lua,[luaL_openlibs],[with_lua=yes],[
713       AC_MSG_ERROR([--with-lua given, but liblua not found])
714     ], 
715     [-lm])
716   ],[
717       AC_MSG_ERROR([--with-lua given, but lua.h not found])
718   ])
719 ])
720
721 AS_IF([test "$with_lua" = yes],[
722   AC_DEFINE(WITH_LUA, 1, [Build with lua support?])
723   WITH_LUA_INCLUDE=
724   WITH_LUA_LIB="-llua -lm" 
725 ])
726 AC_SUBST(WITH_LUA_LIB)
727 AC_SUBST(WITH_LUA_INCLUDE)
728 AM_CONDITIONAL(WITH_LUAEXT,[test "$with_lua" = yes])
729
730 AC_ARG_ENABLE(plugins, [AS_HELP_STRING([--disable-plugins],[build without plugin support])],,[enable_plugins=yes])
731 AS_IF([test "$enable_plugins" = yes],[
732   AC_DEFINE(ENABLE_PLUGINS, 1, [Build with plugin support?])
733 ])
734 AM_CONDITIONAL(ENABLE_PLUGINS,[test "$enable_plugins" = yes])
735
736
737 with_dmalloc=no
738 AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])])
739 if test "$with_dmalloc" = yes ; then
740   AC_DEFINE(DMALLOC, 1, [Build with dmalloc support?])
741   LIBS="$LIBS -ldmalloc"
742 fi
743
744 AC_CHECK_FUNCS(getpassphrase)
745
746 #
747 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os
748 #
749 host_os_gnu=-gnu
750 if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then
751         host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'`
752 fi
753 if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then
754         host_os=`echo "${host_os}" | sed 's/-gnueabi$//'`
755         host_os_gnu=-gnueabi
756 fi
757 if echo "$host_os" | grep '.*-gnu' > /dev/null ; then
758         host_os=`echo "${host_os}" | sed 's/-gnu$//'`
759 fi
760
761 changequote(<, >)
762 host_os_exact="${host_os}"
763 host_os_major=`echo "${host_os}" | sed 's/\..*$//'`
764 host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'`
765 changequote([, ])
766
767 rm -f ./find-provides
768 if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ; then
769         echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov for automatic provides generation"
770     ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ./find-provides
771 elif test -f ${srcdir}/autodeps/${host_os_exact}.prov ; then
772         echo "using ${srcdir}/autodeps/${host_os_exact}.prov for automatic provides generation"
773     ln -s ${srcdir}/autodeps/${host_os_exact}.prov ./find-provides
774 elif test -f ${srcdir}/autodeps/${host_os_major}.prov ; then
775         echo "using ${srcdir}/autodeps/${host_os_major}.prov for automatic provides generation"
776     ln -s ${srcdir}/autodeps/${host_os_major}.prov ./find-provides
777 elif test -f ${srcdir}/autodeps/${host_os_noversion}.prov ; then
778         echo "using ${srcdir}/autodeps/${host_os_noversion}.prov for automatic provides generation"
779     ln -s ${srcdir}/autodeps/${host_os_noversion}.prov ./find-provides
780 else
781     echo "*** no default provides information is available for ${host_os_noversion}"
782     ln -s ${srcdir}/autodeps/none ./find-provides
783 fi
784
785 rm -f ./find-requires
786 if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ; then
787         echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req for automatic requires generation"
788     ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ./find-requires
789 elif test -f ${srcdir}/autodeps/${host_os_exact}.req ; then
790         echo "using ${srcdir}/autodeps/${host_os_exact}.req for automatic requires generation"
791     ln -s ${srcdir}/autodeps/${host_os_exact}.req ./find-requires
792 elif test -f ${srcdir}/autodeps/${host_os_major}.req ; then
793         echo "using ${srcdir}/autodeps/${host_os_major}.req for automatic requires generation"
794     ln -s ${srcdir}/autodeps/${host_os_major}.req ./find-requires
795 elif test -f ${srcdir}/autodeps/${host_os_noversion}.req ; then
796         echo "using ${srcdir}/autodeps/${host_os_noversion}.req for automatic requires generation"
797     ln -s ${srcdir}/autodeps/${host_os_noversion}.req ./find-requires
798 else
799     echo "*** no default requires information is available for ${host_os_noversion}"
800     ln -s ${srcdir}/autodeps/none ./find-requires
801 fi
802
803 dnl Determine the canonical arch-vendor-os for the host machine
804 case "${host_cpu}" in
805 *86)            RPMCANONCOLOR=0; RPMCANONARCH=i386 ;;
806 ia32e*)         RPMCANONCOLOR=3; RPMCANONARCH=ia32e ;;
807 amd64*)         RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;;
808 x86_64*)        RPMCANONCOLOR=3; RPMCANONARCH=x86_64 ;;
809 alpha*)         RPMCANONCOLOR=0; RPMCANONARCH=alpha ;;
810 sparc64*)       RPMCANONCOLOR=3; RPMCANONARCH=sparc64 ;;
811 sparc*)         RPMCANONCOLOR=3; RPMCANONARCH=sparc ;;
812 ia64*)          RPMCANONCOLOR=2; RPMCANONARCH=ia64 ;;
813 s390x*)         RPMCANONCOLOR=3; RPMCANONARCH=s390x ;;
814 s390*)          RPMCANONCOLOR=0; RPMCANONARCH=s390 ;;
815 powerpc64*|ppc64*)      RPMCANONCOLOR=3; RPMCANONARCH=ppc64 ;;
816 powerpc*|ppc*)  RPMCANONCOLOR=0; RPMCANONARCH=ppc ;;
817 arm*)           RPMCANONCOLOR=0; RPMCANONARCH=arm ;;
818 mipsel*)        RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;;
819 mips*)          RPMCANONCOLOR=0; RPMCANONARCH=mips ;;
820 m68k*)          RPMCANONCOLOR=0; RPMCANONARCH=m68k ;;
821 sh3*)           RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;;
822 sh4*)           RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;;
823 *)              RPMCANONCOLOR=0; RPMCANONARCH=unknown ;;
824 esac
825 case "${host_os_noversion}" in
826 mint)           RPMCANONARCH=m68kmint ;;
827 esac
828 RPMCANONVENDOR="$build_vendor"
829 case "${build_vendor}" in
830 unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
831         test -f /etc/redhat-release &&          RPMCANONVENDOR=redhat
832         test -f /etc/SuSE-release &&            RPMCANONVENDOR=suse
833         test -f /etc/pld-release &&             RPMCANONVENDOR=pld
834         test -f /etc/mandrake-release &&        RPMCANONVENDOR=mandrake
835         test -f /etc/conectiva-release &&       RPMCANONVENDOR=conectiva
836         test -f /etc/lvr-release &&             RPMCANONVENDOR=lvr
837         test -f /etc/yellowdog-release &&       RPMCANONVENDOR=yellowdog
838         test -f /etc/caos-release &&            RPMCANONVENDOR=caos
839         ;;
840 esac
841 RPMCANONOS="$host_os_noversion"
842 RPMCANONGNU="$host_os_gnu"
843 AC_SUBST(RPMCANONCOLOR)
844 AC_SUBST(RPMCANONARCH)
845 AC_SUBST(RPMCANONVENDOR)
846 AC_SUBST(RPMCANONOS)
847 AC_SUBST(RPMCANONGNU)
848 AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor])
849
850 if test X"$prefix" = XNONE ; then
851     usrprefix="$ac_default_prefix"
852 else
853     usrprefix=$prefix
854 fi
855
856 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
857 AC_SUBST(RPMCONFIGDIR)
858
859 AC_SUBST(OBJDUMP)
860
861 if test "$with_external_db" = no; then
862     AC_CONFIG_SUBDIRS(db3)
863 fi
864
865 AM_CONDITIONAL([WITH_INTERNAL_DB],[test "$with_external_db" = no])
866 AM_CONDITIONAL([DOXYGEN],[test "$DOXYGEN" != no])
867 AM_CONDITIONAL([HACKINGDOCS],[test "$with_hackingdocs" = yes])
868
869 AC_PATH_PROG(AUTOM4TE,autom4te,:)
870
871 AC_SUBST([dirstamp],[\${am__leading_dot}dirstamp])
872
873 AC_CONFIG_FILES([Makefile
874         rpmio/Makefile lib/Makefile build/Makefile sign/Makefile
875         po/Makefile.in scripts/Makefile fileattrs/Makefile
876         misc/Makefile 
877         doc/Makefile
878         python/Makefile
879         luaext/Makefile
880         tests/Makefile
881         plugins/Makefile
882   ])
883 AC_OUTPUT