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