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