dnl Mbuni - Open Source MMS Gateway dnl dnl Copyright (C) 2003 - 2011, Digital Solutions Ltd. - http://www.dsmagic.com dnl dnl Paul Bagyenda dnl dnl This program is free software, distributed under the terms of dnl the GNU General Public License, with a few exceptions granted (see LICENSE) dnl AC_PREREQ(2.61) AC_INIT([mbuni],[cvs],[devel@mbuni.org]) dnl Set version AC_MSG_CHECKING([Retrieving Mbuni version]) M_VERSION=`head -n 1 VERSION` if test "x$M_VERSION" = "xcvs"; then CVS_DATE=`head -1 ChangeLog | cut -f 1 -d ' ' | sed 's/-//g'` M_VERSION="$M_VERSION-$CVS_DATE" fi AC_MSG_RESULT([$M_VERSION]) AC_CONFIG_SRCDIR([mmlib/mms_util.c]) AC_CONFIG_AUX_DIR(autotools) AM_INIT_AUTOMAKE([mbuni],[$M_VERSION]) AC_CONFIG_HEADERS([mbuni-config.h]) AM_MAINTAINER_MODE AC_CANONICAL_HOST dnl Checks for programs. AC_PROG_CC AC_PROG_LIBTOOL AC_PROG_RANLIB dnl add mmlib to the include path INCLUDES='-I$(top_srcdir)/mmlib -I$(top_builddir)/mmsc -I$(top_srcdir)/mmsc -I$(top_builddir)/mmsbox -I$(top_srcdir)/mmlib -I$(top_builddir)/mmsbox' AC_SUBST([INCLUDES]) dnl Checks for libraries. AC_CHECK_LIB([dl], [dlsym]) dnl AC_CHECK_LIB([iconv], [libiconv], [LIBS="$LIBS -liconv"]) AC_CHECK_LIB([pthread], [pthread_create]) dnl AC_CHECK_LIB([xml2], [xmlStrcasecmp], [], dnl AC_MSG_ERROR([LibXML2 is required])) AC_CHECK_FUNCS([backtrace]) dnl Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([float.h memory.h stdlib.h string.h sys/file.h unistd.h]) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_STRUCT_TM AC_C_VOLATILE dnl Checks for library functions. AC_FUNC_CLOSEDIR_VOID AC_FUNC_ERROR_AT_LINE AC_FUNC_MALLOC AC_FUNC_MEMCMP AC_TYPE_SIGNAL AC_FUNC_STAT AC_CHECK_FUNCS([floor localtime_r memset sqrt strerror strrchr strtol]) dnl Change a few things (a la kannel config) EXE_EXT="" LIB_EXT="a" case "$host" in *-sun-solaris* | *SunOS* | *-pc-solaris*) CFLAGS="$CFLAGS -DSunOS=1 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT" ;; *-cygwin*) EXE_EXT=".exe" ;; *apple-darwin*) CFLAGS="$CFLAGS -DDARWIN=1 -O4 -Wall -D_REENTRANT=1" LIB_EXT="dylib" allow_undefined_flag='-flat_namespace -undefined suppress' ;; *-linux*) CFLAGS="$CFLAGS -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -O4 -Wall -D_REENTRANT=1" LDFLAGS="$LDFLAGS -rdynamic" ;; *-*-openbsd*) CFLAGS="$CFLAGS -pthread" AC_CHECK_LIB(c_r, pthread_exit, [LIBS="$LIBS -lc_r -lpthread"; pthread="yes"]) ;; *-*-freebsd*) LDFLAGS="$LDFLAGS -export-dynamic" CFLAGS="$CFLAGS -DFREEBSD=1 -pthread" AC_CHECK_LIB(c_r, pthread_exit, [LIBS="$LIBS -lc_r -lpthread"; pthread="yes"]) ;; esac AC_ARG_WITH(cflags, [ --with-cflags=FLAGS use FLAGS for CFLAGS], CFLAGS="$CFLAGS $withval") AC_ARG_WITH(libs, [ --with-libs=FLAGS use FLAGS for extra libraries], LIBS="$LIBS $withval") dnl Check for large file handling AC_SYS_LARGEFILE(CFLAGS) if test "${ac_cv_sys_file_offset_bits}" != no ; then CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=${ac_cv_sys_file_offset_bits}" fi if test "${ac_cv_sys_large_files}" != "no" ; then CFLAGS="$CFLAGS -D_LARGE_FILES=${ac_cv_sys_large_files}" fi dnl implement SSL stuff. dnl Implement the --with-ssl option. AC_ARG_WITH(ssl, [ --with-ssl[=DIR] where to look for OpenSSL libs and header files DIR points to the installation [/usr/local/ssl]], [ if test -d "$withval"; then ssllib="$withval/lib"; sslinc="$withval/include" else AC_MSG_ERROR(Unable to find OpenSSL libs and/or directories at $withval) fi ]) dnl Implement --enable-ssl option. AC_MSG_CHECKING([whether to compile with SSL support]) AC_ARG_ENABLE(ssl, [ --enable-ssl enable SSL client and server support [enabled]], [ if test "$enableval" = no ; then AC_MSG_RESULT(disabled) ssl=no else ssl=yes fi ],[ ssl=yes ]) if test "$ssl" = "yes" ; then dnl test only if --with-ssl has not been used if test "x$ssllib" = "x" && test "x$sslinc" = "x"; then for loc in /usr/lib /usr/local/ssl/lib /usr/local/openssl/lib; do if test -f "$loc/libssl.$LIB_EXT"; then ssllib="$loc" fi done for loc in /usr/include/ssl /usr/include/openssl /usr/local/ssl/include \ /usr/local/openssl/include; do if test -d "$loc"; then sslinc="$loc" fi done fi AC_MSG_RESULT(trying $ssllib $sslinc) fi dnl Implement the SSL library checking routine. dnl This will define HAVE_LIBSSL in config.h if test "x$ssllib" != "x" && test "x$sslinc" != "x"; then CFLAGS="$CFLAGS -I$sslinc" LIBS="$LIBS -L$ssllib" AC_PATH_PROG(OPENSSL, openssl, no) if test "$OPENSSL" = "yes"; then AC_MSG_CHECKING([openssl version]) openssl_version=`$OPENSSL version | awk '{print $2}'` AC_MSG_RESULT([$openssl_version]) fi AC_CHECK_LIB(crypto, CRYPTO_lock, [ LIBS="$LIBS -lcrypto" AC_CHECK_LIB(ssl, SSL_library_init, [ AC_CHECK_LIB(ssl, SSL_connect) AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \ openssl/pem.h openssl/ssl.h openssl/err.h) AC_MSG_CHECKING(whether the OpenSSL library is multithread-enabled) AC_TRY_RUN([ #define OPENSSL_THREAD_DEFINES #include int main(void) { #if defined(THREADS) exit(0); #elif defined(OPENSSL_THREADS) exit(0); #else exit(1); #endif } ], [ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_LIBSSL) LIBS="$LIBS -lssl" AC_MSG_CHECKING([whether to compile with SSL support]) AC_MSG_RESULT(yes) ], [ AC_ARG_ENABLE(ssl-thread-test, [ --disable-ssl-thread-test disable the multithread test for the OpenSSL library this will force to continue even if the test fails], [ if test "$enableval" = no ; then AC_MSG_RESULT([no, continue forced]) fi ], [ AC_MSG_RESULT(no) AC_MSG_ERROR(Either get a multithread-enabled SSL or configure with --disable-ssl) ]) ], echo "Cross-compiling; make sure your SSL library is multithread-enabled" ) ]) ]) fi dnl Need to check for kannel and also that kannel has been patched. dnl Implement the --with-kannel-dir option AC_ARG_WITH(kannel-dir, [ --with-kannel-dir=DIR where to look for Kannel Gateway libs and header files DIR points to the installation [/usr/local] ] , [ gwloc="" if test -d "$withval" ; then gwloc="$withval" fi ]) AC_PATH_PROG(GW_CONFIG, gw-config, no, [$gwloc/bin:$gwloc:$PATH]) dnl check for Kannel gw-config if test "$GW_CONFIG" = "no"; then found="" for loc in $pgsqlloc /usr /usr/local ; do if test "x$found" = "x" ; then AC_MSG_CHECKING([for Kannel include files in]) AC_MSG_RESULT($loc) AC_CHECK_FILE("$loc/include/kannel/gw-config.h", [CFLAGS="$CFLAGS -I$loc/include/kannel"; LDFLAGS="$LDFLAGS -L$loc/lib/kannel -lwap -lgwlib"; found=1 ]) fi done; if test "x$found" != "x1" ; then AC_MSG_ERROR([Unable to find gw-config.h, please provide a --with-kannel-dir= location]) fi else dnl gw_config found AC_MSG_CHECKING([Kannel version]) gw_version=`$GW_CONFIG --version` AC_MSG_RESULT([$gw_version]) AC_MSG_CHECKING([Kannel libs]) if ! $GW_CONFIG --libs &>/dev/null ; then gw_libdir=`$GW_CONFIG --libs` LDFLAGS="$LDFLAGS $gw_libdir" LIBS="$LIBS $gw_libdir" AC_MSG_RESULT([$gw_libdir]) fi AC_MSG_CHECKING([Kannel includes]) if ! $GW_CONFIG --cflags &>/dev/null ; then CFLAGS="$CFLAGS `$GW_CONFIG --cflags`" gw_incdir=`$GW_CONFIG --cflags` AC_MSG_RESULT([$gw_incdir]) fi fi AC_CHECK_LIB([gwlib], [cfg_create], [], AC_MSG_ERROR([Kannel gwlib is required!])) AC_CHECK_LIB([wap], [wsp_headers_pack], [], AC_MSG_ERROR([Kannel WAP lib is required!])) dnl Implement the --with-pgsql-dir option. pgsqlloc="/usr/local/pgsql" AC_ARG_WITH(pgsql-dir, [ --with-pgsql-dir=DIR where to look for PostgreSQL libs and header files DIR points to the installation [/usr/local/pgsql] ], [ pgsqlloc="" if test -d "$withval" ; then pgsqlloc="$withval" fi ]) AC_PATH_PROG(PGSQL_CONFIG, pg_config, no, [$pgsqlloc/bin:$pgsqlloc:/usr/lib/postgresql/bin:${PATH}]) dnl check for PgSQL >= 7.2 style pg_config information if test "$PGSQL_CONFIG" = "no"; then found="" for loc in $pgsqlloc /usr /usr/local ; do if test "x$found" = "x" ; then AC_MSG_CHECKING([for PostgresSQL include files in]) AC_MSG_RESULT($loc) AC_CHECK_FILE("$loc/include/postgresql/libpq-fe.h", [CFLAGS="$CFLAGS -I$loc/include/postgresql"; LIBS="-L$loc/lib/postgresql -lpq $LIBS"]; found=1, [AC_CHECK_FILE("$loc/include/pgsql/libpq-fe.h", [CFLAGS="$CFLAGS -I$loc/include/pgsql"; LIBS=" -L$loc/lib/pgsql $LIBS -lpq"]; found=1, [AC_CHECK_FILE("$loc/pgsql/include/libpq-fe.h", [CFLAGS="-I$loc/pgsql/include $CFLAGS"; LIBS="-L$loc/pgsql/lib $LIBS -lpq"]; found=1, )] )] ) fi done else dnl pg_config found AC_MSG_CHECKING([PostgreSQL version]) pgsql_version=`$PGSQL_CONFIG --version` AC_MSG_RESULT([$pgsql_version]) AC_MSG_CHECKING([PostgreSQL libs]) if $PGSQL_CONFIG --libdir &>/dev/null ; then LIBS="-L`$PGSQL_CONFIG --libdir` $LIBS -lpq " pg_libdir="`$PGSQL_CONFIG --libdir`" AC_MSG_RESULT([$pg_libdir]) fi AC_MSG_CHECKING([PostgreSQL includes]) if $PGSQL_CONFIG --includedir &>/dev/null ; then CFLAGS="-I`$PGSQL_CONFIG --includedir` $CFLAGS" pg_incdir=`$PGSQL_CONFIG --includedir` AC_MSG_RESULT([$pg_incdir]) fi fi # set HAVE_LIBpq if we have libpq AC_CHECK_LIB([pq], [PQexec], [has_pgsql=true]) AM_CONDITIONAL([BUILD_PGSQLQ], [test x$has_pgsql = xtrue]) # Look for curl lib AC_PATH_PROG(CURL_CONFIG, curl-config, no, [${PATH}]) if test "$CURL_CONFIG" != "no"; then dnl curl-config found AC_MSG_CHECKING([curl lib version]) curl_version=`$CURL_CONFIG --version` AC_MSG_RESULT([$curl_version]) AC_MSG_CHECKING([curl libs]) if $CURL_CONFIG --libs &>/dev/null ; then curl_libs=`$CURL_CONFIG --libs` AC_MSG_RESULT([$curl_libs]) LIBS="$LIBS $curl_libs" fi AC_MSG_CHECKING([curl includes]) if $CURL_CONFIG --cflags &>/dev/null ; then curl_cflags=`$CURL_CONFIG --cflags` CFLAGS="$curl_cflags $CFLAGS" AC_MSG_RESULT([$curl_cflags]) fi fi AC_CHECK_LIB([curl], [curl_global_init], [ CFLAGS="-DHAVE_LIBCURL=1 $CFLAGS"; has_libcurl=true ]) AM_CONDITIONAL([BUILD_MMSBOXMM1], [test x$has_libcurl = xtrue]) dnl Add mbuni version to Cflags # CFLAGS="$CFLAGS -DMBUNI_VERSION=\"$M_VERSION\"" AC_DEFINE_UNQUOTED(MBUNI_VERSION, "$M_VERSION", "Mbuni Version") dnl May be we need to check for media conversion tools (imagemagick, etc)? AC_CONFIG_FILES([Makefile autotools/Makefile doc/Makefile doc/examples/Makefile doc/images/Makefile mmlib/Makefile mmsc/Makefile mmsbox/Makefile extras/Makefile extras/pgsql-queue/Makefile extras/mmsbox-mm1/Makefile]) AC_OUTPUT cat<