# FindSDL_sound

Finds the SDL_sound library, an abstract soundfile decoder for use in SDL (Simple DirectMedia Layer) applications.

Note

This module is specifically intended for SDL_sound version 1. Starting with version 2.0.2, SDL_sound provides a CMake package configuration file when built with CMake and should be found using `find_package(SDL2_sound)`. These newer versions provide Imported Targets that encapsulate usage requirements. Refer to the upstream SDL_sound documentation for more information.

Note

This module depends on SDL being found and must be called after the `find_package(SDL)`.

Depending on how the SDL_sound library is built, it may require additional dependent libraries to be found for this module to succeed. These dependencies may include MikMod, ModPlug, Ogg, Vorbis, SMPEG, FLAC, and Speex.

## Result Variables

This module defines the following variables:

`SDL_sound_FOUND`

  Boolean indicating whether the (requested version of) SDL_sound library is found. For backward compatibility, the `SDL_SOUND_FOUND` variable is also set to the same value.

`SDL_SOUND_VERSION_STRING`

  The human-readable string containing the version of SDL_sound found.

`SDL_SOUND_LIBRARIES`

  Libraries needed to link against to use the SDL_sound library.

## Cache Variables

The following cache variables may also be set:

`SDL_SOUND_INCLUDE_DIR`

  The directory containing the `SDL_sound.h` and other headers needed to use the SDL_sound library.

`SDL_SOUND_LIBRARY`

  The name of just the SDL_sound library you would link against. Use `SDL_SOUND_LIBRARIES` for the link instructions and not this one.

`MIKMOD_LIBRARY`

  The path to the dependent MikMod library.

`MODPLUG_LIBRARY`

  The path to the dependent ModPlug library (libmodplug).

`OGG_LIBRARY`

  The path to the dependent Ogg library.

`VORBIS_LIBRARY`

  The path to the dependent Vorbis library.

`SMPEG_LIBRARY`

  The path to the dependent SMPEG library.

`FLAC_LIBRARY`

  The path to the dependent FLAC library.

`SPEEX_LIBRARY`

  The path to the dependent Speex library.

## Hints

This module accepts the following variables:

`SDLDIR`

  Environment variable that can be set to help locate an SDL library installed in a custom location. It should point to the installation destination that was used when configuring, building, and installing SDL library: `./configure --prefix=$SDLDIR`.

  On macOS, setting this variable will prefer the Framework version (if found) over others. In this case, the cache value of `SDL_LIBRARY` would need to be manually changed to override this selection or set the `CMAKE_INCLUDE_PATH` variable to modify the search paths.

`SDLSOUNDDIR`

  Environment variable that works the same as `SDLDIR`.

`SDL_SOUND_EXTRAS`

  This is an optional cache variable that can be used to add additional flags that are prepended to the `SDL_SOUND_LIBRARIES` result variable. This is available mostly for cases this module failed to anticipate for and additional flags must be added.

## Examples

Finding SDL_sound library and creating an imported interface target for linking it to a project target:

    find_package(SDL)
    find_package(SDL_sound)

    if(SDL_sound_FOUND AND NOT TARGET SDL::SDL_sound)
      add_library(SDL::SDL_sound INTERFACE IMPORTED)
      set_target_properties(
        SDL::SDL_sound
        PROPERTIES
          INTERFACE_INCLUDE_DIRECTORIES "${SDL_SOUND_INCLUDE_DIR}"
          INTERFACE_LINK_LIBRARIES "${SDL_SOUND_LIBRARIES}"
      )

      # Append the SDL dependency as imported target to be transitively linked:
      set_property(
        TARGET SDL::SDL_sound
        APPEND
        PROPERTY INTERFACE_LINK_LIBRARIES SDL::SDL
      )
    endif()

    target_link_libraries(project_target PRIVATE SDL::SDL_sound)

When working with SDL_sound version 2, the upstream package provides the `SDL2_sound::SDL2_sound` imported target directly. It can be used in a project without using this module:

    find_package(SDL2_sound)
    target_link_libraries(project_target PRIVATE SDL2_sound::SDL2_sound)

## See Also

- The `FindSDL` module to find the main SDL library.