acinclude.m4 11.2 KB
Newer Older
1
dnl macros to configure gnupg
2
dnl Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
3 4 5 6 7
dnl
dnl This file is part of GnuPG.
dnl
dnl GnuPG is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
Werner Koch's avatar
Werner Koch committed
8
dnl the Free Software Foundation; either version 3 of the License, or
9
dnl (at your option) any later version.
10
dnl
11 12 13 14
dnl GnuPG is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
15
dnl
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/>.
18

19
dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME)
20
dnl Check whether a typedef exists and create a #define $2 if it exists
Werner Koch's avatar
Werner Koch committed
21
dnl
22
AC_DEFUN([GNUPG_CHECK_TYPEDEF],
Werner Koch's avatar
Werner Koch committed
23
  [ AC_MSG_CHECKING(for $1 typedef)
24
    AC_CACHE_VAL(gnupg_cv_typedef_$1,
25 26
    [AC_TRY_COMPILE([#define _GNU_SOURCE 1
    #include <stdlib.h>
Werner Koch's avatar
Werner Koch committed
27 28 29
    #include <sys/types.h>], [
    #undef $1
    int a = sizeof($1);
30 31 32
    ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
    AC_MSG_RESULT($gnupg_cv_typedef_$1)
    if test "$gnupg_cv_typedef_$1" = yes; then
33
        AC_DEFINE($2,1,[Defined if a `]$1[' is typedef'd])
34 35 36
    fi
  ])

Werner Koch's avatar
Werner Koch committed
37

38 39
dnl GNUPG_CHECK_GNUMAKE
dnl
40
AC_DEFUN([GNUPG_CHECK_GNUMAKE],
41
  [
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
    if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then
        :
    else
        AC_MSG_WARN([[
***
*** It seems that you are not using GNU make.  Some make tools have serious
*** flaws and you may not be able to build this software at all. Before you
*** complain, please try GNU make:  GNU make is easy to build and available
*** at all GNU archives.  It is always available from ftp.gnu.org:/gnu/make.
***]])
    fi
  ])

dnl GNUPG_CHECK_FAQPROG
dnl
57
AC_DEFUN([GNUPG_CHECK_FAQPROG],
58 59 60 61
  [ AC_MSG_CHECKING(for faqprog.pl)
    if faqprog.pl -V 2>/dev/null | grep '^faqprog.pl ' >/dev/null 2>&1; then
        working_faqprog=yes
        FAQPROG="faqprog.pl"
62
    else
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
	working_faqprog=no
        FAQPROG=": "
    fi
    AC_MSG_RESULT($working_faqprog)
    AC_SUBST(FAQPROG)
    AM_CONDITIONAL(WORKING_FAQPROG, test "$working_faqprog" = "yes" )

dnl     if test $working_faqprog = no; then
dnl         AC_MSG_WARN([[
dnl ***
dnl *** It seems that the faqprog.pl program is not installed;
dnl *** however it is only needed if you want to change the FAQ.
dnl ***  (faqprog.pl should be available at:
dnl ***    ftp://ftp.gnupg.org/gcrypt/contrib/faqprog.pl )
dnl *** No need to worry about this warning.
dnl ***]])
dnl     fi
80
   ])
81 82 83

dnl GNUPG_CHECK_DOCBOOK_TO_TEXI
dnl
84
AC_DEFUN([GNUPG_CHECK_DOCBOOK_TO_TEXI],
85 86 87 88 89 90 91 92 93 94 95
  [
    AC_CHECK_PROG(DOCBOOK_TO_TEXI, docbook2texi, yes, no)
    AC_MSG_CHECKING(for sgml to texi tools)
    working_sgmltotexi=no
    if test "$ac_cv_prog_DOCBOOK_TO_TEXI" = yes; then
      if sgml2xml -v /dev/null 2>&1 | grep 'SP version' >/dev/null 2>&1 ; then
            working_sgmltotexi=yes
      fi
    fi
    AC_MSG_RESULT($working_sgmltotexi)
    AM_CONDITIONAL(HAVE_DOCBOOK_TO_TEXI, test "$working_sgmltotexi" = "yes" )
96
   ])
97 98 99 100 101 102



dnl GNUPG_CHECK_ENDIAN
dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
dnl
103
AC_DEFUN([GNUPG_CHECK_ENDIAN],
104 105
  [
    tmp_assumed_endian=big
Werner Koch's avatar
Werner Koch committed
106
    tmp_assume_warn=""
107 108 109 110 111 112 113 114 115
    if test "$cross_compiling" = yes; then
      case "$host_cpu" in
         i@<:@345678@:>@* )
            tmp_assumed_endian=little
            ;;
         *)
            ;;
      esac
    fi
Daniel Kahn Gillmor's avatar
Daniel Kahn Gillmor committed
116
    AC_MSG_CHECKING(endianness)
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
    AC_CACHE_VAL(gnupg_cv_c_endian,
      [ gnupg_cv_c_endian=unknown
        # See if sys/param.h defines the BYTE_ORDER macro.
        AC_TRY_COMPILE([#include <sys/types.h>
        #include <sys/param.h>], [
        #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
         bogus endian macros
        #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
        AC_TRY_COMPILE([#include <sys/types.h>
        #include <sys/param.h>], [
        #if BYTE_ORDER != BIG_ENDIAN
         not big endian
        #endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)])
        if test "$gnupg_cv_c_endian" = unknown; then
            AC_TRY_RUN([main () {
              /* Are we little or big endian?  From Harbison&Steele.  */
              union
              {
                long l;
                char c[sizeof (long)];
              } u;
              u.l = 1;
              exit (u.c[sizeof (long) - 1] == 1);
              }],
              gnupg_cv_c_endian=little,
              gnupg_cv_c_endian=big,
              gnupg_cv_c_endian=$tmp_assumed_endian
Werner Koch's avatar
Werner Koch committed
144
              tmp_assumed_warn=" (assumed)"
145 146 147
            )
        fi
      ])
Werner Koch's avatar
Werner Koch committed
148
    AC_MSG_RESULT([${gnupg_cv_c_endian}${tmp_assumed_warn}])
149 150 151 152 153 154 155 156 157 158 159
    if test "$gnupg_cv_c_endian" = little; then
      AC_DEFINE(LITTLE_ENDIAN_HOST,1,
                [Defined if the host has little endian byte ordering])
    else
      AC_DEFINE(BIG_ENDIAN_HOST,1,
                [Defined if the host has big endian byte ordering])
    fi
  ])



160

161 162 163 164
# GNUPG_BUILD_PROGRAM(NAME,DEFAULT)
# Add a --enable-NAME option to configure an set the
# shell variable build_NAME either to "yes" or "no".  DEFAULT must
# 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
166
# ./configure --help
167
AC_DEFUN([GNUPG_BUILD_PROGRAM],
168 169
  [m4_define([my_build], [m4_bpatsubst(build_$1, [[^a-zA-Z0-9_]], [_])])
   my_build=$2
170 171 172
   m4_if([$2],[yes],[
      AC_ARG_ENABLE([$1], AC_HELP_STRING([--disable-$1],
                                         [do not build the $1 program]),
173
                           my_build=$enableval, my_build=$2)
174 175 176
    ],[
      AC_ARG_ENABLE([$1], AC_HELP_STRING([--enable-$1],
                                         [build the $1 program]),
177
                           my_build=$enableval, my_build=$2)
178
    ])
179
   case "$my_build" in
180 181
         no|yes)
           ;;
182
         *)
183 184 185
           AC_MSG_ERROR([only yes or no allowed for feature --enable-$1])
           ;;
   esac
186
   m4_undefine([my_build])
187
  ])
188 189 190



191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
# GNUPG_DISABLE_GPG_ALGO(NAME,DESCRIPTION)
#
# Add a --disable-gpg-NAME option and the corresponding ac_define
# GPG_USE_<NAME>.
AC_DEFUN([GNUPG_GPG_DISABLE_ALGO],
  [AC_MSG_CHECKING([whether to enable the $2 for gpg])
   AC_ARG_ENABLE([gpg-$1], AC_HELP_STRING([--disable-gpg-$1],
                                          [disable the $2 algorithm in gpg]),
                                          , enableval=yes)
   AC_MSG_RESULT($enableval)
   if test x"$enableval" = xyes ; then
     AC_DEFINE(GPG_USE_[]m4_toupper($1), 1, [Define to support the $2])
   fi
  ])



208

Werner Koch's avatar
.  
Werner Koch committed
209 210
# Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock
# is not called from uid 0 (not tested whether uid 0 works)
211 212
# For DECs Tru64 we have also to check whether mlock is in librt
# mlock is there a macro using memlk()
213
dnl GNUPG_CHECK_MLOCK
Werner Koch's avatar
.  
Werner Koch committed
214
dnl
215
AC_DEFUN([GNUPG_CHECK_MLOCK],
Werner Koch's avatar
.  
Werner Koch committed
216
  [ AC_CHECK_FUNCS(mlock)
217 218 219 220 221 222 223 224 225 226 227 228 229 230
    if test "$ac_cv_func_mlock" = "no"; then
        AC_CHECK_HEADERS(sys/mman.h)
        if test "$ac_cv_header_sys_mman_h" = "yes"; then
            # Add librt to LIBS:
            AC_CHECK_LIB(rt, memlk)
            AC_CACHE_CHECK([whether mlock is in sys/mman.h],
                            gnupg_cv_mlock_is_in_sys_mman,
                [AC_TRY_LINK([
                    #include <assert.h>
                    #ifdef HAVE_SYS_MMAN_H
                    #include <sys/mman.h>
                    #endif
                ], [
                    int i;
231

232 233 234 235 236 237 238 239 240 241 242 243 244 245
                    /* glibc defines this for functions which it implements
                     * to always fail with ENOSYS.  Some functions are actually
                     * named something starting with __ and the normal name
                     * is an alias.  */
                    #if defined (__stub_mlock) || defined (__stub___mlock)
                    choke me
                    #else
                    mlock(&i, 4);
                    #endif
                    ; return 0;
                ],
                gnupg_cv_mlock_is_in_sys_mman=yes,
                gnupg_cv_mlock_is_in_sys_mman=no)])
            if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then
246 247
                AC_DEFINE(HAVE_MLOCK,1,
                          [Defined if the system supports an mlock() call])
248 249 250
            fi
        fi
    fi
Werner Koch's avatar
.  
Werner Koch committed
251
    if test "$ac_cv_func_mlock" = "yes"; then
Werner Koch's avatar
Werner Koch committed
252
        AC_MSG_CHECKING(whether mlock is broken)
253 254
          AC_CACHE_VAL(gnupg_cv_have_broken_mlock,
             AC_TRY_RUN([
Werner Koch's avatar
Werner Koch committed
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
                #include <stdlib.h>
                #include <unistd.h>
                #include <errno.h>
                #include <sys/mman.h>
                #include <sys/types.h>
                #include <fcntl.h>

                int main()
                {
                    char *pool;
                    int err;
                    long int pgsize = getpagesize();

                    pool = malloc( 4096 + pgsize );
                    if( !pool )
                        return 2;
                    pool += (pgsize - ((long int)pool % pgsize));

                    err = mlock( pool, 4096 );
                    if( !err || errno == EPERM )
                        return 0; /* okay */

                    return 1;  /* hmmm */
                }

            ],
281 282 283 284 285 286
            gnupg_cv_have_broken_mlock="no",
            gnupg_cv_have_broken_mlock="yes",
            gnupg_cv_have_broken_mlock="assume-no"
           )
         )
         if test "$gnupg_cv_have_broken_mlock" = "yes"; then
287 288
             AC_DEFINE(HAVE_BROKEN_MLOCK,1,
                       [Defined if the mlock() call does not work])
289
             AC_MSG_RESULT(yes)
290
             AC_CHECK_FUNCS(plock)
291 292 293 294 295 296 297
         else
            if test "$gnupg_cv_have_broken_mlock" = "no"; then
                AC_MSG_RESULT(no)
            else
                AC_MSG_RESULT(assuming no)
            fi
         fi
Werner Koch's avatar
.  
Werner Koch committed
298 299 300 301
    fi
  ])


302 303 304
dnl Stolen from gcc
dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
dnl of the usual 2.
305
AC_DEFUN([GNUPG_FUNC_MKDIR_TAKES_ONE_ARG],
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326
[AC_CHECK_HEADERS(sys/stat.h unistd.h direct.h)
AC_CACHE_CHECK([if mkdir takes one argument], gnupg_cv_mkdir_takes_one_arg,
[AC_TRY_COMPILE([
#include <sys/types.h>
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef HAVE_DIRECT_H
# include <direct.h>
#endif], [mkdir ("foo", 0);],
        gnupg_cv_mkdir_takes_one_arg=no, gnupg_cv_mkdir_takes_one_arg=yes)])
if test $gnupg_cv_mkdir_takes_one_arg = yes ; then
  AC_DEFINE(MKDIR_TAKES_ONE_ARG,1,
            [Defined if mkdir() does not take permission flags])
fi
])


327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
# GNUPG_TIME_T_UNSIGNED
# Check whether time_t is unsigned
#
AC_DEFUN([GNUPG_TIME_T_UNSIGNED],
  [ AC_CACHE_CHECK(whether time_t is unsigned, gnupg_cv_time_t_unsigned,
     [AC_REQUIRE([AC_HEADER_TIME])dnl
      AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY(
       [AC_INCLUDES_DEFAULT([])
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif
],
       [((time_t)-1) < 0])],
       gnupg_cv_time_t_unsigned=no, gnupg_cv_time_t_unsigned=yes)])
    if test $gnupg_cv_time_t_unsigned = yes; then
      AC_DEFINE(HAVE_UNSIGNED_TIME_T,1,[Defined if time_t is an unsigned type])
    fi
])# GNUPG_TIME_T_UNSIGNED