From aa0a5545d0b9f2e2277a31be37b0338818766fea Mon Sep 17 00:00:00 2001 From: nirenjan Date: Wed, 25 Aug 2021 12:07:40 -0700 Subject: [PATCH] Remove the use of config.h Prior to this change, pinelog relied on an autoconf generated config.h which checked if the compiler supports __attribute__ with constructor, destructor and format. However, most modern compilers already have support for this, and we can use the __has_attribute special operator instead to check for this at compile time. By eliminating the need to create a config.h file, it simplifies integration into other projects that may not have one. --- README.md | 8 -------- configure.ac | 6 ------ pinelog.c | 17 +++++++++++------ pinelog.h | 8 ++++---- 4 files changed, 15 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index c8423c2..1f7e26f 100644 --- a/README.md +++ b/README.md @@ -125,11 +125,3 @@ definitions. Pinelog is intended to be integrated into your application source tree, either by means of including the sources directly, or by including the repository as a Git submodule or subtree. - -The default build of Pinelog uses an autotools generated `config.h` file, which -includes checks for the following GCC attributes. If you don't care about these, -then either create a dummy config.h which includes the macros -`HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR`, `HAVE_FUNC_ATTRIBUTE_DESTRUCTOR` and -`HAVE_FUNC_ATTRIBUTE_FORMAT`, or use the `AX_GCC_FUNC_ATTRIBUTE` macro to check -for the `constructor`, `destructor` and `format` attributes in your -application's `configure.ac` file. diff --git a/configure.ac b/configure.ac index b9d83a7..da779cf 100644 --- a/configure.ac +++ b/configure.ac @@ -16,14 +16,8 @@ LT_INIT PKG_PROG_PKG_CONFIG PKG_INSTALLDIR AX_COMPILER_FLAGS -AX_GCC_FUNC_ATTRIBUTE([constructor]) -AX_GCC_FUNC_ATTRIBUTE([destructor]) -AX_GCC_FUNC_ATTRIBUTE([format]) AC_SUBST([PINELOG_CFLAGS]) -# Configuration headers -AC_CONFIG_HEADERS([config.h]) - AC_CONFIG_FILES([Makefile]) AC_OUTPUT diff --git a/pinelog.c b/pinelog.c index ed94543..c5b2e22 100644 --- a/pinelog.c +++ b/pinelog.c @@ -6,7 +6,6 @@ * SPDX-License-Identifier: MIT */ -#include "config.h" #include #include #include @@ -78,8 +77,10 @@ static FILE *output_stream = NULL; static int log_level = PINELOG_DEFAULT_LEVEL; /* Initialize defaults */ -#if HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR -__attribute__((constructor)) +#if defined __has_attribute +# if __has_attribute(constructor) + __attribute__((constructor)) +# endif #endif void pinelog_set_defaults(void) { @@ -87,8 +88,10 @@ void pinelog_set_defaults(void) log_level = PINELOG_DEFAULT_LEVEL; } -#if HAVE_FUNC_ATTRIBUTE_DESTRUCTOR -__attribute__((destructor)) +#if defined __has_attribute +# if __has_attribute(destructor) + __attribute__((destructor)) +# endif #endif void pinelog_close_output_stream(void) { @@ -167,7 +170,8 @@ void pinelog_log_message(int level, const char *file, int line, const char *fmt, level = PINELOG_LVL_TRACE; } - #if !HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR + #if defined __has_attribute + #if !__has_attribute(constructor) /* * Validate and set output stream. Only necessary if the compiler doesn't * support the constructor attribute @@ -176,6 +180,7 @@ void pinelog_log_message(int level, const char *file, int line, const char *fmt, output_stream = PINELOG_DEFAULT_STREAM; } #endif + #endif #if PINELOG_SHOW_DATE do { diff --git a/pinelog.h b/pinelog.h index b061922..0cf94a8 100644 --- a/pinelog.h +++ b/pinelog.h @@ -18,7 +18,6 @@ #ifndef LOGGING_H #define LOGGING_H -#include "config.h" #include #ifndef PINELOG_TEST #include @@ -123,10 +122,11 @@ int pinelog_get_level(void); * * @returns None */ -#if HAVE_FUNC_ATTRIBUTE_FORMAT -__attribute__((format(printf, 4, 5))) +#if defined __has_attribute +# if __has_attribute(format) + __attribute__((format(printf, 4, 5))) +# endif #endif - void pinelog_log_message(int level, const char *file, int line, const char *fmt, ...); // Test harness will redefine pinelog_exit