forked from zeromq/cppzmq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
137 lines (110 loc) · 4.88 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
cmake_minimum_required(VERSION 3.11)
list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include (DetectCPPZMQVersion)
project(cppzmq VERSION ${DETECTED_CPPZMQ_VERSION})
if (NOT TARGET libzmq AND NOT TARGET libzmq-static)
include(FetchContent)
find_package(ZeroMQ QUIET)
if (NOT cppzmq_FOUND)
message(STATUS "libzmq not found. Fetching libzmq...")
FetchContent_Declare(
libzmq
GIT_REPOSITORY https://github.com/zeromq/libzmq.git
GIT_TAG v4.3.5
)
# FetchContent_MakeAvailable(libzmq)
FetchContent_GetProperties(libzmq)
if (NOT libzmq_POPULATED)
FetchContent_Populate(libzmq)
# Check if the patch can be applied
execute_process(
COMMAND git apply --check ${CMAKE_CURRENT_SOURCE_DIR}/patches/libzmq.patch
WORKING_DIRECTORY ${libzmq_SOURCE_DIR}
RESULT_VARIABLE patch_check_result
OUTPUT_QUIET
ERROR_QUIET
)
if (patch_check_result EQUAL 0)
message(STATUS "Applying patch to libzmq...")
execute_process(
COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR}/patches/libzmq.patch
WORKING_DIRECTORY ${libzmq_SOURCE_DIR}
RESULT_VARIABLE patch_apply_result
)
if (NOT patch_apply_result EQUAL 0)
message(FATAL_ERROR "Failed to apply patch to libzmq.")
endif()
else()
message(STATUS "Patch already applied or not needed.")
endif()
else()
message(STATUS "libzmq already populated, skipping fetch and patch.")
endif()
if (NOT TARGET libzmq)
add_subdirectory(${libzmq_SOURCE_DIR} ${libzmq_BINARY_DIR})
endif()
set(CPPZMQ_INCLUDE_DIRS ${libzmq_SOURCE_DIR}/include ${libzmq_BINARY_DIR})
set(CPPZMQ_LIBRARIES ${libzmq_BINARY_DIR}/libzmq.a)
else()
message(STATUS "libzmq found.")
endif()
endif()
message(STATUS "cppzmq v${cppzmq_VERSION}")
set(CPPZMQ_HEADERS
zmq.hpp
zmq_addon.hpp
)
foreach (target cppzmq cppzmq-static)
add_library(${target} INTERFACE)
target_include_directories(${target} INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>)
endforeach()
target_link_libraries(cppzmq INTERFACE libzmq)
target_link_libraries(cppzmq-static INTERFACE libzmq-static)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
install(TARGETS cppzmq cppzmq-static
EXPORT ${PROJECT_NAME}-targets)
install(FILES ${CPPZMQ_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share".
set(CPPZMQ_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for cppzmqConfig.cmake")
configure_file(libzmq-pkg-config/FindZeroMQ.cmake
libzmq-pkg-config/FindZeroMQ.cmake
COPYONLY)
export(EXPORT ${PROJECT_NAME}-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
configure_package_config_file(${PROJECT_NAME}Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
# Workaround until ARCH_INDEPENDENT flag can be used with cmake 3.14.
# The ConigVersion.cmake file contains checks for the architecture is was
# generated on, which can cause problems for header only libraries
# used with e.g. the Conan package manager. Since it is header only we
# can/should omit those checks.
set(CPPZMQ_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
set(CMAKE_SIZEOF_VOID_P "") # a simple unset is not sufficient
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
VERSION ${CPPZMQ_VERSION}
COMPATIBILITY AnyNewerVersion)
set(CMAKE_SIZEOF_VOID_P ${CPPZMQ_SIZEOF_VOID_P})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cppzmq.pc.in
${CMAKE_CURRENT_BINARY_DIR}/cppzmq.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cppzmq.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
install(EXPORT ${PROJECT_NAME}-targets
FILE ${PROJECT_NAME}Targets.cmake
DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libzmq-pkg-config/FindZeroMQ.cmake
DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}/libzmq-pkg-config)
option(CPPZMQ_BUILD_TESTS "Whether or not to build the tests" ON)
if (CPPZMQ_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
if (CMAKE_CXX_STANDARD AND NOT CMAKE_CXX_STANDARD EQUAL 98 AND CMAKE_CXX_STANDARD GREATER_EQUAL 11)
add_subdirectory(examples)
endif()
endif()