summaryrefslogtreecommitdiff
path: root/Modules/FindOpenAL.cmake
diff options
context:
space:
mode:
authorEric Wing <ewing2121@yahoo.com>2007-12-20 20:59:44 -0500
committerEric Wing <ewing2121@yahoo.com>2007-12-20 20:59:44 -0500
commita5b3ab4eee1f11287c69da39b5e742353fdbd372 (patch)
tree4aaf6549ec4f360eb44a05ca3b6568b8783452ff /Modules/FindOpenAL.cmake
parent355b1f23afd6809edb9ed1924c0112d02d4c8f85 (diff)
downloadcmake-a5b3ab4eee1f11287c69da39b5e742353fdbd372.tar.gz
BUG: Fixed modules to set FOO_FOUND when both headers and libraries are found.
BUG: FindSDL now has flag it responds to so it will not find/link against SDLmain. This is required to build libraries instead of applications since they don't have main(). ENH: All modules have a predictable search order, where environmental variables are searched before system paths. This is designed to make automation easier for those that need to automatically build projects without intervention but may be using alternative install locations for isolated testing. ENH: New modules for OpenSceneGraph, Freetype, GDAL, Lua, QuickTime, GIFLIB, Producer, OpenThreads. STYLE: Added documentation explaining peculuar SDL_LIBRARY_TEMP variable in SDL module when library find is incomplete.
Diffstat (limited to 'Modules/FindOpenAL.cmake')
-rw-r--r--Modules/FindOpenAL.cmake151
1 files changed, 99 insertions, 52 deletions
diff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake
index 0bc791b18b..f5a189ef93 100644
--- a/Modules/FindOpenAL.cmake
+++ b/Modules/FindOpenAL.cmake
@@ -1,62 +1,109 @@
-# - Locate OpenAL
+# Locate OpenAL
# This module defines
-# OPENAL_LIBRARY
-# OPENAL_FOUND, if false, do not try to link to OpenAL
-# OPENAL_INCLUDE_DIR, where to find the headers
-#
+# OPENAL_LIBRARY
+# OPENAL_FOUND, if false, do not try to link to OpenAL
+# OPENAL_INCLUDE_DIR, where to find the headers
+#
# $OPENALDIR is an environment variable that would
# correspond to the ./configure --prefix=$OPENALDIR
# used in building OpenAL.
-#
+#
# Created by Eric Wing. This was influenced by the FindSDL.cmake module.
-# On OSX, this will prefer the Framework version (if found) over others.
+
+# This makes the presumption that you are include al.h like
+# #include "al.h"
+# and not
+# #include <AL/al.h>
+# The reason for this is that the latter is not entirely portable.
+# Windows/Creative Labs does not by default put their headers in AL/ and
+# OS X uses the convention <OpenAL/al.h>.
+#
+# 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.
+#
+# For OS X, remember that OpenAL was added by Apple in 10.4 (Tiger).
+# To support the framework, I originally wrote special framework detection
+# code in this module which I have now removed with CMake's introduction
+# of native support for frameworks.
+# In addition, OpenAL is open source, and it is possible to compile on Panther.
+# Furthermore, due to bugs in the initial OpenAL release, and the
+# transition to OpenAL 1.1, it is common to need to override the built-in
+# framework.
+# Per my request, CMake should search for frameworks first in
+# the following order:
+# ~/Library/Frameworks/OpenAL.framework/Headers
+# /Library/Frameworks/OpenAL.framework/Headers
+# /System/Library/Frameworks/OpenAL.framework/Headers
+#
+# On OS X, this will prefer the Framework version (if found) over others.
# People will have to manually change the cache values of
-# OPENAL_LIBRARY to override this selection.
-# Tiger will include OpenAL as part of the System.
-# But for now, we have to look around.
-# Other (Unix) systems should be able to utilize the non-framework paths.
-FIND_PATH(OPENAL_INCLUDE_DIR NAMES al.h
- PATH_SUFFIXES AL OpenAL
- PATHS
- $ENV{OPENALDIR}/include
- ~/Library/Frameworks/OpenAL.framework/Headers
- /Library/Frameworks/OpenAL.framework/Headers
- /System/Library/Frameworks/OpenAL.framework/Headers # Tiger
- )
+# OPENAL_LIBRARY to override this selection or set the CMake environment
+# CMAKE_INCLUDE_PATH to modify the search paths.
+
+FIND_PATH(OPENAL_INCLUDE_DIR al.h
+ PATHS
+ $ENV{OPENALDIR}
+ NO_DEFAULT_PATH
+ PATH_SUFFIXES include/AL include/OpenAL include
+)
+FIND_PATH(OPENAL_INCLUDE_DIR al.h
+ PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
+ NO_DEFAULT_PATH
+ PATH_SUFFIXES include/AL include/OpenAL include
+)
+FIND_PATH(OPENAL_INCLUDE_DIR al.h
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /usr/local
+ /usr
+ /sw # Fink
+ /opt/local # DarwinPorts
+ /opt/csw # Blastwave
+ /opt
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir]
+ PATH_SUFFIXES include include/lua51 include/lua5.1 include/lua
+)
-# I'm not sure if I should do a special casing for Apple. It is
-# unlikely that other Unix systems will find the framework path.
-# But if they do ([Next|Open|GNU]Step?),
-# do they want the -framework option also?
-IF(${OPENAL_INCLUDE_DIR} MATCHES ".framework")
- STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" OPENAL_FRAMEWORK_PATH_TMP ${OPENAL_INCLUDE_DIR})
- IF("${OPENAL_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks"
- OR "${OPENAL_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks"
- )
- # String is in default search path, don't need to use -F
- SET (OPENAL_LIBRARY "-framework OpenAL" CACHE STRING "OpenAL framework for OSX")
- ELSE("${OPENAL_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks"
- OR "${OPENAL_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks"
- )
- # String is not /Library/Frameworks, need to use -F
- SET(OPENAL_LIBRARY "-F${OPENAL_FRAMEWORK_PATH_TMP} -framework OpenAL" CACHE STRING "OpenAL framework for OSX")
- ENDIF("${OPENAL_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks"
- OR "${OPENAL_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks"
- )
- # Clear the temp variable so nobody can see it
- SET(OPENAL_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "")
+FIND_LIBRARY(OPENAL_LIBRARY
+ NAMES OpenAL al OpenAL32
+ PATHS
+ $ENV{OPENALDIR}
+ NO_DEFAULT_PATH
+ PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64
+)
+FIND_LIBRARY(OPENAL_LIBRARY
+ NAMES OpenAL al OpenAL32
+ PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
+ NO_DEFAULT_PATH
+ PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64
+)
+FIND_LIBRARY(OPENAL_LIBRARY
+ NAMES OpenAL al OpenAL32
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /usr/local
+ /usr
+ /sw
+ /opt/local
+ /opt/csw
+ /opt
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Creative\ Labs\\OpenAL\ 1.1\ Software\ Development\ Kit\\1.00.0000;InstallDir]
+ PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64
+)
-ELSE(${OPENAL_INCLUDE_DIR} MATCHES ".framework")
- FIND_LIBRARY(OPENAL_LIBRARY
- NAMES openal al OpenAL32
- PATHS
- $ENV{OPENALDIR}/lib
- $ENV{OPENALDIR}/libs
- )
-ENDIF(${OPENAL_INCLUDE_DIR} MATCHES ".framework")
+SET(OPENAL_FOUND "NO")
+IF(OPENAL_LIBRARY AND OPENAL_INCLUDE_DIR)
+ SET(OPENAL_FOUND "YES")
+ENDIF(OPENAL_LIBRARY AND OPENAL_INCLUDE_DIR)
-# handle the QUIETLY and REQUIRED arguments and set OPENAL_FOUND to TRUE if
-# all listed variables are TRUE
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenAL DEFAULT_MSG OPENAL_LIBRARY OPENAL_INCLUDE_DIR)