blob: 9cdec0f0c49fa2d94b808e58c0bda0461178f3e4 [file] [log] [blame]
dnl #
dnl # Copyright (c) 2016 Nest Labs, Inc.
dnl # All rights reserved.
dnl #
dnl # Licensed under the Apache License, Version 2.0 (the "License");
dnl # you may not use this file except in compliance with the License.
dnl # You may obtain a copy of the License at
dnl #
dnl # http://www.apache.org/licenses/LICENSE-2.0
dnl #
dnl # Unless required by applicable law or agreed to in writing, software
dnl # distributed under the License is distributed on an "AS IS" BASIS,
dnl # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dnl # See the License for the specific language governing permissions and
dnl # limitations under the License.
dnl #
AC_PREREQ(2.59)
dnl This is the project name and release verison number.
dnl The release version is stored in the file `.default-version`.
dnl Update that file *after* every release to indicate the version
dnl of the *next* anticipated release.
AC_INIT(
[wpantund],
m4_esyscmd([printf "%s" `cat .default-version`]),
[wpantund-devel@googlegroups.com],
[wpantund],
[https://github.com/openthread/wpantund/]dnl
)
dnl These are the list of plugins that have usage restrictions
dnl associated with their license. These will be automatically
dnl disabled by default and print out a warning when enabled.
m4_define(RESTRICTED_USE_NCP_PLUGINS, [ dnl
])
dnl This is the list of plugins which are included with wpantund.
dnl As plugins are added, they should be appended to this list.
m4_define(AVAILABLE_NCP_PLUGINS, [ dnl
RESTRICTED_USE_NCP_PLUGINS dnl
spinel dnl
dummy dnl
])
dnl These are the list of plugins are disabled by default.
dnl This list automatically includes the plugins from
dnl RESTRICTED_USE_NCP_PLUGINS.
m4_define(DISABLED_NCP_PLUGINS, [RESTRICTED_USE_NCP_PLUGINS])
dnl Attempt to include a reasonable git tag description.
SOURCE_VERSION=m4_esyscmd([
configver="$PACKAGE_VERSION"
(test -d .git && gitver=`git describe --dirty --match "[0-9].*"` && printf "$gitver") ||
(test -d .git && gitver=`git describe --always` && printf "$configver-g$gitver") ||
printf "$configver"
])
AC_CONFIG_AUX_DIR([m4])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_FILES(Makefile doxygen.cfg src/Makefile doc/Makefile src/connman-plugin/Makefile src/ipc-dbus/Makefile src/ipc-dbus/wpantund.conf src/wpanctl/Makefile src/wpantund/Makefile src/util/Makefile src/scripts/Makefile src/missing/Makefile src/missing/strlcat/Makefile src/missing/strlcpy/Makefile third_party/Makefile)
# Set up AC_CONFIG_FILES for all of the available plugins.
AC_CONFIG_FILES(m4_normalize(m4_foreach_w(THIS_PLUGIN,AVAILABLE_NCP_PLUGINS,[src/ncp-[]THIS_PLUGIN/Makefile ])))
PLUGIN_SUBDIRS="[]m4_foreach_w(THIS_PLUGIN,AVAILABLE_NCP_PLUGINS,ncp-[]THIS_PLUGIN )"
AC_SUBST(PLUGIN_SUBDIRS)
AM_INIT_AUTOMAKE()
AM_MAINTAINER_MODE
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
m4_ifdef([AX_CODE_COVERAGE], [AX_CODE_COVERAGE], [AC_SUBST([CODE_COVERAGE_RULES])])
LT_INIT
AC_LIBTOOL_DLOPEN_SELF
AC_PROG_LIBTOOL
AC_CONFIG_SRCDIR([src/version.h])
AC_CONFIG_HEADERS([src/config.h])
# This varable is for defining the default NCP plugin.
# This is the default value, which can be overridden below.
default_ncp_plugin=none
dnl Add --enable/--disable configure arguments for all the available plugins.
m4_foreach_w(THIS_PLUGIN,AVAILABLE_NCP_PLUGINS,[
m4_define([THIS_PLUGIN_DISABLED],m4_foreach_w(THAT_PLUGIN,DISABLED_NCP_PLUGINS,[m4_if(THIS_PLUGIN,THAT_PLUGIN,[disabled])]))
AC_ARG_ENABLE(
ncp-[]m4_translit(THIS_PLUGIN,[_],[-]),
AC_HELP_STRING(
[--[]m4_if(THIS_PLUGIN_DISABLED,[disabled],[enable],[disable])-ncp-[]m4_translit(THIS_PLUGIN,[_],[-])],
m4_do([[]m4_if(THIS_PLUGIN_DISABLED,[disabled],[enable],[disable]) the NCP plugin "],[THIS_PLUGIN],["])
),
[
if test "x$enableval" = "xdefault"
then
default_ncp_plugin=[]THIS_PLUGIN
enable_ncp_[]THIS_PLUGIN=yes
fi
],
[m4_if(THIS_PLUGIN_DISABLED,[disabled],[true],[enable_ncp_[]THIS_PLUGIN=yes])],
)
])
AC_ARG_ENABLE(
all-restricted-plugins,
AC_HELP_STRING(
[--enable-all-restricted-plugins],
[Enable all plugins with restrictive licenses]
)
)
AC_ARG_ENABLE(
static-link-ncp-plugin,
AC_HELP_STRING(
[--enable-static-link-ncp-plugin=[plugin]],
[Statically link against a single NCP plugin]
),
[],
[
if test "x$enable_shared" == "xno"
then enable_static_link_ncp_plugin=yes
fi
]
)
#
# Service group
#
AC_ARG_WITH(
[service-group],
[AS_HELP_STRING([--with-service-group=<SERVICE_GROUP>],[Specify the group allowed to send d-bus messages to wpantund service @<:@default=root@:>@.])],
[
WPANTUND_SERVICE_GROUP="${withval}"
],
[
WPANTUND_SERVICE_GROUP=root
])
AC_MSG_CHECKING([Service group])
AC_MSG_RESULT(${WPANTUND_SERVICE_GROUP})
AC_SUBST(WPANTUND_SERVICE_GROUP)
AC_DEFINE_UNQUOTED([WPANTUND_SERVICE_GROUP],["${WPANTUND_SERVICE_GROUP}"],[Define the group allowed to send d-bus messages to wpantund service])
#
# Service user
#
AC_ARG_WITH(
[service-user],
[AS_HELP_STRING([--with-service-user=<SERVICE_USER>],[Specify the user to run wpantund service @<:@default=root@:>@.])],
[
WPANTUND_SERVICE_USER="${withval}"
],
[
WPANTUND_SERVICE_USER=root
])
AC_MSG_CHECKING([Service user])
AC_MSG_RESULT(${WPANTUND_SERVICE_USER})
AC_SUBST(WPANTUND_SERVICE_USER)
AC_DEFINE_UNQUOTED([WPANTUND_SERVICE_USER],["${WPANTUND_SERVICE_USER}"],[Define the user to run wpantund service])
#
# NCP Spinel Encrypter
#
AC_ARG_WITH(
[ncp-spinel-encrypter-libs],
[AS_HELP_STRING([--with-ncp-spinel-encrypter-libs=<LIBSPINEL_ENCRYPTER.A>],[Specify library files (absolute paths) implementing the NCP Spinel Encrypter. @<:@default=none@:>@.])],
[
if test "${withval}" = "no"
then OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER=0
else
OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER=1
OPENTHREAD_NCP_SPINEL_ENCRYPTER_LIBS=${withval}
fi
],
[
OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER=0
])
AC_MSG_CHECKING([NCP Spinel Encrypter libs])
AC_MSG_RESULT(${OPENTHREAD_NCP_SPINEL_ENCRYPTER_LIBS-none})
AC_SUBST(OPENTHREAD_NCP_SPINEL_ENCRYPTER_LIBS)
AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER],[${OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER}],[Define to 1 if using NCP Spinel Encrypter])
AM_CONDITIONAL([OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER], [test "${OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER}" = "1"])
if test "x$enable_all_restricted_plugins" = "xyes"
then {
true
m4_foreach_w(THIS_PLUGIN,RESTRICTED_USE_NCP_PLUGINS,
[ if test "x$enable_ncp_[]m4_translit(THIS_PLUGIN,[-],[_])" = "x"
then enable_ncp_[]m4_translit(THIS_PLUGIN,[-],[_])="yes"
fi
])}
fi
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
test "x$pkglibexecdir" = x && pkglibexecdir='${libexecdir}/${PACKAGE_TARNAME}'
AC_DEFINE_UNQUOTED([PREFIX], ["`eval echo "$prefix"`"], [Define to the install prefix])
AC_DEFINE_UNQUOTED([SYSCONFDIR], ["`eval echo "$sysconfdir"`"], [Define to the sub-directory for system settings.])
AC_DEFINE_UNQUOTED([PKGLIBEXECDIR], ["`eval eval eval echo "$pkglibexecdir"`"], [Define to the sub-directory for plugins.])
AC_DEFINE_UNQUOTED([SOURCE_VERSION], ["`eval echo "$SOURCE_VERSION"`"], [Source version])
if test "${TUNNEL_TUNTAP_DEVICE+set}" = "set"
then AC_DEFINE_UNQUOTED([TUNNEL_TUNTAP_DEVICE], ["$TUNNEL_TUNTAP_DEVICE"], [Path to tuntap device])
fi
if test "${SOCKET_UTILS_DEFAULT_SHELL+set}" = "set"
then AC_DEFINE_UNQUOTED([SOCKET_UTILS_DEFAULT_SHELL], ["$SOCKET_UTILS_DEFAULT_SHELL"], [Default path to a shell])
fi
AC_PROG_CC([],AC_MSG_ERROR(["A working C compiler is required"]))
AC_PROG_CXX([],AC_MSG_ERROR(["A working C++ compiler is required"]))
NL_FUZZ_TARGETS
NL_APPEND_NETWORK_TIME_RECEIVED_MONOTONIC_TIMESTAMP
AC_HEADER_STDC
AC_HEADER_TIME
AC_CHECK_HEADERS([unistd.h errno.h stdbool.h], [], AC_MSG_ERROR(["Missing a required header."]))
AC_CHECK_HEADERS([sys/un.h sys/wait.h pty.h pwd.h execinfo.h asm/sigcontext.h sys/prctl.h])
AC_C_CONST
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_C_INLINE
AC_C_VOLATILE
dnl Raspberry Pi's clock_gettime() function is in librt.
dnl This should only pick it up if necessary.
AC_SEARCH_LIBS([clock_gettime], [rt])
AC_CHECK_FUNCS([clock_gettime])
CHECK_MISSING_FUNC([strlcpy])
CHECK_MISSING_FUNC([strlcat])
AC_CHECK_FUNCS([alloca fgetln memcmp memset strtol strdup strndup strlcpy strlcat stpncpy vsnprintf vsprintf snprintf getdtablesize getloadavg])
NL_DEBUG
NL_CHECK_DBUS
NL_CHECK_BOOST_SIGNALS2([],AC_MSG_ERROR([Unable to find a usable implementation of boost::signals2 (not even our internal copy)]))
NL_CHECK_BOOST_CHRONO([],AC_MSG_ERROR([Unable to find a usable implementation of boost::chrono (not even our internal copy)]))
NL_CHECK_READLINE
NL_CHECK_PTS
NL_CHECK_UDEV
AC_DEFINE_UNQUOTED([__STDC_LIMIT_MACROS], [1], [Needed by C++])
AC_DEFINE_UNQUOTED([__STDC_CONSTANT_MACROS], [1], [Needed by C++])
AC_DEFINE_UNQUOTED([ASSERT_MACROS_USE_SYSLOG], 1, [Define to 1 to have assertmacros.h use syslog])
AC_DEFINE_UNQUOTED([ASSERT_MACROS_SQUELCH], 0, [Define to 0 to explicitly prevent squelching assert printouts])
NL_CHECK_CONNMAN
AM_CONDITIONAL([BUILD_CONNMAN_PLUGIN],[test "x${with_connman}" != "xno"])
AM_CONDITIONAL([HOST_IS_LINUX],[(case "${host_os}" in *linux*) true ;; *) false ;; esac)])
building_ncp_plugins=""
m4_foreach_w(THIS_PLUGIN,AVAILABLE_NCP_PLUGINS,[
if test "x${enable_ncp_[]m4_translit(THIS_PLUGIN,[-],[_])}" = "xyes"
then building_ncp_plugins=`echo ${building_ncp_plugins} []THIS_PLUGIN`
fi
])
if test "x$building_ncp_plugins" != "x"
then
if test "x$default_ncp_plugin" = "xnone"
then default_ncp_plugin=$(IFS=" " ; set -- $building_ncp_plugins ; echo $1)
fi
fi
if test "x${enable_static_link_ncp_plugin-no}" != "xno"
then {
if test "x${enable_static_link_ncp_plugin-no}" != "xyes"
then {
# TODO: Extract statically linked plugin here, make sure it is enabled.
default_ncp_plugin=${enable_static_link_ncp_plugin}
enable_static_link_ncp_plugin=yes
} fi
if test "x${default_ncp_plugin-none}" = "xnone"
then AC_MSG_ERROR(["You must enable one NCP plugin when statically linking"])
fi
building_ncp_plugins=${default_ncp_plugin}
m4_foreach_w(THIS_PLUGIN,AVAILABLE_NCP_PLUGINS,[
if test "[]THIS_PLUGIN" != "${default_ncp_plugin}"
then enable_ncp_[]m4_translit(THIS_PLUGIN,[-],[_])=no
fi
])
AC_DEFINE_UNQUOTED([WPANTUND_PLUGIN_STATICLY_LINKED], [1], [Set to 1 if we are statically linking the plugin/])
}
else {
NL_CHECK_LIBDL
NL_EXPORT_DYNAMIC
}
fi
AC_DEFINE_UNQUOTED([WPANTUND_DEFAULT_NCP_PLUGIN], ["${default_ncp_plugin}"], [Set to the name of the default NCP plugin])
AM_CONDITIONAL(STATIC_LINK_NCP_PLUGIN,[test "x${enable_static_link_ncp_plugin}" = "xyes"])
building_ncp_plugins=""
m4_foreach_w(THIS_PLUGIN,AVAILABLE_NCP_PLUGINS,[
if test "x${enable_ncp_[]m4_translit(THIS_PLUGIN,[-],[_])}" = "xyes"
then building_ncp_plugins=`echo ${building_ncp_plugins} []THIS_PLUGIN`
fi
m4_ifdef([m4_do(WPANTUND_PLUGIN_NCP_[]m4_toupper(m4_translit(THIS_PLUGIN,[-],[_]))],
[WPANTUND_PLUGIN_NCP_[]m4_toupper(m4_translit(THIS_PLUGIN,[-],[_])]
)
AM_CONDITIONAL(BUILD_PLUGIN_NCP_[]m4_toupper(m4_translit(THIS_PLUGIN,[-],[_])),[test "x${enable_ncp_[]m4_translit(THIS_PLUGIN,[-],[_])}" = "xyes"])
])
m4_foreach_w(THIS_PLUGIN,RESTRICTED_USE_NCP_PLUGINS,[
if test "x${enable_ncp_[]m4_translit(THIS_PLUGIN,[-],[_])}" = "xyes"
then restricted_use_ncp_plugins=`echo ${restricted_use_ncp_plugins} []THIS_PLUGIN`
fi
])
AC_SUBST(default_ncp_plugin)
m4_ifdef([_AX_CODE_COVERAGE_RULES],
[AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [true])],
[AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [false])])
AX_ADD_AM_MACRO_STATIC([])
AC_OUTPUT
echo ""
echo "= Summary ====================================================================="
echo ""
echo "ConnMan Plugin ................. ${with_connman-no}"
echo "Using libreadline .............. ${with_readline-???}"
echo "Boost .......................... ${with_boost-???}"
echo "NCP plugins to build ........... ${building_ncp_plugins-none}"
echo "Default NCP Plugin ............. ${default_ncp_plugin}"
echo "Static link NCP plugin ......... ${enable_static_link_ncp_plugin-no}"
echo "Fuzzing Targets ................ ${enable_fuzz_targets-no}"
echo "Using udev.......................${with_udev-no}"
echo ""
if test "x${with_readline}" != "xyes"
then {
echo "warning: libreadline was disabled or not found, interactive"
echo " wpanctl command line interface will not be enabled!"
echo ""
}
fi
if test "x$restricted_use_ncp_plugins" != "x"
then {
echo "ATTENTION: Some of the plugins you are building have proprietary licenses which"
echo " are more restrictive than the Apache 2.0 license that covers wpantund"
echo " in general. If you are reading this message, it means you have manually"
echo " enabled at least one plug-in that has a proprietary license. Please"
echo " make sure that you understand the usage restrictions before using"
echo " wpantund with these plugins: "
echo ""
echo " $restricted_use_ncp_plugins"
echo ""
}
fi
if test "x$building_ncp_plugins" = "x"
then {
echo " *** WARNING: The current configuration is NOT BUILDING ANY PLUGINS! wpantund won't"
echo " be very useful in this state. Note that plugins with proprietary"
echo " licenses are no longer built by default: you must either enable them"
echo ' individually (using `--enable-ncp-*` configuration options) or by using'
echo ' the `--enable-all-restricted-plugins` configuration option.'
echo " In any case, you can still make and install wpantund without plugins"
echo " if you really know what you are doing."
echo ""
}
fi
if test "x$building_ncp_plugins" = "xdummy"
then {
echo " *** WARNING: The current configuration is only building the dummy plugin! wpantund"
echo " won't be very useful in this state. Note that plugins with proprietary"
echo " licenses are no longer built by default: you must either enable them"
echo ' individually (using `--enable-ncp-*` configuration options) or by using'
echo ' the `--enable-all-restricted-plugins` configuration option.'
echo ""
}
fi