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_LIBELF_GELF_H, 1, [Define to 1 if you have the <libelf/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 AC_CHECK_FUNC(setreuid, [], [
384 AC_CHECK_LIB(ucb, setreuid, [if echo $LIBS | grep -- -lucb >/dev/null ;then :; else LIBS="$LIBS -lc -lucb" USEUCB=y;fi])
387 AC_CHECK_FUNC(rand, [], [
388 AC_CHECK_LIB(rand, rand, [])
391 AC_CHECK_FUNC(getdomainname, [], [
392 AC_CHECK_LIB(nsl, getdomainname)
394 AC_CHECK_FUNC(socket, [], [
395 AC_CHECK_LIB(socket, socket)
398 AC_CHECK_HEADERS(thread.h pthread.h synch.h semaphore.h)
400 AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [
401 dnl OSF 5.0 has the the symbols prefixed with __ in libpthread.
402 AC_CHECK_LIB(pthread, __pthread_mutex_trylock, [], [
403 AC_CHECK_LIB(thread, mutex_lock)
407 AC_CHECK_HEADERS(aio.h)
408 AC_SEARCH_LIBS(aio_read, [c rt aio posix4])
410 dnl Better not use fchmod at all.
411 AC_CHECK_FUNC(fchmod)
413 AC_CHECK_FUNCS(vsnprintf snprintf)
415 dnl Temporary hack for MiNT. Some functions (writev, snprintf) are
416 dnl not in the libc but in libport (for political reasons). This check
417 dnl can hopefully be removed soon. Please use the default action
418 dnl for this macro (not LIBS=...), otherwise the check for dbopen
420 AC_CHECK_LIB(port, writev)
429 dnl Detect whether internal Berkeley DB should be built.
432 AC_ARG_WITH(db, [ --without-db do not use internal Berkeley db])
434 if test $withval = no ; then
435 dnl ------------------ without internal db
437 AC_CHECK_HEADERS(db3/db.h)
439 dnl Check for Berkeley db3 API.
440 AC_CHECK_FUNC(db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"],
441 AC_CHECK_LIB(db-3.2, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.2"],
442 AC_CHECK_LIB(db-3.1, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.1"],
443 AC_CHECK_LIB(db-3.0, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.0"],
444 AC_CHECK_LIB(db, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb"],
451 if test X"$DBLIBSRCS" = X; then
452 AC_MSG_ERROR([sorry rpm requires libdb-3.x.a (from the Berkeley db package)])
455 if test -n "$libdb3" -a -n "$libthread" ; then
456 AC_MSG_CHECKING(whether $libdb3 needs $libthread)
459 AC_TRY_LINK_FUNC(db_create, AC_MSG_RESULT(no),
460 [libdb3="$libdb3 $libthread"; AC_MSG_RESULT(yes)])
465 dnl ------------------ with internal db
466 AC_DEFINE(HAVE_DB3_DB_H, 1, [Define if you have the <db3/db.h> header file])
470 libdb3="# \$(top_builddir)/db3/libdb.la"
471 libdb3a="\$(top_builddir)/db3/libdb.a"
472 dnl INCPATH="-I\$(top_builddir)/$(WITH_DB_SUBDIR) $INCPATH"
475 AC_SUBST(WITH_DB_SUBDIR)
476 AC_SUBST(WITH_INTERNAL_DB)
478 DBLIBSRCS="$DBLIBSRCS"
479 DBLIBOBJS=`echo $DBLIBSRCS | sed -e "s/\.c/\.lo/g"`
486 for dbi in $DBLIBSRCS; do
488 db3.c) AC_DEFINE(USE_DB3, 1, [Use the Berkeley db3 API?]) ;;
489 db1.c) AC_DEFINE(USE_DB1, 1, [Use the Berkeley db1 retrofit to db3 API?]) ;;
493 dnl AmigaOS and IXEmul have a fork() dummy
496 echo "Building for AmigaOS: using vfork() instead of fork()";
497 CFLAGS="$CFLAGS -Dfork=vfork"
501 if test -z "${WITH_ZLIB_LIB}" ; then
502 for zlib in z gz ; do
503 AC_CHECK_LIB(${zlib}, gzread,
504 [LIBS="$LIBS -l${zlib}"; break],
505 [if test ${zlib} = gz; then
506 AC_MSG_ERROR([sorry rpm requires libz.a or libgz.a (from the zlib package)])
511 dnl zlib-1.0.4 has not gzseek
512 AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])])
515 AC_CHECK_LIB(bz2, bzread, [LIBS="$LIBS -lbz2"],
516 AC_CHECK_LIB(bz2, BZ2_bzread, [
519 AC_DEFINE(HAVE_BZ2_1_0, 1, [Define as 1 if you bzip2 1.0]) ],
525 dnl horrible *temporary* hack to make sure that if we found gettext() in
526 dnl -lintl that we add -lintl *back* to $LIBS.
528 if test X$gt_cv_func_gettext_libintl = Xyes ; then
532 dnl Checks for header files we can live without.
538 AC_CHECK_HEADERS(fcntl.h getopt.h grp.h memory.h netdb.h pwd.h utime.h)
540 AC_CHECK_HEADERS(sys/ipc.h sys/socket.h sys/select.h)
541 AC_CHECK_HEADERS(sys/types.h sys/stdtypes.h)
542 AC_CHECK_HEADERS(sys/mman.h sys/resource.h sys/utsname.h sys/wait.h)
544 AC_CHECK_HEADERS(netinet/in_systm.h)
545 AC_CHECK_HEADERS(machine/types.h)
546 AC_CHECK_HEADERS(mntent.h sys/mnttab.h sys/systemcfg.h)
547 AC_CHECK_HEADERS(sys/mount.h sys/mntctl.h sys/param.h sys/vmount.h)
548 AC_CHECK_HEADERS(bzlib.h libio.h zlib.h)
549 AC_CHECK_HEADERS(err.h mcheck.h)
550 AC_CHECK_HEADERS(pthread.h)
552 dnl popt w float/double needs.
553 AC_CHECK_HEADERS(float.h)
555 AC_CHECK_HEADERS(glob.h)
557 dnl statfs portability fiddles.
559 dnl We should really emulate/steal sections of the statfs and struct statfs
560 dnl checks from GNU fileutils.
562 AC_MSG_CHECKING(for struct statfs)
564 dnl this is easier than nesting AC_TRY_COMPILEs...
566 found_struct_statfs=no
568 if test X$found_struct_statfs = Xno ; then
569 dnl Solaris 2.6+ wants to use statvfs
571 #ifdef HAVE_SYS_TYPES_H
572 #include <sys/types.h>
574 #include <sys/statvfs.h> ],
575 [struct statvfs sfs;],
576 [AC_MSG_RESULT(in sys/statvfs.h)
577 AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
578 [statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
579 found_struct_statfs=yes],
583 if test X$found_struct_statfs = Xno ; then
584 dnl first try including sys/vfs.h
586 #ifdef HAVE_SYS_TYPES_H
587 #include <sys/types.h>
589 #include <sys/vfs.h> ],
590 [struct statfs sfs;],
591 [AC_MSG_RESULT(in sys/vfs.h)
592 AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
593 found_struct_statfs=yes],
597 if test X$found_struct_statfs = Xno ; then
598 dnl ...next try including sys/mount.h
600 #ifdef HAVE_SYS_TYPES_H
601 #include <sys/types.h>
603 #ifdef HAVE_SYS_PARAM_H
604 #include <sys/param.h>
606 #include <sys/mount.h> ],
607 [struct statfs sfs;],
608 [AC_MSG_RESULT(in sys/mount.h)
609 AC_DEFINE(STATFS_IN_SYS_MOUNT, 1, [statfs in <sys/mount.h> (for Digital Unix 4.0D systems)])
610 found_struct_statfs=yes],
614 if test X$found_struct_statfs = Xno ; then
615 dnl ...still no joy. Try sys/statfs.h
617 #ifdef HAVE_SYS_TYPES_H
618 #include <sys/types.h>
620 #include <sys/statfs.h> ],
621 [struct statfs sfs;],
622 [AC_MSG_RESULT(in sys/statfs.h)
623 AC_DEFINE(STATFS_IN_SYS_STATFS, 1, [statfs in <sys/statfs.h> (for Irix 6.4 systems)])
624 found_struct_statfs=yes],
628 if test X$found_struct_statfs = Xno ; then
629 dnl ...no luck. Warn the user of impending doom.
630 AC_MSG_WARN(not found)
634 dnl if we found the struct, see if it has the f_bavail member. Some OSes
635 dnl don't, including IRIX 6.5+
637 if test X$found_struct_statfs = Xyes ; then
638 AC_MSG_CHECKING(for f_bavail member in struct statfs)
640 #ifdef HAVE_SYS_TYPES_H
641 #include <sys/types.h>
643 #if STATFS_IN_SYS_STATVFS
644 # include <sys/statvfs.h>
645 typedef struct statvfs STATFS_t;
647 typedef struct statfs STATFS_t;
648 # if STATFS_IN_SYS_VFS
649 # include <sys/vfs.h>
650 # elif STATFS_IN_SYS_MOUNT
651 # include <sys/mouht.h>
652 # elif STATFS_IN_SYS_STATFS
653 # include <sys/statfs.h>
659 AC_DEFINE(STATFS_HAS_F_BAVAIL, 1, [Define if struct statfs has the f_bavail member])],
664 if test X$found_struct_statfs = Xyes ; then
666 dnl now check to see if we have the 4-argument variant of statfs()
667 dnl this pretty much requires AC_TRY_RUN
669 AC_MSG_CHECKING([if statfs() requires 4 arguments])
671 #ifdef HAVE_SYS_TYPES_H
672 #include <sys/types.h>
674 #ifdef STATFS_IN_SYS_VFS
676 #elif STATFS_IN_SYS_MOUNT
677 #include <sys/mouht.h>
678 #elif STATFS_IN_SYS_STATFS
679 #include <sys/statfs.h>
683 exit (statfs(".", &sfs, sizeof(sfs), 0));
687 AC_DEFINE(STAT_STATFS4, 1, [Define if the statfs() call takes 4 arguments])],
695 dnl look for libc features
697 AC_MSG_CHECKING(if <netdb.h> defines h_errno)
698 AC_TRY_LINK([#include <netdb.h>],printf("%d",h_errno),PROVIDES_ERRNO=yes)
699 AC_MSG_RESULT($PROVIDES_ERRNO)
700 if test $PROVIDES_ERRNO = yes; then
701 AC_DEFINE(HAVE_HERRNO, 1, [ Define as 1 if <netdb.h> defines h_errno])
704 dnl If a system doesn't have S_IFSOCK, define it as 0 which will
705 dnl make S_ISSOCK always return false (nice, eh?)
706 AC_MSG_CHECKING(if <sys/stat.h> defines S_IFSOCK)
707 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_IFSOCK),
708 HAS_S_IFSOCK=yes,HAS_S_IFSOCK=no)
709 AC_MSG_RESULT($HAS_S_IFSOCK)
710 if test $HAS_S_IFSOCK = yes; then
711 AC_DEFINE(HAVE_S_IFSOCK, 1, [Define as 1 if <sys/stat.h> defines S_IFSOCK])
714 dnl Some Unix's are missing S_ISLNK, S_ISSOCK
715 AC_MSG_CHECKING(if <sys/stat.h> defines S_ISLNK)
716 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_ISLNK(0755)),
717 HAS_S_ISLNK=yes,HAS_S_ISLNK=no)
718 AC_MSG_RESULT($HAS_S_ISLNK)
719 if test $HAS_S_ISLNK = yes; then
720 AC_DEFINE(HAVE_S_ISLNK, 1, [Define as 1 if <sys/stat.h> defines S_ISLNK])
723 AC_MSG_CHECKING(if <sys/stat.h> defines S_ISSOCK)
724 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_ISSOCK(0755)),
725 HAS_S_ISSOCK=yes,HAS_S_ISSOCK=no)
726 AC_MSG_RESULT($HAS_S_ISSOCK)
727 if test $HAS_S_ISSOCK = yes; then
728 AC_DEFINE(HAVE_S_ISSOCK, 1, [Define as 1 if <sys/stat.h> defines S_ISSOCK])
731 AC_MSG_CHECKING(if timezone is defined)
732 AC_TRY_LINK([#include <time.h>],printf("%ld", timezone),
733 HAS_TIMEZONE=yes,HAS_TIMEZONE=no)
734 AC_MSG_RESULT($HAS_TIMEZONE)
736 dnl Check for missing typedefs
740 dnl Checks for library functions.
744 dnl XXX AC_FUNC_MEMCMP
746 dnl XXX AC_TYPE_SIGNAL
747 dnl XXX AC_FUNC_STRCOLL
748 dnl XXX AC_FUNC_STRFTIME
749 dnl XXX AC_FUNC_UTIME_NULL
750 dnl XXX AC_FUNC_VFORK
751 dnl XXX AC_CHECK_FUNCS(gethostname mkdir mkfifo rmdir select uname)
753 AC_CHECK_FUNCS(basename getcwd getwd inet_aton mtrace putenv realpath setenv)
754 AC_CHECK_FUNCS(stpcpy stpncpy strcspn)
755 AC_CHECK_FUNCS(strdup strerror strtol strtoul strspn strstr)
757 AC_CHECK_FUNCS(regcomp)
762 dnl XXX Regex replacement isn't known to be needed yet.
764 dnl AC_ARG_WITH(regex, [ --with-regex use the GNU regex library ],
765 dnl [rpm_cv_regex=yes],
766 dnl [AC_CHECK_FUNCS(regcomp, rpm_cv_regex=no, rpm_cv_regex=yes)])
768 dnl if test $rpm_cv_regex = no ; then
769 dnl AC_MSG_CHECKING(whether the regexp library is broken)
771 dnl #include <unistd.h>
772 dnl #include <regex.h>
773 dnl main() { regex_t blah ; exit(regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0)); }],
774 dnl rpm_cv_regex_broken=no, rpm_cv_regex_broken=yes, rpm_cv_regex_broken=yes)
775 dnl AC_MSG_RESULT([$rpm_cv_regex_broken])
776 dnl if test $rpm_cv_regex_broken = yes ; then
777 dnl echo " --> using the included GNU regex instead." >&AC_FD_MSG
782 dnl if test $rpm_cv_regex = yes; then
783 dnl AC_DEFINE(USE_GNU_REGEX, 1)
788 dnl XXX Glob *is* broken on linux with libc5, solaris and possibly aix when
789 dnl %files gets something like
790 dnl /usr/*/locale/*/LC_MESSAGES/*.mo
791 dnl (Note: more than one asterisk in glob pattern.)
793 AC_ARG_WITH(glob, [ --with-glob use the internal GNU glob ],
795 [AC_CHECK_FUNCS(glob, rpm_cv_glob=no, rpm_cv_glob=yes)])
797 if test $rpm_cv_glob = no ; then
798 AC_CACHE_CHECK([for GNU extensions to glob], rpm_cv_glob_ext, [
805 #include <sys/stat.h>
810 exit(glob("t/*/*.8", GLOB_PERIOD, NULL, &gl) || gl.gl_pathc < 1);
812 rpm_cv_glob_ext=yes, rpm_cv_glob_ext=no, rpm_cv_glob_ext=no)
815 if test "$rpm_cv_glob_ext" = no ; then
816 echo " --> using the included GNU glob instead." >&AC_FD_MSG
821 if test "$rpm_cv_glob" = yes; then
822 AC_DEFINE(USE_GNU_GLOB, 1, [Use the included glob.c?])
827 dnl Auto-detect which python bindings should be built.
830 AC_ARG_WITH(python, [ --with-python build rpm python bindings ])
832 WITH_PYTHON_VERSION=$withval
833 if test $withval = auto ; then
835 AC_MSG_CHECKING(for python 2.2)
837 #include <python2.2/Python.h>
839 exit(strncmp("2.2", PY_VERSION, 3));
841 withval=yes, withval=no, withval=yes)
842 AC_MSG_RESULT($withval)
843 if test $withval = yes ; then
844 WITH_PYTHON_VERSION="2.2"
847 AC_MSG_CHECKING(for python 1.5.2)
849 #include <python1.5/Python.h>
851 exit(strcmp("1.5.2", PY_VERSION));
853 withval=yes, withval=no, withval=yes)
854 AC_MSG_RESULT($withval)
855 if test $withval = yes ; then
856 WITH_PYTHON_VERSION="1.5"
862 if test "$WITH_PYTHON_VERSION" != no ; then
863 WITH_PYTHON_SUBDIR=python
864 WITH_PYTHON_SUBPACKAGE=1
867 WITH_PYTHON_SUBPACKAGE=0
869 AC_SUBST(WITH_PYTHON_SUBDIR)
870 AC_SUBST(WITH_PYTHON_SUBPACKAGE)
871 AC_SUBST(WITH_PYTHON_VERSION)
873 AC_PATH_PROG(__DOXYGEN, doxygen, no, $PATH)
875 dnl Auto-detect whether doxygen generated API docs should be included.
878 AC_ARG_WITH(apidocs, [ --with-apidocs build rpm API docs ])
880 if test $withval = auto -a $__DOXYGEN != no ; then
882 elif test $withval = yes -a $__DOXYGEN = no ; then
883 AC_MSG_ERROR(--> rpm API docs needs doxygen in PATH)
886 if test $withval = yes; then
887 WITH_APIDOCS_TARGET=apidocs
892 AC_SUBST(WITH_APIDOCS_TARGET)
893 AC_SUBST(WITH_APIDOCS)
896 AC_ARG_WITH(dmalloc, [ --with-dmalloc build with dmalloc debugging support ])
897 if test $withval = yes ; then
898 AC_DEFINE(DMALLOC, 1, [Build with dmalloc support?])
899 LIBS="$LIBS -ldmalloc"
903 AC_ARG_WITH(efence, [ --with-efence build with efence debugging support ])
904 if test $withval = yes ; then
905 AC_DEFINE(EFENCE, 1, [Build with libefence support?])
906 LIBS="$LIBS -lefence"
909 AC_CHECK_FUNCS(setlocale)
911 dnl XXX Solaris <= 2.6 only permits 8 chars in password.
912 AC_CHECK_FUNCS(getpassphrase)
914 AC_CHECK_FUNC(getmntent, AC_DEFINE(HAVE_GETMNTENT, 1, [Define if you have the getmntent() function]), [
915 AC_CHECK_FUNC(mntctl, AC_DEFINE(HAVE_MNTCTL, 1, [Define as 1 if you have mntctl() (only aix?)]),[
916 AC_CHECK_FUNC(getmntinfo_r, AC_DEFINE(HAVE_GETMNTINFO_R, 1, [Define as 1 if you have getmntinfo_r() (only osf?)]), [
917 AC_CHECK_LIB(c_r, getmntinfo_r, [LIBS="$LIBS -lc_r";
918 AC_DEFINE(HAVE_GETMNTINFO_R, 1, [Define as 1 if you have getmntinfo_r() (only osf?)])], [
919 AC_DEFINE([USE_GETMNTENT], 1, [Defined if getmntent replacement is used])
920 AC_LIBOBJ(getmntent)])])])])
922 AC_CHECK_FUNC(lchown,
923 [__CHOWN_RHF="%{__chown} -Rhf"
924 __CHGRP_RHF="%{__chgrp} -Rhf"
925 AC_DEFINE(HAVE_LCHOWN, 1, [Define as 1 if you have lchown()])],
926 [__CHOWN_RHF="%{__chown} -Rf"
927 __CHGRP_RHF="%{__chgrp} -Rf"
928 dnl Does chown() follow symlinks? This should be a good enough test.
929 AC_MSG_CHECKING(whether chown() follows symlinks)
930 AC_ARG_ENABLE([broken-chown],
931 [ --enable-broken-chown this system's chown follows symbolic links],
932 result=$enableval, result=unknown)
933 if echo "$build" | egrep "(aix)|(hpux)|(linux)" > /dev/null ; then
935 elif echo "$build" | egrep "(nextstep)" > /dev/null ; then
938 if test $result = unknown; then
939 if test `${__ID} | cut -f2 -d\= | cut -f1 -d\(` = 0; then
944 if test `ls -l foo | awk '{print $3}'` != "root"; then
951 AC_MSG_CHECKING((cannot check by non-root user))
956 AC_MSG_RESULT($result)
957 if test $result = yes; then
958 AC_DEFINE(CHOWN_FOLLOWS_SYMLINK, 1, [Define as 1 if chown() follows symlinks and you don't have lchown()])
960 AC_SUBST(__CHOWN_RHF)
961 AC_SUBST(__CHGRP_RHF)
964 dnl figure out what root's primary group is
966 AC_MSG_CHECKING(root's primary group)
967 AC_TRY_RUN([#include <stdio.h>
968 #include <sys/types.h>
974 struct passwd *root = NULL;
975 struct group *roots_group = NULL;
976 FILE * tempfile = NULL;
978 root = getpwuid( (uid_t) 0 );
980 roots_group = getgrgid(root->pw_gid);
981 if (roots_group != NULL) {
982 tempfile = fopen("conftest_rootg", "w");
983 if (tempfile != NULL) {
984 fprintf(tempfile, "%s\n", roots_group->gr_name);
992 }], ROOT_GROUP=`cat conftest_rootg`,
993 ROOT_GROUP="root",ROOT_GROUP="root"
995 AC_MSG_RESULT($ROOT_GROUP)
998 if test "x$varprefix" = "x"; then
999 # For /usr and /usr/local, we want the 'var' directory to go
1000 # in /var and /var/local respectively. For everything else,
1001 # just put the 'var' directory in prefix/var.
1004 varprefix=`echo $prefix | sed 's/usr/var/'` ;;
1006 varprefix=`echo $ac_default_prefix | sed 's/usr/var/'` ;;
1008 varprefix=$prefix/var ;;
1013 if test "x$tmpdir" = "x"; then
1014 if test -d $varprefix/tmp; then
1015 tmpdir=$varprefix/tmp
1017 if test -d /var/tmp; then
1026 if echo "$build_os" | grep sco > /dev/null; then
1027 echo "hacking things up for sco"
1028 AC_DEFINE(NEED_STRINGS_H, 1, [Define as one if we need to include <strings.h> (along with <string.h>)])
1029 AC_DEFINE(HAVE_STRUCT_MNTTAB, 1,
1030 [Define as 1 if you have "struct mnttab" (only sco?)])
1031 elif echo "$build_os" | grep sunos > /dev/null; then
1032 echo "hacking things up for sunos"
1033 CFLAGS="$CFLAGS -D__USE_FIXED_PROTOTYPES__"
1034 AC_DEFINE(NEED_STRINGS_H, 1, [Define as one if we need to include <strings.h> (along with <string.h>)])
1035 AC_DEFINE(NEED_MYREALLOC, 1, [Define as 1 if we need myrealloc])
1036 AC_LIBOBJ(myrealloc)
1040 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for build_os
1042 if echo "$build_os" | grep '.*-gnulibc1' > /dev/null ; then
1043 build_os=`echo "${build_os}" | sed 's/-gnulibc1$//'`
1045 if echo "$build_os" | grep '.*-gnu' > /dev/null ; then
1046 build_os=`echo "${build_os}" | sed 's/-gnu$//'`
1050 build_os_exact="${build_os}"
1051 build_os_major=`echo "${build_os}" | sed 's/\..*$//'`
1052 build_os_noversion=`echo "${build_os}" | sed 's/[0-9]*\..*$//'`
1055 rm -f ./find-provides
1056 if test -f ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov ; then
1057 echo "using ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov for automatic provides generation"
1058 ln -s ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov ./find-provides
1059 elif test -f ${srcdir}/autodeps/${build_os_exact}.prov ; then
1060 echo "using ${srcdir}/autodeps/${build_os_exact}.prov for automatic provides generation"
1061 ln -s ${srcdir}/autodeps/${build_os_exact}.prov ./find-provides
1062 elif test -f ${srcdir}/autodeps/${build_os_major}.prov ; then
1063 echo "using ${srcdir}/autodeps/${build_os_major}.prov for automatic provides generation"
1064 ln -s ${srcdir}/autodeps/${build_os_major}.prov ./find-provides
1065 elif test -f ${srcdir}/autodeps/${build_os_noversion}.prov ; then
1066 echo "using ${srcdir}/autodeps/${build_os_noversion}.prov for automatic provides generation"
1067 ln -s ${srcdir}/autodeps/${build_os_noversion}.prov ./find-provides
1069 echo "*** no default provides information is available for ${build_os_noversion}"
1070 ln -s ${srcdir}/autodeps/none ./find-provides
1073 rm -f ./find-requires
1074 if test -f ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req ; then
1075 echo "using ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req for automatic requires generation"
1076 ln -s ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req ./find-requires
1077 elif test -f ${srcdir}/autodeps/${build_os_exact}.req ; then
1078 echo "using ${srcdir}/autodeps/${build_os_exact}.req for automatic requires generation"
1079 ln -s ${srcdir}/autodeps/${build_os_exact}.req ./find-requires
1080 elif test -f ${srcdir}/autodeps/${build_os_major}.req ; then
1081 echo "using ${srcdir}/autodeps/${build_os_major}.req for automatic requires generation"
1082 ln -s ${srcdir}/autodeps/${build_os_major}.req ./find-requires
1083 elif test -f ${srcdir}/autodeps/${build_os_noversion}.req ; then
1084 echo "using ${srcdir}/autodeps/${build_os_noversion}.req for automatic requires generation"
1085 ln -s ${srcdir}/autodeps/${build_os_noversion}.req ./find-requires
1087 echo "*** no default requires information is available for ${build_os_noversion}"
1088 ln -s ${srcdir}/autodeps/none ./find-requires
1091 dnl Determine the canonical arch-vendor-os for the build machine
1092 case "${build_cpu}" in
1093 *86) RPMCANONARCH=i386 ;;
1094 x86_64*) RPMCANONARCH=x86_64 ;;
1095 alpha*) RPMCANONARCH=alpha ;;
1096 sparc*) RPMCANONARCH=sparc ;;
1097 ia64*) RPMCANONARCH=ia64 ;;
1098 s390*) RPMCANONARCH=s390 ;;
1099 powerpc*) RPMCANONARCH=ppc ;;
1100 armv3l*) RPMCANONARCH=armv3l ;;
1101 armv4l*) RPMCANONARCH=armv4l ;;
1102 armv4b*) RPMCANONARCH=armv4b ;;
1103 arm*) RPMCANONARCH="${build_cpu}" ;;
1104 mipsel*) RPMCANONARCH=mipsel ;;
1105 mips*) RPMCANONARCH=mips ;;
1106 m68k*) RPMCANONARCH=m68k ;;
1107 *) RPMCANONARCH=unknown ;;
1109 case "${build_os_noversion}" in
1110 mint) RPMCANONARCH=m68kmint ;;
1112 RPMCANONVENDOR="$build_vendor"
1113 case "${build_vendor}" in
1114 unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog)
1115 test -f /etc/redhat-release && RPMCANONVENDOR=redhat
1116 test -f /etc/pld-release && RPMCANONVENDOR=pld
1117 test -f /etc/mandrake-release && RPMCANONVENDOR=mandrake
1118 test -f /etc/conectiva-release && RPMCANONVENDOR=conectiva
1119 test -f /etc/lvr-release && RPMCANONVENDOR=lvr
1120 test -f /etc/yellowdog-release && RPMCANONVENDOR=yellowdog
1123 RPMCANONOS="$build_os_noversion"
1124 AC_SUBST(RPMCANONARCH)
1125 AC_SUBST(RPMCANONVENDOR)
1126 AC_SUBST(RPMCANONOS)
1128 if test X"$prefix" = XNONE ; then
1129 usrprefix="$ac_default_prefix"
1133 LOCALEDIR="`echo ${usrprefix}/share/locale`"
1134 AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR",
1135 [Full path to rpm locale directory (usually /usr/share/locale)])
1137 LIBDIR="`echo $libdir | sed 's-/lib$-/%{_lib}-'`"
1139 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
1140 AC_DEFINE_UNQUOTED(RPMCONFIGDIR, "$RPMCONFIGDIR",
1141 [Full path to rpm global configuration directory (usually /usr/lib/rpm)])
1142 AC_SUBST(RPMCONFIGDIR)
1144 SYSCONFIGDIR="`echo /etc/rpm`"
1145 AC_DEFINE_UNQUOTED(SYSCONFIGDIR, "$SYSCONFIGDIR",
1146 [Full path to rpm system configuration directory (usually /etc/rpm)])
1147 AC_SUBST(SYSCONFIGDIR)
1149 MACROFILES="${RPMCONFIGDIR}/macros:${RPMCONFIGDIR}/%{_target_platform}/macros:${SYSCONFIGDIR}/macros:${SYSCONFIGDIR}/macros.specspo:${SYSCONFIGDIR}/macros.db1:${SYSCONFIGDIR}/%{_target_platform}/macros:~/.rpmmacros"
1150 AC_DEFINE_UNQUOTED(MACROFILES, "$MACROFILES",
1151 [Colon separated paths of macro files to read.])
1152 AC_SUBST(MACROFILES)
1154 LIBRPMRC_FILENAME="${RPMCONFIGDIR}/rpmrc"
1155 AC_DEFINE_UNQUOTED(LIBRPMRC_FILENAME, "$LIBRPMRC_FILENAME",
1156 [Full path to rpmrc configuration file (usually /usr/lib/rpm/rpmrc)])
1157 AC_SUBST(LIBRPMRC_FILENAME)
1159 VENDORRPMRC_FILENAME="${RPMCONFIGDIR}/${RPMCANONVENDOR}/rpmrc"
1160 AC_DEFINE_UNQUOTED(VENDORRPMRC_FILENAME, "$VENDORRPMRC_FILENAME",
1161 [Full path to vendor rpmrc configuration file (usually /usr/lib/rpm/vendor/rpmrc)])
1162 AC_SUBST(VENDORRPMRC_FILENAME)
1164 LIBRPMALIAS_FILENAME="${RPMCONFIGDIR}/rpmpopt-${VERSION}"
1165 AC_DEFINE_UNQUOTED(LIBRPMALIAS_FILENAME, "$LIBRPMALIAS_FILENAME",
1166 [Full path to rpmpopt configuration file (usually /usr/lib/rpm/rpmpopt)])
1167 AC_SUBST(LIBRPMALIAS_FILENAME)
1168 FINDREQUIRES="${RPMCONFIGDIR}/find-requires"
1169 AC_DEFINE_UNQUOTED(FINDREQUIRES, "$FINDREQUIRES",
1170 [Full path to find-requires script (usually /usr/lib/rpm/find-requires)])
1171 AC_SUBST(FINDREQUIRES)
1172 FINDPROVIDES="${RPMCONFIGDIR}/find-provides"
1173 AC_DEFINE_UNQUOTED(FINDPROVIDES, "$FINDPROVIDES",
1174 [Full path to find-provides script (usually /usr/lib/rpm/find-provides)])
1175 AC_SUBST(FINDPROVIDES)
1177 testdir="`pwd`/tests"
1178 dnl AC_DEFINE_UNQUOTED(testdir, "$testdir")
1188 dnl XXX this causes popt to depend on zlib et al
1189 dnl # XXX Propagate -lucb to popt ...
1190 dnl export LIBS INCPATH CONFIG_SITE
1192 AC_CONFIG_SUBDIRS(popt beecrypt zlib elfutils file db3)
1194 AC_OUTPUT([ Doxyfile Makefile rpmrc macros platform rpmpopt rpm.spec
1195 rpmio/Makefile rpmdb/Makefile lib/Makefile build/Makefile
1196 scripts/Makefile scripts/brp-redhat
1197 scripts/macros.perl scripts/macros.php scripts/macros.python
1199 tests/Makefile tests/rpmrc tests/macros tests/hello-test/Makefile
1200 misc/Makefile intl/Makefile po/Makefile.in
1210 python/rpmdb/Makefile
1211 python/test/Makefile
1212 ], [ echo timestamp > popt/stamp-h.in
1213 echo timestamp > beecrypt/stamp-h.in
1214 echo timestamp > stamp-h.in