| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file LICENSE.rst or https://cmake.org/licensing for details. |
| |
| #[=======================================================================[.rst: |
| FindOpenAL |
| ---------- |
| |
| Finds the Open Audio Library (OpenAL). |
| |
| OpenAL is a cross-platform 3D audio API designed for efficient rendering of |
| multichannel three-dimensional positional audio. It is commonly used in games |
| and multimedia applications to provide immersive and spatialized sound. |
| |
| Projects using this module should include the OpenAL header file using |
| ``#include <al.h>``, and **not** ``#include <AL/al.h>``. The reason for this is |
| that the latter is not portable. For example, Windows/Creative Labs does not by |
| default put OpenAL headers in ``AL/`` and macOS uses the convention of |
| ``<OpenAL/al.h>``. |
| |
| Imported Targets |
| ^^^^^^^^^^^^^^^^ |
| |
| This module provides the following :ref:`Imported Targets`: |
| |
| ``OpenAL::OpenAL`` |
| .. versionadded:: 3.25 |
| |
| Target encapsulating the OpenAL library usage requirements, available only if |
| the OpenAL library is found. |
| |
| Result Variables |
| ^^^^^^^^^^^^^^^^ |
| |
| This module defines the following variables: |
| |
| ``OpenAL_FOUND`` |
| Boolean indicating whether the OpenAL is found. For backward compatibility, |
| the ``OPENAL_FOUND`` variable is also set to the same value. |
| ``OPENAL_VERSION_STRING`` |
| Human-readable string containing the version of OpenAL found. |
| |
| Cache Variables |
| ^^^^^^^^^^^^^^^ |
| |
| The following cache variables may also be set: |
| |
| ``OPENAL_INCLUDE_DIR`` |
| The include directory containing headers needed to use the OpenAL library. |
| ``OPENAL_LIBRARY`` |
| The path to the OpenAL library. |
| |
| Hints |
| ^^^^^ |
| |
| This module accepts the following variables: |
| |
| ``OPENALDIR`` |
| Environment variable which can be used to set the installation prefix of |
| OpenAL to be found in non-standard locations. |
| |
| OpenAL is searched in the following order: |
| |
| 1. By default on macOS, system framework is searched first: |
| ``/System/Library/Frameworks``, whose priority can be changed by setting |
| the :variable:`CMAKE_FIND_FRAMEWORK` variable. |
| 2. Environment variable ``ENV{OPENALDIR}``. |
| 3. System paths. |
| 4. User-compiled framework: ``~/Library/Frameworks``. |
| 5. Manually compiled framework: ``/Library/Frameworks``. |
| 6. Add-on package: ``/opt``. |
| |
| Examples |
| ^^^^^^^^ |
| |
| Finding the OpenAL library and linking it to a project target: |
| |
| .. code-block:: cmake |
| |
| find_package(OpenAL) |
| target_link_libraries(project_target PRIVATE OpenAL::OpenAL) |
| #]=======================================================================] |
| |
| # For Windows, Creative Labs seems to have added a registry key for their |
| # OpenAL 1.1 installer. I have added that key to the list of search paths, |
| # however, the key looks like it could be a little fragile depending on |
| # if they decide to change the 1.00.0000 number for bug fix releases. |
| # Also, they seem to have laid down groundwork for multiple library platforms |
| # which puts the library in an extra subdirectory. Currently there is only |
| # Win32 and I have hardcoded that here. This may need to be adjusted as |
| # platforms are introduced. |
| # The OpenAL 1.0 installer doesn't seem to have a useful key I can use. |
| # I do not know if the Nvidia OpenAL SDK has a registry key. |
| |
| find_path(OPENAL_INCLUDE_DIR al.h |
| HINTS |
| ENV OPENALDIR |
| PATHS |
| ~/Library/Frameworks |
| /Library/Frameworks |
| /opt |
| [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir] |
| PATH_SUFFIXES include/AL include/OpenAL include AL OpenAL |
| ) |
| |
| if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
| set(_OpenAL_ARCH_DIR libs/Win64) |
| else() |
| set(_OpenAL_ARCH_DIR libs/Win32) |
| endif() |
| |
| find_library(OPENAL_LIBRARY |
| NAMES OpenAL al openal OpenAL32 |
| HINTS |
| ENV OPENALDIR |
| PATHS |
| ~/Library/Frameworks |
| /Library/Frameworks |
| /opt |
| [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir] |
| PATH_SUFFIXES libx32 lib64 lib libs64 libs ${_OpenAL_ARCH_DIR} |
| ) |
| |
| unset(_OpenAL_ARCH_DIR) |
| |
| include(FindPackageHandleStandardArgs) |
| find_package_handle_standard_args( |
| OpenAL |
| REQUIRED_VARS OPENAL_LIBRARY OPENAL_INCLUDE_DIR |
| VERSION_VAR OPENAL_VERSION_STRING |
| ) |
| |
| mark_as_advanced(OPENAL_LIBRARY OPENAL_INCLUDE_DIR) |
| |
| if(OpenAL_FOUND AND NOT TARGET OpenAL::OpenAL) |
| add_library(OpenAL::OpenAL UNKNOWN IMPORTED) |
| set_target_properties(OpenAL::OpenAL PROPERTIES |
| IMPORTED_LOCATION "${OPENAL_LIBRARY}") |
| set_target_properties(OpenAL::OpenAL PROPERTIES |
| INTERFACE_INCLUDE_DIRECTORIES "${OPENAL_INCLUDE_DIR}") |
| endif() |