Add support for quilt (ticket #54) and bzr to %autosetup/patch
[platform/upstream/rpm.git] / configure.ac
1 AC_PREREQ(2.61)
2 AC_INIT(rpm, 4.10.90, rpm-maint@lists.rpm.org)
3
4 AC_CONFIG_SRCDIR([rpmqv.c])
5 AC_CONFIG_HEADERS([config.h])
6 AC_CONFIG_MACRO_DIR([m4])
7
8 AM_INIT_AUTOMAKE([1.10 foreign tar-ustar dist-bzip2 subdir-objects nostdinc])
9 dnl Allow silent build on automake versions that support it
10 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
11
12 AC_CONFIG_TESTDIR(tests)
13
14 AC_USE_SYSTEM_EXTENSIONS
15
16 AC_DISABLE_STATIC
17
18 PKG_PROG_PKG_CONFIG
19
20 dnl Checks for programs.
21 AC_PROG_CXX
22 AC_PROG_AWK
23 AC_PROG_CC
24 AC_PROG_CPP
25 AC_PROG_INSTALL
26 AC_PROG_LN_S
27 AC_PROG_MAKE_SET
28 AC_PROG_LIBTOOL
29 AC_PROG_YACC
30
31 AC_SUBST(__CC, $CC)
32 AC_PROG_CC_C99
33 if test "$ac_cv_prog_cc_c99" = no; then
34     AC_MSG_ERROR([ISO C99 capable compiler required])
35 fi
36
37 AS=${AS-as}
38 AC_SUBST(AS)
39 if test "$GCC" = yes; then
40     CFLAGS="$CFLAGS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes"
41     cflags_to_try="-fno-strict-aliasing -fstack-protector -Wempty-body"
42     AC_MSG_CHECKING([supported compiler flags])
43     old_cflags=$CFLAGS
44     echo
45     for flag in $cflags_to_try; do
46         CFLAGS="$CFLAGS $flag"
47         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
48                 echo "   $flag"
49                 RPMCFLAGS="$RPMCFLAGS $flag"
50         ],[])
51         CFLAGS=$old_cflags
52     done
53     CFLAGS="$CFLAGS $RPMCFLAGS"
54 fi
55 export CFLAGS
56
57 AC_SYS_LARGEFILE
58
59 dnl
60 dnl look for POSIX chmod attributes
61 dnl
62 AC_MSG_CHECKING(POSIX chmod)
63 touch foo.chmodtest
64 chmod 744 foo.chmodtest
65 chmod +X foo.chmodtest 2>/dev/null
66 a=`ls -l foo.chmodtest | awk '{print substr($1,1,10)}'`
67 rm -f foo.chmodtest
68 if test "$a" = "-rwxr-xr-x"; then
69     AC_MSG_RESULT(yes)
70     FIXPERMS=a+rX,u+w,g-w,o-w 
71 else
72     AC_MSG_RESULT(no (tell your OS vendor about GNU fileutils))
73     FIXPERMS=a+r,u+w,g-w,o-w 
74 fi
75 AC_SUBST(FIXPERMS)
76
77 dnl AM_DISABLE_SHARED
78 AM_PROG_LIBTOOL
79
80 AC_CHECK_TOOL(AR, ar, :)
81
82 dnl
83 dnl use defaults if cross-compiling, otherwise use the default path.
84 dnl
85 if test "$cross_compiling" = "yes"; then
86     MYPATH=":"
87 else
88     MYPATH=$PATH
89 fi
90
91 dnl
92 dnl Find some common programs
93 dnl
94 AC_PATH_PROG(__7ZIP, 7zip, /usr/bin/7za, $MYPATH)
95 AC_PATH_PROG(__BZIP2, bzip2, /usr/bin/bzip2, $MYPATH)
96 AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH)
97 AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH)
98 AC_PATH_PROG(__CHMOD, chmod, /bin/chmod, $MYPATH)
99 AC_PATH_PROG(__CHOWN, chown, /bin/chown, $MYPATH)
100 AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH)
101 AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH)
102 AC_PATH_PROG(__CURL, curl, /usr/bin/curl, $MYPATH)
103 AC_PATH_PROG(__FILE, file, /usr/bin/file, $MYPATH)
104 AC_PATH_PROG(__GPG, gpg, /usr/bin/gpg, $MYPATH)
105 AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH)
106 AC_PATH_PROG(__GZIP, gzip, /bin/gzip, $MYPATH)
107 AC_PATH_PROG(__UNZIP, unzip, /usr/bin/unzip, $MYPATH)
108 AC_PATH_PROG(__ID, id, /usr/bin/id, $MYPATH)
109 AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH)
110 AC_PATH_PROG(__LRZIP, lrzip, /usr/bin/lrzip, $MYPATH)
111 AC_PATH_PROG(__LZIP, lzip, /usr/bin/lzip, $MYPATH)
112 AC_PATH_PROG(__XZ, xz, /usr/bin/xz, $MYPATH)
113 AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH)
114 AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH)
115 AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH)
116 AC_PATH_PROG(__PATCH, patch, /usr/bin/patch, $MYPATH)
117 AC_PATH_PROG(__RESTORECON, restorecon, /sbin/restorecon, $MYPATH)
118 AC_MSG_CHECKING(old version of patch)
119     PATCHVERSION=`patch --version 2>&1`
120
121     if test "$PATCHVERSION" = "Patch version 2.1"; then
122         AC_DEFINE(HAVE_OLDPATCH_21, 1,
123                 [Define if the patch call you'll be using is 2.1 or older])
124         AC_MSG_RESULT(patch older then 2.2 found)
125     else
126         AC_MSG_RESULT(patch later then 2.2 found)
127     fi
128
129 AC_PATH_PROG(__PERL, perl, /usr/bin/perl, $MYPATH)
130 AC_PATH_PROG(__PGP, pgp, /usr/bin/pgp, $MYPATH)
131 AC_PATH_PROG(__PYTHON, python, /usr/bin/python, $MYPATH) 
132 AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH)
133 AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH)
134 AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH)
135 AC_PATH_PROG(__SEMODULE, semodule, /usr/bin/semodule, $MYPATH)
136 AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH)
137 AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH)
138
139 AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH)
140 AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH)
141 AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH)
142 AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH)
143 AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH)
144
145 AC_PATH_PROG(__GIT, git, /usr/bin/git, $MYPATH)
146 AC_PATH_PROG(__HG, hg, /usr/bin/hg, $MYPATH)
147 AC_PATH_PROG(__BZR, bzr, /usr/bin/bzr, $MYPATH)
148 AC_PATH_PROG(__QUILT, quilt, /usr/bin/quilt, $MYPATH)
149
150 AC_PATH_PROG(__FAKECHROOT, fakechroot, no, $MYPATH)
151 AM_CONDITIONAL(HAVE_FAKECHROOT, [test "$__FAKECHROOT" != "no"])
152
153 dnl see if we have a mkdir that supports `-p' for rpmbuild's purposes
154 AC_PROG_MKDIR_P
155 if ! echo $MKDIR_P | grep -q mkdir; then 
156   __MKDIR_P="`echo ${prefix}/lib/rpm/mkinstalldirs`"
157 else
158   __MKDIR_P=$MKDIR_P
159 fi
160 AC_DEFINE_UNQUOTED(__MKDIR_P, "${__MKDIR_P}",
161 [A full path to a program, possibly with arguments, that will create a
162    directory and all necessary parent directories, ala 'mkdir -p'])
163 AC_SUBST(__MKDIR_P)
164
165 #=================
166 # Check for zlib library. 
167
168 WITH_ZLIB_INCLUDE=
169 WITH_ZLIB_LIB=
170
171 AC_CHECK_HEADERS([zlib.h],[
172   AS_IF([test -z "${WITH_ZLIB_LIB}"],[
173     for zlib in z gz ; do
174       AC_CHECK_LIB(${zlib}, gzread, 
175         [WITH_ZLIB_LIB="-l${zlib}"; break])
176     done
177
178 dnl zlib-1.0.4 has not gzseek
179     AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])])
180   ])
181 ],[
182   AC_MSG_ERROR([missing required header zlib.h])
183 ])
184
185 AC_SUBST(WITH_ZLIB_INCLUDE)
186 AC_SUBST(WITH_ZLIB_LIB)
187
188 #=================
189 # Check for bzip2 library.
190
191 AC_CHECK_HEADERS([bzlib.h],[
192   AC_CHECK_LIB(bz2, BZ2_bzread, [WITH_BZ2_LIB=-lbz2])
193 ])
194 AC_SUBST(WITH_BZ2_LIB)
195
196 #=================
197 # Check for lzma library.
198
199 AC_CHECK_HEADERS([lzma.h],[
200   AC_CHECK_LIB(lzma, lzma_easy_encoder, [WITH_LZMA_LIB=-llzma])
201 ])
202 AC_SUBST(WITH_LZMA_LIB)
203
204 #=================
205
206 dnl
207 dnl Check for features
208 dnl
209
210 dnl Checks for libraries.
211
212 AC_CHECK_FUNC(gethostname, [], [
213     AC_CHECK_LIB(nsl, gethostname)
214 ])
215
216 AC_CHECK_HEADERS(pthread.h)
217
218 AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [
219   dnl OSF 5.0 has the the symbols prefixed with __ in libpthread.
220   AC_CHECK_LIB(pthread, __pthread_mutex_trylock, [], [
221     AC_CHECK_LIB(thread, mutex_lock)
222   ])
223 ])
224
225 AC_SEARCH_LIBS(dlopen, [dl])
226
227 #=================
228 # Check for libelf library. Prefer external, otherwise none.
229 WITH_LIBELF_LIB=
230 AC_CHECK_HEADER([libelf.h])
231 AC_CHECK_HEADERS([gelf.h], [
232         AC_CHECK_LIB(elf, gelf_getvernaux, [
233             AC_DEFINE(HAVE_LIBELF, 1, [Define to 1 if you have the 'elf' library (-lelf).])
234             WITH_LIBELF_LIB="-lelf"
235             WITH_LIBELF=yes
236         ])
237 ])
238 AC_SUBST(WITH_LIBELF_LIB)
239 AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes])
240
241 AC_CHECK_HEADERS([dwarf.h], [
242   WITH_LIBDWARF=yes
243 ])
244 AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes])
245
246 #=================
247 # Check for NSS library.
248 # We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS 
249 # have a header named nss.h... so make extra check for NSS's sechash.h 
250 # which we use too and hopefully is slightly more unique to NSS.
251 WITH_NSS_INCLUDE=
252 WITH_NSS_LIB=
253 AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [
254   AC_MSG_ERROR([missing required NSPR / NSS header])
255 ])
256 AC_CHECK_LIB(nss3, NSS_NoDB_Init, [
257   WITH_NSS_LIB=-lnss3
258 ], [
259   AC_MSG_ERROR([missing required NSS library 'nss3'])
260 ])
261 AC_SUBST(WITH_NSS_INCLUDE)
262 AC_SUBST(WITH_NSS_LIB)
263
264 #=================
265 # Check for magic library.
266 WITH_MAGIC_INCLUDE=
267 WITH_MAGIC_LIB=
268
269 AC_CHECK_HEADER([magic.h], [
270     AC_CHECK_LIB(magic, magic_open, [
271       WITH_MAGIC_INCLUDE=
272       WITH_MAGIC_LIB="-lmagic"
273     ],[
274       AC_MSG_ERROR([missing required library 'libmagic']) 
275     ])
276 ],[
277       AC_MSG_ERROR([missing required header magic.h]) 
278 ])
279
280 AC_SUBST(WITH_MAGIC_INCLUDE)
281 AC_SUBST(WITH_MAGIC_LIB)
282
283 #=================
284 # Check for popt library.
285 WITH_POPT_INCLUDE=
286 WITH_POPT_LIB=
287
288 AC_CHECK_HEADER([popt.h], [
289   AC_CHECK_LIB(popt, poptGetContext, [
290       WITH_POPT_INCLUDE=
291       WITH_POPT_LIB="-lpopt"
292   ],[
293     AC_MSG_ERROR([missing required library popt])
294   ])
295 ],[
296   AC_MSG_ERROR([missing required header popt.h])
297 ])
298
299 AC_SUBST(WITH_POPT_INCLUDE)
300 AC_SUBST(WITH_POPT_LIB)
301
302 #=================
303 # Process --with/without-external-db
304 AC_ARG_WITH(external_db, [AS_HELP_STRING([--with-external-db],[build against an external Berkeley db])],
305 [case "$with_external_db" in
306 yes|no) ;;
307 *) AC_MSG_ERROR([invalid argument to --with-external-db]) ;;
308 esac],
309 [with_external_db=no])
310
311 case "$with_external_db" in
312 yes )
313   AC_CHECK_HEADERS([db.h],[
314     AC_PREPROC_IFELSE([
315       AC_LANG_SOURCE([
316         #include <db.h>
317         #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5))
318         #error Berkeley DB too old
319         #endif
320       ])
321     ],[ WITH_DB_LIB=-ldb ], 
322       [ AC_MSG_ERROR([Berkeley DB version >= 4.5 required])
323     ])
324   ],[
325     AC_MSG_ERROR([missing required header db.h])
326   ])
327   ;;
328 * ) # Fall back to internal db if available
329   if [ test -x db/dist/configure ]; then
330     AC_DEFINE(HAVE_DB_H, 1, [Define if you have the <db3/db.h> header file])
331   else
332     AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL])
333   fi
334   ;;
335 esac
336
337 AC_SUBST([WITH_DB_LIB])
338
339 AM_GNU_GETTEXT_VERSION([0.16.1])
340 AM_GNU_GETTEXT([external])
341
342 dnl Checks for header files we can live without.
343 AC_HEADER_STDC
344 AC_HEADER_MAJOR
345 AC_STRUCT_DIRENT_D_TYPE
346
347 AC_CHECK_HEADERS(limits.h)
348 AC_CHECK_HEADERS(fcntl.h getopt.h)
349
350 AC_CHECK_HEADERS(sys/utsname.h)
351
352 AC_CHECK_HEADERS(sys/systemcfg.h)
353 AC_CHECK_HEADERS(sys/param.h)
354
355 dnl statfs portability fiddles.
356 dnl
357 dnl We should really emulate/steal sections of the statfs and struct statfs
358 dnl checks from GNU fileutils.
359 dnl
360 AC_MSG_CHECKING(for struct statfs)
361
362 dnl
363 dnl this is easier than nesting AC_TRY_COMPILEs...
364 dnl
365 found_struct_statfs=no
366
367 if test X$found_struct_statfs = Xno ; then
368 dnl Solaris 2.6+ wants to use statvfs
369 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
370 #ifdef HAVE_SYS_TYPES_H
371 #include <sys/types.h>
372 #endif
373 #include <sys/statvfs.h> ]], [[struct statvfs sfs;]])],[AC_MSG_RESULT(in sys/statvfs.h)
374         AC_DEFINE(STATFS_IN_SYS_STATVFS, 1,
375                 [statfs in <sys/statvfs.h> (for solaris 2.6+ systems)])
376         found_struct_statfs=yes],[])
377 fi
378
379 if test X$found_struct_statfs = Xno ; then
380 dnl first try including sys/vfs.h
381 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
382 #ifdef HAVE_SYS_TYPES_H
383 #include <sys/types.h>
384 #endif
385 #include <sys/vfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/vfs.h)
386         AC_DEFINE(STATFS_IN_SYS_VFS, 1, [statfs in <sys/vfs.h> (for linux systems)])
387         found_struct_statfs=yes],[])
388 fi
389
390 if test X$found_struct_statfs = Xno ; then
391 dnl ...next try including sys/mount.h
392 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
393 #ifdef HAVE_SYS_TYPES_H
394 #include <sys/types.h>
395 #endif
396 #ifdef HAVE_SYS_PARAM_H
397 #include <sys/param.h>
398 #endif
399 #include <sys/mount.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/mount.h)
400         AC_DEFINE(STATFS_IN_SYS_MOUNT, 1, [statfs in <sys/mount.h> (for Digital Unix 4.0D systems)])
401         found_struct_statfs=yes],[])
402 fi
403
404 if test X$found_struct_statfs = Xno ; then
405 dnl ...still no joy.  Try sys/statfs.h
406 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
407 #ifdef HAVE_SYS_TYPES_H
408 #include <sys/types.h>
409 #endif
410 #include <sys/statfs.h> ]], [[struct statfs sfs;]])],[AC_MSG_RESULT(in sys/statfs.h)
411         AC_DEFINE(STATFS_IN_SYS_STATFS, 1, [statfs in <sys/statfs.h> (for Irix 6.4 systems)])
412         found_struct_statfs=yes],[])
413 fi
414
415 if test X$found_struct_statfs = Xno ; then
416 dnl ...no luck.  Warn the user of impending doom.
417 AC_MSG_WARN(not found)
418 fi
419
420 dnl
421 dnl if we found the struct, see if it has the f_bavail member.  Some OSes
422 dnl don't, including IRIX 6.5+
423 dnl
424 if test X$found_struct_statfs = Xyes ; then
425 AC_MSG_CHECKING(for f_bavail member in struct statfs)
426 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
427 #ifdef HAVE_SYS_TYPES_H
428 #include <sys/types.h>
429 #endif
430 #if STATFS_IN_SYS_STATVFS
431 # include <sys/statvfs.h>
432   typedef struct statvfs STATFS_t;
433 #else
434   typedef struct statfs STATFS_t;
435 # if STATFS_IN_SYS_VFS
436 #  include <sys/vfs.h>
437 # elif STATFS_IN_SYS_MOUNT
438 #  include <sys/mount.h>
439 # elif STATFS_IN_SYS_STATFS
440 #  include <sys/statfs.h>
441 # endif
442 #endif ]], [[STATFS_t sfs;
443         sfs.f_bavail = 0;]])],[AC_MSG_RESULT(yes)
444         AC_DEFINE(STATFS_HAS_F_BAVAIL, 1, [Define if struct statfs has the f_bavail member])],[AC_MSG_RESULT(no)
445 ])
446 fi
447
448 if test X$found_struct_statfs = Xyes ; then
449 dnl
450 dnl now check to see if we have the 4-argument variant of statfs()
451 dnl this pretty much requires AC_RUN_IFELSE([AC_LANG_SOURCE([[]])],[],[],[])
452 dnl
453 AC_MSG_CHECKING([if statfs() requires 4 arguments])
454 AC_RUN_IFELSE([AC_LANG_SOURCE([[
455 #ifdef HAVE_SYS_TYPES_H
456 #include <sys/types.h>
457 #endif
458 #ifdef STATFS_IN_SYS_VFS
459 #include <sys/vfs.h>
460 #elif STATFS_IN_SYS_MOUNT
461 #include <sys/mouht.h>
462 #elif STATFS_IN_SYS_STATFS
463 #include <sys/statfs.h>
464 #endif
465 main() {
466         struct statfs sfs;
467         exit (statfs(".", &sfs, sizeof(sfs), 0));
468 }
469 ]])],[AC_MSG_RESULT(yes)
470         AC_DEFINE(STAT_STATFS4, 1, [Define if the statfs() call takes 4 arguments])],[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)
471 ])
472 fi
473
474 dnl look for libc features
475
476 dnl Check for missing typedefs
477 AC_TYPE_MODE_T
478 AC_TYPE_OFF_T
479 AC_TYPE_PID_T
480 AC_TYPE_SIZE_T
481
482 dnl Checks for library functions.
483 AC_FUNC_MMAP
484
485 AC_CHECK_FUNCS(putenv)
486 AC_CHECK_FUNCS(mempcpy)
487 AC_CHECK_FUNCS(fdatasync)
488
489 AC_REPLACE_FUNCS(stpcpy stpncpy)
490
491 AC_CHECK_FUNCS(__secure_getenv)
492
493 AC_CHECK_FUNCS(
494    [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown],
495    [], [AC_MSG_ERROR([function required by rpm])])
496
497 AC_LIBOBJ(fnmatch)
498
499 dnl check if python is requested
500 AC_ARG_ENABLE(python, [AS_HELP_STRING([--enable-python],[build rpm python bindings])],
501 [case "$enable_python" in
502 yes|no) ;;
503 *) AC_MSG_ERROR([invalid argument to --enable-python])
504   ;;
505 esac],
506 [enable_python=no])
507
508 AS_IF([test "$enable_python" = yes],[
509   AM_PATH_PYTHON([2.6],[
510     WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'`
511     WITH_PYTHON_SUBPACKAGE=1
512     save_CPPFLAGS="$CPPFLAGS"
513     CPPFLAGS="$CPPFLAGS -I$WITH_PYTHON_INCLUDE"
514     AC_CHECK_HEADER([Python.h],[],
515       [AC_MSG_ERROR([missing Python.h])
516       ])
517     CPPFLAGS="$save_CPPFLAGS"
518     save_LIBS="$LIBS"
519     AC_SEARCH_LIBS([Py_Main],[python${PYTHON_VERSION} python],[
520       WITH_PYTHON_LIB="$ac_res"
521     ],[AC_MSG_ERROR([missing python library])
522     ])
523     LIBS="$save_LIBS"
524   ])
525 ],[
526     WITH_PYTHON_INCLUDE=
527     WITH_PYTHON_LIB=
528     WITH_PYTHON_SUBPACKAGE=0
529 ])
530
531 AC_SUBST(WITH_PYTHON_INCLUDE)
532 AC_SUBST(WITH_PYTHON_LIB)
533
534 AM_CONDITIONAL(ENABLE_PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1])
535
536 AC_PATH_PROG(DOXYGEN, doxygen, no)
537 dnl
538 dnl Only build internal API + source hacking docs on request
539 dnl
540 AC_ARG_WITH(hackingdocs, [AS_HELP_STRING([--with-hackingdocs],[build rpm hacking docs])],,[with_hackingdocs=no])
541
542 case "$with_hackingdocs" in
543 auto)
544   AS_IF([test "$DOXYGEN" = no],[with_hackingdocs=no],[with_hackingdocs=no])
545   ;;
546 yes)
547   AS_IF([test "$DOXYGEN" = no],
548     [AC_MSG_ERROR([rpm hacking docs eeds doxygen in PATH])])
549   ;;
550 esac
551 AC_CHECK_PROG(HAVE_DOT,[dot],[YES],[NO])
552
553 WITH_SELINUX_LIB=
554 AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux],[build with selinux support])],
555 [case "$with_selinux" in
556 yes|no) ;;
557 *) AC_MSG_ERROR([invalid argument to --with-selinux])
558   ;;
559 esac],
560 [with_selinux=no])
561
562 AS_IF([test "$with_selinux" = yes],[
563   AC_CHECK_HEADER([selinux/selinux.h],[
564     save_LIBS="$LIBS"
565     AC_CHECK_LIB([selinux],[is_selinux_enabled],[],[
566       AC_MSG_ERROR([--with-selinux given, but is_selinux_enabled not found in libselinux])])
567     AC_CHECK_LIB([selinux],[selinux_getpolicytype],[],[
568       AC_MSG_ERROR([--with-selinux given, but selinux_getpolicytype not found in libselinux])])
569     AC_CHECK_LIB([selinux],[selinux_reset_config],[],[
570       AC_MSG_ERROR([--with-selinux given, but selinux_reset_config not found in libselinux])])
571     LIBS="$save_LIBS"
572   ],[
573     AC_MSG_ERROR([--with-selinux given, but selinux/selinux.h not found])
574   ])
575
576   AC_CHECK_HEADER([selinux/label.h],[
577     save_LIBS="$LIBS"
578     AC_CHECK_LIB([selinux],[selabel_close],[],[
579       AC_MSG_ERROR([--with-selinux given, but selabel_close not found in libselinux])])
580     AC_CHECK_LIB([selinux],[selabel_lookup_raw],[],[
581       AC_MSG_ERROR([--with-selinux given, but selabel_lookup_raw not found in libselinux])])
582     AC_CHECK_LIB([selinux],[selabel_open],[],[
583       AC_MSG_ERROR([--with-selinux given, but selabel_open not found in libselinux])])
584     LIBS="$save_LIBS"
585   ],[
586     AC_MSG_ERROR([--with-selinux given, but selinux/label.h not found])
587   ])
588
589   dnl FIXME: semanage is only needed for the sepolicy plugin
590   AC_CHECK_HEADER([semanage/semanage.h],[
591     save_LIBS="$LIBS"
592     AC_CHECK_LIB([semanage],[semanage_begin_transaction],[],[
593       AC_MSG_ERROR([--with-selinux given, but semanage_begin_transaction missing in libsemanage])])
594     AC_CHECK_LIB([semanage],[semanage_commit],[],[
595       AC_MSG_ERROR([--with-selinux given, but semanage_commit missing in libsemanage])])
596     AC_CHECK_LIB([semanage],[semanage_connect],[],[
597       AC_MSG_ERROR([--with-selinux given, but semanage_connect missing in libsemanage])])
598     AC_CHECK_LIB([semanage],[semanage_disconnect],[],[
599       AC_MSG_ERROR([--with-selinux given, but semanage_disconnect missing in libsemanage])])
600     AC_CHECK_LIB([semanage],[semanage_handle_create],[],[
601       AC_MSG_ERROR([--with-selinux given, but semanage_handle_create missing in libsemanage])])
602     AC_CHECK_LIB([semanage],[semanage_handle_destroy],[],[
603       AC_MSG_ERROR([--with-selinux given, but semanage_handle_destroy missing in libsemanage])])
604     AC_CHECK_LIB([semanage],[semanage_is_connected],[],[
605       AC_MSG_ERROR([--with-selinux given, but semanage_is_connected missing in libsemanage])])
606     AC_CHECK_LIB([semanage],[semanage_module_install_base_file],[],[
607       AC_MSG_ERROR([--with-selinux given, but semanage_module_install_base_file missing in libsemanage])])
608     AC_CHECK_LIB([semanage],[semanage_module_install_file],[],[
609       AC_MSG_ERROR([--with-selinux given, but semanage_module_install_file missing in libsemanage])])
610     AC_CHECK_LIB([semanage],[semanage_module_remove],[],[
611       AC_MSG_ERROR([--with-selinux given, but semanage_module_remove missing in libsemanage])])
612     AC_CHECK_LIB([semanage],[semanage_select_store],[],[
613       AC_MSG_ERROR([--with-selinux given, but semanage_select_store missing in libsemanage])])
614     AC_CHECK_LIB([semanage],[semanage_set_check_contexts],[],[
615       AC_MSG_ERROR([--with-selinux given, but semanage_set_check_contexts missing in libsemanage])])
616     AC_CHECK_LIB([semanage],[semanage_set_create_store],[],[
617       AC_MSG_ERROR([--with-selinux given, but semanage_set_create_store missing in libsemanage])])
618     AC_CHECK_LIB([semanage],[semanage_set_reload],[],[
619       AC_MSG_ERROR([--with-selinux given, but semanage_set_reload missing in libsemanage])])
620     LIBS="$save_LIBS"
621   ],[
622     AC_MSG_ERROR([--with-selinux given, but semanage/semanage.h not found])
623   ])
624 ])
625
626 AS_IF([test "$with_selinux" = yes],[
627   AC_DEFINE(WITH_SELINUX, 1, [Build with selinux support?])
628   WITH_SELINUX_LIB="-lselinux"
629   WITH_SEMANAGE_LIB="-lsemanage"
630 ])
631 AC_SUBST(WITH_SELINUX_LIB)
632 AC_SUBST(WITH_SEMANAGE_LIB)
633 AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes])
634
635 # libcap
636 WITH_CAP_LIB=
637 AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])],
638 [case "$with_cap" in
639 yes|no) ;;
640 *) AC_MSG_ERROR([invalid argument to --with-cap])
641   ;;
642 esac],
643 [with_cap=no])
644
645 AS_IF([test "$with_cap" = yes],[
646   AC_CHECK_HEADER([sys/capability.h],[
647     AC_CHECK_LIB(cap,[cap_get_file], [
648       with_cap=yes
649       save_LIBS="$LIBS"
650       AC_CHECK_LIB(cap,[cap_compare], [
651         AC_DEFINE(HAVE_CAP_COMPARE, 1, [Have cap_compare function?])
652       ])
653       LIBS="$save_LIBS"
654     ],[
655       AC_MSG_ERROR([--with-cap given, but libcap not found])])
656   ],[
657     AC_MSG_ERROR([--with-cap given, but sys/capability.h not found])
658   ])
659 ])
660
661 AS_IF([test "$with_cap" = yes],[
662   AC_DEFINE(WITH_CAP, 1, [Build with capability support?])
663   WITH_CAP_LIB="-lcap"
664 ])
665 AC_SUBST(WITH_CAP_LIB)
666 AM_CONDITIONAL(CAP,[test "$with_cap" = yes])
667
668 WITH_ACL_LIB=
669 AC_ARG_WITH(acl, [AS_HELP_STRING([--with-acl],[build with acl support])],
670 [case "$with_acl" in
671 yes|no) ;;
672 *) AC_MSG_ERROR([invalid argument to --with-acl])
673   ;;
674 esac],
675 [with_acl=no])
676
677 AS_IF([test "$with_acl" = yes],[
678   dnl verification uses non-portable acl_equiv_mode() 
679   AC_CHECK_HEADER([acl/libacl.h],[
680     AC_CHECK_LIB(acl,[acl_equiv_mode],[with_acl=yes],[
681       AC_MSG_ERROR([--with-acl given, but libacl not found or not suitable])])
682   ],[
683     AC_MSG_ERROR([--with-acl given, but acl/libacl.h not found])
684   ])
685 ])
686
687 AS_IF([test "$with_acl" = yes],[
688   AC_DEFINE(WITH_ACL, 1, [Build with acl support?])
689   WITH_ACL_LIB="-lacl"
690 ])
691 AC_SUBST(WITH_ACL_LIB)
692 AM_CONDITIONAL(ACL,[test "$with_acl" = yes])
693
694 AC_ARG_WITH([lua], [AS_HELP_STRING([--with-lua], [build with lua support])],
695             [],
696             [with_lua=yes])
697
698 AS_IF([test "$with_lua" != no],[
699   PKG_CHECK_MODULES([LUA],
700     [lua >= 5.1],
701     [AC_DEFINE(WITH_LUA, 1, [Build with lua support?])],
702     [AC_MSG_ERROR([lua not present (--without-lua to disable)])])
703   AC_SUBST(LUA_CFLAGS)
704   AC_SUBST(LUA_LIBS)
705 ])
706 AM_CONDITIONAL(WITH_LUA,[test "$with_lua" = yes])
707
708 AC_ARG_ENABLE(plugins, [AS_HELP_STRING([--disable-plugins],[build without plugin support])],,[enable_plugins=yes])
709 AS_IF([test "$enable_plugins" = yes],[
710   AC_DEFINE(ENABLE_PLUGINS, 1, [Build with plugin support?])
711 ])
712 AM_CONDITIONAL(ENABLE_PLUGINS,[test "$enable_plugins" = yes])
713
714
715 with_dmalloc=no
716 AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])])
717 if test "$with_dmalloc" = yes ; then
718   AC_DEFINE(DMALLOC, 1, [Build with dmalloc support?])
719   LIBS="$LIBS -ldmalloc"
720 fi
721
722 AC_CHECK_FUNCS(getpassphrase)
723
724 #
725 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os
726 #
727 host_os_gnu=-gnu
728 if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then
729         host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'`
730 fi
731 if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then
732         host_os=`echo "${host_os}" | sed 's/-gnueabi$//'`
733         host_os_gnu=-gnueabi
734 fi
735 if echo "$host_os" | grep '.*-gnu' > /dev/null ; then
736         host_os=`echo "${host_os}" | sed 's/-gnu$//'`
737 fi
738
739 changequote(<, >)
740 host_os_exact="${host_os}"
741 host_os_major=`echo "${host_os}" | sed 's/\..*$//'`
742 host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'`
743 changequote([, ])
744
745 for provscript in ${host_cpu}-${host_os_exact}.prov ${host_os_exact}.prov ${host_os_major}.prov ${host_os_noversion}.prov none ; do {
746     if test -f ${srcdir}/autodeps/${provscript} ; then
747        if [[ ${provscript} == none ]] ; then
748            echo "*** no default provides information is available for ${host_os_noversion}"
749        else
750            echo "using ${srcdir}/autodeps/${provscript} for automatic provides generation"
751        fi
752        ln -sf ${provscript} ${srcdir}/autodeps/find-provides
753        break
754     fi
755 }; done
756
757
758 for reqscript in ${host_cpu}-${host_os_exact}.req ${host_os_exact}.req ${host_os_major}.req ${host_os_noversion}.req none ; do {
759     if test -f ${srcdir}/autodeps/${reqscript} ; then
760        if [[ ${reqscript} == none ]] ; then
761            echo "*** no default requires information is available for ${host_os_noversion}"
762        else
763           echo "using ${srcdir}/autodeps/${reqscript} for automatic requires generation"
764        fi
765        ln -sf ${reqscript} ./autodeps/find-requires
766        break
767     fi
768 } done
769
770 dnl permit overriding build_vendor for "canonical rpm vendor"
771 RPMCANONVENDOR="$build_vendor"
772 AC_ARG_WITH([vendor], 
773   AS_HELP_STRING([--with-vendor=VENDOR], [specify rpm vendor name]),
774   [RPMCANONVENDOR=$withval])
775 AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor])
776            
777 RPMCANONOS="$host_os_noversion"
778 RPMCANONGNU="$host_os_gnu"
779 AC_SUBST(RPMCANONVENDOR)
780 AC_SUBST(RPMCANONOS)
781 AC_SUBST(RPMCANONGNU)
782
783 if test X"$prefix" = XNONE ; then
784     usrprefix="$ac_default_prefix"
785 else
786     usrprefix=$prefix
787 fi
788
789 RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
790 AC_SUBST(RPMCONFIGDIR)
791
792 AC_SUBST(OBJDUMP)
793
794 if test "$with_external_db" = no; then
795     AC_CONFIG_SUBDIRS(db3)
796 fi
797
798 AM_CONDITIONAL([WITH_INTERNAL_DB],[test "$with_external_db" = no])
799 AM_CONDITIONAL([DOXYGEN],[test "$DOXYGEN" != no])
800 AM_CONDITIONAL([HACKINGDOCS],[test "$with_hackingdocs" = yes])
801
802 AC_PATH_PROG(AUTOM4TE,autom4te,:)
803
804 AC_SUBST([dirstamp],[\${am__leading_dot}dirstamp])
805
806 AC_CONFIG_FILES([Makefile
807         rpmio/Makefile lib/Makefile build/Makefile sign/Makefile
808         po/Makefile.in scripts/Makefile fileattrs/Makefile
809         misc/Makefile 
810         doc/Makefile
811         python/Makefile
812         luaext/Makefile
813         tests/Makefile
814         plugins/Makefile
815         python/setup.py
816   ])
817 AC_OUTPUT