added initial i18n stuff
[libgcrypt.git] / configure.in
1 dnl
2 dnl Configure template for G10
3 dnl
4 dnl (Process this file with autoconf to produce a configure script.)
5
6 AC_INIT(g10/g10.c)
7 AC_CONFIG_AUX_DIR(scripts)
8 AC_CONFIG_HEADER(config.h)
9
10
11 if test "x$exec_prefix" = xNONE ; then
12     if test "x$prefix" = xNONE ; then
13         g10_prefix="$ac_default_prefix"
14     else
15         g10_prefix="$prefix"
16     fi
17 else
18     g10_prefix="$exec_prefix"
19 fi
20
21
22 VERSION=`cat $srcdir/VERSION`
23 PACKAGE=g10
24 ALL_LINGUAS="de"
25 G10_LOCALEDIR="$g10_prefix/share/locale"
26 AC_SUBST(VERSION)
27 AC_SUBST(PACKAGE)
28 AC_SUBST(G10_LOCALEDIR)
29 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
30 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
31 AC_DEFINE_UNQUOTED(G10_LOCALEDIR, "$G10_LOCALEDIR")
32
33 AC_ARG_ENABLE(m-debug,
34 [  --enable-m-debug    Enable debugging of memory allocation])
35 if test "$enableval" = y || test "$enableval" = yes; then
36     AC_DEFINE(M_DEBUG)
37 fi
38 CFLAGS="-g -Wall"
39
40 g10_ln_sources=
41 g10_ln_dests=
42
43
44
45 dnl BEGIN===========================
46 dnl FIXME: move this to aclocal.m4
47 AC_PREREQ(2.5)
48
49 AC_DEFUN(md_TYPE_PTRDIFF_T,
50   [AC_CACHE_CHECK([for ptrdiff_t], ac_cv_type_ptrdiff_t,
51      [AC_TRY_COMPILE(stddef.h, [ptrdiff_t p], ac_cv_type_ptrdiff_t=yes,
52                      ac_cv_type_ptrdiff_t=no)])
53    if test $ac_cv_type_ptrdiff_t = yes; then
54      AC_DEFINE(HAVE_PTRDIFF_T)
55    fi
56 ])
57
58 AC_DEFUN(md_PATH_PROG,
59   [AC_PATH_PROG($1,$2,$3)dnl
60    if echo $$1 | grep openwin > /dev/null; then
61      echo "WARNING: Do not use OpenWin's $2.  (Better remove it.) >&AC_FD_MSG"
62      ac_cv_path_$1=$2
63      $1=$2
64    fi
65 ])
66
67
68 dnl --------------------------------------------------------- ##
69 dnl Use AC_PROG_INSTALL, supplementing it with INSTALL_SCRIPT ##
70 dnl substitution.                                             ##
71 dnl --------------------------------------------------------- ##
72
73 AC_DEFUN(fp_PROG_INSTALL,
74 [AC_PROG_INSTALL
75 test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL} -m 755'
76 AC_SUBST(INSTALL_SCRIPT)dnl
77 ])
78
79 dnl Check NLS options
80
81 AC_DEFUN(ud_LC_MESSAGES,
82   [if test $ac_cv_header_locale_h = yes; then
83     AC_CACHE_CHECK([for LC_MESSAGES], ud_cv_val_LC_MESSAGES,
84       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
85        ud_cv_val_LC_MESSAGES=yes, ud_cv_val_LC_MESSAGES=no)])
86     if test $ud_cv_val_LC_MESSAGES = yes; then
87       AC_DEFINE(HAVE_LC_MESSAGES)
88     fi
89   fi])
90
91 AC_DEFUN(ud_WITH_NLS,
92   [AC_MSG_CHECKING([whether NLS is requested])
93     dnl Default is enabled NLS
94     AC_ARG_ENABLE(nls,
95       [  --disable-nls           do not use Native Language Support],
96       nls_cv_use_nls=$enableval, nls_cv_use_nls=yes)
97     AC_MSG_RESULT($nls_cv_use_nls)
98
99     dnl If we use NLS figure out what method
100     if test "$nls_cv_use_nls" = "yes"; then
101       AC_DEFINE(ENABLE_NLS)
102       AC_MSG_CHECKING([for explicitly using GNU gettext])
103       AC_ARG_WITH(gnu-gettext,
104         [  --with-gnu-gettext      use the GNU gettext library],
105         nls_cv_force_use_gnu_gettext=$withval,
106         nls_cv_force_use_gnu_gettext=no)
107       AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
108
109       if test "$nls_cv_force_use_gnu_gettext" = "yes"; then
110         nls_cv_use_gnu_gettext=yes
111       else
112         dnl User does not insist on using GNU NLS library.  Figure out what
113         dnl to use.  If gettext or catgets are available (in this order) we
114         dnl use this.  Else we have to fall back to GNU NLS library.
115         AC_CHECK_LIB(intl, main)
116         AC_CHECK_LIB(i, main)
117         CATOBJEXT=NONE
118         AC_CHECK_FUNC(gettext,
119           [AC_DEFINE(HAVE_GETTEXT)
120            md_PATH_PROG(MSGFMT, msgfmt, no)dnl
121            if test "$MSGFMT" != "no"; then
122              AC_CHECK_FUNCS(dcgettext)
123              md_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
124              md_PATH_PROG(XGETTEXT, xgettext, xgettext)
125              CATOBJEXT=.mo
126              INSTOBJEXT=.mo
127              DATADIRNAME=lib
128            fi])
129
130         if test "$CATOBJEXT" = "NONE"; then
131           dnl No gettext in C library.  Try catgets next.
132           AC_CHECK_FUNC(catgets,
133             [AC_DEFINE(HAVE_CATGETS)
134              INTLOBJS="\$(CATOBJS)"
135              AC_PATH_PROG(GENCAT, gencat, no)dnl
136              if test "$GENCAT" != "no"; then
137                AC_PATH_PROGS(GMSGFMT, [gmsgfmt msgfmt], msgfmt)
138                md_PATH_PROG(XGETTEXT, xgettext, xgettext)
139                CATOBJEXT=.cat
140                INSTOBJEXT=.cat
141                DATADIRNAME=lib
142                INTLDEPS="../intl/libintl.a"
143                INTLLIBS=$INTLDEPS
144                LIBS=`echo $LIBS | sed -e 's/-lintl//'`
145                nls_cv_header_intl=intl/libintl.h
146                nls_cv_header_libgt=intl/libgettext.h
147              fi])
148         fi
149
150         if test "$CATOBJEXT" = "NONE"; then
151           dnl Neither gettext nor catgets in included in the C library.
152           dnl Fall back on GNU gettext library.
153           nls_cv_use_gnu_gettext=yes
154         fi
155       fi
156
157       if test "$nls_cv_use_gnu_gettext" = "yes"; then
158         dnl Mark actions used to generate GNU NLS library.
159         INTLOBJS="\$(GETTOBJS)"
160         md_PATH_PROG(MSGFMT, msgfmt, msgfmt)
161         md_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
162         md_PATH_PROG(XGETTEXT, xgettext, xgettext)
163         AC_SUBST(MSGFMT)
164         CATOBJEXT=.gmo
165         INSTOBJEXT=.mo
166         DATADIRNAME=share
167         INTLDEPS="../intl/libintl.a"
168         INTLLIBS=$INTLDEPS
169         LIBS=`echo $LIBS | sed -e 's/-lintl//'`
170         nls_cv_header_intl=intl/libintl.h
171         nls_cv_header_libgt=intl/libgettext.h
172       fi
173
174       # We need to process the intl/ and po/ directory.
175       INTLSUB=intl
176       POSUB=po
177     else
178       DATADIRNAME=share
179       nls_cv_header_intl=intl/libintl.h
180       nls_cv_header_libgt=intl/libgettext.h
181     fi
182
183     dnl These rules are solely for the distribution goal.  While doing this
184     dnl we only have to keep exactly one list of the available catalogs
185     dnl in configure.in.
186     for lang in $ALL_LINGUAS; do
187       GMOFILES="$GMOFILES $lang.gmo"
188       POFILES="$POFILES $lang.po"
189     done
190
191     dnl Make all variables we use known to autoconf.
192     AC_SUBST(CATALOGS)
193     AC_SUBST(CATOBJEXT)
194     AC_SUBST(DATADIRNAME)
195     AC_SUBST(GMOFILES)
196     AC_SUBST(INSTOBJEXT)
197     AC_SUBST(INTLDEPS)
198     AC_SUBST(INTLLIBS)
199     AC_SUBST(INTLOBJS)
200     AC_SUBST(INTLSUB)
201     AC_SUBST(POFILES)
202     AC_SUBST(POSUB)
203   ])
204
205 AC_DEFUN(ud_GNU_GETTEXT,
206   [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
207    AC_REQUIRE([AC_PROG_CC])dnl
208    AC_REQUIRE([AC_PROG_RANLIB])dnl
209    AC_REQUIRE([AC_HEADER_STDC])dnl
210    AC_REQUIRE([AC_C_CONST])dnl
211    AC_REQUIRE([AC_C_INLINE])dnl
212    AC_REQUIRE([AC_TYPE_OFF_T])dnl
213    AC_REQUIRE([AC_TYPE_SIZE_T])dnl
214    AC_REQUIRE([AC_FUNC_ALLOCA])dnl
215    AC_REQUIRE([AC_FUNC_MMAP])dnl
216
217    AC_CHECK_HEADERS([limits.h locale.h nl_types.h malloc.h string.h unistd.h values.h])
218    AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp])
219
220    if test "${ac_cv_func_stpcpy+set}" != "set"; then
221      AC_CHECK_FUNCS(stpcpy)
222    fi
223    if test "${ac_cv_func_stpcpy}" = "yes"; then
224      AC_DEFINE(HAVE_STPCPY)
225    fi
226
227    ud_LC_MESSAGES
228    ud_WITH_NLS
229
230    if test "x$CATOBJEXT" != "x"; then
231      if test "x$ALL_LINGUAS" = "x"; then
232        LINGUAS=
233      else
234        AC_MSG_CHECKING(for catalogs to be installed)
235        NEW_LINGUAS=
236        for lang in ${LINGUAS=$ALL_LINGUAS}; do
237          case "$ALL_LINGUAS" in
238           *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
239          esac
240        done
241        LINGUAS=$NEW_LINGUAS
242        AC_MSG_RESULT($LINGUAS)
243      fi
244
245      dnl Construct list of names of catalog files to be constructed.
246      if test -n "$LINGUAS"; then
247        for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
248      fi
249    fi
250
251    dnl Determine which catalog format we have (if any is needed)
252    dnl For now we know about two different formats:
253    dnl   Linux and the normal X/Open format
254    test -d intl || mkdir intl
255    if test "$CATOBJEXT" = ".cat"; then
256      AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
257
258      dnl Transform the SED scripts while copying because some dumb SEDs
259      dnl cannot handle comments.
260      sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
261    fi
262    dnl po2tbl.sed is always needed.
263    sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
264      $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
265
266    dnl Generate list of files to be processed by xgettext which will
267    dnl be included in po/Makefile.
268    test -d po || mkdir po
269    if test "x$srcdir" != "x."; then
270      if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
271        posrcprefix="$srcdir/"
272      else
273        posrcprefix="../$srcdir/"
274      fi
275    else
276      posrcprefix="../"
277    fi
278    sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
279         < $srcdir/po/POTFILES.in > po/POTFILES
280   ])
281
282 dnl END========================
283
284 dnl some additional macros
285
286 dnl WK_MSG_PRINT(STRING)
287 define(WK_MSG_PRINT,
288 [echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG ])
289
290 dnl WK_CHECK_TYPEDEF(TYPE, HAVE_NAME)
291 AC_DEFUN(WK_CHECK_TYPEDEF,
292 [AC_MSG_CHECKING(for $1 typedef)
293 AC_CACHE_VAL(wk_cv_typedef_$1,
294 [AC_TRY_COMPILE([#include <stdlib.h>
295 #include <sys/types.h>], [
296 #undef $1
297 int a = sizeof($1);
298 ], wk_cv_typedef_$1=yes, wk_cv_typedef_$1=no )])
299 AC_MSG_RESULT($wk_cv_typedef_$1)
300 if test "$wk_cv_typedef_$1" = yes; then
301     AC_DEFINE($2)
302 fi
303 ])
304
305
306 dnl
307 AC_CANONICAL_SYSTEM
308 AC_MSG_CHECKING(cached information)
309 hostcheck="$target"
310 AC_CACHE_VAL(ac_cv_mpi_hostcheck, [ ac_cv_mpi_hostcheck="$hostcheck" ])
311 if test "$ac_cv_mpi_hostcheck" != "$hostcheck"; then
312     AC_MSG_RESULT(changed)
313     AC_MSG_WARN(config.cache exists!)
314     AC_MSG_ERROR(you must do 'make distclean' first to compile for
315 different target or different parameters.)
316 else
317     AC_MSG_RESULT(ok)
318 fi
319
320
321 dnl Checks for programs.
322
323 AC_PROG_MAKE_SET
324
325 case "${target}" in
326     i386--mingw32)
327         # special stuff for Windoze NT
328         cross_compiling=yes
329         CC="i386--mingw32-gcc"
330         CPP="i386--mingw32-gcc -E"
331         RANLIB="i386--mingw32-ranlib"
332         ac_cv_have_dev_random=no
333         ;;
334     *)
335 AC_PROG_RANLIB
336 AC_PROG_INSTALL
337 AC_PROG_CC
338 AC_PROG_CPP
339        ;;
340 esac
341
342
343 AC_ARG_PROGRAM
344
345 dnl Checks for libraries.
346
347 dnl Checks for header files.
348 AC_HEADER_STDC
349 AC_CHECK_HEADERS(unistd.h)
350
351 ud_GNU_GETTEXT
352
353
354 dnl Checks for typedefs, structures, and compiler characteristics.
355 AC_C_CONST
356 AC_C_INLINE
357 AC_TYPE_SIZE_T
358
359 dnl autoconf doesn't support a default value for AC_C_BIGENDIAN
360 dnl so here is the modified version
361 if test "$cross_compiling" = yes; then
362     AC_MSG_WARN(cross compiling; assuming little endianess)
363 fi
364 AC_CACHE_CHECK(for little endianess, ac_cv_c_littleendian,
365 [ac_cv_c_littleendian=unknown
366 # See if sys/param.h defines the BYTE_ORDER macro.
367 AC_TRY_COMPILE([#include <sys/types.h>
368 #include <sys/param.h>], [
369 #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
370  bogus endian macros
371 #endif], [# It does; now see whether it defined to BIG_ENDIAN or not.
372 AC_TRY_COMPILE([#include <sys/types.h>
373 #include <sys/param.h>], [
374 #if BYTE_ORDER != BIG_ENDIAN
375  not big endian
376 #endif], ac_cv_c_littleendian=no, ac_cv_c_littleendian=yes)])
377 if test "$ac_cv_c_littleendian" = unknown; then
378 AC_TRY_RUN([main () {
379   /* Are we little or big endian?  From Harbison&Steele.  */
380   union
381   {
382     long l;
383     char c[sizeof (long)];
384   } u;
385   u.l = 1;
386   exit (u.c[sizeof (long) - 1] == 1);
387 }], ac_cv_c_littleendian=yes, ac_cv_c_littleendian=no, ac_cv_c_littleendian=yes)
388 fi])
389
390 if test "$ac_cv_c_littleendian" = yes; then
391   AC_DEFINE(LITTLE_ENDIAN_HOST)
392 else
393   AC_DEFINE(BIG_ENDIAN_HOST)
394 fi
395
396
397 WK_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
398 WK_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
399 WK_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
400 WK_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
401 WK_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
402
403 AC_CHECK_SIZEOF(unsigned short, 2)
404 AC_CHECK_SIZEOF(unsigned int, 4)
405 AC_CHECK_SIZEOF(unsigned long, 4)
406
407 if test "$ac_cv_sizeof_unsigned_short" = "0" \
408    || test "$ac_cv_sizeof_unsigned_int" = "0" \
409    || test "$ac_cv_sizeof_unsigned_long" = "0"; then
410     AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]);
411 fi
412
413
414
415 dnl Checks for library functions.
416 AC_FUNC_VPRINTF
417 AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul)
418
419
420
421
422 dnl check wether we have a random device
423 AC_CACHE_CHECK(for random device, ac_cv_have_dev_random,
424 [if test -c /dev/random && test -c /dev/urandom ; then
425   ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi])
426 if test "$ac_cv_have_dev_random" = yes; then
427     AC_DEFINE(HAVE_DEV_RANDOM)
428 fi
429
430
431 dnl setup assembler stuff
432 AC_MSG_CHECKING(for mpi assembler functions)
433 mpi_config_done="no"
434 AC_CACHE_VAL(ac_cv_mpi_config_done,
435              [ ac_cv_mpi_config_done="$mpi_config_done" ])
436 if test "$ac_cv_mpi_config_done" = yes; then
437     AC_MSG_RESULT(done)
438 else
439 ac_cv_mpi_config_done=""
440 if test -f $srcdir/mpi/config.links ; then
441     . $srcdir/mpi/config.links
442     if test "x$g10_ln_sources" = "x"; then
443         g10_ln_sources="$mpi_ln_src"
444         g10_ln_dests="$mpi_ln_dst"
445     else
446         g10_ln_sources="$g10_ln_sources $mpi_ln_src"
447         g10_ln_dests="$g10_ln_dests $mpi_ln_dst"
448     fi
449     ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
450     ac_cv_mpi_config_done="yes"
451     AC_MSG_RESULT(done)
452 else
453     AC_MSG_RESULT(failed)
454     AC_MSG_ERROR([mpi/config.links missing!])
455 fi
456 fi
457 MPI_EXTRA_ASM_OBJS=""
458 if test "$ac_cv_mpi_extra_asm_modules" != ""; then
459 WK_MSG_PRINT([mpi extra asm functions:])
460 for i in $ac_cv_mpi_extra_asm_modules; do
461     WK_MSG_PRINT([$i])
462     MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
463 done
464 AC_MSG_RESULT()
465 fi
466 AC_SUBST(MPI_EXTRA_ASM_OBJS)
467
468
469 dnl Do we have zlib? Must do it here because Solaris failed
470 dnl when compiling a conftest (due to the "-lz" from LIBS).
471 AC_CHECK_HEADERS(zlib.h,
472                  [LIBS="$LIBS -lz"],
473                  AC_MSG_WARN([zlib missing - creating without ZLIB support!])
474                 )
475
476 dnl checking whether we have other cipher source files
477 CIPHER_EXTRA_OBJS=""
478 CIPHER_EXTRA_DIST=""
479 AC_CACHE_CHECK(for extra cipher modules, ac_cv_have_rsa_cipher,
480 [if test -f $srcdir/cipher/rsa.c && test -f $srcdir/cipher/rsa.h; then
481   ac_cv_have_rsa_cipher=yes; else ac_cv_have_rsa_cipher=no; fi])
482 if test $ac_cv_have_rsa_cipher = yes; then
483     AC_DEFINE(HAVE_RSA_CIPHER)
484     CIPHER_EXTRA_OBJS="rsa.o"
485     CIPHER_EXTRA_DIST="rsa.c rsa.h"
486 fi
487 AC_SUBST(CIPHER_EXTRA_OBJS)
488 AC_SUBST(CIPHER_EXTRA_DIST)
489
490 if test "x$g10_ln_sources" = "x"; then
491     g10_ln_sources="$nls_cv_header_libgt"
492     g10_ln_dests="$nls_cv_header_intl"
493 else
494     g10_ln_sources="$g10_ln_sources $nls_cv_header_libgt"
495     g10_ln_dests="$g10_ln_dests $nls_cv_header_intl"
496 fi
497
498 AC_LINK_FILES($g10_ln_sources,$g10_ln_dests)
499
500
501 AC_OUTPUT([
502 Makefile
503 intl/Makefile
504 po/Makefile.in
505 util/Makefile
506 mpi/Makefile
507 cipher/Makefile
508 g10/Makefile
509 tools/Makefile
510 ],[echo timestamp >stamp-h; sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile])
511