liblog4c-localtime: fix build issue on uClibc with --enable-debug

When --enable-debug is used, liblog4c-localtime wants to use
<mcheck.h> if __GLIBC__ is defined. Unfortunately, uClibc defines
__GLIBC__ but does not provides mcheck.h. Therefore, this commit
introduces a patch (0003) that checks if mcheck.h is available or not.

However, this patch requires autoreconfiguring the package, which is
currently broken. Therefore, the two other patches (0004 and 0005) are
meant to fix autoreconfiguration of the package.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Thomas Petazzoni 2014-10-26 12:17:29 +01:00
parent 84a9c4b72f
commit f97702e8f4
4 changed files with 155 additions and 0 deletions

View File

@ -0,0 +1,67 @@
From acbaee34bcb1881db97969dd2c411446f32ca4cc Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Sat, 25 Oct 2014 19:45:33 +0200
Subject: [PATCH 3/5] Fix debug mode build with uClibc
When --enable-debug is passed, liblog4c-localtime wants to use
<mcheck.h>. It takes the precaution of testing if __GLIBC__ is
defined. But unfortunately, the uClibc C library pretends to be
compatible with glibc by defining __GLIBC__, but it doesn't provide
mcheck.h.
To better support this situation, we add an AC_CHECK_HEADERS() check
on mcheck.h, and then use HAVE_MCHECK_H were appropriate.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
configure.in | 2 +-
src/log4c/init.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/configure.in b/configure.in
index 612ccbe..dbf11e9 100644
--- a/configure.in
+++ b/configure.in
@@ -115,7 +115,7 @@ AM_CONDITIONAL(TEST, test x$enable_test = xyes)
AC_HEADER_STDC
AC_CHECK_HEADERS([fcntl.h inttypes.h langinfo.h limits.h stddef.h stdint.h \
stdlib.h string.h sys/time.h syslog.h unistd.h stdarg.h varargs.h getopt.h \
-pthread.h])
+pthread.h mcheck.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
diff --git a/src/log4c/init.c b/src/log4c/init.c
index 7dd9eb4..4b88210 100644
--- a/src/log4c/init.c
+++ b/src/log4c/init.c
@@ -35,7 +35,7 @@ static const char version[] = "$Id$";
#include <layout_type_basic_r.h>
#include <layout_type_dated_r.h>
-#if defined(__LOG4C_DEBUG__) && defined(__GLIBC__)
+#if defined(__LOG4C_DEBUG__) && defined(HAVE_MCHECK_H)
#include <mcheck.h>
#endif
@@ -100,7 +100,7 @@ extern int log4c_init(void)
sd_debug("log4c_init[");
/* activate GLIBC allocation debugging */
-#if defined(__LOG4C_DEBUG__) && defined(__GLIBC__)
+#if defined(__LOG4C_DEBUG__) && defined(HAVE_MCHECK_H)
mtrace();
#endif
@@ -280,7 +280,7 @@ extern int log4c_fini(void)
log4c_dump_all_instances(stderr);
}
#endif
-#if defined(__LOG4C_DEBUG__) && defined(__GLIBC__)
+#if defined(__LOG4C_DEBUG__) && defined(HAVE_MCHECK_H)
muntrace();
#endif
--
2.0.0

View File

@ -0,0 +1,28 @@
From a2553c203d8b8257dea1d2e2139b220935587144 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Sat, 25 Oct 2014 20:03:25 +0200
Subject: [PATCH 4/5] Add AC_CONFIG_MACRO_DIR to configure.in
Without AC_CONFIG_MACRO_DIR, when autoreconfiguring the package, it
cannot find AM_PATH_EXPAT which is defined in config/expat.m4.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
configure.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/configure.in b/configure.in
index dbf11e9..769b204 100644
--- a/configure.in
+++ b/configure.in
@@ -5,6 +5,7 @@ AC_PREREQ(2.57)
AC_INIT
AC_CONFIG_SRCDIR([configure.in])
AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_MACRO_DIR([config])
AM_CONFIG_HEADER(src/config.h)
LOG4C_MAJOR_VERSION=1
--
2.0.0

View File

@ -0,0 +1,59 @@
From bdccec4c374a93480a7fd303d15e20810a5d5b7e Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Sat, 25 Oct 2014 21:22:40 +0200
Subject: [PATCH 5/5] Fix C++ support
Autoreconf fails with the following message:
tests/log4c/Makefile.am: error: C++ source seen but 'CXX' is undefined
So this commit adds the AC_PROG_CXX macro to configure.in, and ensures
that the C++ test is only built if a C++ compiler is available.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
configure.in | 3 +++
tests/log4c/Makefile.am | 6 +++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/configure.in b/configure.in
index 769b204..ce75800 100644
--- a/configure.in
+++ b/configure.in
@@ -38,6 +38,7 @@ AC_DEFINE(_GNU_SOURCE,1,"POSIXandGNU extensions")
#.
AC_PROG_YACC
AC_PROG_CC
+AC_PROG_CXX
AC_PROG_CPP
AM_PROG_LEX
AC_PROG_AWK
@@ -47,6 +48,8 @@ AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_PROG_LIBTOOL
+AM_CONDITIONAL([USE_CXX], [test "$ac_cv_prog_CXX" != "no"])
+
# platform idioms
case "$host" in
*-hp-hpux*)
diff --git a/tests/log4c/Makefile.am b/tests/log4c/Makefile.am
index f647f27..b1b4ed6 100644
--- a/tests/log4c/Makefile.am
+++ b/tests/log4c/Makefile.am
@@ -3,7 +3,11 @@ INCLUDES = \
-DSRCDIR="\"$(srcdir)\""
noinst_PROGRAMS = test_category test_rc bench bench_fwrite \
- test_stream2 test_layout_r cpp_compile_test
+ test_stream2 test_layout_r
+
+if USE_CXX
+noinst_PROGRAMS += cpp_compile_test
+endif
if WITH_ROLLINGFILE
noinst_PROGRAMS += test_rollingfile_appender test_rollingfile_appender_mt
--
2.0.0

View File

@ -12,6 +12,7 @@ LIBLOG4C_LOCALTIME_DEPENDENCIES = expat
LIBLOG4C_LOCALTIME_CONFIG_SCRIPTS = log4c-config
LIBLOG4C_LOCALTIME_LICENSE = LGPLv2.1
LIBLOG4C_LOCALTIME_LICENSE_FILES = COPYING
LIBLOG4C_LOCALTIME_AUTORECONF = YES
define LIBLOG4C_LOCALTIME_FIX_CONFIGURE_PERMS
chmod +x $(@D)/configure