forked from xiph/opusfile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
129 lines (100 loc) · 3.53 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
cmake_minimum_required(VERSION 3.4)
option(BUILD_OPUSURL "Build opusurl library" OFF)
option(HUNTER_ENABLED "Enable Hunter package manager" OFF)
if(HUNTER_ENABLED)
include(cmake/HunterGate.cmake)
HunterGate(
URL "https://github.com/cpp-pm/hunter/archive/v0.23.265.tar.gz"
SHA1 "eae0bb5b7b8aa968e0ff87ec51be51b4255db110"
)
endif()
project(opusfile VERSION 0.12 LANGUAGES C)
if(HUNTER_ENABLED)
hunter_add_package(libogg)
find_package(libogg CONFIG REQUIRED)
set(OGG_LIBRARY libogg::ogg)
get_target_property(OGG_INCLUDE_DIR libogg::ogg INTERFACE_INCLUDE_DIRECTORIES)
set(OGG_INCLUDE_DIR $<BUILD_INTERFACE:${OGG_INCLUDE_DIR}>)
hunter_add_package(Opus)
find_package(Opus CONFIG REQUIRED)
set(OPUS_LIBRARY Opus::opus)
get_target_property(OPUS_INCLUDE_DIR Opus::opus INTERFACE_INCLUDE_DIRECTORIES)
set(OPUS_INCLUDE_DIR $<BUILD_INTERFACE:${OPUS_INCLUDE_DIR}> $<BUILD_INTERFACE:${OPUS_INCLUDE_DIR}/opus> $<INSTALL_INTERFACE:include/opus>)
else()
find_path(OGG_INCLUDE_DIR ogg/ogg.h)
find_library(OGG_LIBRARY ogg)
find_path(OPUS_INCLUDE_DIR opus.h PATH_SUFFIXES opus)
find_library(OPUS_LIBRARY opus)
endif()
add_library(opusfile
src/info.c
src/internal.c
src/opusfile.c
src/stream.c)
if(MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4244 /wd4090")
endif()
target_include_directories(opusfile PRIVATE include PUBLIC ${OGG_INCLUDE_DIR} ${OPUS_INCLUDE_DIR})
target_link_libraries(opusfile PRIVATE ${OGG_LIBRARY} ${OPUS_LIBRARY})
set(INSTALL_TARGETS opusfile)
if(BUILD_OPUSURL)
if(HUNTER_ENABLED)
hunter_add_package(OpenSSL)
endif()
find_package(OpenSSL MODULE REQUIRED)
set(opusurl_src
src/http.c
src/internal.c)
if(MSVC)
list(APPEND opusurl_src
src/wincerts.c)
endif()
add_library(opusurl ${opusurl_src})
target_compile_definitions(opusurl PRIVATE OP_ENABLE_HTTP)
if(ANDROID)
target_compile_definitions(opusurl PRIVATE OP_HAVE_CLOCK_GETTIME)
endif()
target_include_directories(opusurl PRIVATE include)
target_link_libraries(opusurl PRIVATE opusfile OpenSSL::SSL)
if(MSVC)
target_link_libraries(opusurl PRIVATE ws2_32.lib crypt32.lib)
endif()
list(APPEND INSTALL_TARGETS opusurl)
endif()
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
set(targets_export_name "${PROJECT_NAME}Targets")
set(namespace "${PROJECT_NAME}::")
install(TARGETS ${INSTALL_TARGETS}
EXPORT "${targets_export_name}"
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(
FILES ${CMAKE_SOURCE_DIR}/include/opusfile.h
DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/opus
)
write_basic_package_version_file(
"${version_config}" COMPATIBILITY SameMajorVersion
)
configure_package_config_file(
"cmake/template/Config.cmake.in"
"${project_config}"
INSTALL_DESTINATION "${config_install_dir}"
)
install(
FILES "${project_config}" "${version_config}"
DESTINATION "${config_install_dir}"
)
install(
EXPORT "${targets_export_name}"
NAMESPACE "${namespace}"
DESTINATION "${config_install_dir}"
)