-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
129 lines (109 loc) · 4.74 KB
/
Copy pathCMakeLists.txt
File metadata and controls
129 lines (109 loc) · 4.74 KB
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
cmake_minimum_required(VERSION 3.10...3.31)
project(SpeedTest CXX)
set(SpeedTest_VERSION_MAJOR 1)
set(SpeedTest_VERSION_MINOR 17)
set(SpeedTest_VERSION_PATCH 0)
set(SpeedTest_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR})
set(SpeedTest_SYSTEM ${CMAKE_SYSTEM})
set(SpeedTest_USER_AGENT "Mozilla/5.0 ${CMAKE_SYSTEM}; U; ${CMAKE_SYSTEM_PROCESSOR}; en-us (KHTML, like Gecko) SpeedTest++/${SpeedTest_VERSION_MAJOR}.${SpeedTest_VERSION_MINOR}")
set(SpeedTest_SERVER_LIST_URL "https://www.speedtest.net/speedtest-servers.php")
set(SpeedTest_SERVER_LIST_JSON_URL "https://www.speedtest.net/api/js/servers?engine=js&limit=100")
set(SpeedTest_IP_INFO_API_URL "https://api.ipapi.is/")
set(SpeedTest_API_URL "http://www.speedtest.net/api/api.php")
set(SpeedTest_API_REFERER "http://c.speedtest.net/flash/speedtest.swf")
set(SpeedTest_API_KEY "297aae72")
set(SpeedTest_MIN_SERVER_VERSION "2.3")
set(SpeedTest_LATENCY_SAMPLE_SIZE 80)
set(SpeedTest_CONNECT_TIMEOUT_SEC 5)
set(SpeedTest_QUALITY_SAMPLE_SIZE 60)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(ENABLE_STATIC "Prefer static linking for C++ runtime and available static libraries" OFF)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
add_compile_options(-Wall -Wno-unused-result -Wno-pessimizing-move -Wno-deprecated-declarations)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
set(SOURCE_FILES
main.cpp
SpeedTest.cpp
SpeedTest.h
SpeedTestClient.cpp
SpeedTestClient.h
TestConfigTemplate.h
MD5Util.cpp
MD5Util.h
DataTypes.h
CaCerts.h
CmdOptions.h
ServerSelector.cpp
ServerSelector.h
RunHistory.cpp
RunHistory.h
Internetometer.cpp
Internetometer.h)
configure_file(
"${PROJECT_SOURCE_DIR}/SpeedTestConfig.h.in"
"${PROJECT_BINARY_DIR}/SpeedTestConfig.h"
)
include_directories("${PROJECT_BINARY_DIR}")
add_executable(SpeedTest ${SOURCE_FILES})
include(CheckIncludeFiles)
find_package(PkgConfig QUIET)
find_package(CURL REQUIRED)
find_package(LibXml2 REQUIRED)
find_package(Threads REQUIRED)
set(EXTRA_LIBS Threads::Threads)
if(NOT APPLE)
find_package(OpenSSL REQUIRED)
if(OPENSSL_INCLUDE_DIR)
include_directories(${OPENSSL_INCLUDE_DIR})
endif()
list(APPEND EXTRA_LIBS ${OPENSSL_LIBRARIES})
else()
check_include_files("CommonCrypto/CommonDigest.h" HAVE_COMMON_DIGEST_H)
endif()
if(ENABLE_STATIC)
# pkg-config's *_STATIC_LDFLAGS keeps -L/-l in the order the static
# archives need, which plain *_STATIC_LIBRARIES does not.
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_CURL QUIET libcurl)
pkg_check_modules(PC_LIBXML QUIET libxml-2.0)
pkg_check_modules(PC_OPENSSL QUIET openssl)
endif()
if(PC_CURL_STATIC_LDFLAGS AND PC_LIBXML_STATIC_LDFLAGS)
# Use the static dependency chain instead of the shared .so targets.
set(STATIC_DEPS ${PC_CURL_STATIC_LDFLAGS} ${PC_LIBXML_STATIC_LDFLAGS} ${PC_OPENSSL_STATIC_LDFLAGS})
list(REMOVE_DUPLICATES STATIC_DEPS)
set(SPEEDTEST_LINK_STATIC ON)
else()
message(WARNING "ENABLE_STATIC: no static libcurl/libxml2 found via pkg-config; "
"only the C++ runtime will be linked statically. "
"Use Dockerfile.static for a fully portable binary.")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
if(SPEEDTEST_LINK_STATIC)
include(CheckCXXSourceCompiles)
set(CMAKE_REQUIRED_FLAGS "-static")
check_cxx_source_compiles("int main(){return 0;}" HAVE_FULLY_STATIC_LINK)
unset(CMAKE_REQUIRED_FLAGS)
if(HAVE_FULLY_STATIC_LINK)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
endif()
endif()
endif()
endif()
include_directories(${CURL_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR})
if(SPEEDTEST_LINK_STATIC)
# Deliberately not ${EXTRA_LIBS} here: it carries the shared libssl.so from
# find_package(OpenSSL), which -static cannot link. The static OpenSSL comes
# in through pkg-config's flags instead.
target_link_libraries(SpeedTest PRIVATE ${STATIC_DEPS} Threads::Threads)
else()
target_link_libraries(SpeedTest PRIVATE ${CURL_LIBRARIES} ${LIBXML2_LIBRARIES} ${EXTRA_LIBS})
endif()
install(TARGETS SpeedTest RUNTIME DESTINATION bin)
# Shell completions. Both directories are on the default lookup path of their
# shell for any of the usual install prefixes (/usr, /usr/local).
install(FILES completions/SpeedTest.fish DESTINATION share/fish/vendor_completions.d OPTIONAL)
install(FILES completions/_SpeedTest DESTINATION share/zsh/site-functions OPTIONAL)