# -*- Autoconf -*- # # Top-level configure.ac file for libupnp # # Process this file with autoconf to produce a configure script. # # (C) Copyright 2005-2007 RĂ©mi Turboult # AC_PREREQ(2.60) AC_INIT([libupnp], [1.14.14], [mroberto@users.sourceforge.net]) dnl ############################################################################ dnl # *Independently* of the above libupnp package version, the libtool version dnl # of the 3 libraries need to be updated whenever there is a change released: dnl # "current:revision:age" (this is NOT the same as the package version), dnl # where: dnl # - library code modified: revision++ dnl # - interfaces changed/added/removed: current++ and revision=0 dnl # - interfaces added: age++ dnl # - interfaces removed or changed: age=0 dnl # *please update only once, before a formal release, not for each change* dnl # dnl ############################################################################ dnl # Release 1.12.1 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 0 -> 1 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:0:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [16:1:0]) dnl # dnl ############################################################################ dnl # Release 1.14.0 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 1 -> 2 dnl # - Interfaces removed in upnp dnl # current: 16 -> 17 dnl # revision: 2 -> 0 dnl # - Interfaces removed in upnp dnl # age: 0 -> 0 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:0:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:0:0]) dnl # dnl ############################################################################ dnl # Release 1.14.1 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 0 -> 1 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:0:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:1:0]) dnl # dnl ############################################################################ dnl # Release 1.14.2 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 1 -> 2 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:0:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:2:0]) dnl # dnl ############################################################################ dnl # Release 1.14.3 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 2 -> 3 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:0:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:3:0]) dnl # dnl ############################################################################ dnl # Release 1.14.4 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 3 -> 4 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:0:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:4:0]) dnl # dnl ############################################################################ dnl # Release 1.14.5 dnl # "current:revision:age" dnl # dnl # - Code has changed in ixml dnl # revision: 0 -> 1 dnl # - Code has changed in upnp dnl # revision: 4 -> 5 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:1:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:5:0]) dnl # dnl ############################################################################ dnl # Release 1.14.6 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 5 -> 6 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:1:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:6:0]) dnl # dnl ############################################################################ dnl # Release 1.14.7 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 6 -> 7 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:1:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:7:0]) dnl # dnl ############################################################################ dnl # Release 1.14.8 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 7 -> 8 dnl # - interfaces added in upnp dnl # age: 0 -> 1 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:1:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [17:8:1]) dnl # dnl ############################################################################ dnl # Release 1.14.9 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 8 -> 9 dnl # - interfaces changed/added/removed: dnl # current: 17 - > 18, revision: 8 -> 0 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:1:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [18:0:1]) dnl # dnl ############################################################################ dnl # Release 1.14.10 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 0 -> 1 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [11:1:0]) dnl #AC_SUBST([LT_VERSION_UPNP], [18:1:1]) dnl # dnl ############################################################################ dnl # Release 1.14.11 dnl # "current:revision:age" dnl # dnl # - Fix for cmake soname bump in ixml dnl # current: 11 -> 12 dnl # age: 0 -> 1 dnl # revision: 1 -> 1 dnl # - Code has changed in upnp dnl # revision: 1 -> 2 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [12:1:1]) dnl #AC_SUBST([LT_VERSION_UPNP], [18:2:1]) dnl # dnl ############################################################################ dnl # Release 1.14.12 dnl # "current:revision:age" dnl # dnl # - Code has changed in ixml dnl # revision: 1 -> 2 dnl # - Code has changed in upnp dnl # revision: 2 -> 3 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [12:2:1]) dnl #AC_SUBST([LT_VERSION_UPNP], [18:3:1]) dnl # dnl ############################################################################ dnl # Release 1.14.13 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 3 -> 4 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [12:2:1]) dnl #AC_SUBST([LT_VERSION_UPNP], [18:4:1]) dnl # dnl ############################################################################ dnl # Release 1.14.14 dnl # "current:revision:age" dnl # dnl # - Code has changed in upnp dnl # revision: 4 -> 5 dnl # dnl #AC_SUBST([LT_VERSION_IXML], [12:2:1]) dnl #AC_SUBST([LT_VERSION_UPNP], [18:5:1]) dnl # dnl ############################################################################ AC_SUBST([LT_VERSION_IXML], [12:2:1]) AC_SUBST([LT_VERSION_UPNP], [18:5:1]) dnl ############################################################################ dnl # Repeating the algorithm to place it closer to the modificatin place: dnl # - library code modified: revision++ dnl # - interfaces changed/added/removed: current++ and revision=0 dnl # - interfaces added: age++ dnl # - interfaces removed or changed: age=0 dnl # *please update only once, before a formal release, not for each change* dnl ############################################################################ AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([upnp/inc/upnp.h]) AM_INIT_AUTOMAKE([1.8 -Wall foreign subdir-objects dist-bzip2]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # # Get canonical host names in host and host_os # AC_CANONICAL_HOST # # There are 3 configuration files : # 1) "./autoconfig.h" is auto-generated and used only internally during build # (usually named "config.h" but conflicts with the file below) # 2) "./upnp/src/inc/config.h" is static and contains some compile-time # parameters. This file was previously in "./upnp/inc" but is no longer # installed (contains internal definitions only). # 3) "./upnp/inc/upnpconfig.h" is auto-generated and installed with the # libraries : it contains information on the configuration of the # installed libraries. # AC_CONFIG_HEADERS([autoconfig.h upnp/inc/upnpconfig.h upnp/sample/common/config_sample.h]) AX_SYS_LARGEFILE_SENSITIVE if test "x$ac_cv_sys_largefile_sensitive" = "xyes"; then AC_DEFINE([UPNP_LARGEFILE_SENSITIVE], 1, [whether the system defaults to 32bit off_t but can do 64bit when requested]) fi upnpmaj=`echo "$PACKAGE_VERSION" | sed 's/\..*//' ` upnpmin=[`echo "$PACKAGE_VERSION" | sed 's/^[^.]\.// ; s/[^0-9].*$//' `] upnppatch=[`echo "$PACKAGE_VERSION" | sed 's/^[^\.]*\.[^.]*\.//' `] AC_DEFINE_UNQUOTED([UPNP_VERSION_STRING], "$PACKAGE_VERSION", [see upnpconfig.h]) AC_DEFINE_UNQUOTED([UPNP_VERSION_MAJOR], $upnpmaj, [see upnpconfig.h]) AC_DEFINE_UNQUOTED([UPNP_VERSION_MINOR], $upnpmin, [see upnpconfig.h]) AC_DEFINE_UNQUOTED([UPNP_VERSION_PATCH], $upnppatch, [see upnpconfig.h]) # # Check for DEBUG flag # RT_BOOL_ARG_ENABLE([debug], [no], [extra debugging code]) if test "x$enable_debug" = xyes ; then AC_DEFINE(UPNP_HAVE_DEBUG, 1, [see upnpconfig.h]) AC_DEFINE(DEBUG, 1, [Define to 1 to compile debug code]) else AC_DEFINE(NDEBUG, 1, [Define to 1 to prevent compilation of assert()]) fi # # Check for libupnp subsets # RT_BOOL_ARG_ENABLE([client], [yes], [control point code (client)]) if test "x$enable_client" = xyes ; then AC_DEFINE(UPNP_HAVE_CLIENT, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([device], [yes], [device specific code (implies --disable-webserver if disabled)]) if test "x$enable_device" = xyes ; then AC_DEFINE(UPNP_HAVE_DEVICE, 1, [see upnpconfig.h]) fi if test "x$enable_device" = xno ; then enable_webserver=no else RT_BOOL_ARG_ENABLE([webserver], [yes], [integrated web server]) fi AM_CONDITIONAL(ENABLE_WEBSERVER, test x"$enable_webserver" = xyes) if test "x$enable_webserver" = xyes ; then AC_DEFINE(UPNP_HAVE_WEBSERVER, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([ssdp], [yes], [SSDP part]) if test "x$enable_ssdp" = xyes ; then AC_DEFINE(UPNP_HAVE_SSDP, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([optssdp], [yes], [optional SSDP headers support)]) if test "x$enable_optssdp" = xyes ; then AC_DEFINE(UPNP_HAVE_OPTSSDP, 1, [see upnpconfig.h]) enable_uuid=yes fi RT_BOOL_ARG_ENABLE([soap], [yes], [SOAP part]) if test "x$enable_soap" = xyes ; then AC_DEFINE(UPNP_HAVE_SOAP, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([gena], [yes], [GENA part]) if test "x$enable_gena" = xyes ; then AC_DEFINE(UPNP_HAVE_GENA, 1, [see upnpconfig.h]) enable_uuid=yes fi AM_CONDITIONAL(ENABLE_UUID, test x"$enable_uuid" = xyes) RT_BOOL_ARG_ENABLE([tools], [yes], [helper APIs in upnptools.h]) if test "x$enable_tools" = xyes ; then AC_DEFINE(UPNP_HAVE_TOOLS, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([ipv6], [yes], [ipv6 support]) if test "x$enable_ipv6" = xyes ; then AC_DEFINE(UPNP_ENABLE_IPV6, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([unspecified_server], [no], [unspecified SERVER header]) if test "x$enable_unspecified_server" = xyes ; then AC_DEFINE(UPNP_ENABLE_UNSPECIFIED_SERVER, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([open_ssl], [no], [open-ssl support]) if test "x$enable_open_ssl" = xyes ; then AC_DEFINE(UPNP_ENABLE_OPEN_SSL, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([blocking_tcp_connections], [yes], [blocking TCP connections]) if test "x$enable_blocking_tcp_connections" = xyes ; then AC_DEFINE(UPNP_ENABLE_BLOCKING_TCP_CONNECTIONS, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([scriptsupport], [yes], [script support for IXML document tree, see ixml.h]) if test "x$enable_scriptsupport" = xyes ; then AC_DEFINE(IXML_HAVE_SCRIPTSUPPORT, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([postwrite], [no], [write to the filesystem on otherwise unhandled POST requests]) if test "x$enable_postwrite" = xyes ; then AC_DEFINE(UPNP_ENABLE_POST_WRITE, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([reuseaddr], [no], [bind the miniserver socket with reuseaddr to allow clean restarts]) if test "x$enable_reuseaddr" = xyes ; then AC_DEFINE(UPNP_MINISERVER_REUSEADDR, 1, [see upnpconfig.h]) fi RT_BOOL_ARG_ENABLE([samples], [yes], [compilation of upnp/sample/ code]) # # Checks for programs # AC_PROG_CC AM_PROG_CC_C_O m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_PROG_LIBTOOL AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_EGREP # # Default compilation flags # echo "--------------------- Default compilation flags -------------------------------" echo host is $host echo host_os is $host_os build_linux=no build_windows=no build_mac=no build_freebsd=no # Detect the target system case "${host_os}" in linux*) build_linux=yes AC_MSG_NOTICE([Building for Linux]) ;; cygwin*|mingw*) build_windows=yes AC_MSG_NOTICE([Building for Windows]) ;; darwin*) build_mac=yes AC_MSG_NOTICE([Building for Mac]) ;; freebsd*) build_freebsd=yes AC_MSG_NOTICE([Building for FreeBSD]) ;; #*) # AC_MSG_ERROR(["OS $host_os is not supported"]) # ;; esac # Pass the conditionals to automake AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) AM_CONDITIONAL([FREEBSD], [test "$build_freebsd" = "yes"]) ################################################################################ case $host_os in freebsd*) echo "Using FreeBSD specific compiler settings" # Put FreeBSD specific compiler flags here ;; *) echo "Using non-specific system compiler settings" if test x"$enable_debug" = xyes; then # AC_PROG_CC already sets CFLAGS to "-g -O2" by default, # but only if CFLAGS was not previously set. #: # Use -O0 in debug so that variables do not get optimized out AX_CFLAGS_GCC_OPTION([-O0, -g]) else # add optimise for size AX_CFLAGS_GCC_OPTION([-Os]) fi ;; esac AX_CFLAGS_WARN_ALL AX_CFLAGS_GCC_OPTION([-Wextra -Wpedantic]) echo "-------------------------------------------------------------------------------" AC_TYPE_SIZE_T # # Are we targetting Win32? # AC_MSG_CHECKING([for Win32]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #ifdef _WIN32 This is an error! #endif ],[])], [ac_cv_win32="no"], [ac_cv_win32="yes"]) if test "$ac_cv_win32" = "yes"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi AM_CONDITIONAL(WIN32, test x"$ac_cv_win32" = xyes) # # Checks for header files (which aren't needed on Win32) # AC_HEADER_STDC if test "$ac_cv_win32" = "no"; then # libupnp code doesn't use autoconf variables yet, # so just abort if a header file is not found. AC_CHECK_HEADERS( [ \ arpa/inet.h \ fcntl.h \ inttypes.h \ limits.h \ netdb.h \ netinet/in.h \ stdlib.h \ string.h \ sys/ioctl.h \ sys/socket.h \ sys/time.h \ syslog.h \ unistd.h \ ], [], [AC_MSG_ERROR([required header file missing])]) fi # # Checks for typedefs, structures, and compiler characteristics # AC_C_CONST AC_C_BIGENDIAN AC_CHECK_HEADERS([sys/types.h sys/socket.h ws2tcpip.h]) AC_MSG_CHECKING(for socklen_t) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ],[ socklen_t t = 0; return t; ]) ],[ac_cv_socklen_t="yes"],[ac_cv_socklen_t="no"]) if test "$ac_cv_socklen_t" = "yes"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no, using int]) AC_DEFINE(socklen_t, int, [Type for storing the length of struct sockaddr]) fi # # Checks for library functions # AC_FUNC_VPRINTF AC_FUNC_FSEEKO AC_CHECK_FUNC(strnlen, AC_DEFINE(HAVE_STRNLEN, 1, [Defines if strnlen is available on your system])) AC_CHECK_FUNC(strndup, AC_DEFINE(HAVE_STRNDUP, 1, [Defines if strndup is available on your system])) # # Solaris needs -lsocket -lnsl -lrt AC_SEARCH_LIBS([bind], [socket]) AC_SEARCH_LIBS([gethostbyname], [nsl]) AC_SEARCH_LIBS([sched_getparam], [rt]) # # Checks for POSIX Threads # echo "--------------------------- pthread stuff -------------------------------------" AX_PTHREAD( [], [AC_MSG_ERROR([POSIX threads are required to build this program])]) # # Update environment variables for pthreads # CC="$PTHREAD_CC" CFLAGS="$PTHREAD_CFLAGS $CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # # Determine if pthread_rwlock_t is available # echo "----------------------- pthread_rwlock_t stuff --------------------------------" AC_MSG_CHECKING([if pthread_rwlock_t is available]) AC_LANG([C]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [#include ], [pthread_rwlock_t *x;])], [AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t]) AC_MSG_RESULT([yes, supported without any options])], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [#define _GNU_SOURCE #include ], [pthread_rwlock_t *x;])], [AC_DEFINE([UPNP_USE_RWLOCK], [1], [Use pthread_rwlock_t]) CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" AC_MSG_RESULT([yes, definition of _GNU_SOURCE required])], [AC_DEFINE([UPNP_USE_RWLOCK], [0], [Do not use pthread_rwlock_t]) AC_MSG_RESULT([no, needs to fallback to pthread_mutex]) AC_MSG_ERROR([pthread_rwlock_t not available])])]) echo "-------------------------------------------------------------------------------" if test "x$enable_open_ssl" = xyes ; then PKG_CHECK_MODULES(OPENSSL, libssl, [LIBS="$LIBS $OPENSSL_LIBS" CFLAGS="$CFLAGS $OPENSSL_CFLAGS"], [AC_MSG_ERROR([openssl not found])]) fi AC_CONFIG_FILES([ Makefile docs/Makefile ixml/Makefile upnp/Makefile upnp/sample/Makefile libupnp.pc ]) AC_OUTPUT