* random.c (_gcry_fast_random_poll): Initialize the module so the
[libgcrypt.git] / acinclude.m4
1 dnl macros to configure Libgcrypt
2 dnl Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3 dnl
4 dnl This file is part of Libgcrypt.
5 dnl
6 dnl Libgcrypt 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 2 of the License, or
9 dnl (at your option) any later version.
10 dnl 
11 dnl Libgcrypt 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.
15 dnl 
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with this program; if not, write to the Free Software
18 dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19
20
21 dnl GNUPG_MSG_PRINT(STRING)
22 dnl print a message
23 dnl
24 define(GNUPG_MSG_PRINT,
25   [ echo $ac_n "$1"" $ac_c" 1>&AS_MESSAGE_FD([])
26   ])
27
28
29 dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME)
30 dnl Check whether a typedef exists and create a #define $2 if it exists
31 dnl
32 AC_DEFUN(GNUPG_CHECK_TYPEDEF,
33   [ AC_MSG_CHECKING(for $1 typedef)
34     AC_CACHE_VAL(gnupg_cv_typedef_$1,
35     [AC_TRY_COMPILE([#define _GNU_SOURCE 1
36     #include <stdlib.h>
37     #include <sys/types.h>], [
38     #undef $1
39     int a = sizeof($1);
40     ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
41     AC_MSG_RESULT($gnupg_cv_typedef_$1)
42     if test "$gnupg_cv_typedef_$1" = yes; then
43         AC_DEFINE($2,1,[Defined if a `]$1[' is typedef'd])
44     fi
45   ])
46
47
48 dnl GNUPG_FIX_HDR_VERSION(FILE, NAME)
49 dnl Make the version number in gcrypt/gcrypt.h the same as the one here.
50 dnl (this is easier than to have a .in file just for one substitution)
51 dnl We must use a temp file in the current directory because make distcheck 
52 dnl install all sourcefiles RO.
53 dnl
54 AC_DEFUN(GNUPG_FIX_HDR_VERSION,
55   [ sed "s/^#define $2 \".*/#define $2 \"$VERSION\"/" $srcdir/$1 > fixhdr.tmp
56     if cmp -s $srcdir/$1 fixhdr.tmp 2>/dev/null; then
57         rm -f fixhdr.tmp
58     else
59         rm -f $srcdir/$1
60         if mv fixhdr.tmp $srcdir/$1 ; then
61             :
62         else
63             AC_MSG_ERROR([[
64 ***
65 *** Failed to fix the version string macro $2 in $1.
66 *** The old file has been saved as fixhdr.tmp
67 ***]])
68         fi
69         AC_MSG_WARN([fixed the $2 macro in $1])
70     fi
71   ])
72
73
74 dnl GNUPG_CHECK_GNUMAKE
75 dnl
76 AC_DEFUN(GNUPG_CHECK_GNUMAKE,
77   [
78     if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then
79         :
80     else
81         AC_MSG_WARN([[
82 ***
83 *** It seems that you are not using GNU make.  Some make tools have serious
84 *** flaws and you may not be able to build this software at all. Before you
85 *** complain, please try GNU make:  GNU make is easy to build and available
86 *** at all GNU archives.  It is always available from ftp.gnu.org:/gnu/make.
87 ***]])
88     fi
89   ])
90
91 dnl GNUPG_CHECK_FAQPROG
92 dnl
93 AC_DEFUN(GNUPG_CHECK_FAQPROG,
94   [ AC_MSG_CHECKING(for faqprog.pl)
95     if faqprog.pl -V 2>/dev/null | grep '^faqprog.pl ' >/dev/null 2>&1; then
96         working_faqprog=yes
97         FAQPROG="faqprog.pl"
98     else 
99         working_faqprog=no
100         FAQPROG=": "
101     fi
102     AC_MSG_RESULT($working_faqprog)
103     AC_SUBST(FAQPROG)
104     AM_CONDITIONAL(WORKING_FAQPROG, test "$working_faqprog" = "yes" )
105
106     if test $working_faqprog = no; then
107         AC_MSG_WARN([[
108 ***
109 *** It seems that the faqprog.pl program is not installed.
110 *** Unless you do not change the source of the FAQs it is not required.
111 *** The working version of this utility should be available at:
112 ***   ftp://ftp.gnupg.org/pub/gcrypt/contrib/faqprog.pl
113 ***]])
114     fi
115   ])       
116
117
118
119 dnl GNUPG_CHECK_ENDIAN
120 dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
121 dnl
122 define(GNUPG_CHECK_ENDIAN,
123   [ if test "$cross_compiling" = yes; then
124         AC_MSG_WARN(cross compiling; assuming little endianess)
125     fi
126     AC_MSG_CHECKING(endianess)
127     AC_CACHE_VAL(gnupg_cv_c_endian,
128       [ gnupg_cv_c_endian=unknown
129         # See if sys/param.h defines the BYTE_ORDER macro.
130         AC_TRY_COMPILE([#include <sys/types.h>
131         #include <sys/param.h>], [
132         #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
133          bogus endian macros
134         #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
135         AC_TRY_COMPILE([#include <sys/types.h>
136         #include <sys/param.h>], [
137         #if BYTE_ORDER != BIG_ENDIAN
138          not big endian
139         #endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)])
140         if test "$gnupg_cv_c_endian" = unknown; then
141             AC_TRY_RUN([main () {
142               /* Are we little or big endian?  From Harbison&Steele.  */
143               union
144               {
145                 long l;
146                 char c[sizeof (long)];
147               } u;
148               u.l = 1;
149               exit (u.c[sizeof (long) - 1] == 1);
150               }],
151               gnupg_cv_c_endian=little,
152               gnupg_cv_c_endian=big,
153               gnupg_cv_c_endian=little
154             )
155         fi
156       ])
157     AC_MSG_RESULT([$gnupg_cv_c_endian])
158     if test "$gnupg_cv_c_endian" = little; then
159       AC_DEFINE(LITTLE_ENDIAN_HOST,1,
160                 [Defined if the host has little endian byte ordering])
161     else
162       AC_DEFINE(BIG_ENDIAN_HOST,1,
163                 [Defined if the host has big endian byte ordering])
164     fi
165   ])
166
167 dnl GNUPG_CHECK_CACHE
168 dnl
169 define(GNUPG_CHECK_CACHE,
170   [ AC_MSG_CHECKING(cached information)
171     gnupg_hostcheck="$target"
172     AC_CACHE_VAL(gnupg_cv_hostcheck, [ gnupg_cv_hostcheck="$gnupg_hostcheck" ])
173     if test "$gnupg_cv_hostcheck" != "$gnupg_hostcheck"; then
174         AC_MSG_RESULT(changed)
175         AC_MSG_WARN(config.cache exists!)
176         AC_MSG_ERROR(you must do 'make distclean' first to compile for
177                  different target or different parameters.)
178     else
179         AC_MSG_RESULT(ok)
180     fi
181   ])
182
183
184 ######################################################################
185 # Check for -fPIC etc (taken from libtool)
186 # This sets CFLAGS_PIC to the required flags
187 #           NO_PIC to yes if it is not possible to
188 #                  generate PIC
189 ######################################################################
190 dnl GNUPG_CHECK_PIC
191 dnl
192 define(GNUPG_CHECK_PIC,
193   [ AC_MSG_CHECKING(for option to create PIC)
194     CFLAGS_PIC=
195     NO_PIC=no
196     if test "$cross_compiling" = yes; then
197         AC_MSG_RESULT(assume none)
198     else
199         if test "$GCC" = yes; then
200             CFLAGS_PIC="-fPIC"
201         else
202             case "$host_os" in
203               aix3* | aix4*)
204                 # All rs/6000 code is PIC
205                 # but is there any non-rs/6000 AIX platform?
206                 ;;
207
208               hpux9* | hpux10*)
209                 CFLAGS_PIC="+Z"
210                 ;;
211
212               irix5* | irix6*)
213                 # PIC (with -KPIC) is the default.
214                 ;;
215
216               osf3* | osf4*)
217                 # FIXME - pic_flag is probably required for
218                 # hppa*-osf* and i860-osf*
219                 ;;
220
221               sco3.2v5*)
222                 CFLAGS_PIC='-Kpic'
223                 ;;
224
225               solaris2* | solaris7* )
226                 CFLAGS_PIC='-KPIC'
227                 ;;
228
229               sunos4*)
230                 CFLAGS_PIC='-PIC'
231                 ;;
232
233               *)
234                 NO_PIC=yes
235                 ;;
236             esac
237         fi
238
239         case "$host_cpu" in
240         rs6000 | powerpc | powerpcle)
241           # Yippee! All RS/6000 and PowerPC code is position-independent.
242           CFLAGS_PIC=""
243           ;;
244         esac
245
246         if test "$NO_PIC" = yes; then
247             AC_MSG_RESULT(not possible)
248         else
249             if test -z "$CFLAGS_PIC"; then
250                AC_MSG_RESULT(none)
251             else
252                 AC_MSG_RESULT($CFLAGS_PIC)
253             fi
254         fi
255     fi
256   ])
257
258
259 ######################################################################
260 # Check for export-dynamic flag
261 # This sets CFLAGS_EXPORTDYNAMIC to the required flags
262 ######################################################################
263 dnl GNUPG_CHECK_EXPORTDYNAMIC
264 dnl
265 define(GNUPG_CHECK_EXPORTDYNAMIC,
266   [ AC_MSG_CHECKING(how to specify -export-dynamic)
267     if test "$cross_compiling" = yes; then
268       AC_MSG_RESULT(assume none)
269       CFLAGS_EXPORTDYNAMIC=""
270     else
271       AC_CACHE_VAL(gnupg_cv_export_dynamic,[
272       if AC_TRY_COMMAND([${CC-cc} $CFLAGS -Wl,--version 2>&1 |
273                                           grep "GNU ld" >/dev/null]); then
274           # using gnu's linker
275           gnupg_cv_export_dynamic="-Wl,-export-dynamic"
276       else
277           case "$host_os" in
278             hpux* )
279               gnupg_cv_export_dynamic="-Wl,-E"
280               ;;
281             * )
282               gnupg_cv_export_dynamic=""
283               ;;
284           esac
285       fi
286       ])
287       AC_MSG_RESULT($gnupg_cv_export_dynamic)
288       CFLAGS_EXPORTDYNAMIC="$gnupg_cv_export_dynamic"
289     fi
290   ])
291
292 #####################################################################
293 # Check for SysV IPC  (from GIMP)
294 #   And see whether we have a SHM_LOCK (FreeBSD does not have it).
295 #####################################################################
296 dnl GNUPG_CHECK_IPC
297 dnl
298 define(GNUPG_CHECK_IPC,
299    [ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h)
300      if test "$ac_cv_header_sys_shm_h" = "yes"; then
301        AC_MSG_CHECKING(whether IPC_RMID allowes subsequent attaches)
302        AC_CACHE_VAL(gnupg_cv_ipc_rmid_deferred_release,
303           AC_TRY_RUN([
304              #include <sys/types.h>
305              #include <sys/ipc.h>
306              #include <sys/shm.h>
307              int main()
308              {
309                int id;
310                char *shmaddr;
311              id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777);
312              if (id == -1)
313                exit (2);
314                shmaddr = shmat (id, 0, 0);
315                shmctl (id, IPC_RMID, 0);
316                if ((char*) shmat (id, 0, 0) == (char*) -1)
317                {
318                  shmdt (shmaddr);
319                  exit (1);
320                }
321                shmdt (shmaddr);
322                shmdt (shmaddr);
323                exit (0);
324              }
325          ],
326          gnupg_cv_ipc_rmid_deferred_release="yes",
327          gnupg_cv_ipc_rmid_deferred_release="no",
328          gnupg_cv_ipc_rmid_deferred_release="assume-no")
329        )
330        if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then
331            AC_DEFINE(IPC_RMID_DEFERRED_RELEASE,1,
332                      [Defined if we can do a deferred shm release])
333            AC_MSG_RESULT(yes)
334        else
335           if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then
336               AC_MSG_RESULT(no)
337           else
338               AC_MSG_RESULT([assuming no])
339           fi
340        fi
341
342        AC_MSG_CHECKING(whether SHM_LOCK is available)
343        AC_CACHE_VAL(gnupg_cv_ipc_have_shm_lock,
344           AC_TRY_COMPILE([#include <sys/types.h>
345              #include <sys/ipc.h>
346              #include <sys/shm.h>],[
347              int shm_id;
348              shmctl(shm_id, SHM_LOCK, 0);
349              ],
350              gnupg_cv_ipc_have_shm_lock="yes",
351              gnupg_cv_ipc_have_shm_lock="no"
352           )
353        )
354        if test "$gnupg_cv_ipc_have_shm_lock" = "yes"; then
355          AC_DEFINE(IPC_HAVE_SHM_LOCK,1,
356                    [Defined if a SysV shared memory supports the LOCK flag])
357          AC_MSG_RESULT(yes)
358        else
359          AC_MSG_RESULT(no)
360        fi
361      fi
362    ])
363
364
365 ######################################################################
366 # Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock
367 # is not called from uid 0 (not tested whether uid 0 works)
368 # For DECs Tru64 we have also to check whether mlock is in librt
369 # mlock is there a macro using memlk()
370 ######################################################################
371 dnl GNUPG_CHECK_MLOCK
372 dnl
373 define(GNUPG_CHECK_MLOCK,
374   [ AC_CHECK_FUNCS(mlock)
375     if test "$ac_cv_func_mlock" = "no"; then
376         AC_CHECK_HEADERS(sys/mman.h)
377         if test "$ac_cv_header_sys_mman_h" = "yes"; then
378             # Add librt to LIBS:
379             AC_CHECK_LIB(rt, memlk)
380             AC_CACHE_CHECK([whether mlock is in sys/mman.h],
381                             gnupg_cv_mlock_is_in_sys_mman,
382                 [AC_TRY_LINK([
383                     #include <assert.h>
384                     #ifdef HAVE_SYS_MMAN_H
385                     #include <sys/mman.h>
386                     #endif
387                 ], [
388                     int i;
389                     
390                     /* glibc defines this for functions which it implements
391                      * to always fail with ENOSYS.  Some functions are actually
392                      * named something starting with __ and the normal name
393                      * is an alias.  */
394                     #if defined (__stub_mlock) || defined (__stub___mlock)
395                     choke me
396                     #else
397                     mlock(&i, 4);
398                     #endif
399                     ; return 0;
400                 ],
401                 gnupg_cv_mlock_is_in_sys_mman=yes,
402                 gnupg_cv_mlock_is_in_sys_mman=no)])
403             if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then
404                 AC_DEFINE(HAVE_MLOCK,1,
405                           [Defined if the system supports an mlock() call])
406             fi
407         fi
408     fi
409     if test "$ac_cv_func_mlock" = "yes"; then
410         AC_MSG_CHECKING(whether mlock is broken)
411           AC_CACHE_VAL(gnupg_cv_have_broken_mlock,
412              AC_TRY_RUN([
413                 #include <stdlib.h>
414                 #include <unistd.h>
415                 #include <errno.h>
416                 #include <sys/mman.h>
417                 #include <sys/types.h>
418                 #include <fcntl.h>
419
420                 int main()
421                 {
422                     char *pool;
423                     int err;
424                     long int pgsize = getpagesize();
425
426                     pool = malloc( 4096 + pgsize );
427                     if( !pool )
428                         return 2;
429                     pool += (pgsize - ((long int)pool % pgsize));
430
431                     err = mlock( pool, 4096 );
432                     if( !err || errno == EPERM )
433                         return 0; /* okay */
434
435                     return 1;  /* hmmm */
436                 }
437
438             ],
439             gnupg_cv_have_broken_mlock="no",
440             gnupg_cv_have_broken_mlock="yes",
441             gnupg_cv_have_broken_mlock="assume-no"
442            )
443          )
444          if test "$gnupg_cv_have_broken_mlock" = "yes"; then
445              AC_DEFINE(HAVE_BROKEN_MLOCK,1,
446                        [Defined if the mlock() call does not work])
447              AC_MSG_RESULT(yes)
448          else
449             if test "$gnupg_cv_have_broken_mlock" = "no"; then
450                 AC_MSG_RESULT(no)
451             else
452                 AC_MSG_RESULT(assuming no)
453             fi
454          fi
455     fi
456   ])
457
458
459
460 ################################################################
461 # GNUPG_PROG_NM - find the path to a BSD-compatible name lister
462 ################################################################
463 AC_DEFUN(GNUPG_PROG_NM,
464 [AC_MSG_CHECKING([for BSD-compatible nm])
465 AC_CACHE_VAL(ac_cv_path_NM,
466 [if test -n "$NM"; then
467   # Let the user override the test.
468   ac_cv_path_NM="$NM"
469 else
470   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
471   for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do
472     test -z "$ac_dir" && ac_dir=.
473     if test -f $ac_dir/nm; then
474       # Check to see if the nm accepts a BSD-compat flag.
475       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
476       #   nm: unknown option "B" ignored
477       if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
478         ac_cv_path_NM="$ac_dir/nm -B"
479       elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
480         ac_cv_path_NM="$ac_dir/nm -p"
481       else
482         ac_cv_path_NM="$ac_dir/nm"
483       fi
484       break
485     fi
486   done
487   IFS="$ac_save_ifs"
488   test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
489 fi])
490 NM="$ac_cv_path_NM"
491 AC_MSG_RESULT([$NM])
492 AC_SUBST(NM)
493 ])
494
495 # GNUPG_SYS_NM_PARSE - Check for command ro grab the raw symbol name followed
496 # by C symbol name from nm.
497 AC_DEFUN(GNUPG_SYS_NM_PARSE,
498 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
499 AC_REQUIRE([GNUPG_PROG_NM])dnl
500 # Check for command to grab the raw symbol name followed by C symbol from nm.
501 AC_MSG_CHECKING([command to parse $NM output])
502 AC_CACHE_VAL(ac_cv_sys_global_symbol_pipe,
503 [# These are sane defaults that work on at least a few old systems.
504 # {They come from Ultrix.  What could be older than Ultrix?!! ;)}
505
506 changequote(,)dnl
507 # Character class describing NM global symbol codes.
508 ac_symcode='[BCDEGRSTU]'
509
510 # Regexp to match symbols that can be accessed directly from C.
511 ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
512
513 # Transform the above into a raw symbol and a C symbol.
514 ac_symxfrm='\1 \1'
515
516 # Define system-specific variables.
517 case "$host_os" in
518 aix*)
519   ac_symcode='[BCDTU]'
520   ;;
521 freebsd* | netbsd* | openbsd* | bsdi* | sunos* | cygwin32* | mingw32*)
522   ac_sympat='_\([_A-Za-z][_A-Za-z0-9]*\)'
523   ac_symxfrm='_\1 \1'
524   ;;
525 irix*)
526   # Cannot use undefined symbols on IRIX because inlined functions mess us up.
527   ac_symcode='[BCDEGRST]'
528   ;;
529 solaris*)
530   ac_symcode='[BDTU]'
531   ;;
532 esac
533
534 # If we're using GNU nm, then use its standard symbol codes.
535 if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
536   ac_symcode='[ABCDGISTUW]'
537 fi
538
539 case "$host_os" in
540 cygwin32* | mingw32*)
541   # We do not want undefined symbols on cygwin32.  The user must
542   # arrange to define them via -l arguments.
543   ac_symcode='[ABCDGISTW]'
544   ;;
545 esac
546 changequote([,])dnl
547
548 # Write the raw and C identifiers.
549 ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.* $ac_symcode $ac_sympat$/$ac_symxfrm/p'"
550
551 # Check to see that the pipe works correctly.
552 ac_pipe_works=no
553 cat > conftest.$ac_ext <<EOF
554 #ifdef __cplusplus
555 extern "C" {
556 #endif
557 char nm_test_var;
558 void nm_test_func(){}
559 #ifdef __cplusplus
560 }
561 #endif
562 int main(){nm_test_var='a';nm_test_func;return 0;}
563 EOF
564 if AC_TRY_EVAL(ac_compile); then
565   # Now try to grab the symbols.
566   ac_nlist=conftest.nm
567   if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
568
569     # Try sorting and uniquifying the output.
570     if sort "$ac_nlist" | uniq > "$ac_nlist"T; then
571       mv -f "$ac_nlist"T "$ac_nlist"
572       ac_wcout=`wc "$ac_nlist" 2>/dev/null`
573 changequote(,)dnl
574       ac_count=`echo "X$ac_wcout" | sed -e 's,^X,,' -e 's/^[    ]*\([0-9][0-9]*\).*$/\1/'`
575 changequote([,])dnl
576       (test "$ac_count" -ge 0) 2>/dev/null || ac_count=-1
577     else
578       rm -f "$ac_nlist"T
579       ac_count=-1
580     fi
581
582     # Make sure that we snagged all the symbols we need.
583     if egrep ' nm_test_var$' "$ac_nlist" >/dev/null; then
584       if egrep ' nm_test_func$' "$ac_nlist" >/dev/null; then
585         cat <<EOF > conftest.c
586 #ifdef __cplusplus
587 extern "C" {
588 #endif
589
590 EOF
591         # Now generate the symbol file.
592         sed 's/^.* \(.*\)$/extern char \1;/' < "$ac_nlist" >> conftest.c
593
594         cat <<EOF >> conftest.c
595 #if defined (__STDC__) && __STDC__
596 # define __ptr_t void *
597 #else
598 # define __ptr_t char *
599 #endif
600
601 /* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */
602 int dld_preloaded_symbol_count = $ac_count;
603
604 /* The mapping between symbol names and symbols. */
605 struct {
606   char *name;
607   __ptr_t address;
608 }
609 changequote(,)dnl
610 dld_preloaded_symbols[] =
611 changequote([,])dnl
612 {
613 EOF
614         sed 's/^\(.*\) \(.*\)$/  {"\1", (__ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c
615         cat <<\EOF >> conftest.c
616   {0, (__ptr_t) 0}
617 };
618
619 #ifdef __cplusplus
620 }
621 #endif
622 EOF
623         # Now try linking the two files.
624         mv conftest.$ac_objext conftestm.$ac_objext
625         ac_save_LIBS="$LIBS"
626         ac_save_CFLAGS="$CFLAGS"
627         LIBS="conftestm.$ac_objext"
628         CFLAGS="$CFLAGS$no_builtin_flag"
629         if AC_TRY_EVAL(ac_link) && test -s conftest; then
630           ac_pipe_works=yes
631         else
632           echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD()
633           cat conftest.c >&AS_MESSAGE_LOG_FD()
634         fi
635         LIBS="$ac_save_LIBS"
636         CFLAGS="$ac_save_CFLAGS"
637       else
638         echo "cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD()
639       fi
640     else
641       echo "cannot find nm_test_var in $ac_nlist" >&AS_MESSAGE_LOG_FD()
642     fi
643   else
644     echo "cannot run $ac_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD()
645   fi
646 else
647   echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD()
648   cat conftest.c >&AS_MESSAGE_LOG_FD()
649 fi
650 rm -rf conftest*
651
652 # Do not use the global_symbol_pipe unless it works.
653 test "$ac_pipe_works" = yes || ac_cv_sys_global_symbol_pipe=
654 ])
655
656 ac_result=yes
657 if test -z "$ac_cv_sys_global_symbol_pipe"; then
658    ac_result=no
659 fi
660 AC_MSG_RESULT($ac_result)
661 ])
662
663 # GNUPG_SYS_LIBTOOL_CYGWIN32 - find tools needed on cygwin32
664 AC_DEFUN(GNUPG_SYS_LIBTOOL_CYGWIN32,
665 [AC_CHECK_TOOL(DLLTOOL, dlltool, false)
666 AC_CHECK_TOOL(AS, as, false)
667 ])
668
669 # GNUPG_SYS_SYMBOL_UNDERSCORE - does the compiler prefix global symbols
670 #                              with an underscore?
671 AC_DEFUN(GNUPG_SYS_SYMBOL_UNDERSCORE,
672 [tmp_do_check="no"
673 case "${target}" in
674     i386-emx-os2 | i[3456]86-pc-os2*emx | i386-pc-msdosdjgpp)
675         ac_cv_sys_symbol_underscore=yes
676         ;;
677     *)
678       if test "$cross_compiling" = yes; then
679          ac_cv_sys_symbol_underscore=yes
680       else
681          tmp_do_check="yes"
682       fi
683        ;;
684 esac
685
686 if test "$tmp_do_check" = "yes"; then
687 AC_REQUIRE([GNUPG_PROG_NM])dnl
688 AC_REQUIRE([GNUPG_SYS_NM_PARSE])dnl
689 AC_MSG_CHECKING([for _ prefix in compiled symbols])
690 AC_CACHE_VAL(ac_cv_sys_symbol_underscore,
691 [ac_cv_sys_symbol_underscore=no
692 cat > conftest.$ac_ext <<EOF
693 void nm_test_func(){}
694 int main(){nm_test_func;return 0;}
695 EOF
696 if AC_TRY_EVAL(ac_compile); then
697   # Now try to grab the symbols.
698   ac_nlist=conftest.nm
699   if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
700     # See whether the symbols have a leading underscore.
701     if egrep '^_nm_test_func' "$ac_nlist" >/dev/null; then
702       ac_cv_sys_symbol_underscore=yes
703     else
704       if egrep '^nm_test_func ' "$ac_nlist" >/dev/null; then
705         :
706       else
707         echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD()
708       fi
709     fi
710   else
711     echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD()
712   fi
713 else
714   echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD()
715   cat conftest.c >&AS_MESSAGE_LOG_FD()
716 fi
717 rm -rf conftest*
718 ])
719 else
720 AC_MSG_CHECKING([for _ prefix in compiled symbols])
721 fi
722 AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
723 if test x$ac_cv_sys_symbol_underscore = xyes; then
724   AC_DEFINE(WITH_SYMBOL_UNDERSCORE,1,
725   [define if compiled symbols have a leading underscore])
726 fi
727 ])
728
729 dnl Stolen from gcc
730 dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead
731 dnl of the usual 2.
732 AC_DEFUN(GNUPG_FUNC_MKDIR_TAKES_ONE_ARG,
733 [AC_CHECK_HEADERS(sys/stat.h unistd.h direct.h)
734 AC_CACHE_CHECK([if mkdir takes one argument], gnupg_cv_mkdir_takes_one_arg,
735 [AC_TRY_COMPILE([
736 #include <sys/types.h>
737 #ifdef HAVE_SYS_STAT_H
738 # include <sys/stat.h>
739 #endif
740 #ifdef HAVE_UNISTD_H
741 # include <unistd.h>
742 #endif
743 #ifdef HAVE_DIRECT_H
744 # include <direct.h>
745 #endif], [mkdir ("foo", 0);],
746         gnupg_cv_mkdir_takes_one_arg=no, gnupg_cv_mkdir_takes_one_arg=yes)])
747 if test $gnupg_cv_mkdir_takes_one_arg = yes ; then
748   AC_DEFINE(MKDIR_TAKES_ONE_ARG,1,
749             [Defined if mkdir() does not take permission flags])
750 fi
751 ])
752
753
754 dnl GPH_PROG_DB2ANY()
755 dnl Check whether we have the needed Docbook tools
756 dnl and issue a warning if this is not the case.
757 dnl
758 dnl This test defines these variables for substitution:
759 dnl    DB2ANY  - script used to render Docbook
760 dnl
761 dnl (wk 2000-05-16)
762 dnl
763 AC_DEFUN(GPH_PROG_DB2ANY,
764   [  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
765      working_db2any=no
766      if $ac_aux_dir/db2any --systemcheck; then
767         working_db2any=yes
768         DB2ANY=`cd $ac_aux_dir && pwd`/db2any
769      else
770         DB2ANY=": "
771         AC_MSG_WARN([[
772 ***
773 *** It seems that the Docbook environment is not installed as required.
774 *** We will try to build everything,  but if you either touch some files
775 *** or use a bogus make tool, you may run into problems.
776 *** Docbook is normally only needed to build the documentation.
777 *** To further investigate the problem you can run the command
778 ***    $ac_aux_dir/db2any --systemcheck --verbose
779 ***]])
780     fi
781     AC_SUBST(DB2ANY)
782     AM_CONDITIONAL(WORKING_DB2ANY, test "$working_db2any" != yes )
783   ])
784
785