dnl Process this file with autoconf to produce configure. dnl Notes on version numbering: dnl For an implementation-only change: dnl Change the libotr package version from a.b.c to a.b.(c+1) dnl Change the libotr libtool version from x:y:z to x:(y+1):z dnl For a backwards-compatible API change (e.g. adding functions): dnl Change the libotr package version from a.b.c to a.(b+1).0 dnl Change the libotr libtool version from x:y:z to (x+1):0:(z+1) dnl [Note that this does *not* change the major number of the .so.] dnl For a backwards-incompatible API change (e.g. changing data structures): dnl Change the libotr package version from a.b.c to (a+1).0.0 dnl Change the libotr libtool version from x:y:z to (x+1):0:0 AC_INIT([libotr],[4.1.1],[otr@cypherpunks.ca],[],[https://otr.cypherpunks.ca]) AM_CONFIG_HEADER(config.h) AC_CONFIG_AUX_DIR([config]) AM_INIT_AUTOMAKE LIBOTR_LIBTOOL_VERSION="6:1:1" AC_CONFIG_MACRO_DIR([config]) # Silent compilation so warnings can be spotted. m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_SUBST(LIBOTR_LIBTOOL_VERSION) AC_PROG_CC LT_INIT AM_PATH_LIBGCRYPT(1:1.2.0,,AC_MSG_ERROR(libgcrypt 1.2.0 or newer is required.)) AC_CANONICAL_HOST # Identify which OS we are building and do specific things based on the host case $host_os in *linux*) HOST_OS=linux ;; esac # Build tests for now only for Linux. AM_CONDITIONAL([BUILD_TESTS], [test x$HOST_OS = xlinux]) dnl 1:flags dnl Taken from Tor's autoconf magic repository AC_DEFUN([OTR_CHECK_CFLAGS], [ AS_VAR_PUSHDEF([VAR],[otr_cv_cflags_$1]) AC_CACHE_CHECK([whether the compiler accepts $1], VAR, [ otr_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -pedantic -Werror $1" AC_TRY_COMPILE([], [return 0;], [AS_VAR_SET(VAR,yes)], [AS_VAR_SET(VAR,no)]) CFLAGS="$otr_saved_CFLAGS" ]) if test x$VAR = xyes; then CFLAGS="$CFLAGS $1" fi AS_VAR_POPDEF([VAR]) ]) dnl 1:flags dnl 2:extra ldflags dnl 3:extra libraries AC_DEFUN([OTR_CHECK_LDFLAGS], [ AS_VAR_PUSHDEF([VAR],[otr_cv_ldflags_$1]) AC_CACHE_CHECK([whether the linker accepts $1], VAR, [ otr_saved_CFLAGS="$CFLAGS" otr_saved_LDFLAGS="$LDFLAGS" otr_saved_LIBS="$LIBS" CFLAGS="$CFLAGS -pedantic -Werror" LDFLAGS="$LDFLAGS $2 $1" LIBS="$LIBS $3" AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [fputs("", stdout)])], [AS_VAR_SET(VAR,yes)], [AS_VAR_SET(VAR,no)], [AC_TRY_LINK([], [return 0;], [AS_VAR_SET(VAR,yes)], [AS_VAR_SET(VAR,no)])]) CFLAGS="$otr_saved_CFLAGS" LDFLAGS="$otr_saved_LDFLAGS" LIBS="$otr_saved_LIBS" ]) if test x$VAR = xyes; then LDFLAGS="$LDFLAGS $1" fi AS_VAR_POPDEF([VAR]) ]) dnl If _WIN32 is defined and non-zero, we are building for win32 AC_MSG_CHECKING([for win32]) AC_RUN_IFELSE([AC_LANG_SOURCE([ int main(int c, char **v) { #ifdef _WIN32 #if _WIN32 return 0; #else return 1; #endif #else return 2; #endif }])], bwin32=true; AC_MSG_RESULT([yes]), bwin32=false; AC_MSG_RESULT([no]), bwin32=cross; AC_MSG_RESULT([cross]) ) if test "$bwin32" = cross; then AC_MSG_CHECKING([for win32 (cross)]) AC_COMPILE_IFELSE([AC_LANG_SOURCE([ #ifdef _WIN32 int main(int c, char **v) {return 0;} #else #error int main(int c, char **v) {return x(y);} #endif ])], bwin32=true; AC_MSG_RESULT([yes]), bwin32=false; AC_MSG_RESULT([no])) fi AM_CONDITIONAL(BUILD_NT_SERVICES, test x$bwin32 = xtrue) dnl Adam Shostack suggests the following for Windows: dnl -D_FORTIFY_SOURCE=2 -fstack-protector-all dnl Others suggest '/gs /safeseh /nxcompat /dynamicbase' for non-gcc on Windows dnl This requires that we use gcc and that we add -O2 to the CFLAGS. AC_ARG_ENABLE(gcc-hardening, AS_HELP_STRING(--disable-gcc-hardening, disable compiler security checks)) dnl Linker hardening options dnl Currently these options are ELF specific - you can't use this with MacOSX AC_ARG_ENABLE(linker-hardening, AS_HELP_STRING(--disable-linker-hardening, disable linker security fixups)) dnl --------------------------------------------------------------------- dnl Now that we know about our major libraries, we can check for compiler dnl and linker hardening options. We need to do this with the libraries known, dnl since sometimes the linker will like an option but not be willing to dnl use it with a build of a library. all_ldflags_for_check="$LDFLAGS" all_libs_for_check="$LIBGCRYPT_LIBS" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ #if !defined(__clang__) #error #endif ])], have_clang=yes, have_clang=no) if test x$enable_gcc_hardening != xno; then CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" if test x$have_clang = xyes; then OTR_CHECK_CFLAGS(-Qunused-arguments) fi OTR_CHECK_CFLAGS(-fstack-protector-all) OTR_CHECK_CFLAGS(-Wstack-protector) OTR_CHECK_CFLAGS(-fwrapv) dnl Ian added the next four: OTR_CHECK_CFLAGS(-fno-strict-overflow) OTR_CHECK_CFLAGS(-Wall) OTR_CHECK_CFLAGS(-Wextra -Wno-unused-parameter) OTR_CHECK_CFLAGS(-Wformat-security) OTR_CHECK_CFLAGS(--param ssp-buffer-size=1) if test "$bwin32" = "false"; then OTR_CHECK_CFLAGS(-fPIE) OTR_CHECK_LDFLAGS(-pie, "$all_ldflags_for_check", "$all_libs_for_check") else OTR_CHECK_CFLAGS(-fPIE) OTR_CHECK_LDFLAGS(-pie, "$all_ldflags_for_check", "$all_libs_for_check") OTR_CHECK_LDFLAGS([-Wl,--dynamicbase], "$all_ldflags_for_check", "$all_libs_for_check") OTR_CHECK_LDFLAGS([-Wl,--nxcompat], "$all_ldflags_for_check", "$all_libs_for_check") fi fi if test x$enable_linker_hardening != xno; then OTR_CHECK_LDFLAGS(-z relro -z now, "$all_ldflags_for_check", "$all_libs_for_check") fi AC_OUTPUT([Makefile src/Makefile toolkit/Makefile tests/Makefile tests/utils/Makefile libotr.pc tests/utils/tap/Makefile tests/unit/Makefile tests/regression/Makefile tests/regression/client/Makefile ]) AC_OUTPUT