Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package yder for openSUSE:Factory checked in 
at 2022-05-30 12:43:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yder (Old)
 and      /work/SRC/openSUSE:Factory/.yder.new.2254 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yder"

Mon May 30 12:43:58 2022 rev:14 rq:979710 version:1.4.17

Changes:
--------
--- /work/SRC/openSUSE:Factory/yder/yder.changes        2022-03-14 
19:37:47.990179148 +0100
+++ /work/SRC/openSUSE:Factory/.yder.new.2254/yder.changes      2022-05-30 
12:44:52.400464231 +0200
@@ -1,0 +2,16 @@
+Sun May 29 18:20:32 UTC 2022 - Martin Hauke <[email protected]>
+
+- Update to version 1.4.17
+  * Fix CMAKE_MODULE_PATH who was used as single value (for real)
+
+-------------------------------------------------------------------
+Sat May 28 18:57:01 UTC 2022 - Martin Hauke <[email protected]>
+
+- Update to version 1.4.16
+  * Fix pkg-config file with absolute path for
+    CMAKE_INSTALL_{INCLUDE,LIB}DIR
+  * Fix CMAKE_MODULE_PATH who was used as single value
+  * Add y_set_split_message_newline to split log messages on
+    newline characters
+
+-------------------------------------------------------------------

Old:
----
  yder-1.4.15.tar.gz

New:
----
  yder-1.4.17.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yder.spec ++++++
--- /var/tmp/diff_new_pack.1MzPpm/_old  2022-05-30 12:44:52.956464971 +0200
+++ /var/tmp/diff_new_pack.1MzPpm/_new  2022-05-30 12:44:52.960464976 +0200
@@ -19,7 +19,7 @@
 
 %define sover 1_4
 Name:           yder
-Version:        1.4.15
+Version:        1.4.17
 Release:        0
 Summary:        Logging library written in C
 # Example programs in subfolder examples/ are licensed under MIT

++++++ yder-1.4.15.tar.gz -> yder-1.4.17.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/.github/workflows/codeql-analysis.yml 
new/yder-1.4.17/.github/workflows/codeql-analysis.yml
--- old/yder-1.4.15/.github/workflows/codeql-analysis.yml       2022-03-09 
23:10:21.000000000 +0100
+++ new/yder-1.4.17/.github/workflows/codeql-analysis.yml       2022-05-29 
20:04:28.000000000 +0200
@@ -46,9 +46,21 @@
     #    and modify them (or add more) to build your code if your project
     #    uses a compiled language
 
-    - run: |
+    - name: dependencies
+      run: |
         sudo apt-get update
         sudo apt-get install -y cmake pkg-config libsystemd-dev doxygen
+        
+        cd /opt
+        git clone https://github.com/babelouest/orcania.git
+        mkdir build
+        cd build
+        
+        cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib ../orcania
+        make
+        sudo make install
+        rm -rf *
+    - run: |
         mkdir build
         cd build
         cmake -DBUILD_YDER_DOCUMENTATION=on ..
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/.github/workflows/main.yml 
new/yder-1.4.17/.github/workflows/main.yml
--- old/yder-1.4.15/.github/workflows/main.yml  2022-03-09 23:10:21.000000000 
+0100
+++ new/yder-1.4.17/.github/workflows/main.yml  2022-05-29 20:04:28.000000000 
+0200
@@ -13,6 +13,17 @@
         sudo apt-get install -y cmake pkg-config check libsubunit-dev cppcheck 
libsystemd-dev doxygen
     - name: cppcheck
       run: cppcheck --force --enable=warning,missingInclude --error-exitcode=1 
.
+    - name: dependencies
+      run: |
+        cd /opt
+        git clone https://github.com/babelouest/orcania.git
+        mkdir build
+        cd build
+        
+        cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib ../orcania
+        make
+        sudo make install
+        rm -rf *
     - name: build
       run: |
         mkdir build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/API.md new/yder-1.4.17/API.md
--- old/yder-1.4.15/API.md      2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/API.md      2022-05-29 20:04:28.000000000 +0200
@@ -6,4 +6,4 @@
 
 Yder is multi-thread, which mean that you can use multiple instances of the 
function `y_log_message` at the same time in your program.
 
-Yet, `y_init_logs`, `y_set_logs_callback`, `y_set_date_format` and 
`y_close_logs` are mono-thread. You might use those functions in the `main()` 
routine to ensure safety.
+Yet, `y_init_logs`, `y_set_logs_callback`, `y_set_date_format`, 
`y_set_split_message_newline` and `y_close_logs` are mono-thread. You might use 
those functions in the `main()` routine to ensure safety.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/CHANGELOG.md new/yder-1.4.17/CHANGELOG.md
--- old/yder-1.4.15/CHANGELOG.md        2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/CHANGELOG.md        2022-05-29 20:04:28.000000000 +0200
@@ -1,5 +1,15 @@
 # Yder Changelog
 
+## 1.4.17
+
+- Fix `CMAKE_MODULE_PATH` who was used as single value (for real)
+
+## 1.4.16
+
+- Fix pkg-config file with absolute path for `CMAKE_INSTALL_{INCLUDE,LIB}DIR`
+- Fix `CMAKE_MODULE_PATH` who was used as single value
+- Add `y_set_split_message_newline` to split log messages on newline characters
+
 ## 1.4.15
 
 - Use `o_strnullempty` instead of `o_strlen` to check if a `char *` has data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/CMakeLists.txt 
new/yder-1.4.17/CMakeLists.txt
--- old/yder-1.4.15/CMakeLists.txt      2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/CMakeLists.txt      2022-05-29 20:04:28.000000000 +0200
@@ -30,7 +30,7 @@
 set(PROJECT_BUGREPORT_PATH "https://github.com/babelouest/yder/issues";)
 set(LIBRARY_VERSION_MAJOR "1")
 set(LIBRARY_VERSION_MINOR "4")
-set(LIBRARY_VERSION_PATCH "15")
+set(LIBRARY_VERSION_PATCH "17")
 
 set(PROJECT_VERSION 
"${LIBRARY_VERSION_MAJOR}.${LIBRARY_VERSION_MINOR}.${LIBRARY_VERSION_PATCH}")
 set(PROJECT_VERSION_MAJOR ${LIBRARY_VERSION_MAJOR})
@@ -56,11 +56,12 @@
 
 set(LIBRARY_VERSION 
"${LIBRARY_VERSION_MAJOR}.${LIBRARY_VERSION_MINOR}.${LIBRARY_VERSION_PATCH}")
 set(LIBRARY_SOVERSION "${LIBRARY_VERSION_MAJOR}.${LIBRARY_VERSION_MINOR}")
-set(ORCANIA_VERSION_REQUIRED "2.2.2")
+set(ORCANIA_VERSION_REQUIRED "2.3.0")
 
 # cmake modules
 
-set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules)
+set(Y_CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules)
+list(APPEND CMAKE_MODULE_PATH "${Y_CMAKE_MODULE_PATH}")
 
 include(GNUInstallDirs)
 include(CheckSymbolExists)
@@ -155,6 +156,7 @@
             message( FATAL_ERROR "Orcania not found")
         endif ()
     else()
+        message(STATUS "Orcania found")
         set(LIBS ${LIBS} ${ORCANIA_LIBRARIES})
         include_directories(${ORCANIA_INCLUDE_DIRS})
         include_directories(${orcania_BINARY_DIR})
@@ -231,7 +233,7 @@
         set(TESTS yder_test)
 
         configure_file(
-                "${CMAKE_MODULE_PATH}/CTestCustom.cmake.in"
+                "${Y_CMAKE_MODULE_PATH}/CTestCustom.cmake.in"
                 "${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake"
                 @ONLY)
 
@@ -250,6 +252,18 @@
 
 option(INSTALL_HEADER "Install the header files" ON) # Install yder.h or not
 
+if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
+  set(PKGCONFIG_TARGET_INCLUDES "${CMAKE_INSTALL_INCLUDEDIR}")
+else()
+  set(PKGCONFIG_TARGET_INCLUDES "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
+endif()
+
+if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
+  set(PKGCONFIG_TARGET_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
+else()
+  set(PKGCONFIG_TARGET_LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
+endif()
+
 configure_file(libyder.pc.in libyder.pc @ONLY)
 
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libyder.pc
@@ -281,7 +295,7 @@
 
 if (NOT TARGET uninstall)
     configure_file(
-            "${CMAKE_MODULE_PATH}/CMakeUninstall.cmake.in"
+            "${Y_CMAKE_MODULE_PATH}/CMakeUninstall.cmake.in"
             "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
             IMMEDIATE @ONLY)
     add_custom_target(uninstall
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/examples/.gitignore 
new/yder-1.4.17/examples/.gitignore
--- old/yder-1.4.15/examples/.gitignore 2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/examples/.gitignore 2022-05-29 20:04:28.000000000 +0200
@@ -4,3 +4,5 @@
 log_syslog
 log_journald
 log_callback
+log_newline
+valgrind.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/examples/Makefile 
new/yder-1.4.17/examples/Makefile
--- old/yder-1.4.15/examples/Makefile   2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/examples/Makefile   2022-05-29 20:04:28.000000000 +0200
@@ -19,7 +19,7 @@
 INCLUDE_LOCATION=../include
 LIBS=-lc -lyder -L$(YDER_LOCATION)
 ADDITIONALFLAGS=-O3
-TARGET=log_console log_syslog log_file log_combined log_callback
+TARGET=log_console log_syslog log_file log_combined log_callback log_newline
 
 ifndef Y_DISABLE_JOURNALD
        TARGET+= log_journald
@@ -28,7 +28,7 @@
 all: libyder.so $(TARGET)
 
 clean:
-       rm -f *.o log_console log_syslog log_file log_combined log_journald 
log_callback
+       rm -f *.o valgrind.txt log_console log_syslog log_file log_combined 
log_journald log_callback log_newline
 
 debug: ADDITIONALFLAGS=-DDEBUG -g -O0
 
@@ -61,6 +61,10 @@
        $(CC) -c $(CFLAGS) log_callback.c
        $(CC) -o log_callback log_callback.o $(LIBS)
 
+log_newline: log_newline.c
+       $(CC) -c $(CFLAGS) log_newline.c
+       $(CC) -o log_newline log_newline.o $(LIBS)
+
 test_console: libyder.so log_console
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_console
 
@@ -79,6 +83,9 @@
 test_callback: libyder.so log_callback
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_callback
 
+test_newline: libyder.so log_newline
+       LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_newline
+
 ifndef Y_DISABLE_JOURNALD
 test: libyder.so $(TARGET)
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_console
@@ -87,12 +94,14 @@
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_combined
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_journald
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_callback
+       LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_newline
 else
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_console
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_syslog
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_file
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_combined
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_callback
+       LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} ./log_newline
 endif
 
 ifndef Y_DISABLE_JOURNALD
@@ -103,10 +112,12 @@
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_combined 
2>>valgrind.txt
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_journald 
2>>valgrind.txt
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_callback 
2>>valgrind.txt
+       LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_newline 
2>>valgrind.txt
 else
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_console 
2>valgrind.txt
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_syslog 
2>>valgrind.txt
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_file 
2>>valgrind.txt
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_combined 
2>>valgrind.txt
        LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_callback 
2>>valgrind.txt
+       LD_LIBRARY_PATH=$(YDER_LOCATION):${LD_LIBRARY_PATH} valgrind 
--tool=memcheck --leak-check=full --show-leak-kinds=all ./log_newline 
2>>valgrind.txt
 endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/examples/log_file.c 
new/yder-1.4.17/examples/log_file.c
--- old/yder-1.4.15/examples/log_file.c 2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/examples/log_file.c 2022-05-29 20:04:28.000000000 +0200
@@ -24,22 +24,22 @@
 
 int main(int argc, char ** argv) {
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_ERROR, 
"/tmp/yder_log_error.log", "Initializing logs mode: console, logs level: 
error")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_ERROR, 
"/tmp/yder_log_error.log", "Initializing logs mode: file, logs level: error")) {
     write_logs("error");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_WARNING, 
"/tmp/yder_log_warning.log", "Initializing logs mode: console, logs level: 
warning")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_WARNING, 
"/tmp/yder_log_warning.log", "Initializing logs mode: file, logs level: 
warning")) {
     write_logs("warning");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_INFO, 
"/tmp/yder_log_info.log", "Initializing logs mode: console, logs level: info")) 
{
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_INFO, 
"/tmp/yder_log_info.log", "Initializing logs mode: file, logs level: info")) {
     write_logs("info");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_DEBUG, 
"/tmp/yder_log_debug.log", "Initializing logs mode: console, logs level: 
debug")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_DEBUG, 
"/tmp/yder_log_debug.log", "Initializing logs mode: file, logs level: debug")) {
     write_logs("debug");
     y_close_logs();
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/examples/log_journald.c 
new/yder-1.4.17/examples/log_journald.c
--- old/yder-1.4.15/examples/log_journald.c     2022-03-09 23:10:21.000000000 
+0100
+++ new/yder-1.4.17/examples/log_journald.c     2022-05-29 20:04:28.000000000 
+0200
@@ -28,22 +28,22 @@
 
 int main(int argc, char ** argv) {
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_ERROR, NULL, 
"Initializing logs mode: console, logs level: error")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_ERROR, NULL, 
"Initializing logs mode: journald, logs level: error")) {
     write_logs("error");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_WARNING, 
NULL, "Initializing logs mode: console, logs level: warning")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_WARNING, 
NULL, "Initializing logs mode: journald, logs level: warning")) {
     write_logs("warning");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_INFO, NULL, 
"Initializing logs mode: console, logs level: info")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_INFO, NULL, 
"Initializing logs mode: journald, logs level: info")) {
     write_logs("info");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: console, logs level: debug")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: journald, logs level: debug")) {
     write_logs("debug");
     y_close_logs();
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/examples/log_newline.c 
new/yder-1.4.17/examples/log_newline.c
--- old/yder-1.4.15/examples/log_newline.c      1970-01-01 01:00:00.000000000 
+0100
+++ new/yder-1.4.17/examples/log_newline.c      2022-05-29 20:04:28.000000000 
+0200
@@ -0,0 +1,102 @@
+/**
+ * 
+ * Yder example program
+ * 
+ * This example program describes the main features 
+ * that are available in a callback function
+ * 
+ * Copyright 2014-2020 Nicolas Mora <[email protected]>
+ * 
+ * License MIT
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "yder.h"
+
+void y_callback_log_message(void * cls, const char * app_name, const time_t 
date, const unsigned long level, const char * message) {
+  char *level_name, date_stamp[20];
+  struct tm * tm_stamp;
+  
+  tm_stamp = localtime (&date);
+  
+#ifndef _WIN32
+  strftime (date_stamp, sizeof(date_stamp), "%FT%TZ", tm_stamp);
+#else
+  strftime (date_stamp, sizeof(date_stamp), "%Y-%m-%dT%H:%M:%S", tm_stamp);
+#endif
+  switch (level) {
+    case Y_LOG_LEVEL_ERROR:
+      level_name = "ERROR";
+      break;
+    case Y_LOG_LEVEL_WARNING:
+      level_name = "WARNING";
+      break;
+    case Y_LOG_LEVEL_INFO:
+      level_name = "INFO";
+      break;
+    case Y_LOG_LEVEL_DEBUG:
+      level_name = "DEBUG";
+      break;
+    default:
+      level_name = "NONE";
+      break;
+  }
+  printf("Here is my callback log function\n- cls is %s\n- app_name is %s\n- 
date is %s\n- level is %s\n- message is '%s'\n\n", (char *)cls, app_name, 
date_stamp, level_name, message);
+}
+
+int main(int argc, char ** argv) {
+  char * cls = "my cls";
+
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_CONSOLE, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: console, logs level: debug")) {
+    y_set_split_message_newline(1, "Set newline");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines");
+    y_close_logs();
+  }
+  
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_FILE, Y_LOG_LEVEL_DEBUG, 
"/tmp/log_newline.log", "Initializing logs mode: file, logs level: debug")) {
+    y_set_split_message_newline(1, "Set newline");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines");
+    y_close_logs();
+  }
+  
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_JOURNALD, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: journald, logs level: debug")) {
+    y_set_split_message_newline(1, "Set newline");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines");
+    y_close_logs();
+  }
+  
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: syslog, logs level: debug")) {
+    y_set_split_message_newline(1, "Set newline");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines");
+    y_close_logs();
+  }
+  
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_CALLBACK, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: callback, logs level: warning") && 
y_set_logs_callback(&y_callback_log_message, cls, "callback init")) {
+    y_set_split_message_newline(1, "Set newline");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines");
+    y_close_logs();
+  }
+  
+  if (y_init_logs("Yder Tests", 
Y_LOG_MODE_CONSOLE|Y_LOG_MODE_FILE|Y_LOG_MODE_CALLBACK, Y_LOG_LEVEL_DEBUG, 
"/tmp/log_newline_combined.log", "Initializing logs mode: file, logs level: 
debug") && y_set_logs_callback(&y_callback_log_message, cls, "callback init")) {
+    y_set_split_message_newline(1, "Set newline");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in one line");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message in\ntwo lines");
+    y_log_message(Y_LOG_LEVEL_DEBUG, "A message\nin\nfour\nlines");
+    y_close_logs();
+  }
+  
+  return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/examples/log_syslog.c 
new/yder-1.4.17/examples/log_syslog.c
--- old/yder-1.4.15/examples/log_syslog.c       2022-03-09 23:10:21.000000000 
+0100
+++ new/yder-1.4.17/examples/log_syslog.c       2022-05-29 20:04:28.000000000 
+0200
@@ -24,22 +24,22 @@
 
 int main(int argc, char ** argv) {
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_ERROR, NULL, 
"Initializing logs mode: console, logs level: error")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_ERROR, NULL, 
"Initializing logs mode: syslog, logs level: error")) {
     write_logs("error");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_WARNING, NULL, 
"Initializing logs mode: console, logs level: warning")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_WARNING, NULL, 
"Initializing logs mode: syslog, logs level: warning")) {
     write_logs("warning");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_INFO, NULL, 
"Initializing logs mode: console, logs level: info")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_INFO, NULL, 
"Initializing logs mode: syslog, logs level: info")) {
     write_logs("info");
     y_close_logs();
   }
   
-  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: console, logs level: debug")) {
+  if (y_init_logs("Yder Tests", Y_LOG_MODE_SYSLOG, Y_LOG_LEVEL_DEBUG, NULL, 
"Initializing logs mode: syslog, logs level: debug")) {
     write_logs("debug");
     y_close_logs();
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/include/yder.h 
new/yder-1.4.17/include/yder.h
--- old/yder-1.4.15/include/yder.h      2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/include/yder.h      2022-05-29 20:04:28.000000000 +0200
@@ -56,6 +56,7 @@
 #define Y_LOG_LEVEL_DEBUG   0xF000
 #define Y_LOG_LEVEL_CURRENT 0xFFFF
 
+#define Y_SPLIT_CURRENT -1
 /**
  * @}
  */
@@ -101,6 +102,17 @@
 int y_set_date_format(const char * format, const char * message);
 
 /**
+ * Specify if the log messages must be splitted when a newline is in it
+ * This function may have incidence on the application speed,
+ * because it adds more memory allocations on each log message.
+ * I recommend to use it only if relevant
+ * @param split 0 to disable splitted logs, 1 to enable
+ * @param message message that will be appear in the logs
+ * @return 1 on success, 0 on error
+ */
+int y_set_split_message_newline(int split, const char * message);
+
+/**
  * Close the logs
  * @return 1 on success, 0 on error
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/libyder.pc.in 
new/yder-1.4.17/libyder.pc.in
--- old/yder-1.4.15/libyder.pc.in       2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/libyder.pc.in       2022-05-29 20:04:28.000000000 +0200
@@ -1,7 +1,7 @@
 prefix=@CMAKE_INSTALL_PREFIX@
 exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+libdir=@PKGCONFIG_TARGET_LIBDIR@
+includedir=@PKGCONFIG_TARGET_INCLUDES@
 
 Name: @PROJECT_NAME@
 Description: @PROJECT_DESCRIPTION@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/src/Makefile new/yder-1.4.17/src/Makefile
--- old/yder-1.4.15/src/Makefile        2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/src/Makefile        2022-05-29 20:04:28.000000000 +0200
@@ -35,7 +35,7 @@
 OUTPUT=libyder.so
 VERSION_MAJOR=1
 VERSION_MINOR=4
-VERSION_PATCH=15
+VERSION_PATCH=17
 
 SONAME = -soname
 ifeq ($(shell uname -s),Darwin)
@@ -71,8 +71,8 @@
        @cp $(PKGCONFIG_TEMPLATE) $(PKGCONFIG_FILE)
        @echo Pkgconfig file $(PKGCONFIG_FILE) generated
        @sed -i -e 's#@CMAKE_INSTALL_PREFIX@#$(DESTDIR)#g' $(PKGCONFIG_FILE)
-       @sed -i -e 's/@CMAKE_INSTALL_LIBDIR@/lib/g' $(PKGCONFIG_FILE)
-       @sed -i -e 's/@CMAKE_INSTALL_INCLUDEDIR@/include/g' $(PKGCONFIG_FILE)
+       @sed -i -e 's#@PKGCONFIG_TARGET_LIBDIR@#$${prefix}/lib#g' 
$(PKGCONFIG_FILE)
+       @sed -i -e 's#@PKGCONFIG_TARGET_INCLUDES@#$${prefix}/include#g' 
$(PKGCONFIG_FILE)
        @sed -i -e 's/@PROJECT_NAME@/$(PROJECT_NAME)/g' $(PKGCONFIG_FILE)
        @sed -i -e 's/@PROJECT_DESCRIPTION@/$(PROJECT_DESCRIPTION)/g' 
$(PKGCONFIG_FILE)
        @sed -i -e 's|@PROJECT_BUGREPORT_PATH@|$(PROJECT_BUGREPORT_PATH)|g' 
$(PKGCONFIG_FILE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/src/yder.c new/yder-1.4.17/src/yder.c
--- old/yder-1.4.15/src/yder.c  2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/src/yder.c  2022-05-29 20:04:28.000000000 +0200
@@ -41,10 +41,11 @@
 /**
  * Write log message to console output (stdout or stderr)
  */
-static void y_write_log_console(const char * app_name, const char * 
date_format, const time_t date, const unsigned long level, const char * 
message) {
-  char * level_name = NULL, date_stamp[64];
+static void y_write_log_console(const char * app_name, const char * 
date_format, const time_t date, const unsigned long level, const char * 
message, int split) {
+  char * level_name = NULL, date_stamp[64], ** message_split = NULL;
   FILE * output = NULL;
   struct tm tm_stamp;
+  size_t i;
 
 #ifdef _WIN32
   gmtime_s(&tm_stamp, &date);
@@ -85,7 +86,16 @@
     // Write to stdout
     output = stdout;
   }
-  fprintf(output, "%s - %s %s: %s\n", date_stamp, app_name, level_name, 
message);
+  if (split == 1) {
+    if (split_string(message, "\n", &message_split)) {
+      for (i=0; message_split[i] != NULL; i++) {
+        fprintf(output, "%s - %s %s: %s\n", date_stamp, app_name, level_name, 
message_split[i]);
+      }
+      free_string_array(message_split);
+    }
+  } else {
+    fprintf(output, "%s - %s %s: %s\n", date_stamp, app_name, level_name, 
message);
+  }
   fflush(output);
 }
 
@@ -138,9 +148,10 @@
 /**
  * Append log message to the log file
  */
-static void y_write_log_file(const char * app_name, const char * date_format, 
const time_t date, FILE * log_file, const unsigned long level, const char * 
message) {
-  char * level_name = NULL, date_stamp[20];
+static void y_write_log_file(const char * app_name, const char * date_format, 
const time_t date, FILE * log_file, const unsigned long level, const char * 
message, int split) {
+  char * level_name = NULL, date_stamp[20], ** message_split = NULL;
   struct tm tm_stamp;
+  size_t i;
   
   if (log_file != NULL) {
 #ifdef _WIN32
@@ -174,7 +185,16 @@
         level_name = "NONE";
         break;
     }
-    fprintf(log_file, "%s - %s %s: %s\n", date_stamp, app_name, level_name, 
message);
+    if (split == 1) {
+      if (split_string(message, "\n", &message_split)) {
+        for (i=0; message_split[i] != NULL; i++) {
+          fprintf(log_file, "%s - %s %s: %s\n", date_stamp, app_name, 
level_name, message_split[i]);
+        }
+        free_string_array(message_split);
+      }
+    } else {
+      fprintf(log_file, "%s - %s %s: %s\n", date_stamp, app_name, level_name, 
message);
+    }
     fflush(log_file);
   }
 }
@@ -190,6 +210,7 @@
                        void (* y_callback_log_message) (void * cls, const char 
* app_name, const time_t date, const unsigned long level, const char * message),
                        void * cls,
                        const char * date_format,
+                       int split,
                        const unsigned long level,
                        const char * message) {
   static unsigned long cur_mode = Y_LOG_MODE_NONE, cur_level = 
Y_LOG_LEVEL_NONE;
@@ -199,7 +220,10 @@
   static void (* cur_callback_log_message) (void * cls, const char * app_name, 
const time_t date, const unsigned long level, const char * message) = NULL;
   static void * cur_cls = NULL;
   static char * cur_date_format = NULL;
+  static int cur_split = 0;
   time_t now;
+  char ** message_split = NULL;
+  size_t i;
   
   // Closing logs: free cur_app_name
   if (app_name == NULL &&
@@ -234,6 +258,10 @@
     cur_date_format = o_strdup(date_format);
   }
   
+  if (split != Y_SPLIT_CURRENT) {
+    cur_split = split;
+  }
+  
   if (cur_mode == Y_LOG_MODE_NONE && cur_level == Y_LOG_LEVEL_NONE) {
     // Logs have not been initialized, cancel
     return 0;
@@ -281,7 +309,7 @@
   if (cur_level >= level) {
     if (message != NULL) {
       if (cur_mode & Y_LOG_MODE_CONSOLE) {
-        y_write_log_console(cur_app_name, cur_date_format, now, level, 
message);
+        y_write_log_console(cur_app_name, cur_date_format, now, level, 
message, cur_split);
       }
 #ifndef _WIN32
       if (cur_mode & Y_LOG_MODE_SYSLOG) {
@@ -295,10 +323,19 @@
       }
 #endif
       if (cur_mode & Y_LOG_MODE_FILE) {
-        y_write_log_file(cur_app_name, cur_date_format, now, cur_log_file, 
level, message);
+        y_write_log_file(cur_app_name, cur_date_format, now, cur_log_file, 
level, message, cur_split);
       }
       if (cur_mode & Y_LOG_MODE_CALLBACK && cur_callback_log_message != NULL) {
-        cur_callback_log_message(cur_cls, cur_app_name, now, level, message);
+        if (cur_split == 1) {
+          if (split_string(message, "\n", &message_split)) {
+            for (i=0; message_split[i] != NULL; i++) {
+              cur_callback_log_message(cur_cls, cur_app_name, now, level, 
message_split[i]);
+            }
+            free_string_array(message_split);
+          }
+        } else {
+          cur_callback_log_message(cur_cls, cur_app_name, now, level, message);
+        }
       }
     }
   }
@@ -331,7 +368,7 @@
   }
 #endif
 
-  return y_write_log(app, init_mode, init_level, init_log_file, NULL, NULL, 
NULL, Y_LOG_LEVEL_INFO, message);
+  return y_write_log(app, init_mode, init_level, init_log_file, NULL, NULL, 
NULL, Y_SPLIT_CURRENT, Y_LOG_LEVEL_INFO, message);
 }
 
 /**
@@ -342,7 +379,7 @@
                         void * cls,
                         const char * message) {
   if (y_callback_log_message != NULL) {
-    return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, 
y_callback_log_message, cls, NULL, Y_LOG_LEVEL_INFO, message);
+    return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, 
y_callback_log_message, cls, NULL, Y_SPLIT_CURRENT, Y_LOG_LEVEL_INFO, message);
   } else {
     return 0;
   }
@@ -353,17 +390,21 @@
  */
 int y_set_date_format(const char * format, const char * message) {
   if (!o_strnullempty(format)) {
-    return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, 
NULL, NULL, format, Y_LOG_LEVEL_INFO, message);
+    return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, 
NULL, NULL, format, Y_SPLIT_CURRENT, Y_LOG_LEVEL_INFO, message);
   } else {
     return 0;
   }
 }
 
+int y_set_split_message_newline(int split, const char * message) {
+  return y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, 
NULL, NULL, NULL, split, Y_LOG_LEVEL_INFO, message);
+}
+
 /**
  * Close logs
  */
 int y_close_logs(void) {
-  return y_write_log(NULL, 0, 0, NULL, NULL, NULL, NULL, 0, NULL);
+  return y_write_log(NULL, 0, 0, NULL, NULL, NULL, NULL, Y_SPLIT_CURRENT, 0, 
NULL);
 }
 
 /**
@@ -380,7 +421,7 @@
   out = o_malloc((out_len + 1)*sizeof(char));
   if (out != NULL) {
     vsnprintf(out, (out_len + 1), message, args_cpy);
-    y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, NULL, 
NULL, NULL, level, out);
+    y_write_log(NULL, Y_LOG_MODE_CURRENT, Y_LOG_LEVEL_CURRENT, NULL, NULL, 
NULL, NULL, Y_SPLIT_CURRENT, level, out);
     o_free(out);
   }
   va_end(args);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yder-1.4.15/test/yder_test.c 
new/yder-1.4.17/test/yder_test.c
--- old/yder-1.4.15/test/yder_test.c    2022-03-09 23:10:21.000000000 +0100
+++ new/yder-1.4.17/test/yder_test.c    2022-05-29 20:04:28.000000000 +0200
@@ -7,6 +7,7 @@
 #include <time.h>
 
 #include <check.h>
+#include <orcania.h>
 #include "yder.h"
 
 char message[1024];
@@ -19,6 +20,12 @@
   level = log_level;
 }
 
+void unit_test_newline(void * cls, const char * log_app_name, const time_t 
date, const unsigned long log_level, const char * log_message) {
+  int * count = (int *)cls;
+  ck_assert_int_gt(o_strlen(log_message), 0);
+  (*count)++;
+}
+
 START_TEST(test_yder_init_console)
 {
   ck_assert_int_eq(y_init_logs("test_yder_console", Y_LOG_MODE_CONSOLE, 
Y_LOG_LEVEL_DEBUG, NULL, "first test"), 1);
@@ -231,6 +238,25 @@
 }
 END_TEST
 
+START_TEST(test_yder_newline_split)
+{
+  int count = 0;
+  ck_assert_int_eq(y_init_logs("test_yder_newline_split", Y_LOG_MODE_CALLBACK, 
Y_LOG_LEVEL_DEBUG, NULL, "yder_newline_split"), 1);
+  ck_assert_int_eq(y_set_logs_callback(&unit_test_newline, &count, "Start 
newline unit tests"), 1);
+  ck_assert_int_eq(y_set_split_message_newline(1, "Set newline"), 1);
+  count = 0;
+  y_log_message(Y_LOG_LEVEL_DEBUG, "first test, one line");
+  ck_assert_int_eq(count, 1);
+  count = 0;
+  y_log_message(Y_LOG_LEVEL_DEBUG, "second test\ntwo lines");
+  ck_assert_int_eq(count, 2);
+  count = 0;
+  y_log_message(Y_LOG_LEVEL_DEBUG, "third test\nfour\nlines\nahead");
+  ck_assert_int_eq(count, 4);
+  y_close_logs();
+}
+END_TEST
+
 static Suite *yder_suite(void)
 {
   Suite *s;
@@ -252,6 +278,7 @@
   tcase_add_test(tc_core, test_yder_level_warning);
   tcase_add_test(tc_core, test_yder_level_error);
   tcase_add_test(tc_core, test_yder_date_format);
+  tcase_add_test(tc_core, test_yder_newline_split);
   tcase_set_timeout(tc_core, 30);
   suite_add_tcase(s, tc_core);
 

Reply via email to