configure.ac: Arrange to have an assembler available.
[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 mdw_SILENT_RULES
36
37 AC_PROG_CC
38 AX_CFLAGS_WARN_ALL
39 AM_PROG_LIBTOOL
40 mdw_LIBTOOL_VERSION_INFO
41
42 AM_PROG_AS
43
44 AC_PROG_YACC
45
46 AC_SUBST(AM_CFLAGS)
47
48 dnl--------------------------------------------------------------------------
49 dnl C programming environment.
50
51 dnl Find out if we're cross-compiling.
52 AM_CONDITIONAL([CROSS_COMPILING], [test "$cross_compiling" = yes])
53
54 dnl Various standard types.
55 AC_CHECK_TYPE([pid_t], [int])
56 AC_TYPE_UID_T
57 AC_CHECK_TYPE([ssize_t], [int])
58 AC_CHECK_TYPE([socklen_t], [int])
59
60 dnl The maths library.
61 mdw_ORIG_LIBS=$LIBS LIBS=
62 AC_SEARCH_LIBS([log], [m])
63 AC_SEARCH_LIBS([sqrt], [m])
64 AC_SUBST([MATHLIBS], [$LIBS])
65 LIBS=$mdw_ORIG_LIBS
66
67 dnl Find out whether very long integer types are available.
68 AC_CHECK_HEADERS([stdint.h])
69 AC_SUBST([have_stdint_h])
70 AC_C_LONG_LONG
71
72 dnl Find the bit lengths of the obvious integer types. This will be useful
73 dnl when deciding on a representation for multiprecision integers.
74 type_bits="" type_bits_sep=""
75 AC_DEFUN([catacomb_UINT_BITS],
76 [mdw_UINT_BITS([$2], [$1])
77 type_bits="$type_bits$type_bits_sep('$1', $[]$1_bits)"
78 type_bits_sep=", "])
79 catacomb_UINT_BITS([uchar], [unsigned char])
80 catacomb_UINT_BITS([ushort], [unsigned short])
81 catacomb_UINT_BITS([uint], [unsigned int])
82 catacomb_UINT_BITS([ulong], [unsigned long])
83 if test "$ac_cv_c_long_long" = "yes"; then
84 catacomb_UINT_BITS([ullong], [unsigned long long])
85 fi
86 if test "$ac_cv_header_stdint_h" = "yes"; then
87 catacomb_UINT_BITS([uintmax], [uintmax_t])
88 fi
89 AC_SUBST([type_bits])
90
91 dnl Determine the limits of common C integer types.
92 limits="" limits_sep=""
93 AC_DEFUN([catacomb_COMPILE_TIME_CONSTANT],
94 [case "$2" in
95 =*)
96 $1="$2"; $1=${$1#=}
97 ;;
98 *)
99 AC_CACHE_CHECK([compile-time value of $2], [mdw_cv_constant_$3],
100 [mdw_PROBE_CONSTANT([mdw_cv_constant_$3], [$2], [$4])])
101 $1=$mdw_cv_constant_$3
102 ;;
103 esac])
104 AC_DEFUN([catacomb_LIMIT],
105 [catacomb_COMPILE_TIME_CONSTANT([lo], [$2], [$1_min],
106 [#include <limits.h>
107 #include <stddef.h>])
108 catacomb_COMPILE_TIME_CONSTANT([hi], [$3], [$1_max],
109 [#include <limits.h>
110 #include <stddef.h>])
111 limits="$limits$limits_sep('$1', $lo, $hi)" limits_sep=", "])
112 catacomb_LIMIT([SCHAR], [SCHAR_MIN], [SCHAR_MAX])
113 catacomb_LIMIT([CHAR], [CHAR_MIN], [CHAR_MAX])
114 catacomb_LIMIT([UCHAR], [=0], [UCHAR_MAX])
115 catacomb_LIMIT([UINT8], [=0], [=0xff])
116 catacomb_LIMIT([SHRT], [SHRT_MIN], [SHRT_MAX])
117 catacomb_LIMIT([USHRT], [=0], [USHRT_MAX])
118 catacomb_LIMIT([UINT16], [=0], [=0xffff])
119 catacomb_LIMIT([INT], [INT_MIN], [INT_MAX])
120 catacomb_LIMIT([UINT], [=0], [UINT_MAX])
121 catacomb_LIMIT([LONG], [LONG_MIN], [LONG_MAX])
122 catacomb_LIMIT([ULONG], [=0], [ULONG_MAX])
123 catacomb_LIMIT([UINT32], [=0], [=0xffffffff])
124 if test "$ac_cv_c_long_long" = "yes"; then
125 catacomb_LIMIT([LLONG], [LLONG_MIN], [LLONG_MAX])
126 catacomb_LIMIT([ULLONG], [=0], [ULLONG_MAX])
127 fi
128 catacomb_LIMIT([SIZET], [=0], [~(size_t)0])
129 AC_SUBST([limits])
130
131 dnl Functions used for noise-gathering.
132 AC_CHECK_FUNCS([setgroups])
133 AC_CACHE_CHECK([whether the freewheel noise generator will work],
134 [catacomb_cv_freewheel],
135 [AC_TRY_LINK(
136 [#include <setjmp.h>
137 #include <sys/time.h>],
138 [struct itimerval itv = { { 0, 0 }, { 0, 5000 } };
139 jmp_buf j;
140 setitimer(ITIMER_REAL, &itv, 0);
141 sigsetjmp(j, 1);],
142 [catacomb_cv_freewheel=yes],
143 [catacomb_cv_freewheel=no])])
144 case $catacomb_cv_freewheel in
145 yes)
146 AC_DEFINE([USE_FREEWHEEL], [1],
147 [Define if you want to use the freewheel noise generator.])
148 ;;
149 esac
150
151 dnl Support for the passphrase pixie.
152 mdw_ORIG_LIBS=$LIBS
153 AC_SEARCH_LIBS([socket], [socket])
154 AC_SUBST([PIXIE_LIBS], [$LIBS])
155 LIBS=$mdw_ORIG_LIBS
156
157 dnl Memory locking support.
158 AC_CHECK_FUNCS([mlock])
159
160 dnl Necessary support libraries.
161 PKG_CHECK_MODULES([mLib], [mLib >= 2.2.1])
162 AM_CFLAGS="$AM_CFLAGS $mLib_CFLAGS"
163
164 dnl--------------------------------------------------------------------------
165 dnl Python.
166
167 dnl Make sure we have a suitable version.
168 AM_PATH_PYTHON([2.5])
169
170 dnl--------------------------------------------------------------------------
171 dnl Special debugging options.
172
173 AC_ARG_ENABLE([mpw],
174 [AS_HELP_STRING([--enable-mpw], [force small-width mp digits])],
175 [case "$enableval" in
176 y*|t*|short)
177 AC_DEFINE([FORCE_MPW_SHORT], [1],
178 [Define to force small-width mp digits.])
179 ;;
180 cussid)
181 AC_DEFINE([FORCE_MPW_CUSSID], [1],
182 [Define to force strange-width mp digits.])
183 ;;
184 esac])
185
186 dnl--------------------------------------------------------------------------
187 dnl Produce output.
188
189 AC_CONFIG_HEADER([config/config.h])
190
191 AC_CONFIG_FILES(
192 [Makefile]
193 [base/Makefile]
194 [key/Makefile]
195 [math/Makefile]
196 [misc/Makefile]
197 [pub/Makefile]
198 [rand/Makefile]
199 [symm/Makefile]
200 [progs/Makefile])
201 AC_OUTPUT
202
203 dnl----- That's all, folks --------------------------------------------------