1 dnl configure.in for RPM
3 dnl Don't add checks for things we can't work around, unless those checks
4 dnl failing causes the script to bomb out with a message. If we can't fix
9 AC_PREREQ(2.12) dnl Minimum Autoconf version required.
11 AM_INIT_AUTOMAKE(rpm, 4.2)
12 AM_CONFIG_HEADER(config.h)
14 dnl XXX AM_MAINTAINER_MODE
16 dnl Set of available languages.
17 ALL_LINGUAS="cs da de fi fr gl is ja ko no pl pt pt_BR ro ru sk sl sr sv tr"
20 ****************************************************************************
22 * *** WARNING WARNING WARNING *** *
24 * This is source code from the development branch of rpm-4.2. *
26 * If you want the "production" rpm-4.0.4 or rpm-4.1 code, then you should *
27 * either use an rpm-4.0.4 or rpm-4.1 src.rpm. Alternatively, if using a *
28 * CVS checkout, do the following: *
30 * cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel login *
31 * (no password, just carriage return) *
32 * cvs -d :pserver:anonymous@cvs.rpm.org:/cvs/devel get rpm *
35 * Here's the rpm-4_1 branch: *
38 * Here's the rpm-4_0 branch: *
41 ****************************************************************************
46 dnl Checks for programs.
53 if test "$ac_cv_prog_gcc" = yes; then
54 CFLAGS="$CFLAGS -D_GNU_SOURCE -D_REENTRANT -Wall"
59 AC_PROG_GCC_TRADITIONAL
61 dnl Does this platform require array notation to assign to a va_list?
62 dnl If cross-compiling, we assume va_list is "normal". If this breaks
63 dnl you, set ac_cv_valistisarray=true and maybe define HAVE_VA_LIST_AS_ARRAY
64 dnl also just to be sure.
65 AC_MSG_CHECKING(whether va_list assignments need array notation)
66 AC_CACHE_VAL(ac_cv_valistisarray,
67 [AC_TRY_RUN([#include <stdlib.h>
69 void foo(int i, ...) {
73 if (va_arg(ap2, int) != 123 || va_arg(ap1, int) != 123)
75 va_end(ap1); va_end(ap2);
77 int main() { foo(0, 123); return(0); }],
78 [ac_cv_valistisarray=false],
79 [ac_cv_valistisarray=true],
80 [ac_cv_valistisarray=false])])
82 if test "$ac_cv_valistisarray" = true ; then
83 AC_DEFINE(HAVE_VA_LIST_AS_ARRAY, 1,
84 [Define as 1 if your va_list type is an array])
94 export RPMUSER RPMUID RPMGROUP RPMGID
100 AC_PATH_PROG(CTAGS, ctags, /bin/true)
101 AC_PATH_PROG(CSCOPE, cscope, /bin/true)
104 dnl This now uses libtool. Put
105 dnl LDFLAGS_STATIC="-all"
106 dnl to attempt static executables using libtool. Otherwise
107 dnl LDFLAGS_STATIC=""
109 AC_MSG_CHECKING(flag used by libtool to link rpm)
110 if test X"$GCC" = Xyes ; then
112 *-*-solaris*) LDFLAGS_STATIC="-static";;
113 *-*-hpux*) LDFLAGS_STATIC="-static";;
114 *-*-sysv5uw*) LDFLAGS_STATUS="-static";; # Unixware has no shared libthread.
115 *-*-*) LDFLAGS_STATIC="-all-static";;
117 elif test X"$CC" = Xcc ; then
119 *-*-linux*) LDFLAGS_STATIC="-all-static";;
120 *-*-freebsd*) LDFLAGS_STATIC="-all-static";;
121 *-*-osf*) LDFLAGS_STATIC="";; # OSF5 has no shared pthreads libs
122 *-*-aix*) LDFLAGS_STATIC="-static";; # -Wl,-bnso doesn't seem to work...
123 *-*-hpux*) LDFLAGS_STATIC="-static";;
124 *-*-solaris*) LDFLAGS_STATIC="-static";;
125 *-*-irix*) LDFLAGS_STATIC="-static";; #should be -non_shared, but can't
126 # link because of crt1.o then.
127 *-*-ultrix*) LDFLAGS_STATIC="-all-static";; #ultrix doesn't have shared libs.
128 *-*-*) LDFLAGS_STATIC="-static"
131 Unable to guess what option to pass to $CC to generate a static
132 executable. You will need to set the LDFLAGS_STATIC macro in Makefile.inc to
133 the appropriate argument(s) if you want to build a static rpm executable.
139 # just link it dynamically
142 LDFLAGS_STATIC="${LDFLAGS} ${LDFLAGS_STATIC}" # libtool format
143 AC_MSG_RESULT($LDFLAGS_STATIC)
144 AC_SUBST(LDFLAGS_STATIC)
147 dnl look for POSIX chmod attributes
149 AC_MSG_CHECKING(POSIX chmod)
151 chmod 744 foo.chmodtest
152 chmod +X foo.chmodtest 2>/dev/null
153 a=`ls -l foo.chmodtest | awk '{print $1}'`
155 if test "$a" = "-rwxr-xr-x"; then
157 FIXPERMS=a+rX,g-w,o-w
159 AC_MSG_RESULT(no (tell your OS vendor about GNU fileutils))
165 dnl see if we have a mkdir that supports `-p'.
167 AC_PATH_PROGS(MKDIR, mkdir, mkdir)
168 AC_MSG_CHECKING(if $MKDIR supports -p)
170 $MKDIR -p conftest/a 2>/dev/null
171 if test $? = 0 ; then
172 rmdir conftest/a 2>/dev/null
173 if test $? = 0 ; then
179 rmdir conftest 2>/dev/null
180 if test $? = 0 ; then
189 if test X"$MKDIR_P" = X0 ; then
191 MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`"
196 dnl substitute this into config.h, so the C source picks it up.
198 AC_DEFINE_UNQUOTED(MKDIR_P, "${MKDIR_P}",
199 [A full path to a program, possibly with arguments, that will create a
200 directory and all necessary parent directories, ala `mkdir -p'])
205 dnl This test must precede tests of compiler characteristics like
206 dnl that for the inline keyword, since it may change the degree to
207 dnl which the compiler supports such features.
214 dnl AM_DISABLE_SHARED
217 AC_CHECK_TOOL(AR, ar, :)
220 dnl use defaults if cross-compiling, otherwise use the default path.
222 if test "$cross_compiling" = "yes"; then
225 # MYPATH="/bin:/usr/bin:/usr/local/bin:$PATH:/sbin:/usr/sbin:/usr/local/sbin:/opt/gnu/bin"
230 dnl Find some common programs
232 AC_PATH_PROG(BZIP2BIN, bzip2, /usr/bin/bzip2, $MYPATH)
233 AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH)
234 AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH)
235 AC_PATH_PROG(__CHMOD, chmod, /bin/chmod, $MYPATH)
236 AC_PATH_PROG(__CHOWN, chown, /bin/chown, $MYPATH)
237 AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH)
238 AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH)
239 AC_PATH_PROG(__FILE, file, /usr/bin/file, $MYPATH)
240 AC_PATH_PROG(__GPG, gpg, /usr/bin/gpg, $MYPATH)
241 AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH)
242 AC_PATH_PROG(GZIPBIN, gzip, /bin/gzip, $MYPATH)
243 AC_PATH_PROG(UNZIPBIN, unzip, /usr/bin/unzip, $MYPATH)
245 AC_PATH_PROG(__ID, id, /usr/bin/id, $MYPATH)
246 AC_MSG_CHECKING(checking whether id supports -u)
247 if ${__ID} -u 2>&1 > /dev/null ; then
251 dnl XXX Watchout for square brackets fed to m4.
252 __ID_U="%{__id} | %{__sed} 's/[[^=]]*=\\\\([[0-9]][[0-9]]*\\\\).*$/\\\\1/'"
257 AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH)
258 AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH)
259 AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH)
260 AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH)
261 AC_PATH_PROG(__PATCH, patch, /usr/bin/patch, $MYPATH)
262 AC_MSG_CHECKING(old version of patch)
263 PATCHVERSION=`patch --version 2>&1`
265 if test "$PATCHVERSION" = "Patch version 2.1"; then
266 AC_DEFINE(HAVE_OLDPATCH_21, 1,
267 [Define if the patch call you'll be using is 2.1 or older])
268 AC_MSG_RESULT(patch older then 2.2 found)
270 AC_MSG_RESULT(patch later then 2.2 found)
273 AC_PATH_PROG(__PERL, perl, /usr/bin/perl, $MYPATH)
274 AC_PATH_PROG(PGPBIN, pgp, /usr/bin/pgp, $MYPATH)
275 AC_PATH_PROG(__PYTHON, python, /usr/bin/python, $MYPATH)
276 AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH)
277 AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH)
278 AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH)
279 AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH)
280 AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH)
282 AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH)
283 AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH)
284 AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH)
285 AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH)
286 AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH)
292 *-*-solaris*) LIBS="$LIBS -L$l -R$l $*";;
293 *) LIBS="$LIBS -L$l $*";;
300 if test -d zlib ; then
301 WITH_ZLIB_SUBDIR=zlib
302 addlib \${top_builddir}/zlib
303 WITH_ZLIB_INCLUDE="-I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
304 INCPATH="$INCPATH -I\${top_srcdir}/${WITH_ZLIB_SUBDIR}"
305 WITH_ZLIB_LIB="\${top_builddir}/${WITH_ZLIB_SUBDIR}/libz.la"
306 AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])
308 AC_SUBST(WITH_ZLIB_SUBDIR)
309 AC_SUBST(WITH_ZLIB_INCLUDE)
310 AC_SUBST(WITH_ZLIB_LIB)
315 if test "$cross_compiling" != "yes"; then
316 dirs="$dirs /usr/local"
321 NONE|/usr) continue;;
323 if test X$localdone != X ; then continue; fi
328 AC_MSG_CHECKING(for $dir/lib in LIBS)
329 if test -d $dir/lib 2> /dev/null ; then
336 AC_MSG_CHECKING(for $dir/include in INCPATH)
337 if test -d $dir/include 2>/dev/null ; then
338 if [ "$dir" != "/usr/local" ] ; then
339 INCPATH="$INCPATH -I$dir/include"
347 AC_MSG_CHECKING(for /usr/ucblib in LIBS)
348 if test -d /usr/ucblib ; then
349 if test "$build" = "mips-sni-sysv4" ; then
350 addlib /usr/ccs/lib -lc
361 dnl Check for features
364 dnl Checks for libraries.
370 if test -d elfutils/libelf ; then
371 AC_DEFINE(HAVE_GELF_H, 1, [Define to 1 if you have the <gelf.h> header file.])
372 AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the `elf' library (-lelf).])
373 WITH_LIBELF_SUBDIR=elfutils/libelf
374 WITH_LIBELF_INCLUDE="-I\${top_srcdir}/${WITH_LIBELF_SUBDIR}"
375 WITH_LIBELF_LIB="\${top_builddir}/${WITH_LIBELF_SUBDIR}/libelf.la"
376 WITH_LIBELF_ARCHIVE="\${top_builddir}/${WITH_LIBELF_SUBDIR}/.libs/libelf.a"
378 AC_SUBST(WITH_LIBELF_SUBDIR)
379 AC_SUBST(WITH_LIBELF_INCLUDE)
380 AC_SUBST(WITH_LIBELF_LIB)
381 AC_SUBST(WITH_LIBELF_ARCHIVE)
383 WITH_LIBDWARF_SUBDIR=
384 WITH_LIBDWARF_INCLUDE=
386 WITH_LIBDWARF_ARCHIVE=
387 if test -d elfutils/libdwarf ; then
388 AC_DEFINE(HAVE_DWARF_H, 1, [Define to 1 if you have the <dwarf.h> header file.])
389 AC_DEFINE(HAVE_LIBDWARF, 1, [Define to 1 if you have the `dwarf' library (-ldwarf).])
390 WITH_LIBDWARF_SUBDIR=elfutils/libdwarf
391 WITH_LIBDWARF_INCLUDE="-I\${top_srcdir}/${WITH_LIBDWARF_SUBDIR}"
392 WITH_LIBDWARF_LIB="\${top_builddir}/${WITH_LIBDWARF_SUBDIR}/libdwarf.la"
393 WITH_LIBDWARF_ARCHIVE="\${top_builddir}/${WITH_LIBDWARF_SUBDIR}/.libs/libdwarf.a"
395 AC_SUBST(WITH_LIBDWARF_SUBDIR)
396 AC_SUBST(WITH_LIBDWARF_INCLUDE)
397 AC_SUBST(WITH_LIBDWARF_LIB)
398 AC_SUBST(WITH_LIBDWARF_ARCHIVE)
400 AC_CHECK_FUNC(setreuid, [], [
401 AC_CHECK_LIB(ucb, setreuid, [if echo $LIBS | grep -- -lucb >/dev/null ;then :; else LIBS="$LIBS -lc -lucb" USEUCB=y;fi])
404 AC_CHECK_FUNC(rand, [], [
405 AC_CHECK_LIB(rand, rand, [])
408 AC_CHECK_FUNC(getdomainname, [], [
409 AC_CHECK_LIB(nsl, getdomainname)
411 AC_CHECK_FUNC(socket, [], [
412 AC_CHECK_LIB(socket, socket)
415 AC_CHECK_HEADERS(thread.h pthread.h synch.h semaphore.h)
417 AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [
418 dnl OSF 5.0 has the the symbols prefixed with __ in libpthread.
419 AC_CHECK_LIB(pthread, __pthread_mutex_trylock, [], [
420 AC_CHECK_LIB(thread, mutex_lock)
424 AC_CHECK_HEADERS(aio.h)
425 AC_SEARCH_LIBS(aio_read, [c rt aio posix4])
427 dnl Better not use fchmod at all.
428 AC_CHECK_FUNC(fchmod)
430 AC_CHECK_FUNCS(vsnprintf snprintf)
432 dnl Temporary hack for MiNT. Some functions (writev, snprintf) are
433 dnl not in the libc but in libport (for political reasons). This check
434 dnl can hopefully be removed soon. Please use the default action
435 dnl for this macro (not LIBS=...), otherwise the check for dbopen
437 AC_CHECK_LIB(port, writev)
446 dnl Detect whether internal Berkeley DB should be built.
449 AC_ARG_WITH(db, [ --without-db do not use internal Berkeley db])
451 if test $withval = no ; then
452 dnl ------------------ without internal db
454 AC_CHECK_HEADERS(db3/db.h)
456 dnl Check for Berkeley db3 API.
457 AC_CHECK_FUNC(db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"],
458 AC_CHECK_LIB(db-3.2, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.2"],
459 AC_CHECK_LIB(db-3.1, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.1"],
460 AC_CHECK_LIB(db-3.0, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.0"],
461 AC_CHECK_LIB(db, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb"],
468 if test X"$DBLIBSRCS" = X; then
469 AC_MSG_ERROR([sorry rpm requires libdb-3.x.a (from the Berkeley db package)])
472 if test -n "$libdb3" -a -n "$libthread" ; then
473 AC_MSG_CHECKING(whether $libdb3 needs $libthread)
476 AC_TRY_LINK_FUNC(db_create, AC_MSG_RESULT(no),
477 [libdb3="$libdb3 $libthread"; AC_MSG_RESULT(yes)])
482 dnl ------------------ with internal db
483 AC_DEFINE(HAVE_DB3_DB_H, 1, [Define if you have the <db3/db.h> header file])
487 libdb3="# \$(top_builddir)/db3/libdb.la"
488 libdb3a="\$(top_builddir)/db3/libdb.a"
489 dnl INCPATH="-I\$(top_builddir)/$(WITH_DB_SUBDIR) $INCPATH"
492 AC_SUBST(WITH_DB_SUBDIR)
493 AC_SUBST(WITH_INTERNAL_DB)
495 DBLIBSRCS="$DBLIBSRCS"
496 DBLIBOBJS=`echo $DBLIBSRCS | sed -e "s/\.c/\.lo/g"`
503 for dbi in $DBLIBSRCS; do
505 db3.c) AC_DEFINE(USE_DB3, 1, [Use the Berkeley db3 API?]) ;;
506 db1.c) AC_DEFINE(USE_DB1, 1, [Use the Berkeley db1 retrofit to db3 API?]) ;;
510 dnl AmigaOS and IXEmul have a fork() dummy
513 echo "Building for AmigaOS: using vfork() instead of fork()";
514 CFLAGS="$CFLAGS -Dfork=vfork"
518 if test -z "${WITH_ZLIB_LIB}" ; then
519 for zlib in z gz ; do
520 AC_CHECK_LIB(${zlib}, gzread,
521 [LIBS="$LIBS -l${zlib}"; break],
522 [if test ${zlib} = gz; then
523 AC_MSG_ERROR([sorry rpm requires libz.a or libgz.a (from the zlib package)])
528 dnl zlib-1.0.4 has not gzseek
529 AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])])
532 AC_CHECK_LIB(bz2, bzread, [LIBS="$LIBS -lbz2"],
533 AC_CHECK_LIB(bz2, BZ2_bzread, [
536 AC_DEFINE(HAVE_BZ2_1_0, 1, [Define as 1 if you bzip2 1.0]) ],
542 dnl horrible *temporary* hack to make sure that if we found gettext() in
543 dnl -lintl that we add -lintl *back* to $LIBS.
545 if test X$gt_cv_func_gettext_libintl = Xyes ; then
549 dnl Checks for header files we can live without.
555 AC_CHECK_HEADERS(fcntl.h getopt.h grp.h memory.h netdb.h pwd.h utime.h)
557 AC_CHECK_HEADERS(sys/ipc.h sys/socket.h sys/select.h)
558 AC_CHECK_HEADERS(sys/types.h sys/stdtypes.h)
559 AC_CHECK_HEADERS(sys/mman.h sys/resource.h sys/utsname.h sys/wait.h)
561 AC_CHECK_HEADERS(netinet/in_systm.h)
562 AC_CHECK_HEADERS(machine/types.h)
563 AC_CHECK_HEADERS(mntent.h sys/mnttab.h sys/systemcfg.h)
564 AC_CHECK_HEADERS(sys/mount.h sys/mntctl.h sys/param.h sys/vmount.h)
565 AC_CHECK_HEADERS(bzlib.h libio.h zlib.h)
566 AC_CHECK_HEADERS(err.h mcheck.h)
567 AC_CHECK_HEADERS(pthread.h)
569 dnl popt w float/double needs.
570 AC_CHECK_HEADERS(float.h)
572 AC_CHECK_HEADERS(glob.h)
574 dnl statfs portability fiddles.
576 dnl We should really emulate/steal sections of the statfs and struct statfs
577 dnl checks from GNU fileutils.
579 AC_MSG_CHECKING(for struct statfs)
581 dnl this is easier than nesting AC_TRY_COMPILEs...
583 found_struct_statfs=no
585 if test X$found_struct_statfs = Xno ; then
586 dnl Solaris 2.6+ wants to use statvfs
588 #ifdef HAVE_SYS_TYPES_H
589 #include <sys/types.h>
591 #include <sys/statvfs.h> ],
592 [struct statvfs sfs;],
593 [AC_MSG_RESULT(in sys/statvfs.h)
594 AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
595 [statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
596 found_struct_statfs=yes],
600 if test X$found_struct_statfs = Xno ; then
601 dnl first try including sys/vfs.h
603 #ifdef HAVE_SYS_TYPES_H
604 #include <sys/types.h>
606 #include <sys/vfs.h> ],
607 [struct statfs sfs;],
608 [AC_MSG_RESULT(in sys/vfs.h)
609 AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
610 found_struct_statfs=yes],
614 if test X$found_struct_statfs = Xno ; then
615 dnl ...next try including sys/mount.h
617 #ifdef HAVE_SYS_TYPES_H
618 #include <sys/types.h>
620 #ifdef HAVE_SYS_PARAM_H
621 #include <sys/param.h>
623 #include <sys/mount.h> ],
624 [struct statfs sfs;],
625 [AC_MSG_RESULT(in sys/mount.h)
626 AC_DEFINE(STATFS_IN_SYS_MOUNT, 1, [statfs in <sys/mount.h> (for Digital Unix 4.0D systems)])
627 found_struct_statfs=yes],
631 if test X$found_struct_statfs = Xno ; then
632 dnl ...still no joy. Try sys/statfs.h
634 #ifdef HAVE_SYS_TYPES_H
635 #include <sys/types.h>
637 #include <sys/statfs.h> ],
638 [struct statfs sfs;],
639 [AC_MSG_RESULT(in sys/statfs.h)
640 AC_DEFINE(STATFS_IN_SYS_STATFS, 1, [statfs in <sys/statfs.h> (for Irix 6.4 systems)])
641 found_struct_statfs=yes],
645 if test X$found_struct_statfs = Xno ; then
646 dnl ...no luck. Warn the user of impending doom.
647 AC_MSG_WARN(not found)
651 dnl if we found the struct, see if it has the f_bavail member. Some OSes
652 dnl don't, including IRIX 6.5+
654 if test X$found_struct_statfs = Xyes ; then
655 AC_MSG_CHECKING(for f_bavail member in struct statfs)
657 #ifdef HAVE_SYS_TYPES_H
658 #include <sys/types.h>
660 #if STATFS_IN_SYS_STATVFS
661 # include <sys/statvfs.h>
662 typedef struct statvfs STATFS_t;
664 typedef struct statfs STATFS_t;
665 # if STATFS_IN_SYS_VFS
666 # include <sys/vfs.h>
667 # elif STATFS_IN_SYS_MOUNT
668 # include <sys/mouht.h>
669 # elif STATFS_IN_SYS_STATFS
670 # include <sys/statfs.h>
676 AC_DEFINE(STATFS_HAS_F_BAVAIL, 1, [Define if struct statfs has the f_bavail member])],
681 if test X$found_struct_statfs = Xyes ; then
683 dnl now check to see if we have the 4-argument variant of statfs()
684 dnl this pretty much requires AC_TRY_RUN
686 AC_MSG_CHECKING([if statfs() requires 4 arguments])
688 #ifdef HAVE_SYS_TYPES_H
689 #include <sys/types.h>
691 #ifdef STATFS_IN_SYS_VFS
693 #elif STATFS_IN_SYS_MOUNT
694 #include <sys/mouht.h>
695 #elif STATFS_IN_SYS_STATFS
696 #include <sys/statfs.h>
700 exit (statfs(".", &sfs, sizeof(sfs), 0));
704 AC_DEFINE(STAT_STATFS4, 1, [Define if the statfs() call takes 4 arguments])],
712 dnl look for libc features
714 AC_MSG_CHECKING(if <netdb.h> defines h_errno)
715 AC_TRY_LINK([#include <netdb.h>],printf("%d",h_errno),PROVIDES_ERRNO=yes)
716 AC_MSG_RESULT($PROVIDES_ERRNO)
717 if test $PROVIDES_ERRNO = yes; then
718 AC_DEFINE(HAVE_HERRNO, 1, [ Define as 1 if <netdb.h> defines h_errno])
721 dnl If a system doesn't have S_IFSOCK, define it as 0 which will
722 dnl make S_ISSOCK always return false (nice, eh?)
723 AC_MSG_CHECKING(if <sys/stat.h> defines S_IFSOCK)
724 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_IFSOCK),
725 HAS_S_IFSOCK=yes,HAS_S_IFSOCK=no)
726 AC_MSG_RESULT($HAS_S_IFSOCK)
727 if test $HAS_S_IFSOCK = yes; then
728 AC_DEFINE(HAVE_S_IFSOCK, 1, [Define as 1 if <sys/stat.h> defines S_IFSOCK])
731 dnl Some Unix's are missing S_ISLNK, S_ISSOCK
732 AC_MSG_CHECKING(if <sys/stat.h> defines S_ISLNK)
733 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_ISLNK(0755)),
734 HAS_S_ISLNK=yes,HAS_S_ISLNK=no)
735 AC_MSG_RESULT($HAS_S_ISLNK)
736 if test $HAS_S_ISLNK = yes; then
737 AC_DEFINE(HAVE_S_ISLNK, 1, [Define as 1 if <sys/stat.h> defines S_ISLNK])
740 AC_MSG_CHECKING(if <sys/stat.h> defines S_ISSOCK)
741 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_ISSOCK(0755)),
742 HAS_S_ISSOCK=yes,HAS_S_ISSOCK=no)
743 AC_MSG_RESULT($HAS_S_ISSOCK)
744 if test $HAS_S_ISSOCK = yes; then
745 AC_DEFINE(HAVE_S_ISSOCK, 1, [Define as 1 if <sys/stat.h> defines S_ISSOCK])
748 AC_MSG_CHECKING(if timezone is defined)
749 AC_TRY_LINK([#include <time.h>],printf("%ld", timezone),
750 HAS_TIMEZONE=yes,HAS_TIMEZONE=no)
751 AC_MSG_RESULT($HAS_TIMEZONE)
753 dnl Check for missing typedefs
757 dnl Checks for library functions.
761 dnl XXX AC_FUNC_MEMCMP
763 dnl XXX AC_TYPE_SIGNAL
764 dnl XXX AC_FUNC_STRCOLL
765 dnl XXX AC_FUNC_STRFTIME
766 dnl XXX AC_FUNC_UTIME_NULL
767 dnl XXX AC_FUNC_VFORK
768 dnl XXX AC_CHECK_FUNCS(gethostname mkdir mkfifo rmdir select uname)
770 AC_CHECK_FUNCS(basename getcwd getwd inet_aton mtrace putenv realpath setenv)
771 AC_CHECK_FUNCS(stpcpy stpncpy strcspn)
772 AC_CHECK_FUNCS(strdup strerror strtol strtoul strspn strstr)
774 AC_CHECK_FUNCS(regcomp)
779 dnl XXX Regex replacement isn't known to be needed yet.
781 dnl AC_ARG_WITH(regex, [ --with-regex use the GNU regex library ],
782 dnl [rpm_cv_regex=yes],
783 dnl [AC_CHECK_FUNCS(regcomp, rpm_cv_regex=no, rpm_cv_regex=yes)])
785 dnl if test $rpm_cv_regex = no ; then
786 dnl AC_MSG_CHECKING(whether the regexp library is broken)
788 dnl #include <unistd.h>
789 dnl #include <regex.h>
790 dnl main() { regex_t blah ; exit(regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0)); }],
791 dnl rpm_cv_regex_broken=no, rpm_cv_regex_broken=yes, rpm_cv_regex_broken=yes)
792 dnl AC_MSG_RESULT([$rpm_cv_regex_broken])
793 dnl if test $rpm_cv_regex_broken = yes ; then
794 dnl echo " --> using the included GNU regex instead." >&AC_FD_MSG
799 dnl if test $rpm_cv_regex = yes; then
800 dnl AC_DEFINE(USE_GNU_REGEX, 1)
805 dnl XXX Glob *is* broken on linux with libc5, solaris and possibly aix when
806 dnl %files gets something like
807 dnl /usr/*/locale/*/LC_MESSAGES/*.mo
808 dnl (Note: more than one asterisk in glob pattern.)
810 AC_ARG_WITH(glob, [ --with-glob use the internal GNU glob ],
812 [AC_CHECK_FUNCS(glob, rpm_cv_glob=no, rpm_cv_glob=yes)])
814 if test $rpm_cv_glob = no ; then
815 AC_CACHE_CHECK([for GNU extensions to glob], rpm_cv_glob_ext, [
822 #include <sys/stat.h>
827 exit(glob("t/*/*.8", GLOB_PERIOD, NULL, &gl) || gl.gl_pathc < 1);
829 rpm_cv_glob_ext=yes, rpm_cv_glob_ext=no, rpm_cv_glob_ext=no)
832 if test "$rpm_cv_glob_ext" = no ; then
833 echo " --> using the included GNU glob instead." >&AC_FD_MSG
838 if test "$rpm_cv_glob" = yes; then
839 AC_DEFINE(USE_GNU_GLOB, 1, [Use the included glob.c?])
844 dnl Auto-detect which python bindings should be built.
847 AC_ARG_WITH(python, [ --with-python build rpm python bindings ])
849 WITH_PYTHON_VERSION=$withval
850 if test $withval = auto ; then
852 AC_MSG_CHECKING(for python 2.2)
854 #include <python2.2/Python.h>
856 exit(strncmp("2.2", PY_VERSION, 3));
858 withval=yes, withval=no, withval=yes)
859 AC_MSG_RESULT($withval)
860 if test $withval = yes ; then
861 WITH_PYTHON_VERSION="2.2"
864 AC_MSG_CHECKING(for python 1.5.2)
866 #include <python1.5/Python.h>
868 exit(strcmp("1.5.2", PY_VERSION));
870 withval=yes, withval=no, withval=yes)
871 AC_MSG_RESULT($withval)
872 if test $withval = yes ; then
873 WITH_PYTHON_VERSION="1.5"
879 if test "$WITH_PYTHON_VERSION" != no ; then
880 WITH_PYTHON_SUBDIR=python
881 WITH_PYTHON_SUBPACKAGE=1
884 WITH_PYTHON_SUBPACKAGE=0
886 AC_SUBST(WITH_PYTHON_SUBDIR)
887 AC_SUBST(WITH_PYTHON_SUBPACKAGE)
888 AC_SUBST(WITH_PYTHON_VERSION)
890 AC_PATH_PROG(__DOXYGEN, doxygen, no, $PATH)
892 dnl Auto-detect whether doxygen generated API docs should be included.
895 AC_ARG_WITH(apidocs, [ --with-apidocs build rpm API docs ])
897 if test $withval = auto -a $__DOXYGEN != no ; then
899 elif test $withval = yes -a $__DOXYGEN = no ; then
900 AC_MSG_ERROR(--> rpm API docs needs doxygen in PATH)
903 if test $withval = yes; then
904 WITH_APIDOCS_TARGET=apidocs
909 AC_SUBST(WITH_APIDOCS_TARGET)
910 AC_SUBST(WITH_APIDOCS)
913 AC_ARG_WITH(dmalloc, [ --with-dmalloc build with dmalloc debugging support ])
914 if test $withval = yes ; then
915 AC_DEFINE(DMALLOC, 1, [Build with dmalloc support?])
916 LIBS="$LIBS -ldmalloc"
920 AC_ARG_WITH(efence, [ --with-efence build with efence debugging support ])
921 if test $withval = yes ; then
922 AC_DEFINE(EFENCE, 1, [Build with libefence support?])
923 LIBS="$LIBS -lefence"
926 AC_CHECK_FUNCS(setlocale)
928 dnl XXX Solaris <= 2.6 only permits 8 chars in password.
929 AC_CHECK_FUNCS(getpassphrase)
931 AC_CHECK_FUNC(getmntent, AC_DEFINE(HAVE_GETMNTENT, 1, [Define if you have the getmntent() function]), [
932 AC_CHECK_FUNC(mntctl, AC_DEFINE(HAVE_MNTCTL, 1, [Define as 1 if you have mntctl() (only aix?)]),[
933 AC_CHECK_FUNC(getmntinfo_r, AC_DEFINE(HAVE_GETMNTINFO_R, 1, [Define as 1 if you have getmntinfo_r() (only osf?)]), [
934 AC_CHECK_LIB(c_r, getmntinfo_r, [LIBS="$LIBS -lc_r";
935 AC_DEFINE(HAVE_GETMNTINFO_R, 1, [Define as 1 if you have getmntinfo_r() (only osf?)])], [
936 AC_DEFINE([USE_GETMNTENT], 1, [Defined if getmntent replacement is used])
937 AC_LIBOBJ(getmntent)])])])])
939 AC_CHECK_FUNC(lchown,
940 [__CHOWN_RHF="%{__chown} -Rhf"
941 __CHGRP_RHF="%{__chgrp} -Rhf"
942 AC_DEFINE(HAVE_LCHOWN, 1, [Define as 1 if you have lchown()])],
943 [__CHOWN_RHF="%{__chown} -Rf"
944 __CHGRP_RHF="%{__chgrp} -Rf"
945 dnl Does chown() follow symlinks? This should be a good enough test.
946 AC_MSG_CHECKING(whether chown() follows symlinks)
947 AC_ARG_ENABLE([broken-chown],
948 [ --enable-broken-chown this system's chown follows symbolic links],
949 result=$enableval, result=unknown)
950 if echo "$build" | egrep "(aix)|(hpux)|(linux)" > /dev/null ; then
952 elif echo "$build" | egrep "(nextstep)" > /dev/null ; then
955 if test $result = unknown; then
956 if test `${__ID} | cut -f2 -d\= | cut -f1 -d\(` = 0; then
961 if test `ls -l foo | awk '{print $3}'` != "root"; then
968 AC_MSG_CHECKING((cannot check by non-root user))
973 AC_MSG_RESULT($result)
974 if test $result = yes; then
975 AC_DEFINE(CHOWN_FOLLOWS_SYMLINK, 1, [Define as 1 if chown() follows symlinks and you don't have lchown()])
977 AC_SUBST(__CHOWN_RHF)
978 AC_SUBST(__CHGRP_RHF)
981 dnl figure out what root's primary group is
983 AC_MSG_CHECKING(root's primary group)
984 AC_TRY_RUN([#include <stdio.h>
985 #include <sys/types.h>
991 struct passwd *root = NULL;
992 struct group *roots_group = NULL;
993 FILE * tempfile = NULL;
995 root = getpwuid( (uid_t) 0 );
997 roots_group = getgrgid(root->pw_gid);
998 if (roots_group != NULL) {
999 tempfile = fopen("conftest_rootg", "w");
1000 if (tempfile != NULL) {
1001 fprintf(tempfile, "%s\n", roots_group->gr_name);
1009 }], ROOT_GROUP=`cat conftest_rootg`,
1010 ROOT_GROUP="root",ROOT_GROUP="root"
1012 AC_MSG_RESULT($ROOT_GROUP)
1013 AC_SUBST(ROOT_GROUP)
1015 if test "x$varprefix" = "x"; then
1016 # For /usr and /usr/local, we want the 'var' directory to go
1017 # in /var and /var/local respectively. For everything else,
1018 # just put the 'var' directory in prefix/var.
1021 varprefix=`echo $prefix | sed 's/usr/var/'` ;;
1023 varprefix=`echo $ac_default_prefix | sed 's/usr/var/'` ;;
1025 varprefix=$prefix/var ;;
1030 if test "x$tmpdir" = "x"; then
1031 if test -d $varprefix/tmp; then
1032 tmpdir=$varprefix/tmp
1034 if test -d /var/tmp; then
1043 if echo "$build_os" | grep sco > /dev/null; then
1044 echo "hacking things up for sco"
1045 AC_DEFINE(NEED_STRINGS_H, 1, [Define as one if we need to include <strings.h> (along with <string.h>)])
1046 AC_DEFINE(HAVE_STRUCT_MNTTAB, 1,
1047 [Define as 1 if you have "struct mnttab" (only sco?)])
1048 elif echo "$build_os" | grep sunos > /dev/null; then
1049 echo "hacking things up for sunos"
1050 CFLAGS="$CFLAGS -D__USE_FIXED_PROTOTYPES__"
1051 AC_DEFINE(NEED_STRINGS_H, 1, [Define as one if we need to include <strings.h> (along with <string.h>)])
1052 AC_DEFINE(NEED_MYREALLOC, 1, [Define as 1 if we need myrealloc])
1053 AC_LIBOBJ(myrealloc)
1057 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for build_os
1059 if echo "$build_os" | grep '.*-gnulibc1' > /dev/null ; then
1060 build_os=`echo "${build_os}" | sed 's/-gnulibc1$//'`
1062 if echo "$build_os" | grep '.*-gnu' > /dev/null ; then
1063 build_os=`echo "${build_os}" | sed 's/-gnu$//'`
1067 build_os_exact="${build_os}"
1068 build_os_major=`echo "${build_os}" | sed 's/\..*$//'`
1069 build_os_noversion=`echo "${build_os}" | sed 's/[0-9]*\..*$//'`
1072 rm -f ./find-provides
1073 if test -f ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov ; then
1074 echo "using ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov for automatic provides generation"
1075 ln -s ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov ./find-provides
1076 elif test -f ${srcdir}/autodeps/${build_os_exact}.prov ; then
1077 echo "using ${srcdir}/autodeps/${build_os_exact}.prov for automatic provides generation"
1078 ln -s ${srcdir}/autodeps/${build_os_exact}.prov ./find-provides
1079 elif test -f ${srcdir}/autodeps/${build_os_major}.prov ; then
1080 echo "using ${srcdir}/autodeps/${build_os_major}.prov for automatic provides generation"
1081 ln -s ${srcdir}/autodeps/${build_os_major}.prov ./find-provides
1082 elif test -f ${srcdir}/autodeps/${build_os_noversion}.prov ; then
1083 echo "using ${srcdir}/autodeps/${build_os_noversion}.prov for automatic provides generation"
1084 ln -s ${srcdir}/autodeps/${build_os_noversion}.prov ./find-provides
1086 echo "*** no default provides information is available for ${build_os_noversion}"
1087 ln -s ${srcdir}/autodeps/none ./find-provides
1090 rm -f ./find-requires
1091 if test -f ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req ; then
1092 echo "using ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req for automatic requires generation"
1093 ln -s ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req ./find-requires
1094 elif test -f ${srcdir}/autodeps/${build_os_exact}.req ; then
1095 echo "using ${srcdir}/autodeps/${build_os_exact}.req for automatic requires generation"
1096 ln -s ${srcdir}/autodeps/${build_os_exact}.req ./find-requires
1097 elif test -f ${srcdir}/autodeps/${build_os_major}.req ; then
1098 echo "using ${srcdir}/autodeps/${build_os_major}.req for automatic requires generation"
1099 ln -s ${srcdir}/autodeps/${build_os_major}.req ./find-requires
1100 elif test -f ${srcdir}/autodeps/${build_os_noversion}.req ; then
1101 echo "using ${srcdir}/autodeps/${build_os_noversion}.req for automatic requires generation"
1102 ln -s ${srcdir}/autodeps/${build_os_noversion}.req ./find-requires
1104 echo "*** no default requires information is available for ${build_os_noversion}"
1105 ln -s ${srcdir}/autodeps/none ./find-requires
1108 dnl Determine the canonical arch-vendor-os for the build machine
1109 case "${build_cpu}" in
1110 *86) RPMCANONARCH=i386 ;;
1111 x86_64*) RPMCANONARCH=x86_64 ;;
1112 alpha*) RPMCANONARCH=alpha ;;
1113 sparc*) RPMCANONARCH=sparc ;;
1114 ia64*) RPMCANONARCH=ia64 ;;
1115 s390*) RPMCANONARCH=s390 ;;
1116 powerpc*) RPMCANONARCH=ppc ;;
1117 armv3l*) RPMCANONARCH=armv3l ;;
1118 armv4l*) RPMCANONARCH=armv4l ;;
1119 armv4b*) RPMCANONARCH=armv4b ;;
1120 arm*) RPMCANONARCH="${build_cpu}" ;;
1121 mipsel*) RPMCANONARCH=mipsel ;;
1122 mips*) RPMCANONARCH=mips ;;
1123 m68k*) RPMCANONARCH=m68k ;;
1124 *) RPMCANONARCH=unknown ;;
1126 case "${build_os_noversion}" in
1127 mint) RPMCANONARCH=m68kmint ;;
1129 RPMCANONVENDOR="$build_vendor"
1130 case "${build_vendor}" in
1131 unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog)
1132 test -f /etc/redhat-release && RPMCANONVENDOR=redhat
1133 test -f /etc/pld-release && RPMCANONVENDOR=pld
1134 test -f /etc/mandrake-release && RPMCANONVENDOR=mandrake
1135 test -f /etc/conectiva-release && RPMCANONVENDOR=conectiva
1136 test -f /etc/lvr-release && RPMCANONVENDOR=lvr
1137 test -f /etc/yellowdog-release && RPMCANONVENDOR=yellowdog
1140 RPMCANONOS="$build_os_noversion"
1141 AC_SUBST(RPMCANONARCH)
1142 AC_SUBST(RPMCANONVENDOR)
1143 AC_SUBST(RPMCANONOS)
1145 if test X"$prefix" = XNONE ; then
1146 usrprefix="$ac_default_prefix"
1150 LOCALEDIR="`echo ${usrprefix}/share/locale`"
1151 AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR",
1152 [Full path to rpm locale directory (usually /usr/share/locale)])
1154 LIBDIR="`echo $libdir | sed 's-/lib$-/%{_lib}-'`"
1156 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
1157 AC_DEFINE_UNQUOTED(RPMCONFIGDIR, "$RPMCONFIGDIR",
1158 [Full path to rpm global configuration directory (usually /usr/lib/rpm)])
1159 AC_SUBST(RPMCONFIGDIR)
1161 SYSCONFIGDIR="`echo /etc/rpm`"
1162 AC_DEFINE_UNQUOTED(SYSCONFIGDIR, "$SYSCONFIGDIR",
1163 [Full path to rpm system configuration directory (usually /etc/rpm)])
1164 AC_SUBST(SYSCONFIGDIR)
1166 MACROFILES="${RPMCONFIGDIR}/macros:${RPMCONFIGDIR}/%{_target_platform}/macros:${SYSCONFIGDIR}/macros:${SYSCONFIGDIR}/macros.specspo:${SYSCONFIGDIR}/macros.db1:${SYSCONFIGDIR}/%{_target_platform}/macros:~/.rpmmacros"
1167 AC_DEFINE_UNQUOTED(MACROFILES, "$MACROFILES",
1168 [Colon separated paths of macro files to read.])
1169 AC_SUBST(MACROFILES)
1171 LIBRPMRC_FILENAME="${RPMCONFIGDIR}/rpmrc"
1172 AC_DEFINE_UNQUOTED(LIBRPMRC_FILENAME, "$LIBRPMRC_FILENAME",
1173 [Full path to rpmrc configuration file (usually /usr/lib/rpm/rpmrc)])
1174 AC_SUBST(LIBRPMRC_FILENAME)
1176 VENDORRPMRC_FILENAME="${RPMCONFIGDIR}/${RPMCANONVENDOR}/rpmrc"
1177 AC_DEFINE_UNQUOTED(VENDORRPMRC_FILENAME, "$VENDORRPMRC_FILENAME",
1178 [Full path to vendor rpmrc configuration file (usually /usr/lib/rpm/vendor/rpmrc)])
1179 AC_SUBST(VENDORRPMRC_FILENAME)
1181 LIBRPMALIAS_FILENAME="${RPMCONFIGDIR}/rpmpopt-${VERSION}"
1182 AC_DEFINE_UNQUOTED(LIBRPMALIAS_FILENAME, "$LIBRPMALIAS_FILENAME",
1183 [Full path to rpmpopt configuration file (usually /usr/lib/rpm/rpmpopt)])
1184 AC_SUBST(LIBRPMALIAS_FILENAME)
1185 FINDREQUIRES="${RPMCONFIGDIR}/find-requires"
1186 AC_DEFINE_UNQUOTED(FINDREQUIRES, "$FINDREQUIRES",
1187 [Full path to find-requires script (usually /usr/lib/rpm/find-requires)])
1188 AC_SUBST(FINDREQUIRES)
1189 FINDPROVIDES="${RPMCONFIGDIR}/find-provides"
1190 AC_DEFINE_UNQUOTED(FINDPROVIDES, "$FINDPROVIDES",
1191 [Full path to find-provides script (usually /usr/lib/rpm/find-provides)])
1192 AC_SUBST(FINDPROVIDES)
1194 testdir="`pwd`/tests"
1195 dnl AC_DEFINE_UNQUOTED(testdir, "$testdir")
1205 dnl XXX this causes popt to depend on zlib et al
1206 dnl # XXX Propagate -lucb to popt ...
1207 dnl export LIBS INCPATH CONFIG_SITE
1209 AC_CONFIG_SUBDIRS(popt beecrypt zlib elfutils file db3)
1211 AC_OUTPUT([ Doxyfile Makefile rpmrc macros platform rpmpopt rpm.spec
1212 rpmio/Makefile rpmdb/Makefile lib/Makefile build/Makefile
1213 scripts/Makefile scripts/brp-redhat
1214 scripts/macros.perl scripts/macros.php scripts/macros.python
1216 tests/Makefile tests/rpmrc tests/macros tests/hello-test/Makefile
1217 misc/Makefile intl/Makefile po/Makefile.in
1227 python/rpmdb/Makefile
1228 python/test/Makefile
1229 ], [ echo timestamp > popt/stamp-h.in
1230 echo timestamp > beecrypt/stamp-h.in
1231 echo timestamp > stamp-h.in