summaryrefslogtreecommitdiffstats
path: root/comm/third_party/libotr/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--comm/third_party/libotr/configure.ac191
1 files changed, 191 insertions, 0 deletions
diff --git a/comm/third_party/libotr/configure.ac b/comm/third_party/libotr/configure.ac
new file mode 100644
index 0000000000..d8c857d895
--- /dev/null
+++ b/comm/third_party/libotr/configure.ac
@@ -0,0 +1,191 @@
+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 <stdio.h>], [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