libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 279a9ad2ab9f504264f3e1a671fc427a18079205
parent 5c988da5164458e15eeae4f6bae930a500795dbf
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Mon, 12 Jun 2017 23:24:15 +0300

Added support for detection of 'assert()' and replacement if 'assert()' is not available

Diffstat:
Mconfigure.ac | 51+++++++++++++++++++++++++++++++++++++++++++++++++--
Msrc/microhttpd/Makefile.am | 2+-
Asrc/microhttpd/mhd_assert.h | 49+++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 99 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac @@ -1417,8 +1417,6 @@ AC_LINK_IFELSE( AM_CONDITIONAL([HAVE_FORK_WAITPID], [test "x$mhd_have_fork_waitpid" = "xyes"]) -MHD_LIB_LDFLAGS="$MHD_LIB_LDFLAGS -export-dynamic -no-undefined" - # gcov compilation AC_MSG_CHECKING(whether to compile with support for code coverage analysis) AC_ARG_ENABLE([coverage], @@ -1432,6 +1430,54 @@ AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"]) AX_COUNT_CPUS AC_SUBST([CPU_COUNT]) +AC_MSG_CHECKING([[whether to enable debug asserts]]) +AC_ARG_ENABLE([[asserts]], + AS_HELP_STRING([[--enable-asserts]], + [enable test build with debug asserts]), + [], [[enable_asserts='no']]) +AS_CASE([[$enable_asserts]], [[yes]], [[:]], [[no]], [[:]], [[enable_asserts='no']]) +AC_MSG_RESULT([[$enable_asserts]]) + +AS_VAR_IF([[enable_asserts]], [["yes"]], + [ + AC_DEFINE([[_DEBUG]], [[1]], [Define to use debug asserts.]) + [mhd_assert_test_prg="#include <assert.h> + int pos_val(void) {return 5;} + int neg_val(void) {return -5;} + int main(void) + { int pos_var = pos_val(), neg_var = neg_val(); + assert(neg_var > pos_var); /* Must trigger assert. */ + (void)pos_var; (void)neg_var; + return 0; } + "] + AC_CACHE_CHECK([[whether system assert() is available]], [mhd_cv_sys_assert_avail], + [ + AC_LINK_IFELSE([AC_LANG_SOURCE([[$mhd_assert_test_prg]])], + [[mhd_cv_sys_assert_avail='yes']], + [[mhd_cv_sys_assert_avail='no']]) + ] + ) + AS_VAR_IF([[mhd_cv_sys_assert_avail]], [["yes"]], + [ + AC_CACHE_CHECK([[whether system assert() is usable]], [mhd_cv_sys_assert_use], + [ + AC_RUN_IFELSE([AC_LANG_SOURCE([[$mhd_assert_test_prg]])], + [[mhd_cv_sys_assert_use='no']], + [[mhd_cv_sys_assert_use='yes']], + [[mhd_cv_sys_assert_use='assuming yes']]) + ] + ) + AS_VAR_IF([[mhd_cv_sys_assert_use]], [["no"]], [], + [AC_DEFINE([[HAVE_ASSERT]], [[1]], [Define if you have usable assert() and assert.h])]) + ] + ) + AS_UNSET([mhd_assert_test_prg]) + ], + [AC_DEFINE([[NDEBUG]], [[1]], [Define to disable usage of debug asserts.])] +) + +MHD_LIB_LDFLAGS="$MHD_LIB_LDFLAGS -export-dynamic -no-undefined" + AC_SUBST(MHD_LIB_CPPFLAGS) AC_SUBST(MHD_LIB_CFLAGS) AC_SUBST(MHD_LIB_LDFLAGS) @@ -1485,6 +1531,7 @@ AC_MSG_NOTICE([libmicrohttpd ${PACKAGE_VERSION} Configuration Summary: Target directory: ${prefix} Shutdown of listening socket trigger select: ${mhd_cv_host_shtdwn_trgr_select} + Use debug asserts: ${enable_asserts} Messages: ${enable_messages} Basic auth.: ${enable_bauth} Digest auth.: ${enable_dauth} diff --git a/src/microhttpd/Makefile.am b/src/microhttpd/Makefile.am @@ -63,7 +63,7 @@ libmicrohttpd_la_SOURCES = \ sysfdsetsize.c sysfdsetsize.h \ mhd_str.c mhd_str.h \ mhd_threads.c mhd_threads.h \ - mhd_locks.h \ + mhd_locks.h mhd_assert.h \ mhd_sockets.c mhd_sockets.h \ mhd_itc.c mhd_itc.h mhd_itc_types.h \ mhd_compat.c mhd_compat.h \ diff --git a/src/microhttpd/mhd_assert.h b/src/microhttpd/mhd_assert.h @@ -0,0 +1,49 @@ +/* + This file is part of libmicrohttpd + Copyright (C) 2017 Karlson2k (Evgeny Grin) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. + If not, see <http://www.gnu.org/licenses/>. +*/ + +/** + * @file microhttpd/mhd_assert.h + * @brief macros for mhd_assert() + * @author Karlson2k (Evgeny Grin) + */ + +#ifndef MHD_ASSERT_H +#define MHD_ASSERT_H 1 + +#include "mhd_options.h" +#ifdef NDEBUG +# define mhd_assert(ignore) ((void)0) +#else /* _DEBUG */ +# ifdef HAVE_ASSERT +# include <assert.h> +# define mhd_assert(CHK) assert(CHK) +# else /* ! HAVE_ASSERT */ +# include <stdio.h> +# include <stdlib.h> +# define mhd_assert(CHK) \ + do { \ + if (!(CHK)) { \ + fprintf(stderr, "%s:%u Assertion failed: %s\nProgram aborted.\n", \ + __FILE__, (unsigned)__LINE__, #CHK); \ + fflush(stderr); abort(); } \ + } while(0) +# endif /* ! HAVE_ASSERT */ +#endif /* _DEBUG */ + +#endif /* ! MHD_ASSERT_H */