Add generic crypto module.
[pspp] / m4 / gc.m4
1 # gc.m4 serial 1
2 dnl Copyright (C) 2005 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
6
7 AC_DEFUN([gl_GC],
8 [
9   AC_LIBSOURCES([gc.h, gc-gnulib.c, gc-libgcrypt.c])
10   AC_ARG_WITH(libgcrypt,
11     AS_HELP_STRING([--with-libgcrypt], [use libgcrypt for low-level crypto]),
12     libgcrypt=$withval, libgcrypt=no)
13   if test "$libgcrypt" != no; then
14     AC_LIB_HAVE_LINKFLAGS([gcrypt])
15   fi
16   if test "$ac_cv_libgcrypt" = yes; then
17     AC_CHECK_HEADER(gcrypt.h)
18     AC_LIBOBJ([gc-libgcrypt])
19   else
20     AC_LIBOBJ([gc-gnulib])
21     gl_MD5
22     gl_MEMXOR
23     gl_HMAC_MD5
24
25     # Devices with randomness.
26     # FIXME: Are these the best defaults?
27
28     case "${target}" in
29       *-openbsd*)
30         NAME_OF_RANDOM_DEVICE="/dev/srandom"
31         NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/prandom"
32         NAME_OF_NONCE_DEVICE="/dev/urandom"
33           ;;
34   
35       *-netbsd*)
36         NAME_OF_RANDOM_DEVICE="/dev/srandom"
37         NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom"
38         NAME_OF_NONCE_DEVICE="/dev/urandom"
39           ;;
40   
41       *-solaris* | *-irix* | *-dec-osf* )
42         NAME_OF_RANDOM_DEVICE="/dev/random"
43         NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/random"
44         NAME_OF_NONCE_DEVICE="/dev/random"
45           ;;
46   
47       *)
48         NAME_OF_RANDOM_DEVICE="/dev/random"
49         NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom"
50         NAME_OF_NONCE_DEVICE="/dev/urandom"
51           ;;
52     esac
53   
54     AC_MSG_CHECKING([device with (strong) random data...])
55     AC_ARG_ENABLE(random-device,
56         AC_HELP_STRING([--enable-random-device],
57                 [device with (strong) randomness (for Nettle)]),
58         NAME_OF_RANDOM_DEVICE=$enableval)
59     AC_MSG_RESULT($NAME_OF_RANDOM_DEVICE)
60   
61     AC_MSG_CHECKING([device with pseudo random data...])
62     AC_ARG_ENABLE(pseudo-random-device,
63         AC_HELP_STRING([--enable-pseudo-random-device],
64                 [device with pseudo randomness (for Nettle)]),
65         NAME_OF_PSEUDO_RANDOM_DEVICE=$enableval)
66     AC_MSG_RESULT($NAME_OF_PSEUDO_RANDOM_DEVICE)
67   
68     AC_MSG_CHECKING([device with unpredictable data for nonces...])
69     AC_ARG_ENABLE(nonce-device,
70         AC_HELP_STRING([--enable-nonce-device],
71                 [device with unpredictable nonces (for Nettle)]),
72         NAME_OF_NONCE_DEVICE=$enableval)
73     AC_MSG_RESULT($NAME_OF_NONCE_DEVICE)
74   
75     if test "$cross_compiling" != yes; then
76       AC_CHECK_FILE($NAME_OF_RANDOM_DEVICE,, AC_MSG_ERROR([[
77         *** Device for (strong) random data $NAME_OF_RANDOM_DEVICE does not exist
78       ]]))
79       AC_CHECK_FILE($NAME_OF_PSEUDO_RANDOM_DEVICE,, AC_MSG_ERROR([[
80         *** Device for pseudo-random data $NAME_OF_PSEUDO_RANDOM_DEVICE does not exist
81       ]]))
82       AC_CHECK_FILE($NAME_OF_NONCE_DEVICE,, AC_MSG_ERROR([[
83         *** Device for unpredictable nonces $NAME_OF_NONCE_DEVICE does not exist
84       ]]))
85     else
86       AC_MSG_NOTICE([[Cross compiling, assuming random devices exists...]])  
87     fi
88   
89     # FIXME: Open+read 42 bytes+close twice and compare data.  Should differ.
90   
91     AC_DEFINE_UNQUOTED(NAME_OF_RANDOM_DEVICE, "$NAME_OF_RANDOM_DEVICE",
92                      [defined to the name of the (strong) random device])
93     AC_DEFINE_UNQUOTED(NAME_OF_PSEUDO_RANDOM_DEVICE,
94                          "$NAME_OF_PSEUDO_RANDOM_DEVICE",
95                      [defined to the name of the pseudo random device])
96     AC_DEFINE_UNQUOTED(NAME_OF_NONCE_DEVICE, "$NAME_OF_NONCE_DEVICE",
97                      [defined to the name of the unpredictable nonce device])
98   fi
99 ])
100
101 # Prerequisites of lib/gc.h
102 AC_DEFUN([gl_PREREQ_GC], [:])