depends: use c++11
[bitcoinplatinum.git] / src / secp256k1 / configure.ac
blob786d8dcfb99ece01e0e059429aa3591736054a24
1 AC_PREREQ([2.60])
2 AC_INIT([libsecp256k1],[0.1])
3 AC_CONFIG_AUX_DIR([build-aux])
4 AC_CONFIG_MACRO_DIR([build-aux/m4])
5 AC_CANONICAL_HOST
6 AH_TOP([#ifndef LIBSECP256K1_CONFIG_H])
7 AH_TOP([#define LIBSECP256K1_CONFIG_H])
8 AH_BOTTOM([#endif /*LIBSECP256K1_CONFIG_H*/])
9 AM_INIT_AUTOMAKE([foreign subdir-objects])
10 LT_INIT
12 dnl make the compilation flags quiet unless V=1 is used
13 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
15 PKG_PROG_PKG_CONFIG
17 AC_PATH_TOOL(AR, ar)
18 AC_PATH_TOOL(RANLIB, ranlib)
19 AC_PATH_TOOL(STRIP, strip)
20 AX_PROG_CC_FOR_BUILD
22 if test "x$CFLAGS" = "x"; then
23   CFLAGS="-O3 -g"
26 AM_PROG_CC_C_O
28 AC_PROG_CC_C89
29 if test x"$ac_cv_prog_cc_c89" = x"no"; then
30   AC_MSG_ERROR([c89 compiler support required])
33 case $host_os in
34   *darwin*)
35      if  test x$cross_compiling != xyes; then
36        AC_PATH_PROG([BREW],brew,)
37        if test x$BREW != x; then
38          dnl These Homebrew packages may be keg-only, meaning that they won't be found
39          dnl in expected paths because they may conflict with system files. Ask
40          dnl Homebrew where each one is located, then adjust paths accordingly.
42          openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
43          gmp_prefix=`$BREW --prefix gmp 2>/dev/null`
44          if test x$openssl_prefix != x; then
45            PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
46            export PKG_CONFIG_PATH
47          fi
48          if test x$gmp_prefix != x; then
49            GMP_CPPFLAGS="-I$gmp_prefix/include"
50            GMP_LIBS="-L$gmp_prefix/lib"
51          fi
52        else
53          AC_PATH_PROG([PORT],port,)
54          dnl if homebrew isn't installed and macports is, add the macports default paths
55          dnl as a last resort.
56          if test x$PORT != x; then
57            CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
58            LDFLAGS="$LDFLAGS -L/opt/local/lib"
59          fi
60        fi
61      fi
62    ;;
63 esac
65 CFLAGS="$CFLAGS -W"
67 warn_CFLAGS="-std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long -Wno-overlength-strings"
68 saved_CFLAGS="$CFLAGS"
69 CFLAGS="$CFLAGS $warn_CFLAGS"
70 AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
71 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
72     [ AC_MSG_RESULT([yes]) ],
73     [ AC_MSG_RESULT([no])
74       CFLAGS="$saved_CFLAGS"
75     ])
77 saved_CFLAGS="$CFLAGS"
78 CFLAGS="$CFLAGS -fvisibility=hidden"
79 AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
80 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
81     [ AC_MSG_RESULT([yes]) ],
82     [ AC_MSG_RESULT([no])
83       CFLAGS="$saved_CFLAGS"
84     ])
86 AC_ARG_ENABLE(benchmark,
87     AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is no)]),
88     [use_benchmark=$enableval],
89     [use_benchmark=no])
91 AC_ARG_ENABLE(tests,
92     AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
93     [use_tests=$enableval],
94     [use_tests=yes])
96 AC_ARG_ENABLE(endomorphism,
97     AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]),
98     [use_endomorphism=$enableval],
99     [use_endomorphism=no])
100     
101 AC_ARG_ENABLE(ecmult_static_precomputation,
102     AS_HELP_STRING([--enable-ecmult-static-precomputation],[enable precomputed ecmult table for signing (default is yes)]),
103     [use_ecmult_static_precomputation=$enableval],
104     [use_ecmult_static_precomputation=yes])
106 AC_ARG_ENABLE(module_ecdh,
107     AS_HELP_STRING([--enable-module-ecdh],[enable ECDH shared secret computation (default is no)]),
108     [enable_module_ecdh=$enableval],
109     [enable_module_ecdh=no])
111 AC_ARG_ENABLE(module_schnorr,
112     AS_HELP_STRING([--enable-module-schnorr],[enable Schnorr signature module (default is no)]),
113     [enable_module_schnorr=$enableval],
114     [enable_module_schnorr=no])
116 AC_ARG_ENABLE(module_recovery,
117     AS_HELP_STRING([--enable-module-recovery],[enable ECDSA pubkey recovery module (default is no)]),
118     [enable_module_recovery=$enableval],
119     [enable_module_recovery=no])
121 AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=64bit|32bit|auto],
122 [Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto])
124 AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|no|auto],
125 [Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto])
127 AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto],
128 [Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto])
130 AC_ARG_WITH([asm], [AS_HELP_STRING([--with-asm=x86_64|no|auto]
131 [Specify assembly optimizations to use. Default is auto])],[req_asm=$withval], [req_asm=auto])
133 AC_CHECK_TYPES([__int128])
135 AC_MSG_CHECKING([for __builtin_expect])
136 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])],
137     [ AC_MSG_RESULT([yes]);AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]) ],
138     [ AC_MSG_RESULT([no])
139     ])
141 if test x"$req_asm" = x"auto"; then
142   SECP_64BIT_ASM_CHECK
143   if test x"$has_64bit_asm" = x"yes"; then
144     set_asm=x86_64
145   fi
146   if test x"$set_asm" = x; then
147     set_asm=no
148   fi
149 else
150   set_asm=$req_asm
151   case $set_asm in
152   x86_64)
153     SECP_64BIT_ASM_CHECK
154     if test x"$has_64bit_asm" != x"yes"; then
155       AC_MSG_ERROR([x86_64 assembly optimization requested but not available])
156     fi
157     ;;
158   no)
159     ;;
160   *)
161     AC_MSG_ERROR([invalid assembly optimization selection])
162     ;;
163   esac
166 if test x"$req_field" = x"auto"; then
167   if test x"set_asm" = x"x86_64"; then
168     set_field=64bit
169   fi
170   if test x"$set_field" = x; then
171     SECP_INT128_CHECK
172     if test x"$has_int128" = x"yes"; then
173       set_field=64bit
174     fi
175   fi
176   if test x"$set_field" = x; then
177     set_field=32bit
178   fi
179 else
180   set_field=$req_field
181   case $set_field in
182   64bit)
183     if test x"$set_asm" != x"x86_64"; then
184       SECP_INT128_CHECK
185       if test x"$has_int128" != x"yes"; then
186         AC_MSG_ERROR([64bit field explicitly requested but neither __int128 support or x86_64 assembly available])
187       fi
188     fi
189     ;;
190   32bit)
191     ;;
192   *)
193     AC_MSG_ERROR([invalid field implementation selection])
194     ;;
195   esac
198 if test x"$req_scalar" = x"auto"; then
199   SECP_INT128_CHECK
200   if test x"$has_int128" = x"yes"; then
201     set_scalar=64bit
202   fi
203   if test x"$set_scalar" = x; then
204     set_scalar=32bit
205   fi
206 else
207   set_scalar=$req_scalar
208   case $set_scalar in
209   64bit)
210     SECP_INT128_CHECK
211     if test x"$has_int128" != x"yes"; then
212       AC_MSG_ERROR([64bit scalar explicitly requested but __int128 support not available])
213     fi
214     ;;
215   32bit)
216     ;;
217   *)
218     AC_MSG_ERROR([invalid scalar implementation selected])
219     ;;
220   esac
223 if test x"$req_bignum" = x"auto"; then
224   SECP_GMP_CHECK
225   if test x"$has_gmp" = x"yes"; then
226     set_bignum=gmp
227   fi
229   if test x"$set_bignum" = x; then
230     set_bignum=no
231   fi
232 else
233   set_bignum=$req_bignum
234   case $set_bignum in
235   gmp)
236     SECP_GMP_CHECK
237     if test x"$has_gmp" != x"yes"; then
238       AC_MSG_ERROR([gmp bignum explicitly requested but libgmp not available])
239     fi
240     ;;
241   no)
242     ;;
243   *)
244     AC_MSG_ERROR([invalid bignum implementation selection])
245     ;;
246   esac
249 # select assembly optimization
250 case $set_asm in
251 x86_64)
252   AC_DEFINE(USE_ASM_X86_64, 1, [Define this symbol to enable x86_64 assembly optimizations])
253   ;;
255   ;;
257   AC_MSG_ERROR([invalid assembly optimizations])
258   ;;
259 esac
261 # select field implementation
262 case $set_field in
263 64bit)
264   AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
265   ;;
266 32bit)
267   AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation])
268   ;;
270   AC_MSG_ERROR([invalid field implementation])
271   ;;
272 esac
274 # select bignum implementation
275 case $set_bignum in
276 gmp)
277   AC_DEFINE(HAVE_LIBGMP, 1, [Define this symbol if libgmp is installed])
278   AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation for num])
279   AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation])
280   AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation])
281   ;;
283   AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation])
284   AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation])
285   AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation])
286   ;;
288   AC_MSG_ERROR([invalid bignum implementation])
289   ;;
290 esac
292 #select scalar implementation
293 case $set_scalar in
294 64bit)
295   AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation])
296   ;;
297 32bit)
298   AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation])
299   ;;
301   AC_MSG_ERROR([invalid scalar implementation])
302   ;;
303 esac
305 if test x"$use_tests" = x"yes"; then
306   SECP_OPENSSL_CHECK
307   if test x"$has_openssl_ec" = x"yes"; then
308     AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available])
309     SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS"
310     SECP_TEST_LIBS="$CRYPTO_LIBS"
312     case $host in
313     *mingw*)
314       SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32"
315       ;;
316     esac
318   fi
321 if test x"$set_bignum" = x"gmp"; then
322   SECP_LIBS="$SECP_LIBS $GMP_LIBS"
323   SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS"
326 if test x"$use_endomorphism" = x"yes"; then
327   AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization])
330 if test x"$use_ecmult_static_precomputation" = x"yes"; then
331   AC_DEFINE(USE_ECMULT_STATIC_PRECOMPUTATION, 1, [Define this symbol to use a statically generated ecmult table])
334 if test x"$enable_module_ecdh" = x"yes"; then
335   AC_DEFINE(ENABLE_MODULE_ECDH, 1, [Define this symbol to enable the ECDH module])
338 if test x"$enable_module_schnorr" = x"yes"; then
339   AC_DEFINE(ENABLE_MODULE_SCHNORR, 1, [Define this symbol to enable the Schnorr signature module])
342 if test x"$enable_module_recovery" = x"yes"; then
343   AC_DEFINE(ENABLE_MODULE_RECOVERY, 1, [Define this symbol to enable the ECDSA pubkey recovery module])
346 AC_C_BIGENDIAN()
348 AC_MSG_NOTICE([Using assembly optimizations: $set_asm])
349 AC_MSG_NOTICE([Using field implementation: $set_field])
350 AC_MSG_NOTICE([Using bignum implementation: $set_bignum])
351 AC_MSG_NOTICE([Using scalar implementation: $set_scalar])
352 AC_MSG_NOTICE([Using endomorphism optimizations: $use_endomorphism])
353 AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh])
355 AC_MSG_NOTICE([Building Schnorr signatures module: $enable_module_schnorr])
356 AC_MSG_NOTICE([Building ECDSA pubkey recovery module: $enable_module_recovery])
358 AC_CONFIG_HEADERS([src/libsecp256k1-config.h])
359 AC_CONFIG_FILES([Makefile libsecp256k1.pc])
360 AC_SUBST(SECP_INCLUDES)
361 AC_SUBST(SECP_LIBS)
362 AC_SUBST(SECP_TEST_LIBS)
363 AC_SUBST(SECP_TEST_INCLUDES)
364 AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"])
365 AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"])
366 AM_CONDITIONAL([USE_ECMULT_STATIC_PRECOMPUTATION], [test x"$use_ecmult_static_precomputation" = x"yes"])
367 AM_CONDITIONAL([ENABLE_MODULE_ECDH], [test x"$enable_module_ecdh" = x"yes"])
368 AM_CONDITIONAL([ENABLE_MODULE_SCHNORR], [test x"$enable_module_schnorr" = x"yes"])
369 AM_CONDITIONAL([ENABLE_MODULE_RECOVERY], [test x"$enable_module_recovery" = x"yes"])
371 dnl make sure nothing new is exported so that we don't break the cache
372 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
373 unset PKG_CONFIG_PATH
374 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
376 AC_OUTPUT