From 4c9ef85223ec6e638976eb279b82b9e9ea676b35 Mon Sep 17 00:00:00 2001 From: nirenjan Date: Wed, 25 Aug 2021 14:22:04 -0700 Subject: [PATCH] Squashed 'lib/pinelog/' changes from 27a5eab..0256807 0256807 Use strrchr only if the compiler supports __builtin_strrchr 204aade Use __builtin_strrchr to get file base name aa0a554 Remove the use of config.h 8983bf8 Ignore test and benchmark programs git-subtree-dir: lib/pinelog git-subtree-split: 02568074170f0725196de4e52450db024cc39895 --- .gitignore | 4 ++++ README.md | 8 -------- configure.ac | 6 ------ pinelog.c | 17 +++++++++++------ pinelog.h | 30 ++++++++++++++++++++---------- test_pinelog.c | 15 ++++++++++++++- 6 files changed, 49 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 6166c2c..869124b 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,7 @@ test-driver # Build directory /build/ + +# Test and benchmark programs +test_* +bench_* 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..6f090df 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 @@ -134,34 +134,44 @@ void pinelog_log_message(int level, const char *file, int line, const char *fmt, #define pinelog_exit exit #endif +// Base filename +#if defined __has_builtin +# if __has_builtin(__builtin_strrchr) +# define PINELOG_FILE __builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__ +# endif +#endif +#ifndef PINELOG_FILE +# define PINELOG_FILE __FILE__ +#endif + #define PINELOG_FATAL(fmt, ...) do { \ if (PINELOG_LVL_FATAL <= pinelog_get_level()) { \ - pinelog_log_message(PINELOG_LVL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__); \ + pinelog_log_message(PINELOG_LVL_FATAL, PINELOG_FILE, __LINE__, fmt, ##__VA_ARGS__); \ } \ pinelog_exit(1); \ } while (0) #define PINELOG_ERROR(fmt, ...) do { \ if (PINELOG_LVL_ERROR <= pinelog_get_level()) { \ - pinelog_log_message(PINELOG_LVL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__); \ + pinelog_log_message(PINELOG_LVL_ERROR, PINELOG_FILE, __LINE__, fmt, ##__VA_ARGS__); \ } \ } while (0) #define PINELOG_WARN(fmt, ...) do { \ if (PINELOG_LVL_WARNING <= pinelog_get_level()) { \ - pinelog_log_message(PINELOG_LVL_WARNING, __FILE__, __LINE__, fmt, ##__VA_ARGS__); \ + pinelog_log_message(PINELOG_LVL_WARNING, PINELOG_FILE, __LINE__, fmt, ##__VA_ARGS__); \ } \ } while(0) #define PINELOG_INFO(fmt, ...) do { \ if (PINELOG_LVL_INFO <= pinelog_get_level()) { \ - pinelog_log_message(PINELOG_LVL_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__); \ + pinelog_log_message(PINELOG_LVL_INFO, PINELOG_FILE, __LINE__, fmt, ##__VA_ARGS__); \ } \ } while(0) #define PINELOG_DEBUG(fmt, ...) do { \ if (PINELOG_LVL_DEBUG <= pinelog_get_level()) { \ - pinelog_log_message(PINELOG_LVL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__); \ + pinelog_log_message(PINELOG_LVL_DEBUG, PINELOG_FILE, __LINE__, fmt, ##__VA_ARGS__); \ } \ } while(0) @@ -169,7 +179,7 @@ void pinelog_log_message(int level, const char *file, int line, const char *fmt, #ifndef PINELOG_DISABLE_TRACE #define PINELOG_TRACE(fmt, ...) do { \ if (PINELOG_LVL_TRACE <= pinelog_get_level()) { \ - pinelog_log_message(PINELOG_LVL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__); \ + pinelog_log_message(PINELOG_LVL_TRACE, PINELOG_FILE, __LINE__, fmt, ##__VA_ARGS__); \ } \ } while(0) #else diff --git a/test_pinelog.c b/test_pinelog.c index 0f59117..834cf24 100644 --- a/test_pinelog.c +++ b/test_pinelog.c @@ -98,9 +98,22 @@ static int test_setup(int level, int filter, const char *file, int line) } if (PINELOG_SHOW_BACKTRACE) { + char * basename = NULL; + #if defined __has_builtin + #if __has_builtin(__builtin_strrchr) + basename = strrchr(file, '/'); + #endif + #endif + + if (basename != NULL) { + basename++; + } else { + // Override the const + basename = (char *)file; + } expected_len += snprintf(&expected_output[expected_len], sizeof(expected_output) - expected_len, - "%s:%d ", file, line); + "%s:%d ", basename, line); } return 1;