changed structure of trustdb
[gnupg.git] / acinclude.m4
1 dnl macros to configure g10
2
3 AC_PREREQ(2.5)
4
5 AC_DEFUN(md_TYPE_PTRDIFF_T,
6   [AC_CACHE_CHECK([for ptrdiff_t], ac_cv_type_ptrdiff_t,
7      [AC_TRY_COMPILE(stddef.h, [ptrdiff_t p], ac_cv_type_ptrdiff_t=yes,
8                      ac_cv_type_ptrdiff_t=no)])
9    if test $ac_cv_type_ptrdiff_t = yes; then
10      AC_DEFINE(HAVE_PTRDIFF_T)
11    fi
12 ])
13
14 AC_DEFUN(md_PATH_PROG,
15   [AC_PATH_PROG($1,$2,$3)dnl
16    if echo $$1 | grep openwin > /dev/null; then
17      echo "WARNING: Do not use OpenWin's $2.  (Better remove it.) >&AC_FD_MSG"
18      ac_cv_path_$1=$2
19      $1=$2
20    fi
21 ])
22
23 dnl Check NLS options
24
25 AC_DEFUN(ud_LC_MESSAGES,
26   [if test $ac_cv_header_locale_h = yes; then
27     AC_CACHE_CHECK([for LC_MESSAGES], ud_cv_val_LC_MESSAGES,
28       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
29        ud_cv_val_LC_MESSAGES=yes, ud_cv_val_LC_MESSAGES=no)])
30     if test $ud_cv_val_LC_MESSAGES = yes; then
31       AC_DEFINE(HAVE_LC_MESSAGES)
32     fi
33   fi])
34
35 AC_DEFUN(ud_WITH_NLS,
36   [AC_MSG_CHECKING([whether NLS is requested])
37     dnl Default is enabled NLS
38     AC_ARG_ENABLE(nls,
39       [  --disable-nls           do not use Native Language Support],
40       nls_cv_use_nls=$enableval, nls_cv_use_nls=yes)
41     AC_MSG_RESULT($nls_cv_use_nls)
42
43     dnl If we use NLS figure out what method
44     if test "$nls_cv_use_nls" = "yes"; then
45       AC_DEFINE(ENABLE_NLS)
46       AC_MSG_CHECKING([for explicitly using GNU gettext])
47       AC_ARG_WITH(gnu-gettext,
48         [  --with-gnu-gettext      use the GNU gettext library],
49         nls_cv_force_use_gnu_gettext=$withval,
50         nls_cv_force_use_gnu_gettext=no)
51       AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
52
53       if test "$nls_cv_force_use_gnu_gettext" = "yes"; then
54         nls_cv_use_gnu_gettext=yes
55       else
56         dnl User does not insist on using GNU NLS library.  Figure out what
57         dnl to use.  If gettext or catgets are available (in this order) we
58         dnl use this.  Else we have to fall back to GNU NLS library.
59         AC_CHECK_LIB(intl, main)
60         AC_CHECK_LIB(i, main)
61         CATOBJEXT=NONE
62
63         dnl Debian 1.3.1 does not have libintl.h but libintl.a
64         AC_CHECK_HEADERS(libintl.h)
65         if    test "$ac_cv_lib_intl_main" = yes \
66            && test "$ac_cv_header_libintl_h" != "yes" ; then
67             nls_cv_use_gnu_gettext=yes
68         else
69             AC_CHECK_FUNC(gettext,
70               [AC_DEFINE(HAVE_GETTEXT)
71                md_PATH_PROG(MSGFMT, msgfmt, no)dnl
72                if test "$MSGFMT" != "no"; then
73                  AC_CHECK_FUNCS(dcgettext)
74                  md_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
75                  md_PATH_PROG(XGETTEXT, xgettext, xgettext)
76                  CATOBJEXT=.mo
77                  INSTOBJEXT=.mo
78                  DATADIRNAME=lib
79                  if test "$ac_cv_lib_intl[_]main" = yes; then
80                    INTLLIBS=-lintl
81                  elif test "$ac_cv_lib_i[_]main" = yes; then
82                    INTLLIBS=-li
83                  fi
84                fi])
85
86             if test "$CATOBJEXT" = "NONE"; then
87               dnl No gettext in C library.  Try catgets next.
88               AC_CHECK_FUNC(catgets,
89                 [AC_DEFINE(HAVE_CATGETS)
90                  INTLOBJS="\$(CATOBJS)"
91                  AC_PATH_PROG(GENCAT, gencat, no)dnl
92                  if test "$GENCAT" != "no"; then
93                    AC_PATH_PROGS(GMSGFMT, [gmsgfmt msgfmt], msgfmt)
94                    md_PATH_PROG(XGETTEXT, xgettext, xgettext)
95                    CATOBJEXT=.cat
96                    INSTOBJEXT=.cat
97                    DATADIRNAME=lib
98                    INTLDEPS="\${top_srcdir}/intl/libintl.a"
99                    INTLLIBS=$INTLDEPS
100                    LIBS=`echo $LIBS | sed -e 's/-lintl//'`
101                    nls_cv_header_intl=intl/libintl.h
102                    nls_cv_header_libgt=intl/libgettext.h
103                  fi])
104             fi
105         fi
106
107         if test "$CATOBJEXT" = "NONE"; then
108           dnl Neither gettext nor catgets in included in the C library.
109           dnl Fall back on GNU gettext library.
110           nls_cv_use_gnu_gettext=yes
111         fi
112       fi
113
114       if test "$nls_cv_use_gnu_gettext" = "yes"; then
115         dnl Mark actions used to generate GNU NLS library.
116         INTLOBJS="\$(GETTOBJS)"
117         md_PATH_PROG(MSGFMT, msgfmt, msgfmt)
118         md_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
119         md_PATH_PROG(XGETTEXT, xgettext, xgettext)
120         AC_SUBST(MSGFMT)
121         CATOBJEXT=.gmo
122         INSTOBJEXT=.mo
123         DATADIRNAME=share
124         INTLDEPS="\${top_srcdir}/intl/libintl.a"
125         INTLLIBS=$INTLDEPS
126         LIBS=`echo $LIBS | sed -e 's/-lintl//'`
127         nls_cv_header_intl=intl/libintl.h
128         nls_cv_header_libgt=intl/libgettext.h
129       fi
130
131       # We need to process the intl/ and po/ directory.
132       INTLSUB=intl
133       POSUB=po
134     else
135       DATADIRNAME=share
136       nls_cv_header_intl=intl/libintl.h
137       nls_cv_header_libgt=intl/libgettext.h
138     fi
139
140     dnl These rules are solely for the distribution goal.  While doing this
141     dnl we only have to keep exactly one list of the available catalogs
142     dnl in configure.in.
143     for lang in $ALL_LINGUAS; do
144       GMOFILES="$GMOFILES $lang.gmo"
145       POFILES="$POFILES $lang.po"
146     done
147
148     dnl Make all variables we use known to autoconf.
149     AC_SUBST(CATALOGS)
150     AC_SUBST(CATOBJEXT)
151     AC_SUBST(DATADIRNAME)
152     AC_SUBST(GMOFILES)
153     AC_SUBST(INSTOBJEXT)
154     AC_SUBST(INTLDEPS)
155     AC_SUBST(INTLLIBS)
156     AC_SUBST(INTLOBJS)
157     AC_SUBST(INTLSUB)
158     AC_SUBST(POFILES)
159     AC_SUBST(POSUB)
160   ])
161
162 AC_DEFUN(AM_GNU_GETTEXT,
163   [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
164    AC_REQUIRE([AC_PROG_CC])dnl
165    AC_REQUIRE([AC_PROG_RANLIB])dnl
166    AC_REQUIRE([AC_HEADER_STDC])dnl
167    AC_REQUIRE([AC_C_CONST])dnl
168    AC_REQUIRE([AC_C_INLINE])dnl
169    AC_REQUIRE([AC_TYPE_OFF_T])dnl
170    AC_REQUIRE([AC_TYPE_SIZE_T])dnl
171    AC_REQUIRE([AC_FUNC_ALLOCA])dnl
172    AC_REQUIRE([AC_FUNC_MMAP])dnl
173
174    AC_CHECK_HEADERS([limits.h locale.h nl_types.h malloc.h string.h unistd.h values.h])
175    AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp])
176
177    if test "${ac_cv_func_stpcpy+set}" != "set"; then
178      AC_CHECK_FUNCS(stpcpy)
179    fi
180    if test "${ac_cv_func_stpcpy}" = "yes"; then
181      AC_DEFINE(HAVE_STPCPY)
182    fi
183
184    ud_LC_MESSAGES
185    ud_WITH_NLS
186
187    if test "x$CATOBJEXT" != "x"; then
188      if test "x$ALL_LINGUAS" = "x"; then
189        LINGUAS=
190      else
191        AC_MSG_CHECKING(for catalogs to be installed)
192        NEW_LINGUAS=
193        for lang in ${LINGUAS=$ALL_LINGUAS}; do
194          case "$ALL_LINGUAS" in
195           *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
196          esac
197        done
198        LINGUAS=$NEW_LINGUAS
199        AC_MSG_RESULT($LINGUAS)
200      fi
201
202      dnl Construct list of names of catalog files to be constructed.
203      if test -n "$LINGUAS"; then
204        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
205      fi
206    fi
207
208    dnl Determine which catalog format we have (if any is needed)
209    dnl For now we know about two different formats:
210    dnl   Linux and the normal X/Open format
211    test -d intl || mkdir intl
212    if test "$CATOBJEXT" = ".cat"; then
213      AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
214
215      dnl Transform the SED scripts while copying because some dumb SEDs
216      dnl cannot handle comments.
217      sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
218    fi
219    dnl po2tbl.sed is always needed.
220    sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
221      $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
222
223    dnl Generate list of files to be processed by xgettext which will
224    dnl be included in po/Makefile.
225    test -d po || mkdir po
226    if test "x$srcdir" != "x."; then
227      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
228        posrcprefix="$srcdir/"
229      else
230        posrcprefix="../$srcdir/"
231      fi
232    else
233      posrcprefix="../"
234    fi
235    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
236         < $srcdir/po/POTFILES.in > po/POTFILES
237   ])
238
239
240
241 dnl --------------------------------------------------
242 dnl G10 stuff
243 dnl --------------------------------------------------
244
245
246 dnl WK_MSG_PRINT(STRING)
247 dnl print a message
248 dnl
249 define(WK_MSG_PRINT,
250   [ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG
251   ])
252
253
254 dnl WK_CHECK_TYPEDEF(TYPE, HAVE_NAME)
255 dnl Check wether a typedef exists and create a #define $2 if it exists
256 dnl
257 AC_DEFUN(WK_CHECK_TYPEDEF,
258   [ AC_MSG_CHECKING(for $1 typedef)
259     AC_CACHE_VAL(wk_cv_typedef_$1,
260     [AC_TRY_COMPILE([#include <stdlib.h>
261     #include <sys/types.h>], [
262     #undef $1
263     int a = sizeof($1);
264     ], wk_cv_typedef_$1=yes, wk_cv_typedef_$1=no )])
265     AC_MSG_RESULT($wk_cv_typedef_$1)
266     if test "$wk_cv_typedef_$1" = yes; then
267         AC_DEFINE($2)
268     fi
269   ])
270
271
272
273 dnl WK_LINK_FILES( SRC, DEST )
274 dnl same as AC_LINK_FILES, but collet the files to link in
275 dnl some special variables and do the link macro
276 dnl when WK_DO_LINK_FILES is called
277 dnl This is a workaround for AC_LINK_FILES, because it does not work
278 dnl correct when using a caching scheme
279 dnl
280 define(WK_LINK_FILES,
281   [ if test "x$wk_link_files_src" = "x"; then
282         wk_link_files_src="$1"
283         wk_link_files_dst="$2"
284     else
285         wk_link_files_src="$wk_link_files_src $1"
286         wk_link_files_dst="$wk_link_files_dst $2"
287     fi
288   ])
289 define(WK_DO_LINK_FILES,
290   [ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst )
291   ])
292
293
294 dnl WK_CHECK_ENDIAN
295 dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
296 dnl
297 define(WK_CHECK_ENDIAN,
298   [ if test "$cross_compiling" = yes; then
299         AC_MSG_WARN(cross compiling; assuming little endianess)
300     fi
301     AC_MSG_CHECKING(endianess)
302     AC_CACHE_VAL(wk_cv_c_endian,
303       [ wk_cv_c_endian=unknown
304         # See if sys/param.h defines the BYTE_ORDER macro.
305         AC_TRY_COMPILE([#include <sys/types.h>
306         #include <sys/param.h>], [
307         #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
308          bogus endian macros
309         #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
310         AC_TRY_COMPILE([#include <sys/types.h>
311         #include <sys/param.h>], [
312         #if BYTE_ORDER != BIG_ENDIAN
313          not big endian
314         #endif], wk_cv_c_endian=big, wk_cv_c_endian=big)])
315         if test "$wk_cv_c_endian" = unknown; then
316             AC_TRY_RUN([main () {
317               /* Are we little or big endian?  From Harbison&Steele.  */
318               union
319               {
320                 long l;
321                 char c[sizeof (long)];
322               } u;
323               u.l = 1;
324               exit (u.c[sizeof (long) - 1] == 1);
325               }],
326               wk_cv_c_endian=little,
327               wk_cv_c_endian=big,
328               wk_cv_c_endian=little
329             )
330         fi
331       ])
332     AC_MSG_RESULT([$wk_cv_c_endian])
333     if test "$wk_cv_c_endian" = little; then
334       AC_DEFINE(LITTLE_ENDIAN_HOST)
335     else
336       AC_DEFINE(BIG_ENDIAN_HOST)
337     fi
338   ])
339
340 dnl WK_CHECK_CACHE
341 dnl
342 define(WK_CHECK_CACHE,
343   [ AC_MSG_CHECKING(cached information)
344     wk_hostcheck="$target"
345     AC_CACHE_VAL(wk_cv_hostcheck, [ wk_cv_hostcheck="$wk_hostcheck" ])
346     if test "$wk_cv_hostcheck" != "$wk_hostcheck"; then
347         AC_MSG_RESULT(changed)
348         AC_MSG_WARN(config.cache exists!)
349         AC_MSG_ERROR(you must do 'make distclean' first to compile for
350                  different target or different parameters.)
351     else
352         AC_MSG_RESULT(ok)
353     fi
354   ])
355
356