compat BUILD provide source instead of an object
Because it allows for hiding its symbols.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c01dad..5f83c49 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -262,11 +262,11 @@
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS) # remove -Wl,-Bdynamic
set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
- add_library(yang STATIC ${libsrc} $<TARGET_OBJECTS:compat>)
+ add_library(yang STATIC ${libsrc} ${compatsrc})
else()
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
- add_library(yangobj OBJECT ${libsrc})
- add_library(yang SHARED $<TARGET_OBJECTS:yangobj> $<TARGET_OBJECTS:compat>)
+ add_library(yangobj OBJECT ${libsrc} ${compatsrc})
+ add_library(yang SHARED $<TARGET_OBJECTS:yangobj>)
#link dl
target_link_libraries(yang ${CMAKE_DL_LIBS})
diff --git a/CMakeModules/UseCompat.cmake b/CMakeModules/UseCompat.cmake
index 13e77c6..7e624d9 100644
--- a/CMakeModules/UseCompat.cmake
+++ b/CMakeModules/UseCompat.cmake
@@ -1,6 +1,7 @@
include(CheckSymbolExists)
include(TestBigEndian)
+# defines "compatsrc" with source(s) of this small library
macro(USE_COMPAT)
# compatibility checks
set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=200809L)
@@ -18,9 +19,8 @@
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
- # header and object file
+ # header and source file (adding the source directly allows for hiding its symbols)
configure_file(${PROJECT_SOURCE_DIR}/compat/compat.h.in ${PROJECT_BINARY_DIR}/compat/compat.h @ONLY)
include_directories(${PROJECT_BINARY_DIR}/compat)
- add_library(compat OBJECT ${PROJECT_SOURCE_DIR}/compat/compat.c)
- set_property(TARGET compat PROPERTY POSITION_INDEPENDENT_CODE ON)
+ set(compatsrc ${PROJECT_SOURCE_DIR}/compat/compat.c)
endmacro()
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 690a1df..692ddda 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -17,7 +17,7 @@
cmake_parse_arguments(ADDTEST "" "NAME;WRAP" "SOURCES" ${ARGN})
set(TEST_NAME utest_${ADDTEST_NAME})
- add_executable(${TEST_NAME} ${TEST_SOURCES} $<TARGET_OBJECTS:yangobj> $<TARGET_OBJECTS:compat>)
+ add_executable(${TEST_NAME} ${TEST_SOURCES} $<TARGET_OBJECTS:yangobj>)
foreach(TEST_SOURCE ${ADDTEST_SOURCES})
target_sources(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_SOURCE})
endforeach()
diff --git a/tests/style/CMakeLists.txt b/tests/style/CMakeLists.txt
index 05c09ce..dd4285e 100644
--- a/tests/style/CMakeLists.txt
+++ b/tests/style/CMakeLists.txt
@@ -6,7 +6,7 @@
endif()
# just compile
-add_executable(cpp_compat cpp_compat.c $<TARGET_OBJECTS:yangobj> $<TARGET_OBJECTS:compat>)
+add_executable(cpp_compat cpp_compat.c $<TARGET_OBJECTS:yangobj>)
target_include_directories(cpp_compat BEFORE PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(cpp_compat ${CMAKE_THREAD_LIBS_INIT} ${PCRE2_LIBRARIES} ${CMAKE_DL_LIBS} m)
target_compile_options(cpp_compat PUBLIC "-Werror=c++-compat")
diff --git a/tools/lint/CMakeLists.txt b/tools/lint/CMakeLists.txt
index 755d9d6..f09a3b1 100644
--- a/tools/lint/CMakeLists.txt
+++ b/tools/lint/CMakeLists.txt
@@ -22,7 +22,7 @@
${CMAKE_CURRENT_SOURCE_DIR}/*.h
PARENT_SCOPE)
-add_executable(yanglint ${lintsrc} $<TARGET_OBJECTS:compat>)
+add_executable(yanglint ${lintsrc} ${compatsrc})
target_link_libraries(yanglint yang)
install(TARGETS yanglint DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${PROJECT_SOURCE_DIR}/tools/lint/yanglint.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
diff --git a/tools/re/CMakeLists.txt b/tools/re/CMakeLists.txt
index eb2e5b8..795d834 100644
--- a/tools/re/CMakeLists.txt
+++ b/tools/re/CMakeLists.txt
@@ -8,7 +8,7 @@
${CMAKE_CURRENT_SOURCE_DIR}/*.c
PARENT_SCOPE)
-add_executable(yangre ${resrc} $<TARGET_OBJECTS:compat>)
+add_executable(yangre ${resrc} ${compatsrc})
target_link_libraries(yangre yang)
install(TARGETS yangre DESTINATION ${CMAKE_INSTALL_BINDIR})
target_include_directories(yangre BEFORE PRIVATE ${PROJECT_BINARY_DIR})