dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) AC_INIT([feng], [m4_esyscmd([./git-version-gen .tarball-version])], [lscube-devel@lscube.org]) AC_CONFIG_AUX_DIR(config) AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip foreign subdir-objects]) LSC_INIT AC_CONFIG_HEADER([config.h]) AC_ARG_WITH(rtsp-port, AS_HELP_STRING([--with-rtsp-port], [default RTSP listening port (default=554, alternative=8554)]),, with_rtsp_port=554) AC_ARG_WITH(config-file, AS_HELP_STRING([--with-config-file], [name for the configuration file in sysconfdir (default=feng.conf)]),, with_config_file="feng.conf") AC_ARG_WITH(log-file, AS_HELP_STRING([--with-log-file], [name for the log file (default=feng.log)]),, with_log_file="feng.log") AC_ARG_WITH(max-session, AS_HELP_STRING([--with-max-session], [max number of incoming sessions (default=100)]),, with_max_session=100) AC_ARG_ENABLE(libav, AS_HELP_STRING([--enable-libav], [enable libav support (default=yes)]),, enable_libav="yes") AC_ARG_ENABLE(live-streaming, AS_HELP_STRING([--enable-live-streaming], [enable support for live streaming (default=yes)]),, live_streaming="yes") AX_CHECK_LIBRARY([LIBEV], [ev.h], [ev], [], [AC_MSG_ERROR([libev not found, feng requires libev])]) AC_ARG_ENABLE(trace, AS_HELP_STRING([--enable-trace], [enable additional informations in log [[default=no]]]),, enable_trace="no") AC_ARG_ENABLE([tables], AS_HELP_STRING([--disable-tables], [disable big build-time tables (for embedded)])) AS_IF([test "x$enable_tables" = "xno"], [ AC_DEFINE([AVOID_TABLES], [1], [Define to 1 if tables should be avoided]) ]) dnl Checks used by feng itself AC_CHECK_HEADERS_ONCE([syslog.h]) AC_CHECK_FUNCS_ONCE([inet_ntop]) AC_FUNC_STRERROR_R AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Define this if you have clock_gettime])], [AC_MSG_WARN([POSIX realtime features not available])]) CC_ATTRIBUTE_PACKED([AC_DEFINE([ATTR_PACKED], [__attribute__((__packed__))], [Declares a structure packed])], [AC_MSG_ERROR([unable to find how the compiler declares packed structures])]) CC_ATTRIBUTE_DESTRUCTOR AX_TLS([], [ AC_CHECK_FUNCS([pthread_key_create pthread_setspecific pthread_getspecific], [], [AC_MSG_ERROR([Unable to find either Thread-Local Storage support or POSIX thread-specific data management functions])]) ]) AH_BOTTOM([#if !defined(NDEBUG) && defined(SUPPORT_ATTRIBUTE_DESTRUCTOR) # define CLEANUP_DESTRUCTOR __attribute__((__destructor__)) #endif ]) dnl check if we have the generic struct for net addresses the has max dnl possible size AC_CHECK_TYPES(struct sockaddr_storage,,, [#include <sys/socket.h>]) AX_PROG_FLEX([], [AC_MSG_ERROR([unable to find flex, feng needs flex to build]) ]) AX_PROG_BISON([], [AC_MSG_ERROR([unable to find GNU bison, feng needs GNU bison to build]) ]) CHECK_RAGEL_AM([src/network/ragel_range.c], [6.6]) feng_state_dir=$(eval echo ${localstatedir}/feng) AC_SUBST(feng_state_dir) LSC_CHECK_IPV6 LSC_CHECK_SCTP LIBS="$LIBS $SCTP_LIBS" dnl Set the comment marker when sctp is not enabled, this allows for dnl the -uninstalled variant of feng.conf to use sctp if enabled. AS_IF([test "x$have_sctp" = "xyes"], [AC_SUBST([ENABLE_SCTP], [""])], [AC_SUBST([ENABLE_SCTP], ["#"])]) AS_IF([test "x$have_sctp" = "xyes"], [ AC_CHECK_HEADERS([linux/sockios.h]) ]) dnl Check for prerequisites to enable live streaming with flux. AS_IF([test "x$live_streaming" = "xyes"], [AC_SEARCH_LIBS([mq_open], [rt], [AC_DEFINE(LIVE_STREAMING, [1], [Define this if live streaming is supported])], [live_streaming=no])]) AM_CONDITIONAL([LIVE_STREAMING], [test "x$live_streaming" = "xyes"]) PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16 gthread-2.0]) CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS" avformat_msg="no" avutil_msg="no" if test "x$enable_libav" = "xyes"; then PKG_CHECK_MODULES(LIBAVFORMAT,[libavformat >= 53.3.0 libavcodec], [AC_DEFINE(HAVE_AVFORMAT,,[Define if libavformat support is available]) avformat_msg="yes" ]) CFLAGS="$CFLAGS $LIBAVFORMAT_CFLAGS" LIBS="$LIBS $LIBAVFORMAT_LIBS" PKG_CHECK_MODULES(LIBAVUTIL,[libavutil >= 49.6.0], [AC_DEFINE(HAVE_AVUTIL,,[Define if libavutil support is available]) avutil_msg="yes"], [avutil_msg="no, using internal"]) CFLAGS="$CFLAGS $LIBAVUTIL_CFLAGS" LIBS="$LIBS $LIBAVUTIL_LIBS" fi AM_CONDITIONAL(FENG_LIBAV, [test "$enable_libav" = "yes"]) CC_ATTRIBUTE_UNUSED( [AC_DEFINE([ATTR_UNUSED], [__attribute__((__unused__))], [Define this if ATTR_UNUSED is supported])], [AC_DEFINE([ATTR_UNUSED], [], [Define this if ATTR_UNUSED is not supported])]) if test "$enable_trace" = "yes"; then AC_DEFINE(TRACE, 1,[Trace enabled]) fi AC_ARG_VAR([XSLTPROC], [A libxslt-compatible XSLT processor command]) AS_IF([test "x$XSLTPROC" = "x"], [ AC_CHECK_PROGS([XSLTPROC], [xsltproc]) AS_IF([test "x$XSLTPROC" = "x"], [ AC_MSG_ERROR([unable to find xsltproc, you need this to build feng]) ]) ]) PKG_HAVE_DEFINE_WITH_MODULES(JSON,[json]) CFLAGS="$CFLAGS $JSON_CFLAGS" LIBS="$LIBS $JSON_LIBS" feng_avroot_dir=$(eval echo $localstatedir/$PACKAGE_NAME/avroot|sed -e "s:/\+:/:g; s:NONE::g") AC_SUBST(feng_avroot_dir) feng_max_session=$(eval echo $with_max_session) AC_SUBST(feng_max_session) feng_rtsp_port=$(eval echo $with_rtsp_port) AC_SUBST(feng_rtsp_port) feng_conf_file=$(eval echo $with_config_file|sed -e "s:/\+:/:g") AC_SUBST(feng_conf_file) feng_basedir=$(eval echo $localstatedir|sed -e "s:/\+:/:g; s:NONE::g") feng_logdir="${feng_basedir}/log/$PACKAGE_NAME" AC_SUBST(feng_logdir) feng_log_file="${feng_basedir}/log/$with_log_file" AC_SUBST(feng_log_file) feng_statedir="${feng_basedir}/lib/$PACKAGE_NAME" AC_SUBST(feng_statedir) feng_basedir="${feng_basedir}/$PACKAGE_NAME" AC_SUBST(feng_basedir) feng_conf_dir=$(eval echo $sysconfdir|sed -e "s:/\+:/:g; s:NONE::g") AC_SUBST(feng_conf_dir) feng_docs_dir=$(eval echo $datadir/doc/$PACKAGE_NAME|sed -e "s:/\+:/:g") AC_SUBST(feng_docs_dir) AC_DEFINE_UNQUOTED(FENG_MAX_SESSION_DEFAULT, $feng_max_session, [Define max number of RTSP incoming sessions for Feng]) AC_DEFINE_UNQUOTED(FENG_RTSP_PORT_DEFAULT, $feng_rtsp_port, [Define default RTSP listening port]) AC_DEFINE_UNQUOTED(FENG_AVROOT_DIR_DEFAULT, $feng_avroot_dir, [Define default directory for Feng A/V resources]) AC_DEFINE_UNQUOTED(FENG_AVROOT_DIR_DEFAULT_STR, "$feng_avroot_dir", [Define default directory string for Feng A/V resources]) AC_DEFINE_UNQUOTED(FENG_DEFAULT_PORT, "$feng_rtsp_port", [Define default listening port]) AC_DEFINE_UNQUOTED(FENG_CONF_FILE_DEFAULT, $feng_conf_file, [Define default file for Feng configuration]) AC_DEFINE_UNQUOTED(FENG_LOG_FILE_DEFAULT, $feng_log_file, [Define default file for Feng logger]) AC_DEFINE_UNQUOTED(FENG_LOG_FILE_DEFAULT_STR, "$feng_log_file", [Define default string for Feng log file]) AC_DEFINE_UNQUOTED(FENG_CONF_DIR_DEFAULT, $feng_conf_dir, [Define default directory for Feng configuration]) AC_DEFINE_UNQUOTED(FENG_CONF_PATH_DEFAULT_STR, "$(eval echo ${feng_conf_dir}/${feng_conf_file}|sed -e s:/\+:/:g)", [Define absolute path string for Feng configuration file]) AC_DEFINE_UNQUOTED(FENG_STATE_DIR, $feng_state_dir, [Define default dir for Certificate (pem format)]) AC_DEFINE_UNQUOTED(FENIC_STATE_DIR_STR, "$feng_state_dir", [Define default string dir for Certificate (pem format)]) CC_CHECK_CFLAGS_APPEND([-Werror=declaration-after-statement -Wdeclaration-after-statement], [break;]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([etc/feng.conf]) AC_CONFIG_FILES([etc/feng-uninstalled.conf]) AC_CONFIG_FILES([Doxyfile]) AC_OUTPUT LSC_DEBUG_STATUS AC_MSG_NOTICE([config files successfully generated! Feng Install prefix .......... : $prefix Feng Binary path ............. : $(eval echo $exec_prefix/bin/feng) Feng Configuration path ...... : $feng_conf_dir Feng Log File ................ : $feng_log_file Feng Multimedia Files root ... : $feng_avroot_dir Feng RTSP listening port ..... : $feng_rtsp_port live streaming supported...... : $live_streaming sctp support enabled ......... : $enable_sctp avformat support enabled ..... : $avformat_msg avutil support enabled ....... : $avutil_msg json support enabled ......... : $with_json 'make' will now compile Feng and 'su -c make install' will install it. Note: On non-Linux systems you might need to use 'gmake' instead of 'make'. ])