In CMake, add interface properties to the targets so that upstream users
can guess the needed include dirs and link libraries from target properties.
* CMakeLists.txt:
Do not set global include_directories and APR_CFLAGS.
(SERF_DEPENDENCY_INCLUDES): Renamed from DEPENDENCY_INCLUDES.
(SERF_INTERFACE_INCLUDES): Split from SERF_DEPENDENCY_INCLUDES.
(SERF_DEPENDENCY_LIBRARIES: Renamed from DEPENDENCY_LIBRARIES.
(serf_shared): Target renamed from 'serf'.
(serf_shared, serf_static): Set public, interface and private include
directories and link libraries.
* test/CMakeLists.txt
(${SIMPLE_TEST_TARGETS}): Ignore dependency libraries, depend on the
serf_static target properties instead.
(test_all): Likewise; also, use private properties for OpenSSL, etc.
include directories and the MOCKHTTP_OPENSSL definition.
git-svn-id: https://svn.apache.org/repos/asf/serf/trunk@1835104 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3062009..d86def8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -199,15 +199,19 @@
endif()
-set(DEPENDENCY_INCLUDES
+set(SERF_DEPENDENCY_INCLUDES
${OPENSSL_INCLUDE_DIR}
${ZLIB_INCLUDE_DIRS}
+)
+list(REMOVE_DUPLICATES SERF_DEPENDENCY_INCLUDES)
+
+set(SERF_INTERFACE_INCLUDES
${APR_INCLUDES}
${APRUTIL_INCLUDES}
)
-list(REMOVE_DUPLICATES DEPENDENCY_INCLUDES)
+list(REMOVE_DUPLICATES SERF_INTERFACE_INCLUDES)
-set(DEPENDENCY_LIBRARIES
+set(SERF_DEPENDENCY_LIBRARIES
${OPENSSL_LIBRARIES}
${ZLIB_LIBRARIES}
${APR_LIBRARIES}
@@ -216,12 +220,7 @@
${APRUTIL_EXTRALIBS}
${SERF_STANDARD_LIBRARIES}
)
-list(REMOVE_DUPLICATES DEPENDENCY_LIBRARIES)
-
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${APR_CFLAGS}")
-
-include_directories(BEFORE SYSTEM ${DEPENDENCY_INCLUDES})
-include_directories(${SERF_SOURCE_DIR})
+list(REMOVE_DUPLICATES SERF_DEPENDENCY_LIBRARIES)
# Feature tests
@@ -299,30 +298,43 @@
# Define all targets
-add_library(serf SHARED ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(serf ${DEPENDENCY_LIBRARIES})
-
-add_library(serf_static STATIC ${SOURCES})
-
-set_target_properties(serf serf_static
+add_library(serf_shared SHARED ${SOURCES} ${SHARED_SOURCES})
+target_compile_options(serf_shared PUBLIC ${APR_CFLAGS})
+target_include_directories(serf_shared SYSTEM BEFORE
+ PRIVATE ${SERF_DEPENDENCY_INCLUDES}
+ PUBLIC ${SERF_INTERFACE_INCLUDES})
+target_include_directories(serf_shared PUBLIC ${SERF_SOURCE_DIR})
+target_link_libraries(serf_shared PRIVATE ${SERF_DEPENDENCY_LIBRARIES})
+set_target_properties(serf_shared
PROPERTIES
- OUTPUT_NAME "serf-${SERF_MAJOR_VERSION}"
VERSION ${SERF_VERSION}
SOVERSION ${SERF_SOVERSION})
-install(TARGETS serf serf_static
+add_library(serf_static STATIC ${SOURCES})
+target_compile_options(serf_static PUBLIC ${APR_CFLAGS})
+target_include_directories(serf_static SYSTEM BEFORE
+ PRIVATE ${SERF_DEPENDENCY_INCLUDES}
+ PUBLIC ${SERF_INTERFACE_INCLUDES})
+target_include_directories(serf_static PUBLIC ${SERF_SOURCE_DIR})
+target_link_libraries(serf_static INTERFACE ${SERF_DEPENDENCY_LIBRARIES})
+
+set_target_properties(serf_shared serf_static
+ PROPERTIES
+ OUTPUT_NAME "serf-${SERF_MAJOR_VERSION}")
+
+install(TARGETS serf_shared serf_static
ARCHIVE DESTINATION "lib"
LIBRARY DESTINATION "lib"
RUNTIME DESTINATION "bin")
if(SERF_WINDOWS)
- install(FILES $<TARGET_PDB_FILE:serf> DESTINATION "bin")
+ install(FILES $<TARGET_PDB_FILE:serf_shared> DESTINATION "bin")
endif()
if(NOT SERF_WINDOWS)
- set(SERF_INCLUDE_SUBDIR "serf-${SERF_MAJOR_VERSION}")
+ set(SERF_INCLUDE_SUBDIR "/serf-${SERF_MAJOR_VERSION}")
endif()
-install(FILES ${HEADERS} DESTINATION "include/${SERF_INCLUDE_SUBDIR}")
+install(FILES ${HEADERS} DESTINATION "include${SERF_INCLUDE_SUBDIR}")
# Generate the pkg-config module file.
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 23fe72c..5c97544 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -48,17 +48,17 @@
string(REPLACE "-std=c89" "-std=c99" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
endif()
-add_definitions("-DMOCKHTTP_OPENSSL")
-
foreach(TEST_TARGET ${SIMPLE_TEST_TARGETS})
add_executable(${TEST_TARGET} "${TEST_TARGET}.c")
add_dependencies(${TEST_TARGET} serf_static)
- target_link_libraries(${TEST_TARGET} serf_static ${DEPENDENCY_LIBRARIES})
+ target_link_libraries(${TEST_TARGET} serf_static)
endforeach()
add_executable(test_all ${TEST_ALL_SOURCES})
add_dependencies(test_all serf_static)
-target_link_libraries(test_all serf_static ${DEPENDENCY_LIBRARIES})
+target_compile_definitions(test_all PRIVATE "-DMOCKHTTP_OPENSSL")
+target_include_directories(test_all SYSTEM BEFORE PRIVATE ${SERF_DEPENDENCY_INCLUDES})
+target_link_libraries(test_all serf_static)
file(GLOB RESPONSE_TEST_CASES "${CMAKE_CURRENT_SOURCE_DIR}/testcases/*.response")
foreach(TEST_CASE ${RESPONSE_TEST_CASES})