2 AC_INIT([libsecp256k1],[0.1])
3 AC_CONFIG_AUX_DIR([build-aux])
4 AC_CONFIG_MACRO_DIR([build-aux/m4])
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])
12 dnl make the compilation flags quiet unless V=1 is used
13 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
18 AC_PATH_TOOL(RANLIB, ranlib)
19 AC_PATH_TOOL(STRIP, strip)
21 if test "x$CFLAGS" = "x"; then
26 if test x"$ac_cv_prog_cc_c99" == x"no"; then
27 AC_MSG_ERROR([c99 compiler support required])
41 if test x$cross_compiling != xyes; then
42 AC_PATH_PROG([BREW],brew,)
43 if test x$BREW != x; then
44 dnl These Homebrew packages may be keg-only, meaning that they won't be found
45 dnl in expected paths because they may conflict with system files. Ask
46 dnl Homebrew where each one is located, then adjust paths accordingly.
48 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
49 gmp_prefix=`$BREW --prefix gmp 2>/dev/null`
50 if test x$openssl_prefix != x; then
51 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
52 export PKG_CONFIG_PATH
54 if test x$gmp_prefix != x; then
55 GMP_CPPFLAGS="-I$gmp_prefix/include"
56 GMP_LIBS="-L$gmp_prefix/lib"
59 AC_PATH_PROG([PORT],port,)
60 dnl if homebrew isn't installed and macports is, add the macports default paths
62 if test x$PORT != x; then
63 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
64 LDFLAGS="$LDFLAGS -L/opt/local/lib"
73 warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function"
74 saved_CFLAGS="$CFLAGS"
75 CFLAGS="$CFLAGS $warn_CFLAGS"
76 AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
77 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
78 [ AC_MSG_RESULT([yes]) ],
80 CFLAGS="$saved_CFLAGS"
84 AC_ARG_ENABLE(benchmark,
85 AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is yes)]),
86 [use_benchmark=$enableval],
90 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
91 [use_tests=$enableval],
94 AC_ARG_ENABLE(endomorphism,
95 AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]),
96 [use_endomorphism=$enableval],
97 [use_endomorphism=no])
99 AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=gmp|64bit|64bit_asm|32bit|auto],
100 [Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto])
102 AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|none|auto],
103 [Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto])
105 AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto],
106 [Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto])
108 AC_CHECK_TYPES([__int128])
110 AC_MSG_CHECKING([for __builtin_expect])
111 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])],
112 [ AC_MSG_RESULT([yes]);AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]) ],
113 [ AC_MSG_RESULT([no])
116 if test x"$req_field" = x"auto"; then
118 if test x"$has_64bit_asm" = x"yes"; then
122 if test x"$set_field" = x; then
124 if test x"$has_int128" = x"yes"; then
129 if test x"$set_field" = x; then
131 if test x"$has_gmp" = x"yes"; then
136 if test x"$set_field" = x; then
154 AC_MSG_ERROR([invalid field implementation selection])
159 if test x"$req_scalar" = x"auto"; then
160 if test x"$set_scalar" = x; then
162 if test x"$has_int128" = x"yes"; then
166 if test x"$set_scalar" = x; then
170 set_scalar=$req_scalar
178 AC_MSG_ERROR([invalid scalar implementation selected])
183 if test x"$req_bignum" = x"auto"; then
185 if test x"$has_gmp" = x"yes"; then
189 if test x"$set_bignum" = x; then
193 set_bignum=$req_bignum
201 AC_MSG_ERROR([invalid bignum implementation selection])
206 # select field implementation
209 AC_DEFINE(USE_FIELD_5X52_ASM, 1, [Define this symbol to use the assembly version for the 5x52 field implementation])
210 AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
213 AC_DEFINE(USE_FIELD_5X52_INT128, 1, [Define this symbol to use the __int128 version for the 5x52 field implementation])
214 AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
217 AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])
218 AC_DEFINE(USE_FIELD_GMP, 1, [Define this symbol to use the FIELD_GMP implementation])
221 AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation])
224 AC_MSG_ERROR([invalid field implementation])
228 # select bignum implementation
231 AC_DEFINE(HAVE_LIBGMP, 1, [Define this symbol if libgmp is installed])
232 AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation for num])
233 AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation])
234 AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation])
237 AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation])
238 AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation])
239 AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation])
242 AC_MSG_ERROR([invalid bignum implementation])
246 #select scalar implementation
249 AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation])
252 AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation])
255 AC_MSG_ERROR([invalid scalar implementation])
259 if test x"$use_tests" = x"yes"; then
261 if test x"$has_openssl_ec" == x"yes"; then
262 AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available])
263 SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS"
264 SECP_TEST_LIBS="$CRYPTO_LIBS"
268 SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32"
275 if test x"$set_field" = x"gmp" || test x"$set_bignum" = x"gmp"; then
276 SECP_LIBS="$SECP_LIBS $GMP_LIBS"
277 SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS"
280 if test x"$use_endomorphism" = x"yes"; then
281 AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization])
284 AC_MSG_NOTICE([Using field implementation: $set_field])
285 AC_MSG_NOTICE([Using bignum implementation: $set_bignum])
286 AC_MSG_NOTICE([Using scalar implementation: $set_scalar])
288 AC_CONFIG_HEADERS([src/libsecp256k1-config.h])
289 AC_CONFIG_FILES([Makefile libsecp256k1.pc])
290 AC_SUBST(SECP_INCLUDES)
292 AC_SUBST(SECP_TEST_LIBS)
293 AC_SUBST(SECP_TEST_INCLUDES)
294 AM_CONDITIONAL([USE_ASM], [test x"$set_field" == x"64bit_asm"])
295 AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"])
296 AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" != x"no"])
298 dnl make sure nothing new is exported so that we don't break the cache
299 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
300 unset PKG_CONFIG_PATH
301 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"