From 18d9adde9649fee733ceb6f464fbc6f2b71daa6c Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Fri, 28 Oct 2005 17:46:44 -0400 Subject: ENH: changes from Eric Wing, bug 2249 --- Modules/FindOpenAL.cmake | 49 ++++++-- Modules/FindPhysFS.cmake | 38 +++++- Modules/FindSDL.cmake | 68 ++++++++--- Modules/FindSDL_image.cmake | 45 +++++-- Modules/FindSDL_mixer.cmake | 45 +++++-- Modules/FindSDL_net.cmake | 45 +++++-- Modules/FindSDL_sound.cmake | 291 +++++++++++++++++++++++++++++++++++++------- Modules/FindSDL_ttf.cmake | 45 +++++-- 8 files changed, 512 insertions(+), 114 deletions(-) diff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake index 24f3641..5c6d957 100644 --- a/Modules/FindOpenAL.cmake +++ b/Modules/FindOpenAL.cmake @@ -8,8 +8,7 @@ # correspond to the ./configure --prefix=$OPENALDIR # used in building OpenAL. # -# Created by Eric Wing. This was influenced by the FindSDL.cmake -# module, but with modifications to recognize OS X frameworks. +# Created by Eric Wing. This was influenced by the FindSDL.cmake module. # On OSX, this will prefer the Framework version (if found) over others. # People will have to manually change the cache values of @@ -18,33 +17,63 @@ # 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 al.h + $ENV{OPENALDIR}/include ~/Library/Frameworks/OpenAL.framework/Headers /Library/Frameworks/OpenAL.framework/Headers - /System/Library/Frameworks/OpenAL.framework/Headers - $ENV{OPENALDIR}/include - /usr/include - /usr/include/AL - /usr/include/OpenAL + /System/Library/Frameworks/OpenAL.framework/Headers # Tiger /usr/local/include/AL /usr/local/include/OpenAL + /usr/local/include + /usr/include/AL + /usr/include/OpenAL + /usr/include + /sw/include/AL # Fink + /sw/include/OpenAL /sw/include - /sw/include/AL + /opt/local/include/AL # DarwinPorts + /opt/local/include/OpenAL + /opt/local/include + /opt/csw/include/AL # Blastwave + /opt/csw/include/OpenAL + /opt/csw/include + /opt/include/AL + /opt/include/OpenAL + /opt/include ) # 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") - SET (OPENAL_LIBRARY "-framework OpenAL" CACHE STRING "OpenAL framework for OSX") + 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 "") + ELSE(${OPENAL_INCLUDE_DIR} MATCHES ".framework") FIND_LIBRARY(OPENAL_LIBRARY NAMES openal al OpenAL32 PATHS $ENV{OPENALDIR}/lib $ENV{OPENALDIR}/libs - /usr/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${OPENAL_INCLUDE_DIR} MATCHES ".framework") diff --git a/Modules/FindPhysFS.cmake b/Modules/FindPhysFS.cmake index d57d474..dda6577 100644 --- a/Modules/FindPhysFS.cmake +++ b/Modules/FindPhysFS.cmake @@ -15,29 +15,55 @@ # People will have to manually change the cache values of # PHYSFS_LIBRARY to override this selection. FIND_PATH(PHYSFS_INCLUDE_DIR physfs.h + $ENV{PHYSFSDIR}/include ~/Library/Frameworks/PhysFS.framework/Headers /Library/Frameworks/PhysFS.framework/Headers - $ENV{PHYSFSDIR}/include - /usr/include - /usr/include/physfs /usr/local/include/physfs + /usr/local/include + /usr/include/physfs + /usr/include + /sw/include/physfs # Fink /sw/include - /sw/include/physfs + /opt/local/include/physfs # DarwinPorts + /opt/local/include + /opt/csw/include/physfs # Blastwave + /opt/csw/include + /opt/include/physfs + /opt/include ) # 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(${PHYSFS_INCLUDE_DIR} MATCHES ".framework") - SET (PHYSFS_LIBRARY "-framework PhysFS" CACHE STRING "PhysFS framework for OSX") + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" PHYSFS_FRAMEWORK_PATH_TMP ${PHYSFS_INCLUDE_DIR}) + IF("${PHYSFS_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${PHYSFS_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is in default search path, don't need to use -F + SET(PHYSFS_LIBRARY "-framework PhysFS" CACHE STRING "PhysFS framework for OSX") + ELSE("${PHYSFS_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${PHYSFS_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is not /Library/Frameworks, need to use -F + SET(PHYSFS_LIBRARY "-F${PHYSFS_FRAMEWORK_PATH_TMP} -framework PhysFS" CACHE STRING "PhysFS framework for OSX") + ENDIF("${PHYSFS_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${PHYSFS_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(PHYSFS_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(${PHYSFS_INCLUDE_DIR} MATCHES ".framework") FIND_LIBRARY(PHYSFS_LIBRARY NAMES physfs PhysFS PATHS $ENV{PHYSFSDIR}/lib - /usr/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${PHYSFS_INCLUDE_DIR} MATCHES ".framework") diff --git a/Modules/FindSDL.cmake b/Modules/FindSDL.cmake index 9eef31c..9ffcce3 100644 --- a/Modules/FindSDL.cmake +++ b/Modules/FindSDL.cmake @@ -7,9 +7,7 @@ # Don't forget to include SDLmain.h and SDLmain.m your project for the # OS X framework based version. (Other versions link to -lSDLmain which # this module will try to find on your behalf.) Also for OS X, this -# module will automatically add the -framework Cocoa on your behalf -# though it is not necessarily visible in the UI. (Maybe somebody else -# can fix this.) +# module will automatically add the -framework Cocoa on your behalf. # # $SDLDIR is an environment variable that would # correspond to the ./configure --prefix=$SDLDIR @@ -33,18 +31,25 @@ # is #include "SDL.h", not . This is done for portability # reasons because not all systems place things in SDL/ (see FreeBSD). FIND_PATH(SDL_INCLUDE_DIR SDL.h + $ENV{SDLDIR}/include ~/Library/Frameworks/SDL.framework/Headers /Library/Frameworks/SDL.framework/Headers - $ENV{SDLDIR}/include + /usr/local/include/SDL /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 - /usr/include - /usr/local/include/SDL - /usr/local/include/SDL12 - /usr/local/include/SDL11 /usr/local/include + /usr/include + /sw/include/SDL # Fink /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include ) # 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. @@ -56,17 +61,38 @@ IF(${SDL_INCLUDE_DIR} MATCHES ".framework") # SDLmain.h and SDLmain.m directly into your project. # (Cocoa link moved to bottom of this script.) # SET (SDL_LIBRARY "-framework SDL -framework Cocoa" CACHE STRING "SDL framework for OSX") - SET(SDL_LIBRARY "-framework SDL" CACHE STRING "SDL framework for OSX") + # SET(SDL_LIBRARY "-framework SDL" CACHE STRING "SDL framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" SDL_FRAMEWORK_PATH_TEMP ${SDL_INCLUDE_DIR}) + IF("${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is in default search path, don't need to use -F + SET(SDL_LIBRARY_TEMP "-framework SDL") + ELSE("${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is not /Library/Frameworks, need to use -F + SET(SDL_LIBRARY_TEMP "-F${SDL_FRAMEWORK_PATH_TEMP} -framework SDL") + ENDIF("${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(SDL_FRAMEWORK_PATH_TEMP "" CACHE INTERNAL "") + ELSE(${SDL_INCLUDE_DIR} MATCHES ".framework") # SDL-1.1 is the name used by FreeBSD ports... # don't confuse it for the version number. - FIND_LIBRARY(SDL_LIBRARY + FIND_LIBRARY(SDL_LIBRARY_TEMP NAMES SDL SDL-1.1 PATHS $ENV{SDLDIR}/lib - /usr/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) # Non-OS X framework versions expect you to also dynamically link to # SDLmain. This is mainly for Windows and OS X. Other platforms @@ -76,9 +102,12 @@ ELSE(${SDL_INCLUDE_DIR} MATCHES ".framework") NAMES SDLmain SDLmain-1.1 PATHS $ENV{SDLDIR}/lib - /usr/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${SDL_INCLUDE_DIR} MATCHES ".framework") @@ -98,10 +127,10 @@ IF(MINGW) ENDIF(MINGW) SET(SDL_FOUND "NO") -IF(SDL_LIBRARY) +IF(SDL_LIBRARY_TEMP) # For SDLmain IF(SDLMAIN_LIBRARY) - SET(SDL_LIBRARY ${SDLMAIN_LIBRARY} ${SDL_LIBRARY}) + SET(SDL_LIBRARY_TEMP ${SDLMAIN_LIBRARY} ${SDL_LIBRARY_TEMP}) ENDIF(SDLMAIN_LIBRARY) # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. @@ -110,21 +139,24 @@ IF(SDL_LIBRARY) # with the CACHE STRING. Maybe somebody else knows how to fix this. # The problem is mainly cosmetic, and not a functional issue. IF(APPLE) - SET(SDL_LIBRARY ${SDL_LIBRARY} "-framework Cocoa") + SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa") ENDIF(APPLE) # For threads, as mentioned Apple doesn't need this. # In fact, there seems to be a problem if Find the threads package # and try using this line, so I'm just skipping it entirely for OS X. IF(NOT APPLE) - SET(SDL_LIBRARY ${SDL_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) + SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) ENDIF(NOT APPLE) # For MinGW library IF(MINGW) - SET(SDL_LIBRARY ${MINGW32_LIBRARY} ${SDL_LIBRARY}) + SET(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP}) ENDIF(MINGW) + # Set the final string here so the GUI reflects the final state. + SET(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found") + SET(SDL_FOUND "YES") -ENDIF(SDL_LIBRARY) +ENDIF(SDL_LIBRARY_TEMP) diff --git a/Modules/FindSDL_image.cmake b/Modules/FindSDL_image.cmake index cd428c5..604b6a9 100644 --- a/Modules/FindSDL_image.cmake +++ b/Modules/FindSDL_image.cmake @@ -16,35 +16,62 @@ # People will have to manually change the cache values of # SDLIMAGE_LIBRARY to override this selection. FIND_PATH(SDLIMAGE_INCLUDE_DIR SDL_image.h + $ENV{SDLIMAGEDIR}/include + $ENV{SDLDIR}/include ~/Library/Frameworks/SDL_image.framework/Headers /Library/Frameworks/SDL_image.framework/Headers - $ENV{SDLDIR}/include - $ENV{SDLIMAGEDIR}/include + /usr/local/include/SDL /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 - /usr/include - /usr/local/include/SDL - /usr/local/include/SDL12 - /usr/local/include/SDL11 /usr/local/include + /usr/include + /sw/include/SDL # Fink /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include ) # 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(${SDLIMAGE_INCLUDE_DIR} MATCHES ".framework") - SET (SDLIMAGE_LIBRARY "-framework SDL_image" CACHE STRING "SDL_image framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" SDLIMAGE_FRAMEWORK_PATH_TEMP ${SDLIMAGE_INCLUDE_DIR}) + IF("${SDLIMAGE_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLIMAGE_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is in default search path, don't need to use -F + SET(SDLIMAGE_LIBRARY "-framework SDL_image" CACHE STRING "SDL_image framework for OSX") + ELSE("${SDLIMAGE_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLIMAGE_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is not /Library/Frameworks, need to use -F + SET(SDLIMAGE_LIBRARY "-F${SDLIMAGE_FRAMEWORK_PATH_TEMP} -framework SDL_image" CACHE STRING "SDL_image framework for OSX") + ENDIF("${SDLIMAGE_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLIMAGE_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(SDLIMAGE_FRAMEWORK_PATH_TEMP "" CACHE INTERNAL "") + ELSE(${SDLIMAGE_INCLUDE_DIR} MATCHES ".framework") FIND_LIBRARY(SDLIMAGE_LIBRARY NAMES SDL_image PATHS - $ENV{SDLDIR}/lib $ENV{SDLIMAGEDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${SDLIMAGE_INCLUDE_DIR} MATCHES ".framework") diff --git a/Modules/FindSDL_mixer.cmake b/Modules/FindSDL_mixer.cmake index e1715af..9b09b39 100644 --- a/Modules/FindSDL_mixer.cmake +++ b/Modules/FindSDL_mixer.cmake @@ -16,35 +16,62 @@ # People will have to manually change the cache values of # SDLMIXER_LIBRARY to override this selection. FIND_PATH(SDLMIXER_INCLUDE_DIR SDL_mixer.h + $ENV{SDLMIXERDIR}/include + $ENV{SDLDIR}/include ~/Library/Frameworks/SDL_mixer.framework/Headers /Library/Frameworks/SDL_mixer.framework/Headers - $ENV{SDLDIR}/include - $ENV{SDLMIXERDIR}/include + /usr/local/include/SDL /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 - /usr/include - /usr/local/include/SDL - /usr/local/include/SDL12 - /usr/local/include/SDL11 /usr/local/include + /usr/include + /sw/include/SDL # Fink /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include ) # 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(${SDLMIXER_INCLUDE_DIR} MATCHES ".framework") - SET (SDLMIXER_LIBRARY "-framework SDL_mixer" CACHE STRING "SDL_mixer framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" SDLMIXER_FRAMEWORK_PATH_TEMP ${SDLMIXER_INCLUDE_DIR}) + IF("${SDLMIXER_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLMIXER_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is in default search path, don't need to use -F + SET(SDLMIXER_LIBRARY "-framework SDL_mixer" CACHE STRING "SDL_mixer framework for OSX") + ELSE("${SDLMIXER_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLMIXER_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is not /Library/Frameworks, need to use -F + SET(SDLMIXER_LIBRARY "-F${SDLMIXER_FRAMEWORK_PATH_TEMP} -framework SDL_mixer" CACHE STRING "SDL_mixer framework for OSX") + ENDIF("${SDLMIXER_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLMIXER_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(SDLMIXER_FRAMEWORK_PATH_TEMP "" CACHE INTERNAL "") + ELSE(${SDLMIXER_INCLUDE_DIR} MATCHES ".framework") FIND_LIBRARY(SDLMIXER_LIBRARY NAMES SDL_mixer PATHS - $ENV{SDLDIR}/lib $ENV{SDLMIXERDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${SDLMIXER_INCLUDE_DIR} MATCHES ".framework") diff --git a/Modules/FindSDL_net.cmake b/Modules/FindSDL_net.cmake index dce301f..b643f9a 100644 --- a/Modules/FindSDL_net.cmake +++ b/Modules/FindSDL_net.cmake @@ -16,35 +16,62 @@ # People will have to manually change the cache values of # SDLNET_LIBRARY to override this selection. FIND_PATH(SDLNET_INCLUDE_DIR SDL_net.h + $ENV{SDLNETDIR}/include + $ENV{SDLDIR}/include ~/Library/Frameworks/SDL_net.framework/Headers /Library/Frameworks/SDL_net.framework/Headers - $ENV{SDLDIR}/include - $ENV{SDLNETDIR}/include + /usr/local/include/SDL /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 - /usr/include - /usr/local/include/SDL - /usr/local/include/SDL12 - /usr/local/include/SDL11 /usr/local/include + /usr/include + /sw/include/SDL # Fink /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include ) # 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(${SDLNET_INCLUDE_DIR} MATCHES ".framework") - SET (SDLNET_LIBRARY "-framework SDL_net" CACHE STRING "SDL_net framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" SDLNET_FRAMEWORK_PATH_TEMP ${SDLNET_INCLUDE_DIR}) + IF("${SDLNET_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLNET_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is in default search path, don't need to use -F + SET(SDLNET_LIBRARY "-framework SDL_net" CACHE STRING "SDL_net framework for OSX") + ELSE("${SDLNET_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLNET_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is not /Library/Frameworks, need to use -F + SET(SDLNET_LIBRARY "-F${SDLNET_FRAMEWORK_PATH_TEMP} -framework SDL_net" CACHE STRING "SDL_net framework for OSX") + ENDIF("${SDLNET_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLNET_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(SDLNET_FRAMEWORK_PATH_TEMP "" CACHE INTERNAL "") + ELSE(${SDLNET_INCLUDE_DIR} MATCHES ".framework") FIND_LIBRARY(SDLNET_LIBRARY NAMES SDL_net PATHS - $ENV{SDLDIR}/lib $ENV{SDLNET}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${SDLNET_INCLUDE_DIR} MATCHES ".framework") diff --git a/Modules/FindSDL_sound.cmake b/Modules/FindSDL_sound.cmake index 2b5e845..6309b6f 100644 --- a/Modules/FindSDL_sound.cmake +++ b/Modules/FindSDL_sound.cmake @@ -6,10 +6,17 @@ # This module defines # SDL_SOUND_INCLUDE_DIR, where to find SDL_sound.h # SDL_SOUND_FOUND, if false, do not try to link to SDL -# SDL_SOUND_LIBRARIES, this contains the list of libraries that you need to link against +# SDL_SOUND_LIBRARIES, this contains the list of libraries that you need +# to link against. This is a read-only variable and is marked INTERNAL. +# SDL_SOUND_EXTRAS, this is an optional variable for you to add your own +# flags to SDL_SOUND_LIBRARIES. This is prepended to SDL_SOUND_LIBRARIES. +# This is available mostly for cases this module failed to anticipate for +# and you must add additional flags. This is marked as ADVANCED. + # # This module also defines (but you shouldn't need to use directly) -# SDL_SOUND_LIBRARY, the name of just the SDL_sound library you would link against. +# SDL_SOUND_LIBRARY, the name of just the SDL_sound library you would link +# against. Use SDL_SOUND_LIBRARIES for you link instructions and not this one. # And might define the following as needed # MIKMOD_LIBRARY # MODPLUG_LIBRARY @@ -28,12 +35,14 @@ # The reason is that SDL_sound can be compiled in a large variety of different ways # which are independent of platform. SDL_sound may dynamically link against other 3rd # party libraries to get additional codec support, such as Ogg Vorbis, SMPEG, ModPlug, -# MikMod, FLAC, Speex, and potentially others. Some platforms or compilers seem to -# require that dependent libraries of libraries you use must also be explicitly +# MikMod, FLAC, Speex, and potentially others. +# Under some circumstances which I don't fully understand, +# there seems to be a requirement +# that dependent libraries of libraries you use must also be explicitly # linked against in order to successfully compile. SDL_sound does not currently # have any system in place to know how it was compiled. # So this CMake module does the hard work in trying to discover which 3rd party -# libraries are required for building. +# libraries are required for building (if any). # This module uses a brute force approach to create a test program that uses SDL_sound, # and then tries to build it. If the build fails, it parses the error output for # known symbol names to figure out which libraries are needed. @@ -46,34 +55,65 @@ # SDL_LIBRARY to override this selection. # + +SET(SDL_SOUND_EXTRAS "" CACHE STRING "SDL_sound extra flags") +MARK_AS_ADVANCED(SDL_SOUND_EXTRAS) + # Find SDL_sound.h FIND_PATH(SDL_SOUND_INCLUDE_DIR SDL_sound.h - ~/Library/Frameworks/SDL_sound.framework/Headers - /Library/Frameworks/SDL_sound.framework/Headers - $ENV{SDLDIR}/include $ENV{SDLSOUNDDIR}/include + $ENV{SDLDIR}/include + ~/Library/Frameworks/SDL_sound.framework/Headers + /Library/Frameworks/SDL_sound.framework/Headers # OS X + /usr/local/include/SDL /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 - /usr/include - /usr/local/include/SDL - /usr/local/include/SDL12 - /usr/local/include/SDL11 /usr/local/include + /usr/include + /sw/include/SDL # Fink /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include ) # Find the SDL_sound library IF(${SDL_SOUND_INCLUDE_DIR} MATCHES ".framework") - SET (SDL_SOUND_LIBRARY "-framework SDL_sound" CACHE STRING "SDL_sound framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" SDL_SOUND_FRAMEWORK_PATH_TMP ${SDL_SOUND_INCLUDE_DIR}) + IF("${SDL_SOUND_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${SDL_SOUND_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is in default search path, don't need to use -F + SET (SDL_SOUND_LIBRARY "-framework SDL_sound" CACHE STRING "SDL_sound framework for OSX") + ELSE("${SDL_SOUND_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${SDL_SOUND_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is not /Library/Frameworks, need to use -F + SET(SDL_SOUND_LIBRARY "-F${SDL_SOUND_FRAMEWORK_PATH_TMP} -framework SDL_sound" CACHE STRING "SDL_sound framework for OSX") + ENDIF("${SDL_SOUND_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${SDL_SOUND_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(SDL_SOUND_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(${SDL_SOUND_INCLUDE_DIR} MATCHES ".framework") FIND_LIBRARY(SDL_SOUND_LIBRARY NAMES SDL_sound PATHS - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${SDL_SOUND_INCLUDE_DIR} MATCHES ".framework") @@ -170,17 +210,37 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) /Library/Frameworks/libmikmod-coreaudio.framework ) IF(TEMP_SDLSOUND_FIND_MIKMOD_FRAMEWORK) - SET(MIKMOD_LIBRARY "-framework libmikmod-coreaudio" CACHE STRING "MikMod framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_MIKMOD_FRAMEWORK}) + IF("${TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(MIKMOD_LIBRARY "-framework libmikmod-coreaudio" CACHE STRING "MikMod framework for OSX") + ELSE("${TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(MIKMOD_LIBRARY "-F${TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP} -framework libmikmod-coreaudio" CACHE STRING "MikMod framework for OSX") + ENDIF("${TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_MIKMOD_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_MIKMOD_FRAMEWORK) FIND_LIBRARY(MIKMOD_LIBRARY NAMES mikmod PATHS $ENV{MIKMODDIR}/lib - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_MIKMOD_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -193,22 +253,43 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) # Find ModPlug IF("${MY_OUTPUT}" MATCHES "MODPLUG_") FIND_FILE(TEMP_SDLSOUND_FIND_MODPLUG_FRAMEWORK - libmikmod-coreaudio + modplug ~/Library/Frameworks/modplug.framework /Library/Frameworks/modplug.framework ) IF(TEMP_SDLSOUND_FIND_MODPLUG_FRAMEWORK) - SET(MIKMOD_LIBRARY "-framework modplug" CACHE STRING "MODPLUG framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_MODPLUG_FRAMEWORK}) + MESSAGE("HELLO") + IF("${TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(MODPLUG_LIBRARY "-framework modplug" CACHE STRING "MODPLUG framework for OSX") + ELSE("${TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(MODPLUG_LIBRARY "-F${TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP} -framework modplug" CACHE STRING "MODPLUG framework for OSX") + ENDIF("${TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_MODPLUG_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_MODPLUG_FRAMEWORK) FIND_LIBRARY(MODPLUG_LIBRARY NAMES modplug PATHS $ENV{MODPLUGDIR}/lib - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_MODPLUG_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -227,18 +308,38 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) /Library/Frameworks/Vorbis.framework ) IF(TEMP_SDLSOUND_FIND_VORBIS_FRAMEWORK) - SET(VORBIS_LIBRARY "-framework Vorbis" CACHE STRING "Vorbis framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_VORBIS_FRAMEWORK}) + IF("${TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(VORBIS_LIBRARY "-framework Vorbis" CACHE STRING "Vorbis framework for OSX") + ELSE("${TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(VORBIS_LIBRARY "-F${TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP} -framework Vorbis" CACHE STRING "Vorbis framework for OSX") + ENDIF("${TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_VORBIS_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_VORBIS_FRAMEWORK) FIND_LIBRARY(VORBIS_LIBRARY NAMES vorbis Vorbis VORBIS PATHS - $ENV{OGGDIR}/lib $ENV{VORBISDIR}/lib - $ENV{SDLDIR}/lib + $ENV{OGGDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_VORBIS_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -253,18 +354,38 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) /Library/Frameworks/Ogg.framework ) IF(TEMP_SDLSOUND_FIND_OGG_FRAMEWORK) - SET(OGG_LIBRARY "-framework Ogg" CACHE STRING "Ogg framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_OGG_FRAMEWORK}) + IF("${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(OGG_LIBRARY "-framework Ogg" CACHE STRING "Ogg framework for OSX") + ELSE("${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(OGG_LIBRARY "-F${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP} -framework Ogg" CACHE STRING "Ogg framework for OSX") + ENDIF("${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_OGG_FRAMEWORK) FIND_LIBRARY(OGG_LIBRARY NAMES ogg Ogg OGG PATHS $ENV{OGGDIR}/lib $ENV{VORBISDIR}/lib - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_OGG_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -283,18 +404,37 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) /Library/Frameworks/smpeg.framework ) IF(TEMP_SDLSOUND_FIND_SMPEG_FRAMEWORK) - SET(SMPEG_LIBRARY "-framework smpeg" CACHE STRING "SMPEG framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_SMPEG_FRAMEWORK}) + IF("${TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(SMPEG_LIBRARY "-framework smpeg" CACHE STRING "SMPEG framework for OSX") + ELSE("${TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(SMPEG_LIBRARY "-F${TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP} -framework smpeg" CACHE STRING "SMPEG framework for OSX") + ENDIF("${TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_SMPEG_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_SMPEG_FRAMEWORK) FIND_LIBRARY(SMPEG_LIBRARY NAMES smpeg SMPEG Smpeg SMpeg PATHS $ENV{SMPEGDIR}/lib - $ENV{SDLDIR}/lib - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_SMPEG_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -313,17 +453,37 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) /Library/Frameworks/FLAC.framework ) IF(TEMP_SDLSOUND_FIND_FLAC_FRAMEWORK) - SET(FLAC_LIBRARY "-framework FLAC" CACHE STRING "FLAC framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_FLAC_FRAMEWORK}) + IF("${TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(FLAC_LIBRARY "-framework FLAC" CACHE STRING "FLAC framework for OSX") + ELSE("${TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(FLAC_LIBRARY "-F${TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP} -framework FLAC" CACHE STRING "FLAC framework for OSX") + ENDIF("${TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_FLAC_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_FLAC_FRAMEWORK) FIND_LIBRARY(FLAC_LIBRARY NAMES flac FLAC PATHS $ENV{FLACDIR}/lib - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_FLAC_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -345,17 +505,37 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) /Library/Frameworks/speex.framework ) IF(TEMP_SDLSOUND_FIND_SPEEX_FRAMEWORK) - SET(FLAC_LIBRARY "-framework speex" CACHE STRING "SPEEX framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_SPEEX_FRAMEWORK}) + IF("${TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(SPEEX_LIBRARY "-framework speex" CACHE STRING "SPEEX framework for OSX") + ELSE("${TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(SPEEX_LIBRARY "-F${TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP} -framework speex" CACHE STRING "SPEEX framework for OSX") + ENDIF("${TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_SPEEX_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_SPEEX_FRAMEWORK) FIND_LIBRARY(SPEEX_LIBRARY NAMES speex SPEEX PATHS $ENV{SPEEXDIR}/lib - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_SPEEX_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -369,7 +549,24 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) /Library/Frameworks/Ogg.framework ) IF(TEMP_SDLSOUND_FIND_OGG_FRAMEWORK) - SET(OGG_LIBRARY "-framework Ogg" CACHE STRING "Ogg framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP ${TEMP_SDLSOUND_FIND_OGG_FRAMEWORK}) + IF("${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's in the default search path so I don't need to use -F + SET(OGG_LIBRARY "-framework Ogg" CACHE STRING "Ogg framework for OSX") + ELSE("${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # It's not in the default search path so I need to use -F + SET(OGG_LIBRARY "-F${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP} -framework Ogg" CACHE STRING "Ogg framework for OSX") + ENDIF("${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/Library/Frameworks" + OR "${TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(TEMP_SDLSOUND_OGG_FRAMEWORK_PATH_TMP "" CACHE INTERNAL "") + ELSE(TEMP_SDLSOUND_FIND_OGG_FRAMEWORK) FIND_LIBRARY(OGG_LIBRARY NAMES ogg Ogg OGG @@ -377,11 +574,14 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) $ENV{OGGDIR}/lib $ENV{VORBISDIR}/lib $ENV{SPEEXDIR}/lib - $ENV{SDLDIR}/lib $ENV{SDLSOUNDDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(TEMP_SDLSOUND_FIND_OGG_FRAMEWORK) # Clear the temp variable so nobody can see it @@ -394,9 +594,12 @@ IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) ELSE(NOT MY_RESULT) - SET(SDL_SOUND_LIBRARIES ${SDL_SOUND_LIBRARY} CACHE STRING "SDL_sound and dependent libraries") + SET(SDL_SOUND_LIBRARIES "${SDL_SOUND_EXTRAS} ${SDL_SOUND_LIBRARY}" CACHE INTERNAL "SDL_sound and dependent libraries") ENDIF(NOT MY_RESULT) - SET(SDL_SOUND_LIBRARIES ${SDL_SOUND_LIBRARIES_TMP} CACHE STRING "SDL_sound and dependent libraries") + SET(SDL_SOUND_LIBRARIES "${SDL_SOUND_EXTRAS} ${SDL_SOUND_LIBRARIES_TMP}" CACHE INTERNAL "SDL_sound and dependent libraries") SET(SDL_SOUND_FOUND "YES") ENDIF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) + + # MESSAGE("SDL_SOUND_LIBRARIES is ${SDL_SOUND_LIBRARIES}") + diff --git a/Modules/FindSDL_ttf.cmake b/Modules/FindSDL_ttf.cmake index 52d52b1..5523cf9 100644 --- a/Modules/FindSDL_ttf.cmake +++ b/Modules/FindSDL_ttf.cmake @@ -16,35 +16,62 @@ # People will have to manually change the cache values of # SDLTTF_LIBRARY to override this selection. FIND_PATH(SDLTTF_INCLUDE_DIR SDL_ttf.h + $ENV{SDLTTFDIR}/include + $ENV{SDLDIR}/include ~/Library/Frameworks/SDL_ttf.framework/Headers /Library/Frameworks/SDL_ttf.framework/Headers - $ENV{SDLDIR}/include - $ENV{SDLTTFDIR}/include + /usr/local/include/SDL /usr/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 - /usr/include - /usr/local/include/SDL - /usr/local/include/SDL12 - /usr/local/include/SDL11 /usr/local/include + /usr/include + /sw/include/SDL # Fink /sw/include + /opt/local/include/SDL # DarwinPorts + /opt/local/include + /opt/csw/include/SDL # Blastwave + /opt/csw/include + /opt/include/SDL + /opt/include ) # 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(${SDLTTF_INCLUDE_DIR} MATCHES ".framework") - SET (SDLTTF_LIBRARY "-framework SDL_ttf" CACHE STRING "SDL_ttf framework for OSX") + # Extract the path the framework resides in so we can use it for the -F flag + STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" SDLTTF_FRAMEWORK_PATH_TEMP ${SDLTTF_INCLUDE_DIR}) + IF("${SDLTTF_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLTTF_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is in default search path, don't need to use -F + SET(SDLTTF_LIBRARY "-framework SDL_ttf" CACHE STRING "SDL_ttf framework for OSX") + ELSE("${SDLTTF_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLTTF_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # String is not /Library/Frameworks, need to use -F + SET(SDLTTF_LIBRARY "-F${SDLTTF_FRAMEWORK_PATH_TEMP} -framework SDL_ttf" CACHE STRING "SDL_ttf framework for OSX") + ENDIF("${SDLTTF_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" + OR "${SDLTTF_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" + ) + # Clear the temp variable so nobody can see it + SET(SDLTTF_FRAMEWORK_PATH_TEMP "" CACHE INTERNAL "") + ELSE(${SDLTTF_INCLUDE_DIR} MATCHES ".framework") FIND_LIBRARY(SDLTTF_LIBRARY NAMES SDL_ttf PATHS - $ENV{SDLDIR}/lib $ENV{SDLTTFDIR}/lib - /usr/lib + $ENV{SDLDIR}/lib /usr/local/lib + /usr/lib /sw/lib + /opt/local/lib + /opt/csw/lib + /opt/lib ) ENDIF(${SDLTTF_INCLUDE_DIR} MATCHES ".framework") -- cgit v0.12