-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathcpprest_find_boost.cmake
108 lines (105 loc) · 3.72 KB
/
cpprest_find_boost.cmake
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
macro(cpprestsdk_find_boost_android_package)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
if(CMAKE_HOST_WIN32)
set(WIN32 1)
set(UNIX)
elseif(CMAKE_HOST_APPLE)
set(APPLE 1)
set(UNIX)
endif()
find_package(${ARGN})
set(APPLE)
set(WIN32)
set(UNIX 1)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
endmacro()
function(cpprest_find_boost)
if(TARGET cpprestsdk_boost_internal)
return()
endif()
if(IOS)
if (EXISTS "${PROJECT_SOURCE_DIR}/../Build_iOS/boost")
set(IOS_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../Build_iOS")
set(Boost_LIBRARIES "${IOS_SOURCE_DIR}/boost/lib" CACHE INTERNAL "")
set(Boost_INCLUDE_DIR "${IOS_SOURCE_DIR}/boost/include" CACHE INTERNAL "")
else()
set(IOS_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../Build_iOS")
set(Boost_LIBRARIES "${IOS_SOURCE_DIR}/boost.framework/boost" CACHE INTERNAL "")
set(Boost_INCLUDE_DIR "${IOS_SOURCE_DIR}/boost.framework/Headers" CACHE INTERNAL "")
endif()
elseif(ANDROID)
set(Boost_COMPILER "-clang")
if(ANDROID_ABI STREQUAL "armeabi-v7a")
set(BOOST_ROOT "${CMAKE_BINARY_DIR}/../Boost-for-Android/build/out/armeabi-v7a" CACHE INTERNAL "")
set(BOOST_LIBRARYDIR "${CMAKE_BINARY_DIR}/../Boost-for-Android/build/out/armeabi-v7a/lib" CACHE INTERNAL "")
set(Boost_ARCHITECTURE "-a32" CACHE INTERNAL "")
else()
set(BOOST_ROOT "${CMAKE_BINARY_DIR}/../Boost-for-Android/build/out/x86" CACHE INTERNAL "")
set(BOOST_LIBRARYDIR "${CMAKE_BINARY_DIR}/../Boost-for-Android/build/out/x86/lib" CACHE INTERNAL "")
set(Boost_ARCHITECTURE "-x32" CACHE INTERNAL "")
endif()
cpprestsdk_find_boost_android_package(Boost ${BOOST_VERSION} EXACT REQUIRED COMPONENTS random system thread filesystem chrono atomic)
elseif(UNIX)
find_package(Boost REQUIRED COMPONENTS random system thread filesystem chrono atomic date_time regex)
else()
find_package(Boost REQUIRED COMPONENTS system date_time regex)
endif()
add_library(cpprestsdk_boost_internal INTERFACE)
# FindBoost continually breaks imported targets whenever boost updates.
if(1)
target_include_directories(cpprestsdk_boost_internal INTERFACE "$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>")
set(_prev)
set(_libs)
foreach(_lib ${Boost_LIBRARIES})
if(_lib STREQUAL "optimized" OR _lib STREQUAL "debug")
else()
if(_prev STREQUAL "optimized")
list(APPEND _libs "$<$<NOT:$<CONFIG:Debug>>:${_lib}>")
elseif(_prev STREQUAL "debug")
list(APPEND _libs "$<$<CONFIG:Debug>:${_lib}>")
else()
list(APPEND _libs "${_lib}")
endif()
endif()
set(_prev "${_lib}")
endforeach()
if (NOT IOS OR NOT EXISTS "${PROJECT_SOURCE_DIR}/../Build_iOS/boost")
target_link_libraries(cpprestsdk_boost_internal INTERFACE "$<BUILD_INTERFACE:${_libs}>")
endif()
else()
if(ANDROID)
target_link_libraries(cpprestsdk_boost_internal INTERFACE
Boost::boost
Boost::random
Boost::system
Boost::thread
Boost::filesystem
Boost::chrono
Boost::atomic
)
elseif(UNIX)
target_link_libraries(cpprestsdk_boost_internal INTERFACE
Boost::boost
Boost::random
Boost::system
Boost::thread
Boost::filesystem
Boost::chrono
Boost::atomic
Boost::date_time
Boost::regex
)
else()
target_link_libraries(cpprestsdk_boost_internal INTERFACE
Boost::boost
Boost::system
Boost::date_time
Boost::regex
)
endif()
endif()
endfunction()