1 dnl macros to configure gnupg
2 dnl Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
4 dnl This file is part of GnuPG.
6 dnl GnuPG is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU General Public License as published by
8 dnl the Free Software Foundation; either version 3 of the License, or
9 dnl (at your option) any later version.
11 dnl GnuPG is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 dnl GNU General Public License for more details.
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with this program; if not, see <https://www.gnu.org/licenses/>.
19 dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME)
20 dnl Check whether a typedef exists and create a #define $2 if it exists
22 AC_DEFUN([GNUPG_CHECK_TYPEDEF],
23 [ AC_MSG_CHECKING(for $1 typedef)
24 AC_CACHE_VAL(gnupg_cv_typedef_$1,
25 [AC_TRY_COMPILE([#define _GNU_SOURCE 1
27 #include <sys/types.h>], [
30 ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
31 AC_MSG_RESULT($gnupg_cv_typedef_$1)
32 if test "$gnupg_cv_typedef_$1" = yes; then
33 AC_DEFINE($2,1,[Defined if a `]$1[' is typedef'd])
38 dnl GNUPG_CHECK_GNUMAKE
40 AC_DEFUN([GNUPG_CHECK_GNUMAKE],
42 if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then
47 *** It seems that you are not using GNU make. Some make tools have serious
48 *** flaws and you may not be able to build this software at all. Before you
49 *** complain, please try GNU make: GNU make is easy to build and available
50 *** at all GNU archives. It is always available from ftp.gnu.org:/gnu/make.
55 dnl GNUPG_CHECK_FAQPROG
57 AC_DEFUN([GNUPG_CHECK_FAQPROG],
58 [ AC_MSG_CHECKING(for faqprog.pl)
59 if faqprog.pl -V 2>/dev/null | grep '^faqprog.pl ' >/dev/null 2>&1; then
66 AC_MSG_RESULT($working_faqprog)
68 AM_CONDITIONAL(WORKING_FAQPROG, test "$working_faqprog" = "yes" )
70 dnl if test $working_faqprog = no; then
73 dnl *** It seems that the faqprog.pl program is not installed;
74 dnl *** however it is only needed if you want to change the FAQ.
75 dnl *** (faqprog.pl should be available at:
76 dnl *** ftp://ftp.gnupg.org/gcrypt/contrib/faqprog.pl )
77 dnl *** No need to worry about this warning.
82 dnl GNUPG_CHECK_DOCBOOK_TO_TEXI
84 AC_DEFUN([GNUPG_CHECK_DOCBOOK_TO_TEXI],
86 AC_CHECK_PROG(DOCBOOK_TO_TEXI, docbook2texi, yes, no)
87 AC_MSG_CHECKING(for sgml to texi tools)
89 if test "$ac_cv_prog_DOCBOOK_TO_TEXI" = yes; then
90 if sgml2xml -v /dev/null 2>&1 | grep 'SP version' >/dev/null 2>&1 ; then
91 working_sgmltotexi=yes
94 AC_MSG_RESULT($working_sgmltotexi)
95 AM_CONDITIONAL(HAVE_DOCBOOK_TO_TEXI, test "$working_sgmltotexi" = "yes" )
100 dnl GNUPG_CHECK_ENDIAN
101 dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
103 AC_DEFUN([GNUPG_CHECK_ENDIAN],
105 tmp_assumed_endian=big
107 if test "$cross_compiling" = yes; then
110 tmp_assumed_endian=little
116 AC_MSG_CHECKING(endianness)
117 AC_CACHE_VAL(gnupg_cv_c_endian,
118 [ gnupg_cv_c_endian=unknown
119 # See if sys/param.h defines the BYTE_ORDER macro.
120 AC_TRY_COMPILE([#include <sys/types.h>
121 #include <sys/param.h>], [
122 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
124 #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
125 AC_TRY_COMPILE([#include <sys/types.h>
126 #include <sys/param.h>], [
127 #if BYTE_ORDER != BIG_ENDIAN
129 #endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)])
130 if test "$gnupg_cv_c_endian" = unknown; then
131 AC_TRY_RUN([main () {
132 /* Are we little or big endian? From Harbison&Steele. */
136 char c[sizeof (long)];
139 exit (u.c[sizeof (long) - 1] == 1);
141 gnupg_cv_c_endian=little,
142 gnupg_cv_c_endian=big,
143 gnupg_cv_c_endian=$tmp_assumed_endian
144 tmp_assumed_warn=" (assumed)"
148 AC_MSG_RESULT([${gnupg_cv_c_endian}${tmp_assumed_warn}])
149 if test "$gnupg_cv_c_endian" = little; then
150 AC_DEFINE(LITTLE_ENDIAN_HOST,1,
151 [Defined if the host has little endian byte ordering])
153 AC_DEFINE(BIG_ENDIAN_HOST,1,
154 [Defined if the host has big endian byte ordering])
161 # GNUPG_BUILD_PROGRAM(NAME,DEFAULT)
162 # Add a --enable-NAME option to configure an set the
163 # shell variable build_NAME either to "yes" or "no". DEFAULT must
164 # either be "yes" or "no" and decided on the default value for
165 # build_NAME and whether --enable-NAME or --disable-NAME is shown with
167 AC_DEFUN([GNUPG_BUILD_PROGRAM],
168 [m4_define([my_build], [m4_bpatsubst(build_$1, [[^a-zA-Z0-9_]], [_])])
171 AC_ARG_ENABLE([$1], AC_HELP_STRING([--disable-$1],
172 [do not build the $1 program]),
173 my_build=$enableval, my_build=$2)
175 AC_ARG_ENABLE([$1], AC_HELP_STRING([--enable-$1],
176 [build the $1 program]),
177 my_build=$enableval, my_build=$2)
183 AC_MSG_ERROR([only yes or no allowed for feature --enable-$1])
186 m4_undefine([my_build])
191 # GNUPG_DISABLE_GPG_ALGO(NAME,DESCRIPTION)
193 # Add a --disable-gpg-NAME option and the corresponding ac_define
195 AC_DEFUN([GNUPG_GPG_DISABLE_ALGO],
196 [AC_MSG_CHECKING([whether to enable the $2 for gpg])
197 AC_ARG_ENABLE([gpg-$1], AC_HELP_STRING([--disable-gpg-$1],
198 [disable the $2 algorithm in gpg]),
200 AC_MSG_RESULT($enableval)
201 if test x"$enableval" = xyes ; then
202 AC_DEFINE(GPG_USE_[]m4_toupper($1), 1, [Define to support the $2])
209 # Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock
210 # is not called from uid 0 (not tested whether uid 0 works)
211 # For DECs Tru64 we have also to check whether mlock is in librt
212 # mlock is there a macro using memlk()
213 dnl GNUPG_CHECK_MLOCK
215 AC_DEFUN([GNUPG_CHECK_MLOCK],
216 [ AC_CHECK_FUNCS(mlock)
217 if test "$ac_cv_func_mlock" = "no"; then
218 AC_CHECK_HEADERS(sys/mman.h)
219 if test "$ac_cv_header_sys_mman_h" = "yes"; then
221 AC_CHECK_LIB(rt, memlk)
222 AC_CACHE_CHECK([whether mlock is in sys/mman.h],
223 gnupg_cv_mlock_is_in_sys_mman,
226 #ifdef HAVE_SYS_MMAN_H
227 #include <sys/mman.h>
232 /* glibc defines this for functions which it implements
233 * to always fail with ENOSYS. Some functions are actually
234 * named something starting with __ and the normal name
236 #if defined (__stub_mlock) || defined (__stub___mlock)
243 gnupg_cv_mlock_is_in_sys_mman=yes,
244 gnupg_cv_mlock_is_in_sys_mman=no)])
245 if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then
246 AC_DEFINE(HAVE_MLOCK,1,
247 [Defined if the system supports an mlock() call])
251 if test "$ac_cv_func_mlock" = "yes"; then
252 AC_MSG_CHECKING(whether mlock is broken)
253 AC_CACHE_VAL(gnupg_cv_have_broken_mlock,
258 #include <sys/mman.h>
259 #include <sys/types.h>
266 long int pgsize = getpagesize();
268 pool = malloc( 4096 + pgsize );
271 pool += (pgsize - ((long int)pool % pgsize));
273 err = mlock( pool, 4096 );
274 if( !err || errno == EPERM )
281 gnupg_cv_have_broken_mlock="no",
282 gnupg_cv_have_broken_mlock="yes",
283 gnupg_cv_have_broken_mlock="assume-no"
286 if test "$gnupg_cv_have_broken_mlock" = "yes"; then
287 AC_DEFINE(HAVE_BROKEN_MLOCK,1,
288 [Defined if the mlock() call does not work])
290 AC_CHECK_FUNCS(plock)
292 if test "$gnupg_cv_have_broken_mlock" = "no"; then
295 AC_MSG_RESULT(assuming no)
303 dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
305 AC_DEFUN([GNUPG_FUNC_MKDIR_TAKES_ONE_ARG],
306 [AC_CHECK_HEADERS(sys/stat.h unistd.h direct.h)
307 AC_CACHE_CHECK([if mkdir takes one argument], gnupg_cv_mkdir_takes_one_arg,
309 #include <sys/types.h>
310 #ifdef HAVE_SYS_STAT_H
311 # include <sys/stat.h>
318 #endif], [mkdir ("foo", 0);],
319 gnupg_cv_mkdir_takes_one_arg=no, gnupg_cv_mkdir_takes_one_arg=yes)])
320 if test $gnupg_cv_mkdir_takes_one_arg = yes ; then
321 AC_DEFINE(MKDIR_TAKES_ONE_ARG,1,
322 [Defined if mkdir() does not take permission flags])
327 # GNUPG_TIME_T_UNSIGNED
328 # Check whether time_t is unsigned
330 AC_DEFUN([GNUPG_TIME_T_UNSIGNED],
331 [ AC_CACHE_CHECK(whether time_t is unsigned, gnupg_cv_time_t_unsigned,
332 [AC_REQUIRE([AC_HEADER_TIME])dnl
333 AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY(
334 [AC_INCLUDES_DEFAULT([])
335 #if TIME_WITH_SYS_TIME
336 # include <sys/time.h>
340 # include <sys/time.h>
346 [((time_t)-1) < 0])],
347 gnupg_cv_time_t_unsigned=no, gnupg_cv_time_t_unsigned=yes)])
348 if test $gnupg_cv_time_t_unsigned = yes; then
349 AC_DEFINE(HAVE_UNSIGNED_TIME_T,1,[Defined if time_t is an unsigned type])
351 ])# GNUPG_TIME_T_UNSIGNED