Skip to content

Commit 40fef98

Browse files
committed
add hunter to CMake
1 parent 512d86b commit 40fef98

File tree

3 files changed

+631
-18
lines changed

3 files changed

+631
-18
lines changed

CMakeLists.txt

+82-18
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,58 @@ cmake_minimum_required(VERSION 3.4)
22

33
option(BUILD_OPUSURL "Build opusurl library" ON)
44

5-
project(opusfile C)
6-
7-
if(MSVC)
8-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4244 /wd4090")
5+
option(HUNTER_ENABLED "Enable Hunter package manager" OFF)
6+
7+
if(HUNTER_ENABLED)
8+
include(cmake/HunterGate.cmake)
9+
HunterGate(
10+
URL "https://github.com/cpp-pm/hunter/archive/v0.23.264.tar.gz"
11+
SHA1 "45ab668f0923fc3ace807a34d971e34ce7428dfd"
12+
)
913
endif()
1014

11-
find_path(OGG_INCLUDE_DIR ogg/ogg.h)
12-
find_library(OGG_LIBRARY ogg)
1315

14-
find_path(OPUS_INCLUDE_DIR opus.h PATH_SUFFIXES opus)
15-
find_library(OPUS_LIBRARY opus)
16+
project(opusfile VERSION 0.12 LANGUAGES C)
17+
18+
if(HUNTER_ENABLED)
19+
hunter_add_package(libogg)
20+
find_package(libogg CONFIG REQUIRED)
21+
set(OGG_LIBRARY libogg::ogg)
22+
get_target_property(OGG_INCLUDE_DIR libogg::ogg INTERFACE_INCLUDE_DIRECTORIES)
23+
24+
hunter_add_package(Opus)
25+
find_package(Opus CONFIG REQUIRED)
26+
set(OPUS_LIBRARY Opus::opus)
27+
get_target_property(OPUS_INCLUDE_DIR Opus::opus INTERFACE_INCLUDE_DIRECTORIES)
28+
set(OPUS_INCLUDE_DIR ${OPUS_INCLUDE_DIR} ${OPUS_INCLUDE_DIR}/opus)
29+
else()
30+
find_path(OGG_INCLUDE_DIR ogg/ogg.h)
31+
find_library(OGG_LIBRARY ogg)
32+
33+
find_path(OPUS_INCLUDE_DIR opus.h PATH_SUFFIXES opus)
34+
find_library(OPUS_LIBRARY opus)
35+
endif()
1636

1737
add_library(opusfile
1838
src/info.c
1939
src/internal.c
2040
src/opusfile.c
2141
src/stream.c)
2242

43+
if(MSVC)
44+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4244 /wd4090")
45+
endif()
46+
2347
target_include_directories(opusfile PRIVATE include PUBLIC ${OGG_INCLUDE_DIR} ${OPUS_INCLUDE_DIR})
2448
target_link_libraries(opusfile PRIVATE ${OGG_LIBRARY} ${OPUS_LIBRARY})
2549

26-
install(TARGETS opusfile
27-
RUNTIME DESTINATION bin
28-
LIBRARY DESTINATION lib
29-
ARCHIVE DESTINATION lib)
50+
set(INSTALL_TARGETS opusfile)
3051

3152
if(BUILD_OPUSURL)
53+
if(HUNTER_ENABLED)
54+
hunter_add_package(OpenSSL)
55+
endif()
56+
3257
find_package(OpenSSL MODULE REQUIRED)
3358

3459
set(opusurl_src
@@ -50,11 +75,50 @@ if(BUILD_OPUSURL)
5075
target_link_libraries(opusurl PRIVATE ws2_32.lib crypt32.lib)
5176
endif()
5277

53-
install(TARGETS opusurl
54-
RUNTIME DESTINATION bin
55-
LIBRARY DESTINATION lib
56-
ARCHIVE DESTINATION lib)
78+
list(APPEND INSTALL_TARGETS opusurl)
5779
endif()
5880

59-
install(FILES include/opusfile.h
60-
DESTINATION include/opus)
81+
include(GNUInstallDirs)
82+
include(CMakePackageConfigHelpers)
83+
84+
set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
85+
set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
86+
set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
87+
set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
88+
set(targets_export_name "${PROJECT_NAME}Targets")
89+
set(namespace "${PROJECT_NAME}::")
90+
91+
install(TARGETS ${INSTALL_TARGETS}
92+
EXPORT "${targets_export_name}"
93+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
94+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
95+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
96+
FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
97+
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
98+
)
99+
100+
install(
101+
FILES ${CMAKE_SOURCE_DIR}/include/opusfile.h
102+
DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/opus
103+
)
104+
105+
write_basic_package_version_file(
106+
"${version_config}" COMPATIBILITY SameMajorVersion
107+
)
108+
109+
configure_package_config_file(
110+
"cmake/template/Config.cmake.in"
111+
"${project_config}"
112+
INSTALL_DESTINATION "${config_install_dir}"
113+
)
114+
115+
install(
116+
FILES "${project_config}" "${version_config}"
117+
DESTINATION "${config_install_dir}"
118+
)
119+
120+
install(
121+
EXPORT "${targets_export_name}"
122+
NAMESPACE "${namespace}"
123+
DESTINATION "${config_install_dir}"
124+
)

0 commit comments

Comments
 (0)