Handle enable/disable python to configure.ac more sanely
[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_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_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   AC_CHECK_HEADER([semanage/semanage.h],[
603     save_LIBS="$LIBS"
604     AC_CHECK_LIB([semanage],[semanage_begin_transaction],[],[
605       AC_MSG_ERROR([--with-selinux given, but semanage_begin_transaction missing in libsemanage])])
606     AC_CHECK_LIB([semanage],[semanage_commit],[],[
607       AC_MSG_ERROR([--with-selinux given, but semanage_commit missing in libsemanage])])
608     AC_CHECK_LIB([semanage],[semanage_connect],[],[
609       AC_MSG_ERROR([--with-selinux given, but semanage_connect missing in libsemanage])])
610     AC_CHECK_LIB([semanage],[semanage_disconnect],[],[
611       AC_MSG_ERROR([--with-selinux given, but semanage_disconnect missing in libsemanage])])
612     AC_CHECK_LIB([semanage],[semanage_handle_create],[],[
613       AC_MSG_ERROR([--with-selinux given, but semanage_handle_create missing in libsemanage])])
614     AC_CHECK_LIB([semanage],[semanage_handle_destroy],[],[
615       AC_MSG_ERROR([--with-selinux given, but semanage_handle_destroy missing in libsemanage])])
616     AC_CHECK_LIB([semanage],[semanage_is_connected],[],[
617       AC_MSG_ERROR([--with-selinux given, but semanage_is_connected missing in libsemanage])])
618     AC_CHECK_LIB([semanage],[semanage_module_install_base_file],[],[
619       AC_MSG_ERROR([--with-selinux given, but semanage_module_install_base_file missing in libsemanage])])
620     AC_CHECK_LIB([semanage],[semanage_module_install_file],[],[
621       AC_MSG_ERROR([--with-selinux given, but semanage_module_install_file missing in libsemanage])])
622     AC_CHECK_LIB([semanage],[semanage_module_remove],[],[
623       AC_MSG_ERROR([--with-selinux given, but semanage_module_remove missing in libsemanage])])
624     AC_CHECK_LIB([semanage],[semanage_select_store],[],[
625       AC_MSG_ERROR([--with-selinux given, but semanage_select_store missing in libsemanage])])
626     AC_CHECK_LIB([semanage],[semanage_set_check_contexts],[],[
627       AC_MSG_ERROR([--with-selinux given, but semanage_set_check_contexts missing in libsemanage])])
628     AC_CHECK_LIB([semanage],[semanage_set_create_store],[],[
629       AC_MSG_ERROR([--with-selinux given, but semanage_set_create_store missing in libsemanage])])
630     AC_CHECK_LIB([semanage],[semanage_set_reload],[],[
631       AC_MSG_ERROR([--with-selinux given, but semanage_set_reload missing in libsemanage])])
632     LIBS="$save_LIBS"
633   ],[
634     AC_MSG_ERROR([--with-selinux given, but semanage/semanage.h not found])
635   ])
636 ])
637
638 AS_IF([test "$with_selinux" = yes],[
639   AC_DEFINE(WITH_SELINUX, 1, [Build with selinux support?])
640   WITH_SELINUX_LIB="-lselinux -lsemanage"
641 ])
642 AC_SUBST(WITH_SELINUX_LIB)
643 AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes])
644
645 # libcap
646 WITH_CAP_LIB=
647 AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])],
648 [case "$with_cap" in
649 yes|no) ;;
650 *) AC_MSG_ERROR([invalid argument to --with-cap])
651   ;;
652 esac],
653 [with_cap=no])
654
655 AS_IF([test "$with_cap" = yes],[
656   AC_CHECK_HEADER([sys/capability.h],[
657     AC_CHECK_LIB(cap,[cap_get_file], [
658       with_cap=yes
659       save_LIBS="$LIBS"
660       AC_CHECK_LIB(cap,[cap_compare], [
661         AC_DEFINE(HAVE_CAP_COMPARE, 1, [Have cap_compare function?])
662       ])
663       LIBS="$save_LIBS"
664     ],[
665       AC_MSG_ERROR([--with-cap given, but libcap not found])])
666   ],[
667     AC_MSG_ERROR([--with-cap given, but sys/capability.h not found])
668   ])
669 ])
670
671 AS_IF([test "$with_cap" = yes],[
672   AC_DEFINE(WITH_CAP, 1, [Build with capability support?])
673   WITH_CAP_LIB="-lcap"
674 ])
675 AC_SUBST(WITH_CAP_LIB)
676 AM_CONDITIONAL(CAP,[test "$with_cap" = yes])
677
678 WITH_ACL_LIB=
679 AC_ARG_WITH(acl, [AS_HELP_STRING([--with-acl],[build with acl support])],
680 [case "$with_acl" in
681 yes|no) ;;
682 *) AC_MSG_ERROR([invalid argument to --with-acl])
683   ;;
684 esac],
685 [with_acl=no])
686
687 AS_IF([test "$with_acl" = yes],[
688   dnl verification uses non-portable acl_equiv_mode() 
689   AC_CHECK_HEADER([acl/libacl.h],[
690     AC_CHECK_LIB(acl,[acl_equiv_mode],[with_acl=yes],[
691       AC_MSG_ERROR([--with-acl given, but libacl not found or not suitable])])
692   ],[
693     AC_MSG_ERROR([--with-acl given, but acl/libacl.h not found])
694   ])
695 ])
696
697 AS_IF([test "$with_acl" = yes],[
698   AC_DEFINE(WITH_ACL, 1, [Build with acl support?])
699   WITH_ACL_LIB="-lacl"
700 ])
701 AC_SUBST(WITH_ACL_LIB)
702 AM_CONDITIONAL(ACL,[test "$with_acl" = yes])
703
704 WITH_LUA_LIB=
705 WITH_LUA_INCLUDE=
706 AC_ARG_WITH(lua, [AS_HELP_STRING([--with-lua],[build with lua support])],,[with_lua=yes])
707 AS_IF([test "$with_lua" = yes],[
708   AC_CHECK_HEADER([lua.h],[
709     AC_CHECK_LIB(lua,[luaL_openlibs],[with_lua=yes],[
710       AC_MSG_ERROR([--with-lua given, but liblua not found])
711     ], 
712     [-lm])
713   ],[
714       AC_MSG_ERROR([--with-lua given, but lua.h not found])
715   ])
716 ])
717
718 AS_IF([test "$with_lua" = yes],[
719   AC_DEFINE(WITH_LUA, 1, [Build with lua support?])
720   WITH_LUA_INCLUDE=
721   WITH_LUA_LIB="-llua -lm" 
722 ])
723 AC_SUBST(WITH_LUA_LIB)
724 AC_SUBST(WITH_LUA_INCLUDE)
725 AM_CONDITIONAL(WITH_LUAEXT,[test "$with_lua" = yes])
726
727 with_dmalloc=no
728 AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])])
729 if test "$with_dmalloc" = yes ; then
730   AC_DEFINE(DMALLOC, 1, [Build with dmalloc support?])
731   LIBS="$LIBS -ldmalloc"
732 fi
733
734 AC_CHECK_FUNCS(getpassphrase)
735
736 #
737 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os
738 #
739 host_os_gnu=-gnu
740 if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then
741         host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'`
742 fi
743 if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then
744         host_os=`echo "${host_os}" | sed 's/-gnueabi$//'`
745         host_os_gnu=-gnueabi
746 fi
747 if echo "$host_os" | grep '.*-gnu' > /dev/null ; then
748         host_os=`echo "${host_os}" | sed 's/-gnu$//'`
749 fi
750
751 changequote(<, >)
752 host_os_exact="${host_os}"
753 host_os_major=`echo "${host_os}" | sed 's/\..*$//'`
754 host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'`
755 changequote([, ])
756
757 rm -f ./find-provides
758 if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ; then
759         echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov for automatic provides generation"
760     ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ./find-provides
761 elif test -f ${srcdir}/autodeps/${host_os_exact}.prov ; then
762         echo "using ${srcdir}/autodeps/${host_os_exact}.prov for automatic provides generation"
763     ln -s ${srcdir}/autodeps/${host_os_exact}.prov ./find-provides
764 elif test -f ${srcdir}/autodeps/${host_os_major}.prov ; then
765         echo "using ${srcdir}/autodeps/${host_os_major}.prov for automatic provides generation"
766     ln -s ${srcdir}/autodeps/${host_os_major}.prov ./find-provides
767 elif test -f ${srcdir}/autodeps/${host_os_noversion}.prov ; then
768         echo "using ${srcdir}/autodeps/${host_os_noversion}.prov for automatic provides generation"
769     ln -s ${srcdir}/autodeps/${host_os_noversion}.prov ./find-provides
770 else
771     echo "*** no default provides information is available for ${host_os_noversion}"
772     ln -s ${srcdir}/autodeps/none ./find-provides
773 fi
774
775 rm -f ./find-requires
776 if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ; then
777         echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req for automatic requires generation"
778     ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ./find-requires
779 elif test -f ${srcdir}/autodeps/${host_os_exact}.req ; then
780         echo "using ${srcdir}/autodeps/${host_os_exact}.req for automatic requires generation"
781     ln -s ${srcdir}/autodeps/${host_os_exact}.req ./find-requires
782 elif test -f ${srcdir}/autodeps/${host_os_major}.req ; then
783         echo "using ${srcdir}/autodeps/${host_os_major}.req for automatic requires generation"
784     ln -s ${srcdir}/autodeps/${host_os_major}.req ./find-requires
785 elif test -f ${srcdir}/autodeps/${host_os_noversion}.req ; then
786         echo "using ${srcdir}/autodeps/${host_os_noversion}.req for automatic requires generation"
787     ln -s ${srcdir}/autodeps/${host_os_noversion}.req ./find-requires
788 else
789     echo "*** no default requires information is available for ${host_os_noversion}"
790     ln -s ${srcdir}/autodeps/none ./find-requires
791 fi
792
793 dnl Determine the canonical arch-vendor-os for the host machine
794 case "${host_cpu}" in
795 *86)            RPMCANONCOLOR=0; RPMCANONARCH=i386 ;;
796 ia32e*)         RPMCANONCOLOR=3; RPMCANONARCH=ia32e ;;
797 amd64*)         RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;;
798 x86_64*)        RPMCANONCOLOR=3; RPMCANONARCH=x86_64 ;;
799 alpha*)         RPMCANONCOLOR=0; RPMCANONARCH=alpha ;;
800 sparc64*)       RPMCANONCOLOR=3; RPMCANONARCH=sparc64 ;;
801 sparc*)         RPMCANONCOLOR=3; RPMCANONARCH=sparc ;;
802 ia64*)          RPMCANONCOLOR=2; RPMCANONARCH=ia64 ;;
803 s390x*)         RPMCANONCOLOR=3; RPMCANONARCH=s390x ;;
804 s390*)          RPMCANONCOLOR=0; RPMCANONARCH=s390 ;;
805 powerpc64*|ppc64*)      RPMCANONCOLOR=3; RPMCANONARCH=ppc64 ;;
806 powerpc*|ppc*)  RPMCANONCOLOR=0; RPMCANONARCH=ppc ;;
807 arm*)           RPMCANONCOLOR=0; RPMCANONARCH=arm ;;
808 mipsel*)        RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;;
809 mips*)          RPMCANONCOLOR=0; RPMCANONARCH=mips ;;
810 m68k*)          RPMCANONCOLOR=0; RPMCANONARCH=m68k ;;
811 sh3*)           RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;;
812 sh4*)           RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;;
813 *)              RPMCANONCOLOR=0; RPMCANONARCH=unknown ;;
814 esac
815 case "${host_os_noversion}" in
816 mint)           RPMCANONARCH=m68kmint ;;
817 esac
818 RPMCANONVENDOR="$build_vendor"
819 case "${build_vendor}" in
820 unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
821         test -f /etc/redhat-release &&          RPMCANONVENDOR=redhat
822         test -f /etc/SuSE-release &&            RPMCANONVENDOR=suse
823         test -f /etc/pld-release &&             RPMCANONVENDOR=pld
824         test -f /etc/mandrake-release &&        RPMCANONVENDOR=mandrake
825         test -f /etc/conectiva-release &&       RPMCANONVENDOR=conectiva
826         test -f /etc/lvr-release &&             RPMCANONVENDOR=lvr
827         test -f /etc/yellowdog-release &&       RPMCANONVENDOR=yellowdog
828         test -f /etc/caos-release &&            RPMCANONVENDOR=caos
829         ;;
830 esac
831 RPMCANONOS="$host_os_noversion"
832 RPMCANONGNU="$host_os_gnu"
833 AC_SUBST(RPMCANONCOLOR)
834 AC_SUBST(RPMCANONARCH)
835 AC_SUBST(RPMCANONVENDOR)
836 AC_SUBST(RPMCANONOS)
837 AC_SUBST(RPMCANONGNU)
838 AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor])
839
840 if test X"$prefix" = XNONE ; then
841     usrprefix="$ac_default_prefix"
842 else
843     usrprefix=$prefix
844 fi
845
846 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
847 AC_SUBST(RPMCONFIGDIR)
848
849 AC_SUBST(OBJDUMP)
850
851 if test "$with_external_db" = no; then
852     AC_CONFIG_SUBDIRS(db3)
853 fi
854
855 AM_CONDITIONAL([WITH_INTERNAL_DB],[test "$with_external_db" = no])
856 AM_CONDITIONAL([DOXYGEN],[test "$DOXYGEN" != no])
857 AM_CONDITIONAL([HACKINGDOCS],[test "$with_hackingdocs" = yes])
858
859 AC_PATH_PROG(AUTOM4TE,autom4te,:)
860
861 AC_SUBST([dirstamp],[\${am__leading_dot}dirstamp])
862
863 AC_CONFIG_FILES([Makefile
864         rpmio/Makefile lib/Makefile build/Makefile
865         po/Makefile.in scripts/Makefile fileattrs/Makefile
866         misc/Makefile 
867         doc/Makefile
868         python/Makefile
869         luaext/Makefile
870         tests/Makefile
871         plugins/Makefile
872   ])
873 AC_OUTPUT