configure.ac, base/dispatch.[ch]: CPU-specific implementations.
[catacomb] / configure.ac
1 dnl -*-autoconf-*-
2 dnl
3 dnl Configuration script for Catacomb
4 dnl
5 dnl (c) 2013 Straylight/Edgeware
6 dnl
7
8 dnl----- Licensing notice ---------------------------------------------------
9 dnl
10 dnl This file is part of Catacomb.
11 dnl
12 dnl Catacomb is free software; you can redistribute it and/or modify
13 dnl it under the terms of the GNU Library General Public License as
14 dnl published by the Free Software Foundation; either version 2 of the
15 dnl License, or (at your option) any later version.
16 dnl
17 dnl Catacomb is distributed in the hope that it will be useful,
18 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
19 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 dnl GNU Library General Public License for more details.
21 dnl
22 dnl You should have received a copy of the GNU Library General Public
23 dnl License along with Catacomb; if not, write to the Free
24 dnl Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
25 dnl MA 02111-1307, USA.
26
27 dnl--------------------------------------------------------------------------
28 dnl Initialization.
29
30 mdw_AUTO_VERSION
31 AC_INIT([catacomb], AUTO_VERSION, [mdw@distorted.org.uk])
32 AC_CONFIG_SRCDIR([catacomb.pc.in])
33 AC_CONFIG_AUX_DIR([config])
34 AM_INIT_AUTOMAKE([foreign parallel-tests])
35 AC_CANONICAL_HOST
36 mdw_SILENT_RULES
37
38 AC_PROG_CC
39 AX_CFLAGS_WARN_ALL
40 AM_PROG_LIBTOOL
41 mdw_LIBTOOL_VERSION_INFO
42
43 AM_PROG_AS
44
45 AC_PROG_YACC
46
47 AC_SUBST(AM_CFLAGS)
48
49 dnl--------------------------------------------------------------------------
50 dnl Host-specific configuration.
51
52 AC_DEFUN([catacomb_CPU_FAMILIES],
53 [$1([i[[3-6]]86], [X86])])
54
55 case $host_cpu in
56 m4_define([catacomb_CPU_CASE],
57 [$1)
58 AC_DEFINE([CPUFAM_$2], [1], [Define if host CPU family is $2.])
59 cpufam=$2
60 ;;
61 ])
62 catacomb_CPU_FAMILIES([catacomb_CPU_CASE])
63 *) cpufam=nil ;;
64 esac
65 m4_define([catacomb_CPU_DEFS],
66 [AM_CONDITIONAL([CPUFAM_$2], [test x$cpufam = x$2])])
67 catacomb_CPU_FAMILIES([catacomb_CPU_DEFS])
68
69 dnl--------------------------------------------------------------------------
70 dnl C programming environment.
71
72 dnl Find out if we're cross-compiling.
73 AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
74
75 dnl Various standard types.
76 AC_CHECK_TYPE([pid_t], [int])
77 AC_TYPE_UID_T
78 AC_CHECK_TYPE([ssize_t], [int])
79 AC_CHECK_TYPE([socklen_t], [int])
80
81 dnl The maths library.
82 mdw_ORIG_LIBS=$LIBS LIBS=
83 AC_SEARCH_LIBS([log], [m])
84 AC_SEARCH_LIBS([sqrt], [m])
85 AC_SUBST([MATHLIBS], [$LIBS])
86 LIBS=$mdw_ORIG_LIBS
87
88 dnl Find out whether very long integer types are available.
89 AC_CHECK_HEADERS([stdint.h])
90 AC_SUBST([have_stdint_h])
91 AC_C_LONG_LONG
92
93 dnl Find the bit lengths of the obvious integer types. This will be useful
94 dnl when deciding on a representation for multiprecision integers.
95 type_bits="" type_bits_sep=""
96 AC_DEFUN([catacomb_UINT_BITS],
97 [mdw_UINT_BITS([$2], [$1])
98 type_bits="$type_bits$type_bits_sep('$1', $[]$1_bits)"
99 type_bits_sep=", "])
100 catacomb_UINT_BITS([uchar], [unsigned char])
101 catacomb_UINT_BITS([ushort], [unsigned short])
102 catacomb_UINT_BITS([uint], [unsigned int])
103 catacomb_UINT_BITS([ulong], [unsigned long])
104 if test "$ac_cv_c_long_long" = "yes"; then
105 catacomb_UINT_BITS([ullong], [unsigned long long])
106 fi
107 if test "$ac_cv_header_stdint_h" = "yes"; then
108 catacomb_UINT_BITS([uintmax], [uintmax_t])
109 fi
110 AC_SUBST([type_bits])
111
112 dnl Determine the limits of common C integer types.
113 limits="" limits_sep=""
114 AC_DEFUN([catacomb_COMPILE_TIME_CONSTANT],
115 [case "$2" in
116 =*)
117 $1="$2"; $1=${$1#=}
118 ;;
119 *)
120 AC_CACHE_CHECK([compile-time value of $2], [mdw_cv_constant_$3],
121 [mdw_PROBE_CONSTANT([mdw_cv_constant_$3], [$2], [$4])])
122 $1=$mdw_cv_constant_$3
123 ;;
124 esac])
125 AC_DEFUN([catacomb_LIMIT],
126 [catacomb_COMPILE_TIME_CONSTANT([lo], [$2], [$1_min],
127 [#include <limits.h>
128 #include <stddef.h>])
129 catacomb_COMPILE_TIME_CONSTANT([hi], [$3], [$1_max],
130 [#include <limits.h>
131 #include <stddef.h>])
132 limits="$limits$limits_sep('$1', $lo, $hi)" limits_sep=", "])
133 catacomb_LIMIT([SCHAR], [SCHAR_MIN], [SCHAR_MAX])
134 catacomb_LIMIT([CHAR], [CHAR_MIN], [CHAR_MAX])
135 catacomb_LIMIT([UCHAR], [=0], [UCHAR_MAX])
136 catacomb_LIMIT([UINT8], [=0], [=0xff])
137 catacomb_LIMIT([SHRT], [SHRT_MIN], [SHRT_MAX])
138 catacomb_LIMIT([USHRT], [=0], [USHRT_MAX])
139 catacomb_LIMIT([UINT16], [=0], [=0xffff])
140 catacomb_LIMIT([INT], [INT_MIN], [INT_MAX])
141 catacomb_LIMIT([UINT], [=0], [UINT_MAX])
142 catacomb_LIMIT([LONG], [LONG_MIN], [LONG_MAX])
143 catacomb_LIMIT([ULONG], [=0], [ULONG_MAX])
144 catacomb_LIMIT([UINT32], [=0], [=0xffffffff])
145 if test "$ac_cv_c_long_long" = "yes"; then
146 catacomb_LIMIT([LLONG], [LLONG_MIN], [LLONG_MAX])
147 catacomb_LIMIT([ULLONG], [=0], [ULLONG_MAX])
148 fi
149 catacomb_LIMIT([SIZET], [=0], [~(size_t)0])
150 AC_SUBST([limits])
151
152 dnl Functions used for noise-gathering.
153 AC_CHECK_FUNCS([setgroups])
154 AC_CACHE_CHECK([whether the freewheel noise generator will work],
155 [catacomb_cv_freewheel],
156 [AC_TRY_LINK(
157 [#include <setjmp.h>
158 #include <sys/time.h>],
159 [struct itimerval itv = { { 0, 0 }, { 0, 5000 } };
160 jmp_buf j;
161 setitimer(ITIMER_REAL, &itv, 0);
162 sigsetjmp(j, 1);],
163 [catacomb_cv_freewheel=yes],
164 [catacomb_cv_freewheel=no])])
165 case $catacomb_cv_freewheel in
166 yes)
167 AC_DEFINE([USE_FREEWHEEL], [1],
168 [Define if you want to use the freewheel noise generator.])
169 ;;
170 esac
171
172 dnl Support for the passphrase pixie.
173 mdw_ORIG_LIBS=$LIBS
174 AC_SEARCH_LIBS([socket], [socket])
175 AC_SUBST([PIXIE_LIBS], [$LIBS])
176 LIBS=$mdw_ORIG_LIBS
177
178 dnl Memory locking support.
179 AC_CHECK_FUNCS([mlock])
180
181 dnl Necessary support libraries.
182 PKG_CHECK_MODULES([mLib], [mLib >= 2.2.1])
183 AM_CFLAGS="$AM_CFLAGS $mLib_CFLAGS"
184
185 dnl--------------------------------------------------------------------------
186 dnl Python.
187
188 dnl Make sure we have a suitable version.
189 AM_PATH_PYTHON([2.5])
190
191 dnl--------------------------------------------------------------------------
192 dnl Special debugging options.
193
194 AC_ARG_ENABLE([mpw],
195 [AS_HELP_STRING([--enable-mpw], [force small-width mp digits])],
196 [case "$enableval" in
197 y*|t*|short)
198 AC_DEFINE([FORCE_MPW_SHORT], [1],
199 [Define to force small-width mp digits.])
200 ;;
201 cussid)
202 AC_DEFINE([FORCE_MPW_CUSSID], [1],
203 [Define to force strange-width mp digits.])
204 ;;
205 esac])
206
207 dnl--------------------------------------------------------------------------
208 dnl Produce output.
209
210 AC_CONFIG_HEADER([config/config.h])
211
212 AC_CONFIG_FILES(
213 [Makefile]
214 [base/Makefile]
215 [key/Makefile]
216 [math/Makefile]
217 [misc/Makefile]
218 [pub/Makefile]
219 [rand/Makefile]
220 [symm/Makefile]
221 [progs/Makefile])
222 AC_OUTPUT
223
224 dnl----- That's all, folks --------------------------------------------------