From dc47f4296fccd900996c2725be295a243fe03430 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 15 May 2022 17:16:36 +0100 Subject: [PATCH] Add way of disabling flac and vorbis support --- .github/workflows/ci.yml | 4 +- src/openrct2-ui/CMakeLists.txt | 53 ++++++++++++++++++----- src/openrct2-ui/audio/FlacAudioSource.cpp | 16 +++++-- src/openrct2-ui/audio/OggAudioSource.cpp | 18 +++++--- 4 files changed, 68 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 399e51a363..c8b30b3cb1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -355,7 +355,7 @@ jobs: echo 'Image not pushed' fi linux-clang: - name: Linux (Debug, [http, network, OpenGL] disabled) using clang + name: Linux (Debug, [http, network, flac, vorbis OpenGL] disabled) using clang runs-on: ubuntu-latest needs: check-code-formatting container: openrct2/openrct2-build:8-jammy @@ -369,7 +369,7 @@ jobs: - name: Install GCC problem matcher uses: ammaraskar/gcc-problem-matcher@master - name: Build OpenRCT2 - run: . scripts/setenv && build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DDISABLE_NETWORK=ON -DDISABLE_HTTP=ON -DDISABLE_OPENGL=ON + run: . scripts/setenv && build -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DDISABLE_NETWORK=ON -DDISABLE_HTTP=ON -DDISABLE_FLAC=ON -DDISABLE_VORBIS=ON -DDISABLE_OPENGL=ON android: name: Android runs-on: ubuntu-latest diff --git a/src/openrct2-ui/CMakeLists.txt b/src/openrct2-ui/CMakeLists.txt index 10717a34d1..731b3b8a43 100644 --- a/src/openrct2-ui/CMakeLists.txt +++ b/src/openrct2-ui/CMakeLists.txt @@ -5,18 +5,31 @@ if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR) endif () # Options -option(DISABLE_OPENGL "Disable OpenGL support.") +option(DISABLE_FLAC "Disable FLAC support.") +option(DISABLE_VORBIS "Disable OGG/VORBIS support.") +option(DISABLE_OPENGL "Disable OpenGL support.") # Third party libraries if (MSVC) find_package(SDL2 REQUIRED) find_library(SPEEX_LDFLAGS libspeexdsp) + if (NOT DISABLE_FLAC) + find_library(SPEEX_LDFLAGS libflac) + endif () + if (NOT DISABLE_VORBIS) + find_library(SPEEX_LDFLAGS libogg) + find_library(SPEEX_LDFLAGS libvorbis) + endif () else () PKG_CHECK_MODULES(SDL2 REQUIRED IMPORTED_TARGET sdl2) PKG_CHECK_MODULES(SPEEX REQUIRED IMPORTED_TARGET speexdsp) - PKG_CHECK_MODULES(OGG REQUIRED IMPORTED_TARGET ogg) - PKG_CHECK_MODULES(VORBISFILE REQUIRED IMPORTED_TARGET vorbisfile) - PKG_CHECK_MODULES(FLAC REQUIRED IMPORTED_TARGET flac) + if (NOT DISABLE_FLAC) + PKG_CHECK_MODULES(FLAC REQUIRED IMPORTED_TARGET flac) + endif () + if (NOT DISABLE_VORBIS) + PKG_CHECK_MODULES(OGG REQUIRED IMPORTED_TARGET ogg) + PKG_CHECK_MODULES(VORBISFILE REQUIRED IMPORTED_TARGET vorbisfile) + endif () endif () if (NOT DISABLE_OPENGL) @@ -50,20 +63,30 @@ ipo_set_target_properties(${PROJECT_NAME}) if (NOT MSVC AND NOT WIN32) target_link_libraries(${PROJECT_NAME} "libopenrct2" PkgConfig::SDL2 - PkgConfig::SPEEX - PkgConfig::OGG - PkgConfig::VORBISFILE - PkgConfig::FLAC) + PkgConfig::SPEEX) else () target_link_libraries(${PROJECT_NAME} "libopenrct2" ${SDL2_LDFLAGS} - ${SPEEX_LDFLAGS} - ${OGG_LDFLAGS} - ${VORBIS_LDFLAGS} - ${FLAC_LDFLAGS}) + ${SPEEX_LDFLAGS}) endif () target_link_platform_libraries(${PROJECT_NAME}) +if (NOT DISABLE_FLAC) + if (NOT MSVC AND NOT WIN32) + target_link_libraries(${PROJECT_NAME} PkgConfig::FLAC) + else () + target_link_libraries(${PROJECT_NAME} ${FLAC_LDFLAGS}) + endif () +endif () + +if (NOT DISABLE_VORBIS) + if (NOT MSVC AND NOT WIN32) + target_link_libraries(${PROJECT_NAME} PkgConfig::OGG PkgConfig::VORBISFILE) + else () + target_link_libraries(${PROJECT_NAME} ${OGG_LDFLAGS} ${VORBISFILE_LDFLAGS}) + endif () +endif () + if (NOT DISABLE_OPENGL) if (WIN32) target_link_libraries(${PROJECT_NAME} opengl32) @@ -114,6 +137,12 @@ if (MSVC) endif () # Defines +if (DISABLE_FLAC) + add_definitions(-DDISABLE_FLAC) +fi () +if (DISABLE_VORBIS) + add_definitions(-DDISABLE_VORBIS) +fi () if (DISABLE_OPENGL) add_definitions(-DDISABLE_OPENGL) else () diff --git a/src/openrct2-ui/audio/FlacAudioSource.cpp b/src/openrct2-ui/audio/FlacAudioSource.cpp index 6b9e7827fd..f9ee3e646b 100644 --- a/src/openrct2-ui/audio/FlacAudioSource.cpp +++ b/src/openrct2-ui/audio/FlacAudioSource.cpp @@ -9,12 +9,15 @@ #include "SDLAudioSource.h" -#include -#include -#include +#ifndef DISABLE_FLAC +# include +# include +# include +#endif namespace OpenRCT2::Audio { +#ifndef DISABLE_FLAC /** * An audio source which decodes a FLAC stream. */ @@ -311,14 +314,19 @@ namespace OpenRCT2::Audio { } }; +#endif std::unique_ptr CreateFlacAudioSource(SDL_RWops* rw) { +#ifndef DISABLE_FLAC auto source = std::make_unique(); if (!source->LoadFlac(rw)) { - source = nullptr; + throw std::runtime_error("Unable to load FLAC stream"); } return source; +#else + throw std::runtime_error("OpenRCT2 has not been compiled with FLAC support"); +#endif } } // namespace OpenRCT2::Audio diff --git a/src/openrct2-ui/audio/OggAudioSource.cpp b/src/openrct2-ui/audio/OggAudioSource.cpp index 48f5a3c42f..eb77491784 100644 --- a/src/openrct2-ui/audio/OggAudioSource.cpp +++ b/src/openrct2-ui/audio/OggAudioSource.cpp @@ -9,13 +9,16 @@ #include "SDLAudioSource.h" -#include -#include -#include -#include +#ifndef DISABLE_VORBIS +# include +# include +# include +# include +#endif namespace OpenRCT2::Audio { +#ifndef DISABLE_VORBIS /** * An audio source which decodes a OGG/Vorbis stream. */ @@ -147,14 +150,19 @@ namespace OpenRCT2::Audio return static_cast(SDL_RWtell(reinterpret_cast(datasource))); } }; +#endif std::unique_ptr CreateOggAudioSource(SDL_RWops* rw) { +#ifndef DISABLE_VORBIS auto source = std::make_unique(); if (!source->LoadOgg(rw)) { - source = nullptr; + throw std::runtime_error("Unable to load OGG/vorbis stream"); } return source; +#else + throw std::runtime_error("OpenRCT2 has not been compiled with OGG/vorbis support"); +#endif } } // namespace OpenRCT2::Audio