diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 33a1090790..8ba4ce6613 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -207,7 +207,6 @@ jobs: runs-on: macos-latest needs: clang-format env: - MACOSX_DEPLOYMENT_TARGET: 10.15 VCPKG_BUILD_TYPE: release steps: - uses: actions/checkout@v3 diff --git a/CMakePresets.json b/CMakePresets.json index d1dd4a3c79..a395770449 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -25,7 +25,8 @@ "inherits": "fullrelease", "installDir": ".install", "cacheVariables": { - "FREECIV_USE_VCPKG": "ON" + "FREECIV_USE_VCPKG": "ON", + "CMAKE_FIND_PACKAGE_PREFER_CONFIG": "ON" } }, { diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 7ab0ba6686..3c9a847a59 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -165,13 +165,15 @@ endif() if (AUDIO_SDL) target_sources(freeciv21-client PRIVATE audio/audio_sdl.cpp) + # SDL comes with the -s option on emscripten if (NOT EMSCRIPTEN) - # SDL comes with the -s option on emscripten # See https://github.com/microsoft/vcpkg/blob/2023.12.12/ports/sdl2/usage target_link_libraries(freeciv21-client PRIVATE $,SDL2::SDL2,SDL2::SDL2-static>) - target_link_libraries(freeciv21-client PRIVATE ${SDL2_MIXER_LIBRARIES}) - target_include_directories(freeciv21-client PRIVATE ${SDL2_MIXER_INCLUDE_DIR}) + target_link_libraries(freeciv21-client + PRIVATE $, + SDL2_mixer::SDL2_mixer, + SDL2_mixer::SDL2_mixer-static>) endif() endif() diff --git a/cmake/FindSDL2_mixer.cmake b/cmake/FindSDL2_mixer.cmake index 3353eb403b..76eb6e4ad0 100644 --- a/cmake/FindSDL2_mixer.cmake +++ b/cmake/FindSDL2_mixer.cmake @@ -1,14 +1,9 @@ # - Locate SDL2_mixer library # This module defines: -# SDL2_MIXER_LIBRARIES, the name of the library to link against -# SDL2_MIXER_INCLUDE_DIRS, where to find the headers -# SDL2_MIXER_FOUND, if false, do not try to link against -# SDL2_MIXER_VERSION_STRING - human-readable string containing the version of SDL2_mixer -# -# For backward compatiblity the following variables are also set: -# SDLMIXER_LIBRARY (same value as SDL2_MIXER_LIBRARIES) -# SDLMIXER_INCLUDE_DIR (same value as SDL2_MIXER_INCLUDE_DIRS) -# SDLMIXER_FOUND (same value as SDL2_MIXER_FOUND) +# SDL2_mixer_LIBRARIES, the name of the library to link against +# SDL2_mixer_INCLUDE_DIRS, where to find the headers +# SDL2_mixer_FOUND, if false, do not try to link against +# SDL2_mixer_VERSION_STRING - human-readable string containing the version of SDL2_mixer # # $SDLDIR is an environment variable that would # correspond to the ./configure --prefix=$SDLDIR @@ -32,22 +27,14 @@ # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) -if(NOT SDL2_MIXER_INCLUDE_DIR AND SDLMIXER_INCLUDE_DIR) - set(SDL2_MIXER_INCLUDE_DIR ${SDLMIXER_INCLUDE_DIR} CACHE PATH "directory cache -entry initialized from old variable name") -endif() -find_path(SDL2_MIXER_INCLUDE_DIR SDL_mixer.h +find_path(SDL2_mixer_INCLUDE_DIR SDL_mixer.h HINTS ENV SDLMIXERDIR ENV SDLDIR PATH_SUFFIXES include/SDL2 include/SDL2.0 include ) -if(NOT SDL2_MIXER_LIBRARY AND SDLMIXER_LIBRARY) - set(SDL2_MIXER_LIBRARY ${SDLMIXER_LIBRARY} CACHE FILEPATH "file cache entry -initialized from old variable name") -endif() -find_library(SDL2_MIXER_LIBRARY +find_library(SDL2_mixer_LIBRARY NAMES SDL2_mixer HINTS ENV SDLMIXERDIR @@ -55,35 +42,37 @@ find_library(SDL2_MIXER_LIBRARY PATH_SUFFIXES lib ) -if(SDL2_MIXER_INCLUDE_DIR AND EXISTS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h") - file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h" SDL2_MIXER_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+[0-9]+$") - file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h" SDL2_MIXER_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+[0-9]+$") - file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL2_mixer.h" SDL2_MIXER_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+[0-9]+$") - string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MAJOR "${SDL2_MIXER_VERSION_MAJOR_LINE}") - string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MINOR "${SDL2_MIXER_VERSION_MINOR_LINE}") - string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_PATCH "${SDL2_MIXER_VERSION_PATCH_LINE}") - set(SDL2_MIXER_VERSION_STRING ${SDL2_MIXER_VERSION_MAJOR}.${SDL2_MIXER_VERSION_MINOR}.${SDL2_MIXER_VERSION_PATCH}) - unset(SDL2_MIXER_VERSION_MAJOR_LINE) - unset(SDL2_MIXER_VERSION_MINOR_LINE) - unset(SDL2_MIXER_VERSION_PATCH_LINE) - unset(SDL2_MIXER_VERSION_MAJOR) - unset(SDL2_MIXER_VERSION_MINOR) - unset(SDL2_MIXER_VERSION_PATCH) +if(SDL2_mixer_INCLUDE_DIR AND EXISTS "${SDL2_mixer_INCLUDE_DIR}/SDL2_mixer.h") + file(STRINGS "${SDL2_mixer_INCLUDE_DIR}/SDL2_mixer.h" SDL2_mixer_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_mixer_INCLUDE_DIR}/SDL2_mixer.h" SDL2_mixer_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_mixer_INCLUDE_DIR}/SDL2_mixer.h" SDL2_mixer_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_mixer_VERSION_MAJOR "${SDL2_mixer_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_mixer_VERSION_MINOR "${SDL2_mixer_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_mixer_VERSION_PATCH "${SDL2_mixer_VERSION_PATCH_LINE}") + set(SDL2_mixer_VERSION_STRING ${SDL2_mixer_VERSION_MAJOR}.${SDL2_mixer_VERSION_MINOR}.${SDL2_mixer_VERSION_PATCH}) + unset(SDL2_mixer_VERSION_MAJOR_LINE) + unset(SDL2_mixer_VERSION_MINOR_LINE) + unset(SDL2_mixer_VERSION_PATCH_LINE) + unset(SDL2_mixer_VERSION_MAJOR) + unset(SDL2_mixer_VERSION_MINOR) + unset(SDL2_mixer_VERSION_PATCH) endif() -set(SDL2_MIXER_LIBRARIES ${SDL2_MIXER_LIBRARY}) -set(SDL2_MIXER_INCLUDE_DIRS ${SDL2_MIXER_INCLUDE_DIR}) +set(SDL2_mixer_LIBRARIES ${SDL2_mixer_LIBRARY}) +set(SDL2_mixer_INCLUDE_DIRS ${SDL2_mixer_INCLUDE_DIR}) include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_mixer - REQUIRED_VARS SDL2_MIXER_LIBRARIES SDL2_MIXER_INCLUDE_DIRS - VERSION_VAR SDL2_MIXER_VERSION_STRING) + REQUIRED_VARS SDL2_mixer_LIBRARIES SDL2_mixer_INCLUDE_DIRS + VERSION_VAR SDL2_mixer_VERSION_STRING) -# for backward compatiblity -set(SDLMIXER_LIBRARY ${SDL2_MIXER_LIBRARIES}) -set(SDLMIXER_INCLUDE_DIR ${SDL2_MIXER_INCLUDE_DIRS}) -set(SDLMIXER_FOUND ${SDL2_MIXER_FOUND}) +if (SDL2_mixer_FOUND) + add_library(SDL2_mixer::SDL2_mixer UNKNOWN IMPORTED) + set_target_properties(SDL2_mixer::SDL2_mixer PROPERTIES + IMPORTED_LOCATION "${SDL2_mixer_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_mixer_INCLUDE_DIR}") +endif() -mark_as_advanced(SDL2_MIXER_LIBRARY SDL2_MIXER_INCLUDE_DIR) +mark_as_advanced(SDL2_mixer_LIBRARY SDL2_mixer_INCLUDE_DIR) diff --git a/cmake/FreecivDependencies.cmake b/cmake/FreecivDependencies.cmake index 30440ec468..7c24b09a0c 100644 --- a/cmake/FreecivDependencies.cmake +++ b/cmake/FreecivDependencies.cmake @@ -67,16 +67,16 @@ endif() # SDL2 for audio find_package(SDL2) find_package(SDL2_mixer) -if (SDL2_MIXER_LIBRARIES AND SDL2_FOUND) +if (EMSCRIPTEN OR (SDL2_mixer_FOUND AND SDL2_FOUND)) + message(STATUS "Building with audio support enabled") set(AUDIO_SDL TRUE) -endif() -if (NOT SDL2_FOUND) - message(STATUS "SDL2 not found - audio support disabled") -endif() -if (NOT SDL2_MIXER_LIBRARIES) - message(STATUS "SDL2_mixer not found - audio support disabled") - set(SDL2_MIXER_LIBRARIES "") - set(SDL2_MIXER_INCLUDE_DIR "") +else() + if (NOT SDL2_FOUND) + message(STATUS "SDL2 not found - audio support disabled") + endif() + if (NOT SDL2_mixer_FOUND) + message(STATUS "SDL2_mixer not found - audio support disabled") + endif() endif() # Lua diff --git a/docs/Contributing/workarounds.rst b/docs/Contributing/workarounds.rst index d3a4f7a2cc..7b12fbf06b 100644 --- a/docs/Contributing/workarounds.rst +++ b/docs/Contributing/workarounds.rst @@ -7,5 +7,8 @@ Workarounds This page lists workarounds in the code. They should be checked from time to time and removed once they are no longer needed. +#. The file ``cmake/FindSDL2_mixer.cmake`` is needed for SDL2_mixer 2.0, which + didn't have CMake support. CMake support was introduced in SDL2_mixer 2.5, + but Ubuntu 22.04 is stuck with SDL2_mixer 2.0.4. #. The macOS CI installs a fixed Python version to work around a bug in Meson. (``.github/workflows/build.yaml``)