From 1f3cf845c4588e787f9b26ad06b05d7cd73326b7 Mon Sep 17 00:00:00 2001 From: Geert Janssens Date: Wed, 9 May 2018 17:20:13 +0200 Subject: [PATCH] Work around a conflict between gcc 8.0 and swig 3.0 The swig 3.0 generated python wrappers trigger a warning converted into an error issued by gcc 8.0 for using strncpy as follows: strncpy(buff, "swig_ptr: ", 10); The reason is this call will truncate the trailing null byte from the string. This appears to have been fixed in swig master already but that's not released yet so let disable the warning when compiling the swig wrappers until it is. --- CMakeLists.txt | 7 ++++++- bindings/python/CMakeLists.txt | 6 ++++++ common/test-core/CMakeLists.txt | 3 +++ libgnucash/app-utils/CMakeLists.txt | 3 +++ libgnucash/core-utils/CMakeLists.txt | 4 ++++ 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e58f9f1246..ce4b99a05f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -524,8 +524,13 @@ endif (Boost_FOUND) # Compiler flags +include (CheckCCompilerFlag) +check_c_compiler_flag(-Wstringop-truncation have_stringop_truncation) +if (have_stringop_truncation) + set(HAVE_STRINGOP_TRUNCATION TRUE) +endif() + if (APPLE) - include (CheckCCompilerFlag) include (CheckCxxCompilerFlag) check_cxx_compiler_flag(-Wno-unused-local-typedef, have_wno_ult) if (have_wno_ult) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index df90698915..83509209c3 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -66,11 +66,17 @@ if(WITH_PYTHON) target_link_libraries(gnucash_core_c gncmod-app-utils gncmod-engine gnc-module ${GLIB_LIBS} ${PYTHON_LIBRARIES}) set_target_properties(gnucash_core_c PROPERTIES PREFIX "_") target_compile_options(gnucash_core_c PRIVATE -Wno-implicit -Wno-missing-prototypes -Wno-declaration-after-statement -Wno-missing-declarations) + if (HAVE_STRINGOP_TRUNCATION) + target_compile_options(gnucash_core_c PRIVATE -Wno-error=stringop-truncation) + endif() add_executable(sqlite3test EXCLUDE_FROM_ALL sqlite3test.c ${SWIG_GNUCASH_CORE_C}) target_link_libraries(sqlite3test gncmod-app-utils gncmod-engine gnc-module ${GLIB_LIBS} ${PYTHON_LIBRARIES}) target_include_directories(sqlite3test PRIVATE ${gnucash_core_c_INCLUDE_DIRS}) target_compile_options(sqlite3test PRIVATE -Wno-implicit -Wno-missing-prototypes -Wno-declaration-after-statement -Wno-missing-declarations) + if (HAVE_STRINGOP_TRUNCATION) + target_compile_options(sqlite3test PRIVATE -Wno-error=stringop-truncation) + endif() add_test(NAME sqlite3test COMMAND sqlite3test) add_dependencies(check sqlite3test) diff --git a/common/test-core/CMakeLists.txt b/common/test-core/CMakeLists.txt index 229cb39a06..b57ab5c3ac 100644 --- a/common/test-core/CMakeLists.txt +++ b/common/test-core/CMakeLists.txt @@ -48,6 +48,9 @@ if (WITH_PYTHON) target_link_libraries(unittest_support test-core ${PYTHON_LIBRARIES}) target_include_directories(unittest_support PRIVATE ${PYTHON_INCLUDE_DIRS}) set_target_properties(unittest_support PROPERTIES PREFIX "_") + if (HAVE_STRINGOP_TRUNCATION) + target_compile_options(unittest_support PRIVATE -Wno-error=stringop-truncation) + endif() endif() set(test_core_SCHEME unittest-support.scm) diff --git a/libgnucash/app-utils/CMakeLists.txt b/libgnucash/app-utils/CMakeLists.txt index d44dbe221f..eb6fd3d1df 100644 --- a/libgnucash/app-utils/CMakeLists.txt +++ b/libgnucash/app-utils/CMakeLists.txt @@ -116,6 +116,9 @@ if (WITH_PYTHON) target_link_libraries(sw_app_utils gncmod-app-utils ${app_utils_ALL_LIBRARIES} ${PYTHON_LIBRARIES}) set_target_properties(sw_app_utils PROPERTIES PREFIX "_") + if (HAVE_STRINGOP_TRUNCATION) + target_compile_options(sw_app_utils PRIVATE -Wno-error=stringop-truncation) + endif() target_include_directories (sw_app_utils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} diff --git a/libgnucash/core-utils/CMakeLists.txt b/libgnucash/core-utils/CMakeLists.txt index fa3972c248..0093de009c 100644 --- a/libgnucash/core-utils/CMakeLists.txt +++ b/libgnucash/core-utils/CMakeLists.txt @@ -171,6 +171,10 @@ if (WITH_PYTHON) target_link_libraries(sw_core_utils gnc-core-utils ${core_utils_ALL_LIBRARIES} ${PYTHON_LIBRARIES}) set_target_properties(sw_core_utils PROPERTIES PREFIX "_") + if (HAVE_STRINGOP_TRUNCATION) + target_compile_options(sw_core_utils PRIVATE -Wno-error=stringop-truncation) + endif() + target_include_directories (sw_core_utils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} PRIVATE ${core_utils_ALL_INCLUDES} ${PYTHON_INCLUDE_DIRS}