mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-05-26 03:47:53 +08:00
424 lines
17 KiB
Plaintext
424 lines
17 KiB
Plaintext
# configure.ac for the libcoap package
|
|
#
|
|
# Copyright (C) 2010-2015 Olaf Bergmann <bergmann@tzi.org>
|
|
# (C) 2015-2016 Carsten Schoenert <c.schoenert@t-online.de>
|
|
#
|
|
# Please run 'autogen.sh' to let autoconf produce a configure script.
|
|
|
|
# Define the libcoap software version here. Note! The libtool versions are
|
|
# defined later.
|
|
m4_define([libcoap_major_version], [4])
|
|
m4_define([libcoap_minor_version], [1])
|
|
m4_define([libcoap_micro_version], [2])
|
|
|
|
m4_define([libcoap_version],[libcoap_major_version.libcoap_minor_version.libcoap_micro_version])
|
|
|
|
AC_INIT([libcoap], [libcoap_version], [libcoap-developers@lists.sourceforge.net], [libcoap], [https://libcoap.net/])
|
|
AC_PREREQ([2.64])
|
|
AM_INIT_AUTOMAKE([1.10 -Wall no-define no-dist-gzip dist-bzip2])
|
|
PKG_PROG_PKG_CONFIG([0.20])
|
|
|
|
# Generate one configuration header file for building the library itself with
|
|
# an autogenerated template. We need later a second one (include/libcoap.h)
|
|
# that will be installed alongside the library.
|
|
AC_CONFIG_HEADERS([coap_config.h])
|
|
|
|
AC_PROG_CC
|
|
AM_PROG_CC_C_O
|
|
AC_PROG_SED
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
m4_pattern_allow([AM_PROG_AR])
|
|
AM_PROG_AR
|
|
|
|
AC_C_BIGENDIAN
|
|
|
|
# enable the automatically build of shared and static libraries, the unit
|
|
# tests needs the static library
|
|
LT_INIT([shared static])
|
|
|
|
# Setting the libtool versioning
|
|
###################################################################################
|
|
# #
|
|
# To set the version of the library, libtool provides the -version-info #
|
|
# parameter, which accepts three numbers, separated by colons, that are called #
|
|
# respectively, current, revision and age. Both their name and their behaviour, #
|
|
# nowadays, have to be considered fully arbitrary, as the explanation provided #
|
|
# in the official documentation is confusing to say the least, and can be, in #
|
|
# some cases, considered completely wrong. #
|
|
# https://autotools.io/libtool/version.html #
|
|
# #
|
|
###################################################################################
|
|
#
|
|
# How to work with the libtool versioning?
|
|
#
|
|
# Follow the followings steps from top to bottom. This means allways start at point 1
|
|
# if you plan to make a release and change the values.
|
|
# Every new library starts with a version 'current' (short 'c') = 0
|
|
# 'revision' (short 'r') = 0
|
|
# 'age' (short 'a') = 0
|
|
#
|
|
# Update the libtool versioning only immediately before a public release of libcoap.
|
|
#
|
|
# 1. If the library source code has changed at all since the last update, then
|
|
# increment revision (c:r:a becomes c:r+1:a).
|
|
# --> Increase the 'LT_LIBCOAP_REVISION' value with *everey* new software release.
|
|
#
|
|
# 2. If any interfaces [exported functions or data] have been added, removed, or
|
|
# changed since the last update, increment current, and set revision to 0
|
|
# (c:r:a becomes c+1:r=0:a).
|
|
# --> Increase the 'LT_LIBCOAP_CURRENT' value whenever as an interface has been added,
|
|
# removed or changed. This implies also a API change! You mostly have to change
|
|
# the 'libcoap_major_version' then too!
|
|
# --> Set 'LT_LIBCOAP_REVISION' to 0.
|
|
#
|
|
# 3. If any interfaces have been added since the last public release, then increment
|
|
# age (c:r:a becomes c:r:a+1). Adding new interfaces will make the library allways
|
|
# backwards compatable.
|
|
# --> Increase the 'LT_LIBCOAP_AGE' value only if the changes made to the ABI are
|
|
# backward compatible.
|
|
#
|
|
# 4. If any interfaces whitin the library have been removed since the last public
|
|
# release, then set age to 0.
|
|
# --> Set 'LT_LIBCOAP_AGE' to 0.
|
|
|
|
LT_LIBCOAP_CURRENT=0
|
|
LT_LIBCOAP_REVISION=0
|
|
LT_LIBCOAP_AGE=0
|
|
LIBCOAP_SO_VERSION=$LT_LIBCOAP_CURRENT.$LT_LIBCOAP_REVISION.$LT_LIBCOAP_AGE
|
|
|
|
# Announce the libtool version
|
|
AC_SUBST(LT_LIBCOAP_CURRENT)
|
|
AC_SUBST(LT_LIBCOAP_REVISION)
|
|
AC_SUBST(LT_LIBCOAP_AGE)
|
|
AC_SUBST(LIBCOAP_SO_VERSION)
|
|
|
|
# Defining the API Version
|
|
LIBCOAP_API_VERSION=1
|
|
AC_SUBST(LIBCOAP_API_VERSION)
|
|
|
|
# Adding some default warning options for code QS
|
|
# see https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
# and http://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
|
|
WARNING_CFLAGS="\
|
|
-pedantic \
|
|
-Wall \
|
|
-Wextra \
|
|
-Wformat-security \
|
|
-Winline \
|
|
-Wmissing-declarations \
|
|
-Wmissing-prototypes \
|
|
-Wnested-externs \
|
|
-Wpointer-arith \
|
|
-Wshadow \
|
|
-Wstrict-prototypes \
|
|
-Wswitch-default \
|
|
-Wswitch-enum \
|
|
-Wunused \
|
|
"
|
|
|
|
# check whether or not the compiler supports -Wlogical-op (clang does not...)
|
|
AX_CHECK_COMPILE_FLAG([-Wlogical-op], [WARNING_CFLAGS="$WARNING_CFLAGS -Wlogical-op"],,[-Werror])
|
|
AX_CHECK_COMPILE_FLAG([-fdiagnostics-color], [CFLAGS="$CFLAGS -fdiagnostics-color"],,[-Werror])
|
|
AX_CHECK_COMPILE_FLAG([-Wunused-result], [WARNING_CFLAGS="$WARNING_CFLAGS -Wunused-result"])
|
|
|
|
AC_SUBST([WARNING_CFLAGS])
|
|
|
|
AX_CHECK_LINK_FLAG([-Wl,--version-script=./libcoap-${LIBCOAP_API_VERSION}.map],
|
|
[libcoap_SYMBOLS="-Wl,--version-script=\$(srcdir)/libcoap-\$(LIBCOAP_API_VERSION).map"],
|
|
[libcoap_SYMBOLS="-export-symbols \$(srcdir)/libcoap-\$(LIBCOAP_API_VERSION).sym"])
|
|
|
|
AC_SUBST(libcoap_SYMBOLS)
|
|
|
|
# configure options
|
|
# __documentation__
|
|
AC_ARG_ENABLE([documentation],
|
|
[AC_HELP_STRING([--enable-documentation],
|
|
[Enable building the documentation [default=yes]])],
|
|
[build_documentation="$enableval"],
|
|
[build_documentation="yes"])
|
|
|
|
if test "x$build_documentation" = "xyes"; then
|
|
# Check for doxygen
|
|
AC_PATH_PROGS([DOXYGEN], [doxygen])
|
|
if test -z "$DOXYGEN"; then
|
|
if test "x$build_documentation" = "xyes"; then
|
|
AC_MSG_WARN([==> Doxygen not found - continuing without Doxygen support])
|
|
AC_MSG_WARN([==> The libcoap html documentation will not be build!])
|
|
doxygen_version="not found"
|
|
fi
|
|
else
|
|
AC_MSG_CHECKING([for compatible doxygen version (>= 1.7.0)])
|
|
doxygen_version=`$DOXYGEN --version`
|
|
AS_VERSION_COMPARE([$doxygen_version], [1.7.0],
|
|
[AC_MSG_RESULT([no])
|
|
DOXYGEN=""],
|
|
[AC_MSG_RESULT([yes $doxygen_version])],
|
|
[AC_MSG_RESULT([yes $doxygen_version])])
|
|
if test "x$DOXYGEN" = "x" -a "x$build_documentation" = "xyes"; then
|
|
AC_MSG_ERROR([==> Doxygen $doxygen_version too old. Doxygen 1.7+ required for documentation build.])
|
|
AC_MSG_ERROR([==> Install required doxygen version or disable the documentation using --disable-documentation])
|
|
else
|
|
# we found doxygen and the version is valid
|
|
DOC_DIR=doc
|
|
AC_SUBST(DOC_DIR)
|
|
# now checking dot (needed for graphics)
|
|
AC_PATH_PROG([DOT], [dot])
|
|
if test "x$DOT" = "x"; then
|
|
AC_MSG_WARN([==> dot not found - continuing without DOT support])
|
|
AC_MSG_WARN([==> The libcoap html documentation will be build without DOT graphics!])
|
|
HAVE_DOT="NO"
|
|
USE_CALL_GRAPH="NO"
|
|
else
|
|
AC_MSG_CHECKING([for compatible dot version (>= 2.26.0)])
|
|
case $host in
|
|
*-freebsd1*)
|
|
# csh and tcsh have a different output redirection than more recent shells
|
|
# cmd >& file # Redirect both stdout and stderr to file.
|
|
# cmd >>& file # Append both stdout and stderr to file.
|
|
# cmd1 | cmd2 # pipe stdout to cmd2
|
|
# cmd1 |& cmd2 # pipe stdout and stderr to cmd2
|
|
# Using a explicit call with the default always available C-shell on FreeBSD,
|
|
# the user may have installed another shell from a port which we don't know here
|
|
dot_version=`export DOT=$DOT && csh -c '$DOT -V |& cut -f5 -d" "'`
|
|
;;
|
|
|
|
*)
|
|
dot_version=`$DOT -V 2>&1 | cut -f5 -d" "`
|
|
;;
|
|
|
|
esac
|
|
AS_VERSION_COMPARE([$dot_version], [2.26.0],
|
|
[AC_MSG_RESULT([no])
|
|
DOT=""],
|
|
[AC_MSG_RESULT([yes $dot_version])],
|
|
[AC_MSG_RESULT([yes $dot_version])])
|
|
if test "x$DOT" = "x" -a "x$build_documentation" = "xyes"; then
|
|
AC_MSG_WARN([==> Graphviz dot $dot_version too old. Graphviz 2.26+ required for documentation build.])
|
|
AC_MSG_ERROR([==> Install required graphviz version or disable the documentation using --disable-documentation])
|
|
fi
|
|
# we found dot and the version is valid
|
|
HAVE_DOT="YES"
|
|
# let doxygen create caller graphics
|
|
# see http://www.stack.nl/~dimitri/doxygen/manual/config.html#cfg_call_graph
|
|
USE_CALL_GRAPH="YES"
|
|
# exporting the tests to doc/Doxygen(.in)
|
|
AC_SUBST(HAVE_DOT)
|
|
AC_SUBST(USE_CALL_GRAPH)
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
AM_CONDITIONAL(BUILD_DOCUMENTATION, [test "x$build_documentation" = "xyes"])
|
|
|
|
AM_CONDITIONAL([HAVE_DOXYGEN],
|
|
[test -n "$DOXYGEN"])AM_COND_IF([HAVE_DOXYGEN],
|
|
[AC_CONFIG_FILES([doc/Doxyfile])])
|
|
|
|
# configure options
|
|
# __tests__
|
|
AC_ARG_ENABLE([tests],
|
|
[AC_HELP_STRING([--enable-tests],
|
|
[Enable building the binary testsuite [default=no]])],
|
|
[build_tests="$enableval"],
|
|
[build_tests="no"])
|
|
|
|
if test "x$build_tests" = "xyes"; then
|
|
PKG_CHECK_MODULES([CUNIT],
|
|
[cunit],
|
|
[have_cunit=yes
|
|
AC_DEFINE(HAVE_LIBCUNIT, [1], [Define if the system has libcunit])],
|
|
[have_cunit=no
|
|
AC_MSG_WARN([==> You want to build the testing binary but the pkg-config file cunit.pc could not be found or installed CUnit version is too old!])
|
|
AC_MSG_ERROR([==> Install the package(s) containing the development files for CUnit or disable the testing binary using --disable-tests.])
|
|
])
|
|
fi
|
|
AM_CONDITIONAL(HAVE_CUNIT, [test "x$CUNIT_LIBS" != "x"])
|
|
|
|
# configure options
|
|
# __examples__
|
|
AC_ARG_ENABLE([examples],
|
|
[AC_HELP_STRING([--enable-examples],
|
|
[Enable building the example binaries [default=yes]])],
|
|
[build_examples="$enableval"],
|
|
[build_examples="yes"])
|
|
|
|
if test "x$build_examples" = "xyes" -a "x$build_documentation" = "xyes"; then
|
|
AC_ARG_VAR([A2X], [a2x command])
|
|
AC_PATH_PROG([A2X], [a2x])
|
|
if test "x$A2X" = "x"; then
|
|
AC_MSG_WARN([==> You want to build the examples binaries, that is also including the respective manpages but a2x was not found!])
|
|
AC_MSG_ERROR([==> Install the package containg a2x (mostly asciidoc) or disable the build of the examples using --disable-examples.])
|
|
fi
|
|
build_examples="yes"
|
|
fi
|
|
AM_CONDITIONAL(BUILD_EXAMPLES, [test "x$build_examples" = "xyes"])
|
|
|
|
# end configure options
|
|
#######################
|
|
|
|
##########################################
|
|
# from configure options independed checks
|
|
|
|
# Check for (ex)ctags binary
|
|
# The needed ctags binary name differs on FreeBSD and Linux, on Linux
|
|
# systems we search for 'ctags', on FreeBSD for 'exctags'
|
|
case $host in
|
|
# FreeBSD has exctags from the ctags port
|
|
*-freebsd1*)
|
|
AC_ARG_VAR([CTAGS_PROG],[the 'exctags' program to use for make target 'update-map-file'])
|
|
AC_PATH_PROG([CTAGS_PROG],[exctags],[HAVE_CTAGS=no])
|
|
;;
|
|
|
|
*)
|
|
# Linux distributions have exuberant-ctags
|
|
AC_ARG_VAR([CTAGS_PROG],[the 'ctags' program to use for make target 'update-map-file'])
|
|
AC_PATH_PROG([CTAGS_PROG],[ctags],[HAVE_CTAGS=no])
|
|
;;
|
|
|
|
esac
|
|
|
|
if test "x$HAVE_CTAGS" = "xno"; then
|
|
AC_MSG_NOTICE([==> Note: '(ex)ctags' command not found!])
|
|
AC_MSG_WARN([==> Without ctags you will be unable to run the target 'update-map-file'!])
|
|
AC_MSG_WARN([==> This is no problem if you just want to build the library libcoap.])
|
|
else
|
|
if test "`$CTAGS_PROG --help | grep '\--<LANG>-kinds'`" = ""; then
|
|
AC_MSG_NOTICE([==> Note: Your ctags binary does not support '--c-kinds'!])
|
|
AC_MSG_NOTICE([==> Most likely, you are using the GNU Emacs ctag and not exuberant ctag.])
|
|
AC_MSG_WARN([==> This option is required for the target 'update-map-file'.])
|
|
AC_MSG_WARN([==> which is not a problem if you just want to build the library libcoap.])
|
|
fi
|
|
fi
|
|
|
|
# Checks for header files.
|
|
AC_CHECK_HEADERS([assert.h arpa/inet.h limits.h netdb.h netinet/in.h \
|
|
stdlib.h string.h strings.h sys/socket.h sys/time.h \
|
|
time.h unistd.h sys/unistd.h syslog.h])
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
AC_TYPE_SIZE_T
|
|
AC_TYPE_SSIZE_T
|
|
|
|
# Checks for library functions.
|
|
AC_CHECK_FUNCS([memset select socket strcasecmp strrchr getaddrinfo \
|
|
strnlen malloc])
|
|
|
|
# Check if -lsocket -lnsl is required (specifically Solaris)
|
|
AC_SEARCH_LIBS([socket], [socket])
|
|
AC_SEARCH_LIBS([inet_ntop], [nsl])
|
|
|
|
# Check if clock_gettime() requires librt, when available
|
|
AC_SEARCH_LIBS([clock_gettime], [rt])
|
|
|
|
AC_MSG_CHECKING([operating system])
|
|
|
|
# Set up here some extra platform depended defines and variables.
|
|
# The "ADDITIONAL_CFLAGS" is need as this stand-alone definition
|
|
# for the doxygen part.
|
|
case $host in
|
|
*-linux* | *-uclinux*)
|
|
AC_MSG_RESULT([Linux])
|
|
ADDITIONAL_CFLAGS="-D_GNU_SOURCE -DWITH_POSIX"
|
|
|
|
# Not yet needed but if some code definitions have to depend on the platform.
|
|
#AC_DEFINE(OS_LINUX, 1, [Linux backend])
|
|
#AC_SUBST(OS_LINUX)
|
|
;;
|
|
|
|
*-solaris*)
|
|
AC_MSG_RESULT([Solaris])
|
|
# set _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED to enable XPG4v2 (POSIX 2004)
|
|
# set __EXTENSION__ to shut up feature test macros that restrict -std=c99
|
|
# to only C99 (and nothing newer)
|
|
ADDITIONAL_CFLAGS="-D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=600 -D__EXTENSIONS__=1 -DWITH_POSIX"
|
|
;;
|
|
|
|
*-darwin*)
|
|
AC_MSG_RESULT([Darwin])
|
|
ADDITIONAL_CFLAGS="-D_GNU_SOURCE -DWITH_POSIX"
|
|
|
|
AC_DEFINE(__APPLE_USE_RFC_3542, 1, [Define this to 1 for ancillary data on MacOS])
|
|
|
|
# Not yet needed but if some code definitions have to depend on the platform.
|
|
#AC_DEFINE(OS_MACOS, 1, [MacOS backend])
|
|
#AC_SUBST(OS_MACOS)
|
|
;;
|
|
|
|
*-freebsd1*)
|
|
AC_MSG_RESULT([FreeBSD-1x])
|
|
ADDITIONAL_CFLAGS="-D_GNU_SOURCE -DWITH_POSIX"
|
|
;;
|
|
|
|
*kfreebsd*)
|
|
AC_MSG_RESULT([kFreeBSD])
|
|
ADDITIONAL_CFLAGS="-D_GNU_SOURCE -DWITH_POSIX"
|
|
;;
|
|
|
|
*)
|
|
AC_MSG_WARN([==> Currently unsupported operating system '${host}' !])
|
|
AC_MSG_ERROR([==> If you can provide patches to support your operating system please write to 'libcoap-developers@lists.sourceforge.net'.])
|
|
esac
|
|
|
|
# Exporting the PREDEFINED_CFLAGS definition
|
|
PREDEFINED_CFLAGS=`echo $ADDITIONAL_CFLAGS | $SED -e 's/-D//g'`
|
|
AC_SUBST(PREDEFINED_CFLAGS)
|
|
|
|
# And finaly combining the CFLAGS together ...
|
|
CFLAGS="$CFLAGS $ADDITIONAL_CFLAGS"
|
|
|
|
# Override the various template files, currently just makefiles and the
|
|
# pkgconfig *.pc file.
|
|
# Later if the API version is changing dont forget to change the
|
|
# libcoap-$LIBCOAP_API_VERSION.pc.in file too!! You will have to change
|
|
# the 'Cflags' variable to something like
|
|
# Cflags: -I${includedir}/coap-@LIBCOAP_API_VERSION@
|
|
#
|
|
AC_CONFIG_FILES([
|
|
Makefile
|
|
doc/Makefile
|
|
examples/Makefile
|
|
examples/coap-client.txt
|
|
examples/coap-server.txt
|
|
examples/coap-rd.txt
|
|
include/coap/coap.h
|
|
tests/Makefile
|
|
libcoap-$LIBCOAP_API_VERSION.pc:libcoap-$LIBCOAP_API_VERSION.pc.in
|
|
])
|
|
|
|
AC_OUTPUT
|
|
|
|
AC_MSG_RESULT([
|
|
libcoap configuration summary:
|
|
libcoap package version : "$PACKAGE_VERSION"
|
|
libcoap library version : "$LIBCOAP_SO_VERSION"
|
|
libcoap API version : "$LIBCOAP_API_VERSION"
|
|
host system : "$host"]);
|
|
if test "x$build_documentation" = "xyes" -a "x$DOXYGEN" != "x"; then
|
|
AC_MSG_RESULT([ build documentation : "yes"])
|
|
AC_MSG_RESULT([ --> Doxygen around : "yes" ($DOXYGEN $doxygen_version)])
|
|
if test "x$DOT" = "x"; then
|
|
AC_MSG_RESULT([ --> dot around : "no" (DOT not found!)])
|
|
else
|
|
AC_MSG_RESULT([ --> dot around : "yes" ($DOT $dot_version)])
|
|
fi
|
|
else
|
|
if test "x$build_documentation" = "xno"; then
|
|
AC_MSG_RESULT([ build documentation : "no"])
|
|
fi
|
|
fi
|
|
if test "x$build_tests" = "xyes"; then
|
|
AC_MSG_RESULT([ build unit test binary : "yes"])
|
|
else
|
|
AC_MSG_RESULT([ build unit test binary : "no"])
|
|
fi
|
|
if test "x$build_examples" = "xyes"; then
|
|
AC_MSG_RESULT([ build examples : "yes"])
|
|
if test "x$A2X" != "x"; then
|
|
AC_MSG_RESULT([ --> use a2x : "yes" ($A2X)])
|
|
else
|
|
AC_MSG_RESULT([ --> use a2x : "no"])
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([ build examples : "no"])
|
|
fi
|