- tsort prefers presentation order.
[platform/upstream/rpm.git] / configure.in
1 dnl configure.in for RPM
2 dnl
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
5 dnl it, why check it?
6
7 AC_INIT(rpm.c)
8 AC_CANONICAL_SYSTEM
9
10 AM_INIT_AUTOMAKE(rpm, 4.0.2)
11 AM_CONFIG_HEADER(config.h)
12
13 AC_PREREQ(2.12)         dnl Minimum Autoconf version required.
14
15 dnl XXX AM_MAINTAINER_MODE
16
17 dnl Set of available languages.
18 ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko no pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN.GB2312"
19
20 LIBOBJS=
21
22 dnl Checks for programs.
23 AC_ARG_PROGRAM
24 AC_PROG_CC
25 if test "$ac_cv_prog_gcc" = yes; then
26     CFLAGS="$CFLAGS -D_GNU_SOURCE -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wno-char-subscripts"
27 fi
28
29 AC_PROG_CPP
30 AC_PROG_GCC_TRADITIONAL
31 AC_PROG_INSTALL
32
33 AC_PATH_PROG(CTAGS, ctags, /bin/true)
34 AC_PATH_PROG(CSCOPE, cscope, /bin/true)
35
36 dnl
37 dnl This now uses libtool. Put
38 dnl     LDFLAGS_STATIC="-all"
39 dnl to attempt static executables using libtool. Otherwise
40 dnl     LDFLAGS_STATIC=""
41 dnl
42 AC_MSG_CHECKING(flag used by libtool to link rpm)
43 if test X"$GCC" = Xyes ; then
44         case "$target" in
45                 *-*-solaris*)   LDFLAGS_STATIC="";;
46                 *-*-hpux*)      LDFLAGS_STATIC="";;
47                 *-*-*)          LDFLAGS_STATIC="-all";;
48         esac
49 elif test X"$CC" = Xcc ; then
50         case "$target" in
51                 *-*-linux*)     LDFLAGS_STATIC="-all";;
52                 *-*-freebsd*)   LDFLAGS_STATIC="-all";;
53                 *-*-osf*)       LDFLAGS_STATIC="-all";;
54                 *-*-aix*)       LDFLAGS_STATIC="";;  # -Wl,-bnso doesn't seem to work...
55                 *-*-hpux*)      LDFLAGS_STATIC="";;
56                 *-*-solaris*)   LDFLAGS_STATIC="";;
57                 *-*-irix*)      LDFLAGS_STATIC="";;  #should be -non_shared, but can't
58                                                                                         # link because of crt1.o then.
59                 *-*-ultrix*)    LDFLAGS_STATIC="-all";;  #ultrix doesn't have shared libs.
60                 *-*-*)          LDFLAGS_STATIC=""
61 AC_MSG_WARN([
62
63 Unable to guess what option to pass to $CC to generate a static
64 executable.  You will need to set the LDFLAGS_STATIC macro in Makefile.inc to
65 the appropriate argument(s) if you want to build a static rpm executable.
66
67 ])
68                 ;;
69         esac
70 else
71         # just link it dynamically
72         LDFLAGS_STATIC=""
73 fi
74 LDFLAGS_STATIC="${LDFLAGS} ${LDFLAGS_STATIC}-static"    # libtool format
75 AC_MSG_RESULT($LDFLAGS_STATIC)
76 AC_SUBST(LDFLAGS_STATIC)
77
78 dnl
79 dnl look for POSIX chmod attributes
80 dnl
81 AC_MSG_CHECKING(POSIX chmod)
82 touch foo.chmodtest
83 chmod 744 foo.chmodtest
84 chmod +X foo.chmodtest 2>/dev/null
85 a=`ls -l foo.chmodtest | awk '{print $1}'`
86 rm -f foo.chmodtest
87 if test "$a" = "-rwxr-xr-x"; then
88     AC_MSG_RESULT(yes)
89     FIXPERMS=a+rX,g-w,o-w 
90 else
91     AC_MSG_RESULT(no (tell your OS vendor about GNU fileutils))
92     FIXPERMS=a+r,g-w,o-w 
93 fi
94 AC_SUBST(FIXPERMS)
95
96 dnl
97 dnl see if we have a mkdir that supports `-p'.
98 dnl
99 AC_PATH_PROGS(MKDIR, mkdir, mkdir)
100 AC_MSG_CHECKING(if $MKDIR supports -p)
101 rm -rf conftest
102 $MKDIR -p conftest/a 2>/dev/null
103 if test $? = 0 ; then
104         rmdir conftest/a 2>/dev/null
105         if test $? = 0  ; then
106                 :
107         else
108                 MKDIR_P=0
109         fi
110
111         rmdir conftest 2>/dev/null
112         if test $? = 0 ; then
113                 MKDIR_P="$MKDIR -p"
114         else
115                 MKDIR_P=0
116         fi
117 else
118         MKDIR_P=0
119 fi
120
121 if test X"$MKDIR_P" = X0 ; then
122         AC_MSG_RESULT(no)
123         MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`"
124 else
125         AC_MSG_RESULT(yes)
126 fi
127 dnl
128 dnl substitute this into config.h, so the C source picks it up.
129 dnl
130 AC_DEFINE_UNQUOTED(MKDIR_P, "${MKDIR_P}")
131 AC_SUBST(MKDIR_P)
132
133 AC_AIX
134 AC_MINIX
135 AC_ISC_POSIX
136
137 dnl This test must precede tests of compiler characteristics like
138 dnl that for the inline keyword, since it may change the degree to
139 dnl which the compiler supports such features.
140 AM_C_PROTOTYPES
141
142 AC_PROG_AWK
143 AC_PROG_LN_S
144 AC_PROG_MAKE_SET
145
146 dnl AM_DISABLE_SHARED
147 AM_PROG_LIBTOOL
148
149 AC_CHECK_TOOL(AR, ar, :)
150
151 if test "$cross_compiling" != "yes"; then
152 dnl
153 dnl Set search path for common programs
154 dnl
155     MYPATH="/bin:/usr/bin:/usr/local/bin:$PATH:/sbin:/usr/sbin:/usr/local/sbin:/opt/gnu/bin"
156
157 dnl
158 dnl Find some common programs
159 dnl
160     AC_PATH_PROG(BZIP2BIN, bzip2, /usr/bin/bzip2, $MYPATH)
161     AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH)
162     AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH)
163     AC_PATH_PROG(__CHMOD, chmod, /bin/chmod, $MYPATH)
164     AC_PATH_PROG(__CHOWN, chown, /bin/chown, $MYPATH)
165     AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH)
166     AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH)
167     AC_PATH_PROG(GZIPBIN, gzip, /bin/gzip, $MYPATH)
168     AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH)
169     AC_PATH_PROG(UNZIPBIN, unzip, /usr/bin/unzip, $MYPATH)
170
171     AC_PATH_PROG(__ID, id, /usr/bin/id, $MYPATH)
172     AC_MSG_CHECKING(checking whether id supports -u)
173     if `${__ID} -u 2>&1 > /dev/null` ; then
174         __ID_U="%{__id} -u"
175         AC_MSG_RESULT(yes)
176     else
177 dnl XXX Watchout for square brackets fed to m4.
178         __ID_U="%{__id} | %{__sed} 's/[[^=]]*=\\\\([[0-9]][[0-9]]*\\\\).*$/\\\\1/'"
179         AC_MSG_RESULT(no)
180     fi
181     AC_SUBST(__ID_U)
182
183     AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH)
184     AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH)
185     AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH)
186     AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH)
187     AC_PATH_PROG(__PATCH, patch, /usr/bin/patch, $MYPATH)
188     AC_MSG_CHECKING(old version of patch)
189     PATCHVERSION=`patch --version 2>&1`
190
191     if test "$PATCHVERSION" = "Patch version 2.1"; then
192         AC_DEFINE(HAVE_OLDPATCH_21)
193         AC_MSG_RESULT(patch older then 2.2 found)
194     else
195         AC_MSG_RESULT(patch later then 2.2 found)
196     fi
197
198     AC_PATH_PROG(__PERL, perl, /usr/bin/perl, $MYPATH)
199     AC_PATH_PROG(PGPBIN, pgp, /usr/bin/pgp, $MYPATH)
200     AC_PATH_PROG(__PYTHON, python, /usr/bin/python, $MYPATH)
201     AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH)
202     AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH)
203     AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH)
204     AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH)
205     AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH)
206
207     AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH)
208     AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH)
209     AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH)
210     AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH)
211     AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH)
212 fi
213
214 addlib() {
215   l=$1
216   shift
217   case "$target" in 
218     *-*-solaris*)       LIBS="$LIBS -L$l -R$l $*";;
219     *)          LIBS="$LIBS -L$l $*";;
220   esac
221 }
222
223 localdone=
224 for dir in $prefix /usr/local
225 do
226         case $dir in
227         NONE|/usr)      continue;;
228         /usr/local)
229                 if test X$localdone != X ; then continue; fi
230                 localdone="$dir"
231                 ;;
232         esac
233
234         AC_MSG_CHECKING(for $dir/lib in LIBS)
235         if test -d $dir/lib ; then
236                 addlib $dir/lib
237                 AC_MSG_RESULT(yes)
238         else
239                 AC_MSG_RESULT(no)
240         fi
241
242         AC_MSG_CHECKING(for $dir/include in INCPATH)
243         if test -d $dir/include ; then
244                 INCPATH="$INCPATH -I$dir/include"
245                 AC_MSG_RESULT(yes)
246         else
247                 AC_MSG_RESULT(no)
248         fi
249 done
250
251 AC_MSG_CHECKING(for /usr/ucblib in LIBS)
252 if test -d /usr/ucblib ; then
253         if test "$build" = "mips-sni-sysv4" ; then
254                 addlib /usr/ccs/lib -lc
255         fi
256
257         addlib /usr/ucblib
258         
259         AC_MSG_RESULT(yes)
260 else
261         AC_MSG_RESULT(no)
262 fi
263
264 dnl
265 dnl Check for features
266 dnl
267
268 ### use option --enable-v5-packages to turn on support for rpm-5.x packages
269 AC_MSG_CHECKING(if you want experimental rpm-5.0 packages)
270 AC_ARG_ENABLE(v5-packages,
271         [  --enable-v5-packages[=no]    [experimental] support for rpm-5.x packages],
272         [with_v5_packages=$enableval],
273         [with_v5_packages=no])
274 AC_MSG_RESULT($with_v5_packages)
275 test "$with_v5_packages" = yes && AC_DEFINE(ENABLE_V5_PACKAGES)
276
277 dnl Checks for libraries.
278
279 AC_CHECK_FUNC(setreuid, [], [
280     AC_CHECK_LIB(ucb, setreuid, [if echo $LIBS | grep -- -lucb >/dev/null ;then :; else LIBS="$LIBS -lc -lucb" USEUCB=y;fi])
281 ])
282
283 AC_CHECK_FUNC(rand, [], [
284     AC_CHECK_LIB(rand, rand, [LIBS="$LIBS -lm"])
285 ])
286
287 AC_CHECK_FUNC(getdomainname, [], [
288     AC_CHECK_LIB(nsl, getdomainname, [LIBS="$LIBS -lnsl"])
289 ])
290 AC_CHECK_FUNC(socket, [], [
291     AC_CHECK_LIB(socket, socket, [LIBS="$LIBS -lsocket"])
292 ])
293
294 dnl Better not use fchmod at all.
295 AC_CHECK_FUNC(fchmod)
296
297 dnl Temporary hack for MiNT.  Some functions (writev, snprintf) are
298 dnl not in the libc but in libport (for political reasons).  This check
299 dnl can hopefully be removed soon.  Please use the default action
300 dnl for this macro (not LIBS=...), otherwise the check for dbopen
301 dnl will fail.
302 AC_CHECK_LIB(port, writev)
303
304 libpthread=""
305 AC_CHECK_LIB(pthread, pthread_mutex_trylock,[libpthread="-lpthread"])
306
307 DBLIBSRCS=""
308 libdb3=""
309 libdb2=""
310 libdb1=""
311 dnl Check for Berkeley db3 API.
312 AC_CHECK_FUNC(db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"],
313   AC_CHECK_LIB(db-3.1, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.1"],
314     AC_CHECK_LIB(db-3.0, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb-3.0"],
315       AC_CHECK_LIB(db, db_create, [DBLIBSRCS="$DBLIBSRCS db3.c"; libdb3="-ldb"],
316       ,$libpthread)
317     ,$libpthread)
318   ,$libpthread)
319 )
320
321 dnl Check for Berkeley db2 API.
322 dnl AC_CHECK_FUNC(db_open, [DBLIBSRCS="$DBLIBSRCS db2.c"],
323 dnl   AC_CHECK_LIB(db, db_open, [LIBS="$LIBS"; DBLIBSRCS="$DBLIBSRCS db2.c" ; libdb2="-ldb"])
324 dnl )
325 dnl Check for Berkeley db1 API retrofit to db2/db3 database.
326 dnl AC_CHECK_FUNC(dbopen, [DBLIBSRCS="$DBLIBSRCS db1.c"],
327 dnl     AC_CHECK_LIB(db, dbopen, [DBLIBSRCS="$DBLIBSRCS db1.c"])
328 dnl )
329
330 dnl Check for Berkeley db1 API in glibc.
331 AC_CHECK_FUNC(dbopen, [DBLIBSRCS="$DBLIBSRCS db3.c"],
332   AC_CHECK_LIB(db1, dbopen, [DBLIBSRCS="$DBLIBSRCS db1.c falloc.c" ; libdb1="-ldb1"],
333     AC_CHECK_LIB(db, dbopen, [DBLIBSRCS="$DBLIBSRCS db1.c falloc.c" ; libdb1="-ldb"])
334   )
335 )
336
337 if test X"$DBLIBSRCS" = X; then
338     AC_MSG_ERROR([sorry rpm requires libdb-3.x.a or libdb1.a (from the Berkeley db package)]) 
339 fi
340
341 if test -n "$libdb3" -a -n "$libpthread" ; then
342    AC_MSG_CHECKING(whether $libdb3 needs $libpthread)
343    saveLIBS="$LIBS"
344    LIBS="$LIBS $libdb3"
345    AC_TRY_LINK_FUNC(db_create, AC_MSG_RESULT(no),
346         [libdb3="$libdb3 $libpthread"; AC_MSG_RESULT(yes)])
347    LIBS="$saveLIBS"
348 fi
349
350 DBLIBOBJS=`echo $DBLIBSRCS | sed -e "s/\.c/\.lo/g"`
351
352 AC_SUBST(DBLIBSRCS)
353 AC_SUBST(DBLIBOBJS)
354 AC_SUBST(libdb3)
355 AC_SUBST(libdb2)
356 AC_SUBST(libdb1)
357
358 for dbi in $DBLIBSRCS; do
359   case $dbi in
360   db3.c) AC_DEFINE(USE_DB3) ;;
361   db2.c) AC_DEFINE(USE_DB2) ;;
362   db1.c) AC_DEFINE(USE_DB1) ;;
363   esac
364 done
365
366 AC_CHECK_FUNC(fork, [], [echo "using vfork() instead of fork()";
367         LIBOBJS=fakefork.o])
368
369 dnl AmigaOS and IXEmul have a fork() dummy
370     case "$target" in
371         m68k-*-amigaos ) 
372                 echo "Building for AmigaOS: using vfork() instead of fork()"; 
373                 CFLAGS="$CFLAGS -Dfork=vfork" 
374                 ;;
375 esac
376
377
378 for zlib in z gz ; do
379    AC_CHECK_LIB(${zlib}, gzread, 
380         [LIBS="$LIBS -l${zlib}"; break], 
381         [if test ${zlib} = gz; then 
382             AC_MSG_ERROR([sorry rpm requires libz.a or libgz.a (from the zlib package)]) 
383          fi]
384                )
385 done
386
387 dnl zlib-1.0.4 has not gzseek
388 AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK)])
389
390 AC_CHECK_LIB(bz2, bzread, [LIBS="$LIBS -lbz2"], 
391    AC_CHECK_LIB(bz2, BZ2_bzread, [
392      WITH_BZIP2=1
393      LIBS="$LIBS -lbz2"
394      AC_DEFINE(HAVE_BZ2_1_0) ], 
395      WITH_BZIP2=0))
396 AC_SUBST(WITH_BZIP2)
397
398 dnl Red Hat 4.x has not personality
399 AC_CHECK_FUNCS(personality)
400
401 dnl XXX these are needed only by rpmgettext right now
402 AM_FUNC_ERROR_AT_LINE
403
404 dnl ==> AM_GNU_GETTEXT does this (and more)
405 dnl AC_CHECK_HEADERS(unistd.h limits.h locale.h malloc.h string.h sys/param.h)
406
407 AM_GNU_GETTEXT
408 dnl TVM:
409 dnl horrible *temporary* hack to make sure that if we found gettext() in
410 dnl -lintl that we add -lintl *back* to $LIBS.
411 dnl
412 if test X$gt_cv_func_gettext_libintl = Xyes ; then
413     LIBS="-lintl $LIBS"
414 fi
415
416 dnl Checks for header files we can live without.
417 AC_HEADER_STDC
418 AC_HEADER_MAJOR
419 AC_HEADER_DIRENT
420 AC_HEADER_TIME
421
422 AC_CHECK_HEADERS(db_185.h db1/db.h db3/db.h)
423 AC_CHECK_HEADERS(fcntl.h getopt.h grp.h memory.h netdb.h pwd.h utime.h)
424
425 AC_CHECK_HEADERS(sys/socket.h sys/select.h)
426 AC_CHECK_HEADERS(sys/types.h sys/stdtypes.h)
427 AC_CHECK_HEADERS(sys/mman.h sys/resource.h sys/utsname.h sys/wait.h)
428
429 AC_CHECK_HEADERS(netinet/in_systm.h)
430 AC_CHECK_HEADERS(machine/types.h)
431 AC_CHECK_HEADERS(mntent.h sys/mnttab.h sys/systemcfg.h)
432 AC_CHECK_HEADERS(sys/mount.h sys/mntctl.h sys/param.h sys/vmount.h)
433 AC_CHECK_HEADERS(bzlib.h libio.h zlib.h)
434 AC_CHECK_HEADERS(err.h mcheck.h)
435
436 dnl popt w float/double needs.
437 AC_CHECK_HEADERS(float.h)
438
439 dnl whether or not we should try to build rpmgettext/rpmputtext.
440 if test X"$USE_NLS" = Xyes; then
441     BUILD_RPMNLSTOOLS="rpmgettext rpmputtext"
442     if test X"$USE_INCLUDED_LIBINTL" = Xyes; then
443         INCPATH="-I\$(top_builddir)/intl $INCPATH"
444     fi
445 else
446     BUILD_RPMNLSTOOLS=
447 fi
448 AC_SUBST(BUILD_RPMNLSTOOLS)
449
450 AC_CHECK_HEADERS(glob.h)
451
452 dnl statfs portability fiddles.
453 dnl
454 dnl We should really emulate/steal sections of the statfs and struct statfs
455 dnl checks from GNU fileutils.
456 dnl
457 AC_MSG_CHECKING(for struct statfs)
458 dnl
459 dnl this is easier than nesting AC_TRY_COMPILEs...
460 dnl
461 found_struct_statfs=no
462
463 if test X$found_struct_statfs = Xno ; then
464 dnl Solaris 2.6+ wants to use statvfs
465 AC_TRY_COMPILE([
466 #ifdef HAVE_SYS_TYPES_H
467 #include <sys/types.h>
468 #endif
469 #include <sys/statvfs.h> ],
470         [struct statvfs sfs;],
471         [AC_MSG_RESULT(in sys/statvfs.h)
472         AC_DEFINE(STATFS_IN_SYS_STATVFS)
473         found_struct_statfs=yes],
474 )
475 fi
476
477 if test X$found_struct_statfs = Xno ; then
478 dnl first try including sys/vfs.h
479 AC_TRY_COMPILE([
480 #ifdef HAVE_SYS_TYPES_H
481 #include <sys/types.h>
482 #endif
483 #include <sys/vfs.h> ],
484         [struct statfs sfs;],
485         [AC_MSG_RESULT(in sys/vfs.h)
486         AC_DEFINE(STATFS_IN_SYS_VFS)
487         found_struct_statfs=yes],
488 )
489 fi
490
491 if test X$found_struct_statfs = Xno ; then
492 dnl ...next try including sys/mount.h
493 AC_TRY_COMPILE([
494 #ifdef HAVE_SYS_TYPES_H
495 #include <sys/types.h>
496 #endif
497 #ifdef HAVE_SYS_PARAM_H
498 #include <sys/param.h>
499 #endif
500 #include <sys/mount.h> ],
501         [struct statfs sfs;],
502         [AC_MSG_RESULT(in sys/mount.h)
503         AC_DEFINE(STATFS_IN_SYS_MOUNT)
504         found_struct_statfs=yes],
505 )
506 fi
507
508 if test X$found_struct_statfs = Xno ; then
509 dnl ...still no joy.  Try sys/statfs.h
510 AC_TRY_COMPILE([
511 #ifdef HAVE_SYS_TYPES_H
512 #include <sys/types.h>
513 #endif
514 #include <sys/statfs.h> ],
515         [struct statfs sfs;],
516         [AC_MSG_RESULT(in sys/statfs.h)
517         AC_DEFINE(STATFS_IN_SYS_STATFS)
518         found_struct_statfs=yes],
519 )
520 fi
521
522 if test X$found_struct_statfs = Xno ; then
523 dnl ...no luck.  Warn the user of impending doom.
524 AC_MSG_WARN(not found)
525 fi
526
527 dnl
528 dnl if we found the struct, see if it has the f_bavail member.  Some OSes
529 dnl don't, including IRIX 6.5+
530 dnl
531 if test X$found_struct_statfs = Xyes ; then
532 AC_MSG_CHECKING(for f_bavail member in struct statfs)
533 AC_TRY_COMPILE([
534 #ifdef HAVE_SYS_TYPES_H
535 #include <sys/types.h>
536 #endif
537 #if STATFS_IN_SYS_STATVFS
538 # include <sys/statvfs.h>
539   typedef struct statvfs STATFS_t;
540 #else
541   typedef struct statfs STATFS_t;
542 # if STATFS_IN_SYS_VFS
543 #  include <sys/vfs.h>
544 # elif STATFS_IN_SYS_MOUNT
545 #  include <sys/mouht.h>
546 # elif STATFS_IN_SYS_STATFS
547 #  include <sys/statfs.h>
548 # endif
549 #endif ],
550         [STATFS_t sfs;
551         sfs.f_bavail = 0;],
552         [AC_MSG_RESULT(yes)
553         AC_DEFINE(STATFS_HAS_F_BAVAIL)],
554         [AC_MSG_RESULT(no)]
555 )
556 fi
557
558 if test X$found_struct_statfs = Xyes ; then
559 dnl
560 dnl now check to see if we have the 4-argument variant of statfs()
561 dnl this pretty much requires AC_TRY_RUN
562 dnl
563 AC_MSG_CHECKING([if statfs() requires 4 arguments])
564 AC_TRY_RUN([
565 #ifdef HAVE_SYS_TYPES_H
566 #include <sys/types.h>
567 #endif
568 #ifdef STATFS_IN_SYS_VFS
569 #include <sys/vfs.h>
570 #elif STATFS_IN_SYS_MOUNT
571 #include <sys/mouht.h>
572 #elif STATFS_IN_SYS_STATFS
573 #include <sys/statfs.h>
574 #endif
575 main() {
576         struct statfs sfs;
577         exit (statfs(".", &sfs, sizeof(sfs), 0));
578 }
579 ],
580         [AC_MSG_RESULT(yes)
581         AC_DEFINE(STAT_STATFS4)],
582         [AC_MSG_RESULT(no)],
583         [AC_MSG_RESULT(no)]
584 )
585 fi
586
587 AC_C_INLINE
588
589 dnl look for libc features
590 PROVIDES_ERRNO=no
591 AC_MSG_CHECKING(if <netdb.h> defines h_errno)
592 AC_TRY_LINK([#include <netdb.h>],printf("%d",h_errno),PROVIDES_ERRNO=yes)
593 AC_MSG_RESULT($PROVIDES_ERRNO)
594 if test $PROVIDES_ERRNO = yes; then
595         AC_DEFINE(HAVE_HERRNO)
596 fi
597
598 dnl If a system doesn't have S_IFSOCK, define it as 0 which will
599 dnl make S_ISSOCK always return false (nice, eh?)
600 AC_MSG_CHECKING(if <sys/stat.h> defines S_IFSOCK)
601 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_IFSOCK),
602         HAS_S_IFSOCK=yes,HAS_S_IFSOCK=no)
603 AC_MSG_RESULT($HAS_S_IFSOCK)
604 if test $HAS_S_IFSOCK = yes; then
605         AC_DEFINE(HAVE_S_IFSOCK)
606 fi
607
608 dnl Some Unix's are missing S_ISLNK, S_ISSOCK
609 AC_MSG_CHECKING(if <sys/stat.h> defines S_ISLNK)
610 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_ISLNK(0755)),
611         HAS_S_ISLNK=yes,HAS_S_ISLNK=no)
612 AC_MSG_RESULT($HAS_S_ISLNK)
613 if test $HAS_S_ISLNK = yes; then
614         AC_DEFINE(HAVE_S_ISLNK)
615 fi
616
617 AC_MSG_CHECKING(if <sys/stat.h> defines S_ISSOCK)
618 AC_TRY_LINK([#include <sys/stat.h>],printf("%d", S_ISSOCK(0755)),
619         HAS_S_ISSOCK=yes,HAS_S_ISSOCK=no)
620 AC_MSG_RESULT($HAS_S_ISSOCK)
621 if test $HAS_S_ISSOCK = yes; then
622         AC_DEFINE(HAVE_S_ISSOCK)
623 fi
624
625 AC_MSG_CHECKING(if timezone is defined)
626 AC_TRY_LINK([#include <time.h>],printf("%ld", timezone),
627       HAS_TIMEZONE=yes,HAS_TIMEZONE=no)
628 AC_MSG_RESULT($HAS_TIMEZONE)
629
630 dnl Check for missing typedefs
631 AC_TYPE_MODE_T
632 AC_TYPE_PID_T
633
634 dnl Checks for library functions.
635 AC_FUNC_ALLOCA
636 AC_FUNC_VPRINTF
637
638 AC_FUNC_FNMATCH
639 if test $ac_cv_func_fnmatch_works = no; then
640    LIBOBJS="$LIBOBJS fnmatch.o"
641    AC_DEFINE_UNQUOTED(fnmatch, rpl_fnmatch)
642 fi
643
644 dnl XXX AC_FUNC_MEMCMP
645 dnl XXX AC_FUNC_MMAP
646 dnl XXX AC_TYPE_SIGNAL
647 dnl XXX AC_FUNC_STRCOLL
648 dnl XXX AC_FUNC_STRFTIME
649 dnl XXX AC_FUNC_UTIME_NULL
650 dnl XXX AC_FUNC_VFORK
651 dnl XXX AC_CHECK_FUNCS(gethostname mkdir mkfifo rmdir select uname)
652
653 AC_CHECK_FUNCS(basename getcwd getwd inet_aton mtrace putenv realpath setenv)
654 AC_CHECK_FUNCS(stpcpy stpncpy strcspn)
655 AC_CHECK_FUNCS(strdup strerror strtol strtoul strspn strstr)
656
657 AC_CHECK_FUNCS(regcomp)
658
659 dnl
660 dnl XXX Regex replacement isn't known to be needed yet.
661 dnl
662 dnl AC_ARG_WITH(regex, [  --with-regex            use the GNU regex library ],
663 dnl     [rpm_cv_regex=yes],
664 dnl     [AC_CHECK_FUNCS(regcomp, rpm_cv_regex=no, rpm_cv_regex=yes)])
665 dnl 
666 dnl if test $rpm_cv_regex = no ; then
667 dnl     AC_MSG_CHECKING(whether the regexp library is broken)
668 dnl     AC_TRY_RUN([
669 dnl #include <unistd.h>
670 dnl #include <regex.h>
671 dnl main() { regex_t blah ; exit(regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0)); }],
672 dnl     rpm_cv_regex_broken=no, rpm_cv_regex_broken=yes, rpm_cv_regex_broken=yes)
673 dnl     AC_MSG_RESULT([$rpm_cv_regex_broken])
674 dnl     if test $rpm_cv_regex_broken = yes ; then
675 dnl         echo "   --> using the included GNU regex instead." >&AC_FD_MSG
676 dnl         rpm_cv_regex=yes
677 dnl     fi
678 dnl fi
679 dnl 
680 dnl if test $rpm_cv_regex = yes; then
681 dnl     AC_DEFINE(USE_GNU_REGEX)
682 dnl     LIBOBJS="$LIBOBJS regex.o"
683 dnl fi
684
685 dnl
686 dnl XXX Glob *is* broken on linux with libc5, solaris and possibly aix when
687 dnl %files gets something like
688 dnl     /usr/*/locale/*/LC_MESSAGES/*.mo
689 dnl (Note: more than one asterisk in glob pattern.)
690 dnl
691 AC_ARG_WITH(glob, [  --with-glob             use the internal GNU glob ],
692     [rpm_cv_glob=yes],
693     [AC_CHECK_FUNCS(glob, rpm_cv_glob=no, rpm_cv_glob=yes)])
694
695 if test $rpm_cv_glob = no ; then
696     AC_MSG_CHECKING(for GNU extensions to glob)
697     mkdir t
698     mkdir t/p
699     touch t/p/foo.8
700     AC_TRY_RUN([
701 #include <unistd.h>
702 #include <sys/stat.h>
703 #include <glob.h>
704 main() {
705   glob_t gl ;
706   gl.gl_stat = stat;
707   exit(glob("t/*/*.8", GLOB_PERIOD, NULL, &gl) || gl.gl_pathc < 1);
708 } ],
709     rpm_cv_glob_ext=yes, rpm_cv_glob_ext=no, rpm_cv_glob_ext=no)
710     rm -r t
711     AC_MSG_RESULT([$rpm_cv_glob_ext])
712     if test $rpm_cv_glob_ext = no ; then
713             echo "    --> using the included GNU glob instead." >&AC_FD_MSG
714             rpm_cv_glob=yes
715     fi
716 fi
717
718 if test $rpm_cv_glob = yes; then
719     AC_DEFINE(USE_GNU_GLOB)
720     LIBOBJS="$LIBOBJS glob.o fnmatch.o"
721 fi
722
723 dnl
724 dnl Auto-detect whether python bindings should be built.
725 dnl
726 withval=auto
727 AC_ARG_WITH(python, [  --with-python           build rpm python bindings ])
728
729 if test $withval = auto ; then
730   AC_MSG_CHECKING(for python 1.5.2)
731   AC_TRY_RUN([
732 #include <python1.5/Python.h>
733 main() {
734   exit(strcmp("1.5.2", PY_VERSION));
735 } ],
736   withval=yes, withval=no, withval=no)
737   AC_MSG_RESULT($withval)
738 fi
739
740 if test $withval = yes ; then
741   WITH_PYTHON_SUBDIR=python
742   WITH_PYTHON_SUBPACKAGE=1
743 else
744   WITH_PYTHON_SUBDIR=
745   WITH_PYTHON_SUBPACKAGE=0
746 fi
747 AC_SUBST(WITH_PYTHON_SUBDIR)
748 AC_SUBST(WITH_PYTHON_SUBPACKAGE)
749
750 AC_PATH_PROG(__DOXYGEN, doxygen, no, $PATH)
751 dnl
752 dnl Auto-detect whether doxygen generated API docs should be included.
753 dnl
754 withval=auto
755 AC_ARG_WITH(apidocs, [  --with-apidocs          build rpm API docs ])
756
757 if test $withval = auto -a $__DOXYGEN != no ; then
758   withval=yes
759 elif test $withval = yes -a $__DOXYGEN = no ; then
760   AC_MSG_ERROR(--> rpm API docs needs doxygen in PATH)
761 fi
762
763 if test $withval = yes; then
764   WITH_APIDOCS_TARGET=apidocs
765   WITH_APIDOCS=1
766 else
767   WITH_APIDOCS=0
768 fi
769 AC_SUBST(WITH_APIDOCS_TARGET)
770 AC_SUBST(WITH_APIDOCS)
771
772 withval=no
773 AC_ARG_WITH(dmalloc, [  --with-dmalloc          build with dmalloc debugging support ])
774 if test $withval = yes ; then
775   AC_DEFINE(DMALLOC)
776   LIBS="$LIBS -ldmalloc"
777 fi
778
779 AC_CHECK_FUNCS(setlocale)
780
781 dnl XXX Solaris <= 2.6 only permits 8 chars in password.
782 AC_CHECK_FUNCS(getpassphrase)
783
784 AC_CHECK_FUNC(getmntent, AC_DEFINE(HAVE_GETMNTENT), [
785   AC_CHECK_FUNC(mntctl, AC_DEFINE(HAVE_MNTCTL),[
786     AC_CHECK_FUNC(getmntinfo_r, AC_DEFINE(HAVE_GETMNTINFO_R), [
787       AC_CHECK_LIB(c_r, getmntinfo_r, [LIBS="$LIBS -lc_r"; 
788                                         AC_DEFINE(HAVE_GETMNTINFO_R)],
789                  LIBOBJS="$LIBOBJS getmntent.o")])])])
790
791 AC_CHECK_FUNC(lchown,
792    [__CHOWN_RHF="%{__chown} -Rhf"
793     __CHGRP_RHF="%{__chgrp} -Rhf"
794     AC_DEFINE(HAVE_LCHOWN)],
795    [__CHOWN_RHF="%{__chown} -Rf"
796     __CHGRP_RHF="%{__chgrp} -Rf"
797     dnl Does chown() follow symlinks? This should be a good enough test.
798     AC_MSG_CHECKING(whether chown() follows symlinks)
799     AC_ARG_ENABLE([broken-chown],
800     [  --enable-broken-chown   this system's chown follows symbolic links], 
801             result=$enableval, result=unknown)
802     if echo "$build" | egrep "(aix)|(hpux)|(linux)" > /dev/null ; then
803         result=yes
804     elif echo "$build" | egrep "(nextstep)" > /dev/null ; then
805         result=no
806     fi
807     if test $result = unknown; then
808         if test `${__ID} | cut -f2 -d\= | cut -f1 -d\(` = 0; then
809             rm -f foo bar
810             touch foo
811             ln -s foo bar
812             ${__CHOWN} 10 bar
813             if test `ls -l foo | awk '{print $3}'` != "root"; then
814                 result=yes
815             else
816                 result=no
817             fi
818             ${__RM} -f foo bar
819         else
820             AC_MSG_CHECKING((cannot check by non-root user))
821             result=no
822         fi
823     fi
824
825     AC_MSG_RESULT($result)
826     if test $result = yes; then
827             AC_DEFINE(CHOWN_FOLLOWS_SYMLINK)
828     fi])
829 AC_SUBST(__CHOWN_RHF)
830 AC_SUBST(__CHGRP_RHF)
831
832 dnl
833 dnl figure out what root's primary group is
834 dnl
835 AC_MSG_CHECKING(root's primary group)
836 AC_TRY_RUN([#include <stdio.h>
837 #include <sys/types.h>
838 #include <pwd.h>
839 #include <grp.h>
840
841 int main()
842 {
843         struct passwd *root = NULL;
844         struct group *roots_group = NULL;
845         FILE * tempfile = NULL;
846
847         root = getpwuid( (uid_t) 0 );
848         if (root != NULL) {
849                 roots_group = getgrgid(root->pw_gid);
850                 if (roots_group != NULL) {
851                         tempfile = fopen("conftest_rootg", "w");
852                         if (tempfile != NULL) {
853                                 fprintf(tempfile, "%s\n", roots_group->gr_name);
854                                 fclose(tempfile);
855                                 exit(0);
856                         }
857                 }
858         }
859
860         exit(1);
861 }], ROOT_GROUP=`cat conftest_rootg`,
862         ROOT_GROUP="root",ROOT_GROUP="root"
863 )
864 AC_MSG_RESULT($ROOT_GROUP)
865 AC_SUBST(ROOT_GROUP)
866
867 if test "x$varprefix" = "x"; then
868     varprefix=`echo $prefix | sed 's/usr/var/'`
869     test "x$prefix" = xNONE && varprefix=`echo $ac_default_prefix | sed 's/usr/var/'`
870 fi
871 AC_SUBST(varprefix)
872
873 if test "x$tmpdir" = "x"; then
874     if test -d $varprefix/tmp; then
875         tmpdir=$varprefix/tmp
876     else
877         if test -d /var/tmp; then
878             tmpdir=/var/tmp
879         else
880             tmpdir=/tmp
881         fi
882     fi
883 fi
884 AC_SUBST(tmpdir)
885
886 if echo "$build_os" | grep sco > /dev/null; then
887         echo "hacking things up for sco"
888         AC_DEFINE(NEED_STRINGS_H)
889         AC_DEFINE(HAVE_STRUCT_MNTTAB)
890 elif echo "$build_os" | grep sunos > /dev/null; then
891         echo "hacking things up for sunos"
892         CFLAGS="$CFLAGS -D__USE_FIXED_PROTOTYPES__"
893         AC_DEFINE(NEED_STRINGS_H)
894         AC_DEFINE(NEED_MYREALLOC)
895         LIBOBJS="$LIBOBJS myrealloc.o"
896 fi
897
898 #
899 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for build_os
900 #
901 if echo "$build_os" | grep '.*-gnulibc1' > /dev/null ; then
902         build_os=`echo "${build_os}" | sed 's/-gnulibc1$//'`
903 fi
904 if echo "$build_os" | grep '.*-gnu' > /dev/null ; then
905         build_os=`echo "${build_os}" | sed 's/-gnu$//'`
906 fi
907
908 changequote(<, >)
909 build_os_exact="${build_os}"
910 build_os_major=`echo "${build_os}" | sed 's/\..*$//'`
911 build_os_noversion=`echo "${build_os}" | sed 's/[0-9]*\..*$//'`
912 changequote([, ])
913
914 rm -f ./find-provides
915 if test -f ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov ; then
916         echo "using ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov for automatic provides generation"
917     ln -s ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.prov ./find-provides
918 elif test -f ${srcdir}/autodeps/${build_os_exact}.prov ; then
919         echo "using ${srcdir}/autodeps/${build_os_exact}.prov for automatic provides generation"
920     ln -s ${srcdir}/autodeps/${build_os_exact}.prov ./find-provides
921 elif test -f ${srcdir}/autodeps/${build_os_major}.prov ; then
922         echo "using ${srcdir}/autodeps/${build_os_major}.prov for automatic provides generation"
923     ln -s ${srcdir}/autodeps/${build_os_major}.prov ./find-provides
924 elif test -f ${srcdir}/autodeps/${build_os_noversion}.prov ; then
925         echo "using ${srcdir}/autodeps/${build_os_noversion}.prov for automatic provides generation"
926     ln -s ${srcdir}/autodeps/${build_os_noversion}.prov ./find-provides
927 else
928     echo "*** no default provides information is available for ${build_os_noversion}"
929     ln -s ${srcdir}/autodeps/none ./find-provides
930 fi
931
932 rm -f ./find-requires
933 if test -f ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req ; then
934         echo "using ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req for automatic requires generation"
935     ln -s ${srcdir}/autodeps/${build_cpu}-${build_os_exact}.req ./find-requires
936 elif test -f ${srcdir}/autodeps/${build_os_exact}.req ; then
937         echo "using ${srcdir}/autodeps/${build_os_exact}.req for automatic requires generation"
938     ln -s ${srcdir}/autodeps/${build_os_exact}.req ./find-requires
939 elif test -f ${srcdir}/autodeps/${build_os_major}.req ; then
940         echo "using ${srcdir}/autodeps/${build_os_major}.req for automatic requires generation"
941     ln -s ${srcdir}/autodeps/${build_os_major}.req ./find-requires
942 elif test -f ${srcdir}/autodeps/${build_os_noversion}.req ; then
943         echo "using ${srcdir}/autodeps/${build_os_noversion}.req for automatic requires generation"
944     ln -s ${srcdir}/autodeps/${build_os_noversion}.req ./find-requires
945 else
946     echo "*** no default requires information is available for ${build_os_noversion}"
947     ln -s ${srcdir}/autodeps/none ./find-requires
948 fi
949
950 dnl Determine the canonical arch-vendor-os for the build machine
951 case "${build_cpu}" in
952 i386|i486|i586|i686|ix86)       RPMCANONARCH=i386 ;;
953 ia64*)          RPMCANONARCH=ia64 ;;
954 alpha*)         RPMCANONARCH=alpha ;;
955 sparc*)         RPMCANONARCH=sparc ;;
956 powerpc*)       RPMCANONARCH=ppc ;;
957 armv4l*)        RPMCANONARCH=armv4l ;;
958 armv4b*)        RPMCANONARCH=armv4b ;;
959 arm*)           RPMCANONARCH=arm ;;
960 *)              RPMCANONARCH=unknown ;;
961 esac
962 case "${build_os_noversion}" in
963 mint)           RPMCANONARCH=m68kmint ;;
964 esac
965 RPMCANONVENDOR="$build_vendor"
966 case "${build_vendor}" in
967 unknown|pc|redhat|pld|mandrake|conectiva)
968         test -f /etc/redhat-release &&          RPMCANONVENDOR=redhat
969         test -f /etc/pld-release &&             RPMCANONVENDOR=pld
970         test -f /etc/mandrake-release &&        RPMCANONVENDOR=mandrake
971         test -f /etc/conectiva-release &&       RPMCANONVENDOR=conectiva
972         ;;
973 esac
974 RPMCANONOS="$build_os_noversion"
975 AC_SUBST(RPMCANONARCH)
976 AC_SUBST(RPMCANONVENDOR)
977 AC_SUBST(RPMCANONOS)
978
979 if test -n "$LIBOBJS" ; then
980     LIBMISC='$(top_builddir)/misc/libmisc.a'
981 fi
982 AC_SUBST(LIBOBJS)
983 AC_SUBST(LIBMISC)
984
985 if test X"$prefix" = XNONE ; then
986     usrprefix="$ac_default_prefix"
987 else
988     usrprefix=$prefix
989 fi
990 LOCALEDIR="`echo ${usrprefix}/share/locale`"
991 AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR")
992 AC_SUBST(LOCALEDIR)
993 LIBDIR="`echo $libdir | sed 's-/lib$-/%{_lib}-'`"
994 AC_SUBST(LIBDIR)
995 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
996 AC_DEFINE_UNQUOTED(RPMCONFIGDIR, "$RPMCONFIGDIR")
997 AC_SUBST(RPMCONFIGDIR)
998
999 SYSCONFIGDIR="`echo /etc/rpm`"
1000 AC_DEFINE_UNQUOTED(SYSCONFIGDIR, "$SYSCONFIGDIR")
1001 AC_SUBST(SYSCONFIGDIR)
1002
1003 MACROFILES="${RPMCONFIGDIR}/macros:${RPMCONFIGDIR}/%{_target_platform}/macros:${SYSCONFIGDIR}/macros:${SYSCONFIGDIR}/macros.specspo:${SYSCONFIGDIR}/macros.db1:${SYSCONFIGDIR}/%{_target_platform}/macros:~/.rpmmacros"
1004 AC_DEFINE_UNQUOTED(MACROFILES, "$MACROFILES")
1005 AC_SUBST(MACROFILES)
1006
1007 LIBRPMRC_FILENAME="${RPMCONFIGDIR}/rpmrc"
1008 AC_DEFINE_UNQUOTED(LIBRPMRC_FILENAME, "$LIBRPMRC_FILENAME")
1009 AC_SUBST(LIBRPMRC_FILENAME)
1010
1011 LIBRPMALIAS_FILENAME="${RPMCONFIGDIR}/rpmpopt-${VERSION}"
1012 AC_DEFINE_UNQUOTED(LIBRPMALIAS_FILENAME, "$LIBRPMALIAS_FILENAME")
1013 AC_SUBST(LIBRPMALIAS_FILENAME)
1014 FINDREQUIRES="${RPMCONFIGDIR}/find-requires"
1015 AC_DEFINE_UNQUOTED(FINDREQUIRES, "$FINDREQUIRES")
1016 AC_SUBST(FINDREQUIRES)
1017 FINDPROVIDES="${RPMCONFIGDIR}/find-provides"
1018 AC_DEFINE_UNQUOTED(FINDPROVIDES, "$FINDPROVIDES")
1019 AC_SUBST(FINDPROVIDES)
1020 TOP_SOURCEDIR="`pwd`"
1021 AC_DEFINE_UNQUOTED(TOP_SOURCEDIR, "$TOP_SOURCEDIR")
1022 AC_SUBST(TOP_SOURCEDIR)
1023
1024 testdir="`pwd`/tests"
1025 dnl AC_DEFINE_UNQUOTED(testdir, "$testdir")
1026 AC_SUBST(testdir)
1027
1028 if test -n "$LIBOBJS"; then
1029     INCPATH="-I\$(top_builddir)/misc $INCPATH"
1030 fi
1031 AC_SUBST(INCPATH)
1032
1033 AC_SUBST(LIBS)
1034
1035 AC_SUBST(RPM)
1036
1037 AC_SUBST(OBJDUMP)
1038
1039 dnl XXX this causes popt to depend on zlib et al
1040 dnl # XXX Propagate -lucb to popt ...
1041 dnl export LIBS INCPATH CONFIG_SITE
1042
1043 AC_CONFIG_SUBDIRS(popt)
1044 AC_OUTPUT([Doxyfile Makefile rpmrc macros platform rpmpopt rpm.spec scripts/brp-redhat
1045         rpmio/Makefile lib/Makefile build/Makefile tools/Makefile
1046         scripts/Makefile
1047         tests/Makefile tests/rpmrc tests/macros tests/hello-test/Makefile
1048         misc/Makefile po/Makefile.in intl/Makefile
1049         doc/Makefile doc/manual/Makefile
1050         doc/ja/Makefile doc/pl/Makefile doc/ru/Makefile doc/sk/Makefile
1051         python/Makefile perl/Makefile perl/Makefile.PL],
1052         [echo timestamp > popt/stamp-h.in
1053         echo timestamp > stamp-h.in])
1054 dnl     touch Makefile.in
1055 dnl     sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile])
1056