1#                                               -*- Autoconf -*-
2# Process this file with autoconf to produce a configure script.
3
4AC_PREREQ([2.65])
5AC_INIT([tox], [0.2.13])
6AC_CONFIG_AUX_DIR(configure_aux)
7AC_CONFIG_SRCDIR([toxcore/net_crypto.c])
8AC_CONFIG_HEADERS([config.h])
9AM_INIT_AUTOMAKE([foreign 1.10 -Wall subdir-objects tar-ustar])
10m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
11AC_CONFIG_MACRO_DIR([m4])
12
13EXTRA_LT_LDFLAGS=
14
15if test "x${prefix}" = "xNONE"; then
16    prefix="${ac_default_prefix}"
17fi
18
19BUILD_DHT_BOOTSTRAP_DAEMON="no"
20BUILD_DHT_BOOTSTRAP="no"
21BUILD_TESTS="yes"
22BUILD_AV="yes"
23BUILD_TESTING="yes"
24
25LIBCONFIG_FOUND="no"
26WANT_NACL="no"
27ADD_NACL_OBJECTS_TO_PKGCONFIG="yes"
28SET_SO_VERSION="yes"
29
30AC_ARG_ENABLE([soname-versions],
31    [AC_HELP_STRING([--enable-soname-versions], [enable soname versions (must be disabled for android) (default: enabled)]) ],
32    [
33        if test "x$enableval" = "xno"; then
34            SET_SO_VERSION="no"
35        elif test "x$enableval" = "xyes"; then
36            SET_SO_VERSION="yes"
37        fi
38    ]
39)
40AM_CONDITIONAL(SET_SO_VERSION, test "x$SET_SO_VERSION" = "xyes")
41
42AC_ARG_ENABLE([nacl],
43    [AC_HELP_STRING([--enable-nacl], [use nacl instead of libsodium (default: disabled)]) ],
44    [
45        if test "x$enableval" = "xno"; then
46            WANT_NACL="no"
47        elif test "x$enableval" = "xyes"; then
48            WANT_NACL="yes"
49        fi
50    ]
51)
52
53AC_ARG_ENABLE([randombytes-stir],
54    [AC_HELP_STRING([--enable-randombytes-stir], [use randombytes_stir() instead of sodium_init() for faster startup on android (default: disabled)]) ],
55    [
56        if test "x$enableval" = "xyes"; then
57            if test "x$WANT_NACL" = "xyes"; then
58                AC_MSG_WARN([randombytes_stir() is not available with NaCl library])
59            else
60                AC_DEFINE([USE_RANDOMBYTES_STIR], [1], [randombytes_stir() instead of sodium_init()])
61            fi
62        fi
63    ]
64)
65
66AC_ARG_WITH(log-level,
67    AC_HELP_STRING([--with-log-level=LEVEL],
68                   [Logger levels: TRACE; DEBUG; INFO; WARNING; ERROR ]),
69    [
70        if test "x$withval" = "xTRACE"; then
71            AC_DEFINE([MIN_LOGGER_LEVEL], [LOGGER_LEVEL_TRACE], [Logger_Level value])
72
73        elif test "x$withval" = "xDEBUG"; then
74            AC_DEFINE([MIN_LOGGER_LEVEL], [LOGGER_LEVEL_DEBUG], [Logger_Level value])
75
76        elif test "x$withval" = "xINFO"; then
77            AC_DEFINE([MIN_LOGGER_LEVEL], [LOGGER_LEVEL_INFO], [Logger_Level value])
78
79        elif test "x$withval" = "xWARNING"; then
80            AC_DEFINE([MIN_LOGGER_LEVEL], [LOGGER_LEVEL_WARNING], [Logger_Level value])
81
82        elif test "x$withval" = "xERROR"; then
83            AC_DEFINE([MIN_LOGGER_LEVEL], [LOGGER_LEVEL_ERROR], [Logger_Level value])
84        else
85            AC_MSG_WARN([Invalid logger level: $withval. Using default.])
86        fi
87    ]
88)
89
90PKG_PROG_PKG_CONFIG
91
92AC_ARG_ENABLE([av],
93    [AC_HELP_STRING([--disable-av], [build AV support libraries (default: auto)]) ],
94    [
95        if test "x$enableval" = "xno"; then
96            BUILD_AV="no"
97        elif test "x$enableval" = "xyes"; then
98            BUILD_AV="yes"
99        fi
100    ]
101)
102
103AC_ARG_ENABLE([tests],
104    [AC_HELP_STRING([--disable-tests], [build unit tests (default: auto)]) ],
105    [
106        if test "x$enableval" = "xno"; then
107            BUILD_TESTS="no"
108        elif test "x$enableval" = "xyes"; then
109            BUILD_TESTS="yes"
110        fi
111    ]
112)
113
114AC_ARG_ENABLE([daemon],
115    [AC_HELP_STRING([--enable-daemon], [build DHT bootstrap daemon (default: auto)]) ],
116    [
117        if test "x$enableval" = "xno"; then
118            BUILD_DHT_BOOTSTRAP_DAEMON="no"
119        elif test "x$enableval" = "xyes"; then
120            BUILD_DHT_BOOTSTRAP_DAEMON="yes"
121        fi
122    ]
123)
124
125AC_ARG_ENABLE([dht-bootstrap],
126    [AC_HELP_STRING([--enable-dht-bootstrap], [build DHT bootstrap utility (default: disabled)]) ],
127    [
128        if test "x$enableval" = "xno"; then
129            BUILD_DHT_BOOTSTRAP="no"
130        elif test "x$enableval" = "xyes"; then
131            BUILD_DHT_BOOTSTRAP="yes"
132        fi
133    ]
134)
135
136
137AC_ARG_ENABLE([rt],
138    [AC_HELP_STRING([--disable-rt], [Disables the librt check (default: auto)]) ],
139    [
140        if test "x$enableval" = "xno"; then
141            DISABLE_RT="yes"
142        elif test "x$enableval" = "xyes"; then
143            DISABLE_RT="no"
144        fi
145    ]
146)
147
148AC_ARG_ENABLE([testing],
149    [AC_HELP_STRING([--disable-testing], [build various testing tools (default: auto)]) ],
150    [
151        if test "x$enableval" = "xno"; then
152            BUILD_TESTING="no"
153        elif test "x$enableval" = "xyes"; then
154            BUILD_TESTING="yes"
155        fi
156    ]
157)
158
159AC_ARG_ENABLE([[epoll]],
160  [AS_HELP_STRING([[--enable-epoll[=ARG]]], [enable epoll support (yes, no, auto) [auto]])],
161    [enable_epoll=${enableval}],
162    [enable_epoll='auto']
163  )
164
165AC_ARG_ENABLE([[ipv6]],
166  [AS_HELP_STRING([[--disable-ipv6[=ARG]]], [use ipv4 in tests (yes, no, auto) [auto]])],
167    [use_ipv6=${enableval}],
168    [use_ipv6='auto']
169  )
170
171if test "$use_ipv6" != "yes"; then
172  AC_DEFINE([USE_IPV6],[0],[define to 0 to force ipv4])
173fi
174
175AX_HAVE_EPOLL
176if test "$enable_epoll" != "no"; then
177  if test "${ax_cv_have_epoll}" = "yes"; then
178    AC_DEFINE([TCP_SERVER_USE_EPOLL],[1],[define to 1 to enable epoll support])
179    enable_epoll='yes'
180  else
181    if test "$enable_epoll" = "yes"; then
182      AC_MSG_ERROR([[Support for epoll was explicitly requested but cannot be enabled on this platform.]])
183    fi
184    enable_epoll='no'
185  fi
186fi
187
188DEPSEARCH=
189LIBSODIUM_SEARCH_HEADERS=
190LIBSODIUM_SEARCH_LIBS=
191NACL_SEARCH_HEADERS=
192NACL_SEARCH_LIBS=
193
194AC_ARG_WITH(dependency-search,
195    AC_HELP_STRING([--with-dependency-search=DIR],
196                   [search for dependencies in DIR, i.e., look for libraries in
197                    DIR/lib and for headers in DIR/include]),
198    [
199        DEPSEARCH="$withval"
200    ]
201)
202
203if test -n "$DEPSEARCH"; then
204    CFLAGS="$CFLAGS -I$DEPSEARCH/include"
205    CPPFLAGS="$CPPFLAGS -I$DEPSEARCH/include"
206    LDFLAGS="$LDFLAGS -L$DEPSEARCH/lib"
207    export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$DEPSEARCH/lib/pkgconfig
208fi
209
210AC_ARG_WITH(nacl-headers,
211        AC_HELP_STRING([--with-nacl-headers=DIR],
212                       [search for nacl<F2> header files in DIR]),
213        [
214            NACL_SEARCH_HEADERS="$withval"
215            AC_MSG_NOTICE([will search for nacl header files in $withval])
216        ]
217)
218
219AC_ARG_WITH(nacl-libs,
220        AC_HELP_STRING([--with-nacl-libs=DIR],
221                       [search for nacl libraries in DIR]),
222        [
223            NACL_SEARCH_LIBS="$withval"
224            AC_MSG_NOTICE([will search for nacl libraries in $withval])
225        ]
226)
227
228AC_ARG_WITH(libsodium-headers,
229        AC_HELP_STRING([--with-libsodium-headers=DIR],
230                       [search for libsodium header files in DIR]),
231        [
232            LIBSODIUM_SEARCH_HEADERS="$withval"
233            AC_MSG_NOTICE([will search for libsodium header files in $withval])
234        ]
235)
236
237AC_ARG_WITH(libsodium-libs,
238        AC_HELP_STRING([--with-libsodium-libs=DIR],
239                       [search for libsodium libraries in DIR]),
240        [
241            LIBSODIUM_SEARCH_LIBS="$withval"
242            AC_MSG_NOTICE([will search for libsodium libraries in $withval])
243        ]
244)
245
246if test "x$WANT_NACL" = "xyes"; then
247    enable_shared=no
248    enable_static=yes
249fi
250
251# Checks for programs.
252AC_PROG_CC_C99
253
254if test "x$ac_cv_prog_cc_c99" = "xno" ; then
255    AC_MSG_ERROR([c-toxcore requires a C99 compatible compiler])
256fi
257
258AM_PROG_CC_C_O
259m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
260AC_LIBTOOL_WIN32_DLL
261AC_PROG_LIBTOOL
262
263WIN32=no
264MACH=no
265AC_CANONICAL_HOST
266case $host_os in
267    *mingw*)
268        WIN32="yes"
269        EXTRA_LT_LDFLAGS="$EXTRA_LT_LDFLAGS -no-undefined"
270    ;;
271    *solaris*)
272        LIBS="$LIBS -lssp -lsocket -lnsl"
273    ;;
274    *qnx*)
275        LIBS="$LIBS -lsocket"
276    ;;
277    *freebsd*|*openbsd*)
278        LDFLAGS="$LDFLAGS -L/usr/local/lib"
279        CFLAGS="$CFLAGS -I/usr/local/include"
280        CPPFLAGS="$CPPFLAGS -I/usr/local/include"
281        ADD_NACL_OBJECTS_TO_PKGCONFIG="no"
282    ;;
283    darwin*)
284        MACH=yes
285    ;;
286esac
287AM_CONDITIONAL(WIN32, test "x$WIN32" = "xyes")
288
289AC_SUBST(EXTRA_LT_LDFLAGS)
290
291# Needed math flags for some compilers
292
293MATH_LDFLAGS="-lm"
294AC_SUBST(MATH_LDFLAGS)
295
296# Checks for libraries.
297AC_CHECK_FUNCS([explicit_bzero memset_s])
298PKG_CHECK_MODULES([LIBSODIUM], [libsodium],
299    [
300        LIBSODIUM_FOUND="yes"
301    ],
302    [
303        LIBSODIUM_FOUND="no"
304    ])
305
306if test "x$WANT_NACL" = "xyes"; then
307    NACL_LIBS=
308    NACL_LDFLAGS=
309    NACL_OBJECTS=
310    NACL_OBJECTS_PKGCONFIG=
311    LDFLAGS_SAVE="$LDFLAGS"
312    if test -n "$NACL_SEARCH_LIBS"; then
313        LDFLAGS="-L$NACL_SEARCH_LIBS $LDFLAGS"
314        AC_CHECK_LIB(nacl, random,
315            [
316                NACL_LDFLAGS="-L$NACL_SEARCH_LIBS"
317                NACL_LIBS="-lnacl"
318            ],
319            [
320                AC_MSG_ERROR([library nacl was not found in requested location $NACL_SEARCH_LIBS])
321            ]
322        )
323    else
324        AC_CHECK_LIB(nacl, random,
325            [],
326            [
327                AC_MSG_ERROR([you enabled nacl support, but library nacl was not found on your system])
328            ]
329        )
330    fi
331
332    if (test -f "$NACL_SEARCH_LIBS/cpucycles.o") &&
333       (test -f "$NACL_SEARCH_LIBS/randombytes.o"); then
334        NACL_OBJECTS="$NACL_SEARCH_LIBS/cpucycles.o $NACL_SEARCH_LIBS/randombytes.o"
335        AC_MSG_NOTICE([found extra NaCl objects: $NACL_OBJECTS])
336        if test "x$ADD_NACL_OBJECTS_TO_PKGCONFIG" = "xyes"; then
337            AC_MSG_NOTICE([adding extra NaCl objects to pkg-config file])
338            NACL_OBJECTS_PKGCONFIG="$NACL_OBJECTS"
339        fi
340    else
341        AC_MSG_ERROR([required NaCl object files cpucycles.o randombytes.o not found, please specify their location using the --with-nacl-libs parameter])
342    fi
343
344    LDFLAGS="$LDFLAGS_SAVE"
345    AC_SUBST(NACL_LIBS)
346    AC_SUBST(NACL_LDFLAGS)
347    AC_SUBST(NACL_OBJECTS)
348    AC_SUBST(NACL_OBJECTS_PKGCONFIG)
349elif test "x$LIBSODIUM_FOUND" = "xno"; then
350    LIBSODIUM_LIBS=
351    LIBSODIUM_LDFLAGS=
352    LDFLAGS_SAVE="$LDFLAGS"
353    if test -n "$LIBSODIUM_SEARCH_LIBS"; then
354        LDFLAGS="-L$LIBSODIUM_SEARCH_LIBS $LDFLAGS"
355        AC_CHECK_LIB(sodium, crypto_pwhash_scryptsalsa208sha256,
356            [
357                LIBSODIUM_LDFLAGS="-L$LIBSODIUM_SEARCH_LIBS"
358                LIBSODIUM_LIBS="-lsodium"
359            ],
360            [
361                AC_MSG_ERROR([required library libsodium was not found in requested location $LIBSODIUM_SEARCH_LIBS or library version is too old])
362            ]
363        )
364    else
365        AC_CHECK_LIB(sodium, crypto_pwhash_scryptsalsa208sha256,
366            [],
367            [
368                AC_MSG_ERROR([required library libsodium was not found on your system, please check http://download.libsodium.org/libsodium/releases/ or library version is too old])
369            ]
370        )
371    fi
372
373    LDFLAGS="$LDFLAGS_SAVE"
374    AC_SUBST(LIBSODIUM_LIBS)
375    AC_SUBST(LIBSODIUM_LDFLAGS)
376fi
377
378# Checks for header files.
379AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
380
381
382if test "x$WANT_NACL" = "xyes"; then
383    NACL_CFLAGS=
384    CFLAGS_SAVE="$CFLAGS"
385    CPPFLAGS_SAVE="$CPPFLAGS"
386    if test -n "$NACL_SEARCH_HEADERS"; then
387        CFLAGS="-I$NACL_SEARCH_HEADERS $CFLAGS"
388        CPPFLAGS="-I$NACL_SEARCH_HEADERS $CPPFLAGS"
389        AC_CHECK_HEADER(crypto_box.h,
390            [
391                NACL_CFLAGS="-I$NACL_SEARCH_HEADERS"
392            ],
393            [
394                AC_MSG_ERROR([header files for library nacl were not found in requested location $NACL_SEARCH_HEADERS])
395            ]
396        )
397    else
398        AC_CHECK_HEADER(crypto_box.h,
399            [],
400            [
401                AC_MSG_ERROR([you enabled nacl support, but nacl header files were not found on your system])
402            ]
403        )
404    fi
405    CFLAGS="$CFLAGS_SAVE"
406    CPPFLAGS="$CPPFLAGS_SAVE"
407    AC_SUBST(NACL_CFLAGS)
408    AC_DEFINE([VANILLA_NACL], [1], [use nacl instead of libsodium])
409elif test "x$LIBSODIUM_FOUND" = "xno"; then
410    LIBSODIUM_CFLAGS=
411    CFLAGS_SAVE="$CFLAGS"
412    CPPFLAGS_SAVE="$CPPFLAGS"
413    if test -n "$LIBSODIUM_SEARCH_HEADERS"; then
414        CFLAGS="-I$LIBSODIUM_SEARCH_HEADERS $CFLAGS"
415        CPPFLAGS="-I$LIBSODIUM_SEARCH_HEADERS $CPPFLAGS"
416        AC_CHECK_HEADER(sodium.h,
417            [
418                LIBSODIUM_CFLAGS="-I$LIBSODIUM_SEARCH_HEADERS"
419            ],
420            [
421                AC_MSG_ERROR([header files for required library libsodium were not found in requested location $LIBSODIUM_SEARCH_HEADERS])
422            ]
423        )
424    else
425        AC_CHECK_HEADER(sodium.h,
426            [],
427            [
428                AC_MSG_ERROR([header files for required library libsodium was not found on your system, please check http://download.libsodium.org/libsodium/releases/])
429            ]
430        )
431    fi
432    CFLAGS="$CFLAGS_SAVE"
433    CPPFLAGS="$CPPFLAGS_SAVE"
434    AC_SUBST(LIBSODIUM_CFLAGS)
435fi
436
437# Checks for library functions.
438if (test "x$WIN32" != "xyes") && (test "x$MACH" != "xyes") && (test "x${host_os#*openbsd}" = "x$host_os") && (test "x$DISABLE_RT" != "xyes"); then
439    AC_CHECK_LIB(rt, clock_gettime,
440        [
441            RT_LIBS="-lrt"
442            AC_SUBST(RT_LIBS)
443        ],
444        [
445            AC_MSG_ERROR([required library rt was not found on your system])
446        ]
447    )
448fi
449
450
451AX_PTHREAD(
452    [],
453    [
454        AC_MSG_ERROR([required library pthread was not found on your system])
455    ]
456)
457
458AC_CHECK_LIB([pthread], [pthread_self],
459    [
460        PTHREAD_LDFLAGS="-lpthread"
461        AC_SUBST(PTHREAD_LDFLAGS)
462    ]
463)
464
465if test "x$BUILD_AV" = "xyes"; then
466    PKG_CHECK_MODULES([OPUS], [opus],
467        [],
468        [
469            AC_MSG_WARN([disabling AV support $OPUS_PKG_ERRORS])
470            BUILD_AV="no"
471        ]
472    )
473fi
474
475if test "x$BUILD_AV" = "xyes"; then
476    PKG_CHECK_MODULES([VPX], [vpx],
477        [],
478        [
479            AC_MSG_WARN([disabling AV support $VPX_PKG_ERRORS])
480            BUILD_AV="no"
481        ]
482    )
483fi
484
485if test "x$BUILD_AV" = "xyes"; then
486    # toxcore lib needs an global?
487    # So far this works okay
488    AV_LIBS="$OPUS_LIBS $VPX_LIBS"
489    AC_SUBST(AV_LIBS)
490
491    AV_CFLAGS="$OPUS_CFLAGS $VPX_CFLAGS"
492    AC_SUBST(AV_CFLAGS)
493fi
494
495if test -n "$PKG_CONFIG"; then
496    if test "x$BUILD_DHT_BOOTSTRAP_DAEMON" = "xyes"; then
497        PKG_CHECK_MODULES([LIBCONFIG], [libconfig >= 1.4.6],
498            [
499                LIBCONFIG_FOUND="yes"
500            ],
501            [
502                AC_MSG_WARN([$LIBCONFIG_PKG_ERRORS])
503                AC_MSG_WARN([libconfig not available, will not build DHT bootstrap daemon])
504                BUILD_DHT_BOOTSTRAP_DAEMON="no"
505            ])
506    fi
507else
508    AC_MSG_WARN([pkg-config was not found on your system, will search for libraries manually])
509fi
510
511if (test "x$BUILD_DHT_BOOTSTRAP_DAEMON" = "xyes") && \
512   (test "x$LIBCONFIG_FOUND" = "xno"); then
513    AC_CHECK_HEADER(libconfig.h,
514        [],
515        [
516            AC_MSG_WARN([header files for library libconfig was not found on your system, not building DHT bootstrap daemon])
517            BUILD_DHT_BOOTSTRAP_DAEMON="no"
518        ]
519    )
520
521    if test "x$BUILD_DHT_BOOTSTRAP_DAEMON" = "xyes"; then
522        AC_CHECK_LIB(config, config_read,
523            [],
524            [
525                AC_MSG_WARN([library libconfig was not found on the system])
526                BUILD_DHT_BOOTSTRAP_DAEMON="no"
527            ]
528        )
529    fi
530fi
531
532if test "x$WIN32" = "xyes"; then
533    AC_CHECK_LIB(ws2_32, main,
534        [
535            WINSOCK2_LIBS="-liphlpapi -lws2_32"
536            AC_SUBST(WINSOCK2_LIBS)
537        ],
538        [
539            AC_MSG_ERROR([required library was not found on the system, please check your MinGW installation])
540        ]
541    )
542fi
543
544AM_CONDITIONAL(BUILD_DHT_BOOTSTRAP_DAEMON, test "x$BUILD_DHT_BOOTSTRAP_DAEMON" = "xyes")
545AM_CONDITIONAL(BUILD_DHT_BOOTSTRAP, test "x$BUILD_DHT_BOOTSTRAP" = "xyes")
546AM_CONDITIONAL(BUILD_TESTS, test "x$BUILD_TESTS" = "xyes")
547AM_CONDITIONAL(BUILD_AV, test "x$BUILD_AV" = "xyes")
548AM_CONDITIONAL(BUILD_TESTING, test "x$BUILD_TESTING" = "xyes")
549AM_CONDITIONAL(WITH_NACL, test "x$WANT_NACL" = "xyes")
550AM_CONDITIONAL(WIN32, test "x$WIN32" = "xyes")
551
552AC_CONFIG_FILES([Makefile
553                 build/Makefile
554                 libtoxcore.pc
555                 tox.spec
556                ])
557
558AM_COND_IF(BUILD_AV,
559  [
560    AC_CONFIG_FILES([libtoxav.pc])
561  ],)
562
563AC_OUTPUT
564