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