From 1dfc07ecc3d16020c741350e27fd7deab4f822de Mon Sep 17 00:00:00 2001 From: Ben Rosser Date: Thu, 21 Jul 2016 16:22:18 -0400 Subject: [PATCH] If CAUDIO_SYSTEM_OGG is set, use system ogg/vorbis This commit makes it possible to link against system-wide copies of libogg and libvorbis instead of using the bundled dependencies here, by setting -DCAUDIO_SYSTEM_OGG=TRUE at configuration time. By default, CAUDIO_SYSTEM_OGG is False so as to not break any default behavior. --- CMake/Packages/FindOgg.cmake | 28 +++++++++++++++++++++ CMake/Packages/FindVorbis.cmake | 43 +++++++++++++++++++++++++++++++++ CMakeLists.txt | 15 +++++++++--- cAudio/CMakeLists.txt | 6 +++-- 4 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 CMake/Packages/FindOgg.cmake create mode 100644 CMake/Packages/FindVorbis.cmake diff --git a/CMake/Packages/FindOgg.cmake b/CMake/Packages/FindOgg.cmake new file mode 100644 index 0000000..0c564f3 --- /dev/null +++ b/CMake/Packages/FindOgg.cmake @@ -0,0 +1,28 @@ +# - Find ogg +# Find the native ogg includes and libraries +# +# OGG_INCLUDE_DIR - where to find ogg.h, etc. +# OGG_LIBRARIES - List of libraries when using ogg. +# OGG_FOUND - True if ogg found. + +# Taken from the allegro project, licensed under zlib. +# https://raw.githubusercontent.com/liballeg/allegro5/master/cmake/FindOgg.cmake +# https://github.com/liballeg/allegro5/blob/master/LICENSE.txt + +if(OGG_INCLUDE_DIR) + # Already in cache, be silent + set(OGG_FIND_QUIETLY TRUE) +endif(OGG_INCLUDE_DIR) +find_path(OGG_INCLUDE_DIR ogg/ogg.h) +# MSVC built ogg may be named ogg_static. +# The provided project files name the library with the lib prefix. +find_library(OGG_LIBRARY NAMES ogg ogg_static libogg libogg_static) +# Handle the QUIETLY and REQUIRED arguments and set OGG_FOUND +# to TRUE if all listed variables are TRUE. +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OGG DEFAULT_MSG OGG_INCLUDE_DIR OGG_LIBRARY) + +set(OGG_LIBRARIES ${OGG_LIBRARY}) + +mark_as_advanced(OGG_INCLUDE_DIR) +mark_as_advanced(OGG_LIBRARY) diff --git a/CMake/Packages/FindVorbis.cmake b/CMake/Packages/FindVorbis.cmake new file mode 100644 index 0000000..53d3fff --- /dev/null +++ b/CMake/Packages/FindVorbis.cmake @@ -0,0 +1,43 @@ +# - Find vorbis +# Find the native vorbis includes and libraries +# +# VORBIS_INCLUDE_DIR - where to find vorbis.h, etc. +# VORBIS_LIBRARIES - List of libraries when using vorbis(file). +# VORBIS_FOUND - True if vorbis found. + +# Taken from the allegro project, licensed under zlib. +# https://raw.githubusercontent.com/liballeg/allegro5/master/cmake/FindOgg.cmake +# https://github.com/liballeg/allegro5/blob/master/LICENSE.txt + +if(VORBIS_INCLUDE_DIR) + # Already in cache, be silent + set(VORBIS_FIND_QUIETLY TRUE) +endif(VORBIS_INCLUDE_DIR) + +find_package(Ogg) +if(OGG_FOUND) + find_path(VORBIS_INCLUDE_DIR vorbis/vorbisfile.h) + # MSVC built vorbis may be named vorbis_static + # The provided project files name the library with the lib prefix. + find_library(VORBIS_LIBRARY + NAMES vorbis vorbis_static libvorbis libvorbis_static) + find_library(VORBISFILE_LIBRARY + NAMES vorbisfile vorbisfile_static libvorbisfile libvorbisfile_static) + # Handle the QUIETLY and REQUIRED arguments and set VORBIS_FOUND + # to TRUE if all listed variables are TRUE. + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(VORBIS DEFAULT_MSG + VORBIS_INCLUDE_DIR + VORBIS_LIBRARY VORBISFILE_LIBRARY) +endif(OGG_FOUND) + +if(VORBIS_FOUND) + set(VORBIS_LIBRARIES ${VORBISFILE_LIBRARY} ${VORBIS_LIBRARY} + ${OGG_LIBRARY}) +else(VORBIS_FOUND) + set(VORBIS_LIBRARIES) +endif(VORBIS_FOUND) + +mark_as_advanced(VORBIS_INCLUDE_DIR) +mark_as_advanced(VORBIS_LIBRARY VORBISFILE_LIBRARY) + diff --git a/CMakeLists.txt b/CMakeLists.txt index a4afcb8..ed82d8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,7 @@ option(CAUDIO_BUILD_CSHARP_WRAPPER "Build CSharpWrapper - this wrapper is used w option(CAUDIO_BUILD_EAX_PLUGIN "Build EAXLegacyPreset Plugin" FALSE) option(CAUDIO_BUILD_MP3DECODER_PLUGIN "Build mp3Decoder Plugin" FALSE) option(CAUDIO_ENABLE_OGG "Enable OGG decoder" TRUE) +option(CAUDIO_SYSTEM_OGG "Link against system OGG" FALSE) option(CAUDIO_ENABLE_WAV "Enable RIFF/Wav decoder" TRUE) option(CAUDIO_ENABLE_DEFAULT_FILESYSTEM "Enable default filesystem data source" TRUE) option(CAUDIO_ENABLE_DEFAULT_FILE_LOGGER "Enable default file logger (html)" TRUE) @@ -101,8 +102,16 @@ include(Dependencies) include(InstallDependencies) if(CAUDIO_ENABLE_OGG) - add_subdirectory(DependenciesSource/libogg-1.2.2) - add_subdirectory(DependenciesSource/libvorbis-1.3.2) + if(CAUDIO_SYSTEM_OGG) + find_package(Ogg) + find_package(Vorbis) + else() + add_subdirectory(DependenciesSource/libogg-1.2.2) + add_subdirectory(DependenciesSource/libvorbis-1.3.2) + # Set OGG_LIBRARIES, VORBIS_LIBRARIES as appropriate. + set(OGG_LIBRARIES Ogg) + set(VORBIS_LIBRARIES Vorbis) + endif() endif() add_subdirectory(cAudio) @@ -128,4 +137,4 @@ if(CAUDIO_BUILD_SAMPLES) add_subdirectory(Examples/Tutorial5_AudioEffects) add_subdirectory(Examples/Tutorial6_CustomEventHandler) add_subdirectory(Examples/Tutorial7_CustomLogReceiver) -endif() \ No newline at end of file +endif() diff --git a/cAudio/CMakeLists.txt b/cAudio/CMakeLists.txt index 6787837..0bb36ba 100644 --- a/cAudio/CMakeLists.txt +++ b/cAudio/CMakeLists.txt @@ -17,8 +17,10 @@ add_library(cAudio ${CAUDIO_LIB_TYPE} ${file_root}) if(CAUDIO_ENABLE_OGG) include_directories (include Headers ${CMAKE_BINARY_DIR}/include ${OPENAL_INCLUDE_DIRS} ${OGG_INCLUDE_DIR} ${VORBIS_INCLUDE_DIR}) - target_link_libraries(cAudio Vorbis Ogg ${OPENAL_LIBRARIES}) - add_dependencies(cAudio Vorbis Ogg) + target_link_libraries(cAudio ${VORBIS_LIBRARIES} ${OGG_LIBRARIES} ${OPENAL_LIBRARIES}) + if(NOT CAUDIO_SYSTEM_OGG) + add_dependencies(cAudio Vorbis Ogg) + endif() else() include_directories (include Headers ${CMAKE_BINARY_DIR}/include ${OPENAL_INCLUDE_DIRS}) target_link_libraries(cAudio ${OPENAL_LIBRARIES})