From 6cd2b6cded1d7281df7584d7fad9ccb1d1022243 Mon Sep 17 00:00:00 2001 From: Vitaliy Kirsanov Date: Sun, 7 Apr 2019 12:37:56 +0300 Subject: [PATCH] FindOGG.cmake module added --- CMakeLists.txt | 13 ++++++++++++- cmake/FindOGG.cmake | 34 ++++++++++++++++++++++++++++++++++ flac-config.cmake.in | 6 ++++++ src/CMakeLists.txt | 5 ----- src/libFLAC/CMakeLists.txt | 10 +++++++++- 5 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 cmake/FindOGG.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index a4870fe5..e1166db5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,10 +6,14 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") option(BUILD_CXXLIBS "Build libFLAC++" ON) option(BUILD_EXAMPLES "Build and install examples" ON) +option(WITH_OGG "ogg support (default: test for libogg)" ON) + +if(WITH_OGG) + find_package(OGG REQUIRED) +endif() if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return -Wcast-align -Wnested-externs -Wshadow -Wundef -Wmissing-declarations -Winline") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-align -Wshadow -Wwrite-strings -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder -Wsign-promo -Wundef") if(CMAKE_BULD_TYPE STREQUAL Release) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -funroll-loops") @@ -17,6 +21,12 @@ if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") option(ENABLE_SSP "Enable GNU GCC stack smash protection" OFF) endif() +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-align -Wshadow -Wwrite-strings -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder -Wsign-promo -Wundef") +endif() +if(CMAKE_C_COMPILER_ID MATCHES "GNU") + set(CMAKE_EXE_LINKER_FLAGS -no-pie) +endif() include(CMakePackageConfigHelpers) include(CPack) @@ -114,6 +124,7 @@ install( FILES "${CMAKE_CURRENT_BINARY_DIR}/flac-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/flac-config-version.cmake" + "cmake/FindOGG.cmake" DESTINATION "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/cmake") file(GLOB FLAC_HEADERS "include/FLAC/*.h") diff --git a/cmake/FindOGG.cmake b/cmake/FindOGG.cmake new file mode 100644 index 00000000..a7b2840f --- /dev/null +++ b/cmake/FindOGG.cmake @@ -0,0 +1,34 @@ +find_package(PkgConfig) +pkg_check_modules(_OGG QUIET ogg) + +find_path(_OGG_INCLUDE_DIR + NAMES "ogg/ogg.h" + PATHS ${_OGG_INCLUDE_DIRS}) + +find_library(_OGG_LIBRARY + NAMES ogg libogg + HINTS ${_OGG_LIBRARY_DIRS}) + +find_library(_OGG_LIBRARY_STATIC + NAMES libogg.a libogg_static + HINTS ${_OGG_LIBRARY_DIRS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OGG + REQUIRED_VARS _OGG_INCLUDE_DIR _OGG_LIBRARY + VERSION_VAR _OGG_VERSION) + +if(OGG_FOUND) + if(NOT Ogg::Ogg) + add_library(Ogg::Ogg UNKNOWN IMPORTED) + set_target_properties(Ogg::Ogg PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_OGG_INCLUDE_DIR}" + IMPORTED_LOCATION "${_OGG_LIBRARY}") + endif() + if(NOT Ogg::Ogg-static AND _OGG_LIBRARY_STATIC) + add_library(Ogg::Ogg-static STATIC IMPORTED) + set_target_properties(Ogg::Ogg-static PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_OGG_INCLUDE_DIR}" + IMPORTED_LOCATION "${_OGG_LIBRARY_STATIC}") + endif() +endif() diff --git a/flac-config.cmake.in b/flac-config.cmake.in index 89c6e7d0..154d0b86 100644 --- a/flac-config.cmake.in +++ b/flac-config.cmake.in @@ -1,3 +1,9 @@ @PACKAGE_INIT@ +if(@OGG_FOUND@) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") + include(CMakeFindDependencyMacro) + find_dependency(OGG) +endif() + include("${CMAKE_CURRENT_LIST_DIR}/targets.cmake") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7de7a7fa..f6577467 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,13 +1,8 @@ cmake_minimum_required(VERSION 3.12) option(ENABLE_64_BIT_WORDS "Set FLAC__BYTES_PER_WORD to 8 (4 is the default)" OFF) -option(WITH_OGG "ogg support (default: test for libogg)" ON) option(WITH_XMMS "Build XMMS plugin" OFF) -if(WITH_OGG) - find_package(OGG REQUIRED) -endif() - check_include_file("iconv.h" HAVE_ICONV_H) add_compile_definitions( diff --git a/src/libFLAC/CMakeLists.txt b/src/libFLAC/CMakeLists.txt index 1ea9383a..13f14751 100644 --- a/src/libFLAC/CMakeLists.txt +++ b/src/libFLAC/CMakeLists.txt @@ -102,9 +102,16 @@ target_include_directories(FLAC-static INTERFACE "$" "$") target_link_libraries(FLAC-static PUBLIC - $ + $ $ $<$:m>) +if(TARGET Ogg::Ogg-static) + target_link_libraries(FLAC-static PUBLIC + $) +elseif(TARGET Ogg::Ogg) + target_link_libraries(FLAC-static PUBLIC + $) +endif() add_library(FLAC SHARED ${SOURCES}) target_compile_definitions(FLAC PRIVATE FLAC_API_EXPORTS FLAC__USE_VISIBILITY_ATTR) @@ -112,6 +119,7 @@ target_include_directories(FLAC INTERFACE "$" "$") target_link_libraries(FLAC PRIVATE + $ $ $<$:m>) set_target_properties(FLAC PROPERTIES C_VISIBILITY_PRESET hidden) -- 2.11.4.GIT