aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac133
1 files changed, 133 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..b9c437f
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,133 @@
+AC_PREREQ(2.69)
+AC_INIT([ptunnel-ng], [1.0.0], [], [], [])
+AC_CONFIG_SRCDIR([src/config.h.in])
+AC_CONFIG_FILES([Makefile src/Makefile])
+
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+if test x"$cross_compiling" != x"no"; then
+ HOST_PREFIX="${host_alias}-"
+ HOST_SUFFIX="-$host_alias"
+ if test x"${build_alias}" = x; then
+ AC_MSG_ERROR([Cross compile enabled but no --build *explicitly* specified. For example: --build=$(gcc -dumpmachine)])
+ fi
+else
+ HOST_PREFIX=
+ HOST_SUFFIX=
+fi
+case x"${host}" in
+ x*-*-cygwin* | x*-*-mingw32*)
+ dnl Some Windows includes required by third-party modules.
+ use_msw=yes
+ PROGRAM_EXT=".exe"
+ ;;
+esac
+
+AM_SILENT_RULES([yes])
+AM_INIT_AUTOMAKE
+AC_PROG_INSTALL
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_SIZE_T
+AC_CHECK_HEADER_STDBOOL
+AC_FUNC_VPRINTF
+AC_FUNC_MEMCMP
+
+dnl Check for std includes.
+AC_CHECK_HEADERS([stdarg.h stdio.h unistd.h stdlib.h string.h stdint.h time.h signal.h assert.h],,
+ [AC_MSG_ERROR([Missing essential std headers.])])
+if test x"${use_msw}" != x"yes"; then
+ AC_CHECK_HEADERS([sys/unistd.h sys/types.h sys/socket.h netinet/in.h arpa/inet.h netdb.h pthread.h errno.h net/ethernet.h syslog.h pwd.h grp.h],,
+ [AC_MSG_ERROR([Missing essential non-Windows std headers.])])
+ AC_SEARCH_LIBS([pthread_create], [pthread],,
+ [AC_MSG_ERROR([Missing pthread library.])],)
+ AC_CHECK_FUNCS([pthread_mutex_init pthread_mutex_lock pthread_mutex_unlock],,
+ [AC_MSG_ERROR([Missing essential pthread functions.])])
+else
+ AC_CHECK_HEADERS([winsock2.h windows.h ws2tcpip.h],,
+ [AC_MSG_ERROR([Missing essential Windows std headers.])])
+fi
+
+dnl Check timeval struct members.
+AC_CHECK_MEMBER([struct timeval.tv_sec], [],
+ [AC_MSG_ERROR([Invalid \`struct timeval\` structure.])],
+ [[#include <sys/time.h>]])
+AC_CHECK_MEMBER([struct timeval.tv_usec], [],
+ [AC_MSG_ERROR([Invalid \`struct timeval\` structure.])],
+ [[#include <sys/time.h>]])
+
+dnl Check size
+AC_CHECK_SIZEOF(char)
+AC_CHECK_SIZEOF(uint8_t)
+AC_CHECK_SIZEOF(uint16_t)
+AC_CHECK_SIZEOF(uint32_t)
+AC_CHECK_SIZEOF(int)
+if test $ac_cv_sizeof_char != "1" -o \
+ $ac_cv_sizeof_uint8_t != "1" -o \
+ $ac_cv_sizeof_uint16_t != "2" -o \
+ $ac_cv_sizeof_uint32_t != "4" -o \
+ $ac_cv_sizeof_int != "4"; then
+ AC_MSG_ERROR([Invalid type size.])
+fi
+
+AC_MSG_CHECKING([for __attribute__ ((packed))])
+AC_COMPILE_IFELSE(
+[AC_LANG_PROGRAM([[
+#include <stdlib.h>
+struct foo {
+ int num;
+ char *str;
+ void *ptr;
+} __attribute__ ((packed));
+]], [])]
+,[AC_MSG_RESULT([yes])]
+,[AC_MSG_ERROR([Your compiler does not support \`__attribute__ ((packed))\`.])])
+
+dnl Check for std functions.
+AC_CHECK_FUNCS([malloc calloc free memcpy memset signal printf sprintf vsnprintf strerror strlen strncmp strstr strtol strtoul fopen fprintf gettimeofday close fclose exit],,
+ [AC_MSG_ERROR([Missing essential std functions.])])
+
+dnl `--disable-pcap`: Enabled if found.
+AC_ARG_ENABLE([pcap],
+ [AS_HELP_STRING([--disable-pcap], [Disable pcap support. (default: enabled if found)])],,[pcap_enabled=yes])
+pcap_enabled=$(echo ${pcap_enabled})
+case ${pcap_enabled} in
+ 1|y|yes) pcap_enabled=yes ;;
+ ''|0|n|no) pcap_enabled= ;;
+ *) AC_MSG_ERROR([Unknown option \`${pcap_enabled}\` for --disable-pcap]) ;;
+esac
+
+dnl `--disable-selinux`: Enabled if found.
+AC_ARG_ENABLE([selinux],
+ [AS_HELP_STRING([--disable-selinux], [Disable SELINUX support. (default: enabled if found)])],,[selinux_enabled=yes])
+selinux_enabled=$(echo ${selinux_enabled})
+case ${selinux_enabled} in
+ 1|y|yes) selinux_enabled=yes ;;
+ ''|0|n|no) selinux_enabled= ;;
+ *) AC_MSG_ERROR([Unknown option \`${selinux_enabled}\` for --disable-selinux]) ;;
+esac
+
+dnl Check libcap headers/functions.
+if test x"${pcap_enabled}" != x; then
+ AC_CHECK_HEADERS([pcap.h],,
+ [pcap_enabled=])
+ AC_SEARCH_LIBS([pcap_lookupnet], [pcap],,
+ [pcap_enabled=],)
+ AC_CHECK_FUNCS([pcap_compile pcap_close pcap_setfilter pcap_dispatch],,
+ [pcap_enabled=])
+fi
+
+dnl Check for SELINUX
+if test x"${selinux_enabled}" != x; then
+ AC_CHECK_HEADERS([selinux/selinux.h],,
+ [selinux_enabled=])
+ AC_SEARCH_LIBS([setcon], [selinux],,[selinux_enabled=],)
+fi
+
+dnl Set automake conf vars
+AM_CONDITIONAL([HAVE_PCAP], [test x"${pcap_enabled}" = xyes])
+AM_CONDITIONAL([HAVE_SELINUX], [test x"${selinux_enabled}" = xyes])
+
+dnl output config headers
+AC_CONFIG_HEADERS([src/config.h:src/config.h.in])
+AC_OUTPUT