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