From 403959bc287e6398a63247bee67108a64729f4c7 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Wed, 13 Jul 2005 09:06:26 -0400 Subject: [PATCH] ENH: add a bunch of find sdl stuff from eric wing --- Modules/FindOpenAL.cmake | 55 +++++++++++++++ Modules/FindPhysFS.cmake | 48 ++++++++++++++ Modules/FindSDL.cmake | 129 +++++++++++++++++++++++++++++++----- Modules/FindSDL_image.cmake | 53 +++++++++++++++ Modules/FindSDL_mixer.cmake | 53 +++++++++++++++ Modules/FindSDL_net.cmake | 53 +++++++++++++++ Modules/FindSDL_ttf.cmake | 53 +++++++++++++++ 7 files changed, 428 insertions(+), 16 deletions(-) create mode 100644 Modules/FindOpenAL.cmake create mode 100644 Modules/FindPhysFS.cmake create mode 100644 Modules/FindSDL_image.cmake create mode 100644 Modules/FindSDL_mixer.cmake create mode 100644 Modules/FindSDL_net.cmake create mode 100644 Modules/FindSDL_ttf.cmake diff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake new file mode 100644 index 000000000..c52b02746 --- /dev/null +++ b/Modules/FindOpenAL.cmake @@ -0,0 +1,55 @@ +# 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 +# +# $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, but with modifications to recognize OS X frameworks. + +# On OSX, 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 al.h + ~/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 + /usr/local/include/AL + /usr/local/include/OpenAL + /sw/include + /sw/include/AL + ) +# 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") +ELSE(${OPENAL_INCLUDE_DIR} MATCHES ".framework") + FIND_LIBRARY(OPENAL_LIBRARY + NAMES openal al + PATHS + $ENV{OPENALDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${OPENAL_INCLUDE_DIR} MATCHES ".framework") + +SET(OPENAL_FOUND "NO") +IF(OPENAL_LIBRARY) + SET(OPENAL_FOUND "YES") +ENDIF(OPENAL_LIBRARY) + + diff --git a/Modules/FindPhysFS.cmake b/Modules/FindPhysFS.cmake new file mode 100644 index 000000000..d57d474f8 --- /dev/null +++ b/Modules/FindPhysFS.cmake @@ -0,0 +1,48 @@ +# Locate PhysFS library +# This module defines +# PHYSFS_LIBRARY, the name of the library to link against +# PHYSFS_FOUND, if false, do not try to link to PHYSFS +# PHYSFS_INCLUDE_DIR, where to find PHYSFS/PHYSFS.h +# +# $PHYSFSDIR is an environment variable that would +# correspond to the ./configure --prefix=$PHYSFSDIR +# used in building PHYSFS. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks. + +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# PHYSFS_LIBRARY to override this selection. +FIND_PATH(PHYSFS_INCLUDE_DIR physfs.h + ~/Library/Frameworks/PhysFS.framework/Headers + /Library/Frameworks/PhysFS.framework/Headers + $ENV{PHYSFSDIR}/include + /usr/include + /usr/include/physfs + /usr/local/include/physfs + /sw/include + /sw/include/physfs + ) +# 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") +ELSE(${PHYSFS_INCLUDE_DIR} MATCHES ".framework") + FIND_LIBRARY(PHYSFS_LIBRARY + NAMES physfs PhysFS + PATHS + $ENV{PHYSFSDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${PHYSFS_INCLUDE_DIR} MATCHES ".framework") + +SET(PHYSFS_FOUND "NO") +IF(PHYSFS_LIBRARY) + SET(PHYSFS_FOUND "YES") +ENDIF(PHYSFS_LIBRARY) + diff --git a/Modules/FindSDL.cmake b/Modules/FindSDL.cmake index d0a450f4c..24a7214c4 100644 --- a/Modules/FindSDL.cmake +++ b/Modules/FindSDL.cmake @@ -2,32 +2,129 @@ # This module defines # SDL_LIBRARY, the name of the library to link against # SDL_FOUND, if false, do not try to link to SDL -# SDL_INCLUDE_DIR, where to find SDL/SDL.h +# SDL_INCLUDE_DIR, where to find SDL.h +# +# 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.) # # $SDLDIR is an environment variable that would # correspond to the ./configure --prefix=$SDLDIR # used in building SDL. # l.e.galup 9-20-02 - - - -IF (UNIX) - - FIND_LIBRARY(SDL_LIBRARY SDL +# +# Modified by Eric Wing. +# Added new modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). +# Also corrected the header search path to follow "proper" SDL guidelines. +# Added a search for SDLmain which is needed by some platforms. +# Added a search for threads which is needed by some platforms. +# Added needed compile switches for MinGW. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDL_LIBRARY to override this selection. +# +# Note that the header path has changed from SDL/SDL.h to just SDL.h +# This needed to change because "proper" SDL convention +# 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 + ~/Library/Frameworks/SDL.framework/Headers + /Library/Frameworks/SDL.framework/Headers + $ENV{SDLDIR}/include + /usr/include/SDL + /usr/include/SDL12 + /usr/include/SDL11 + /usr/include + /usr/local/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 + /usr/local/include + /sw/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(${SDL_INCLUDE_DIR} MATCHES ".framework") + # The Cocoa framework must be linked into SDL because SDL is Cocoa based. + # Remember that the OS X framework version expects you to drop in + # 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") +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 + NAMES SDL SDL-1.1 + PATHS $ENV{SDLDIR}/lib /usr/lib /usr/local/lib - ) + /sw/lib + ) + # Non-OS X framework versions expect you to also dynamically link to + # SDLmain. This is mainly for Windows and OS X. Other platforms + # seem to provide SDLmain for compatibility even though they don't + # necessarily need it. + FIND_LIBRARY(SDLMAIN_LIBRARY + NAMES SDLmain + PATHS + $ENV{SDLDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${SDL_INCLUDE_DIR} MATCHES ".framework") - FIND_PATH( SDL_INCLUDE_DIR SDL/SDL.h - $ENV{SDLDIR}/include - /usr/include - /usr/local/include - ) +# SDL may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +IF(NOT APPLE) + FIND_PACKAGE(Threads) +ENDIF(NOT APPLE) -ENDIF (UNIX) +# MinGW needs an additional library, mwindows +# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows +# (Actually on second look, I think it only needs one of the m* libraries.) +IF(MINGW) + SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") +ENDIF(MINGW) -SET( SDL_FOUND "NO" ) +SET(SDL_FOUND "NO") IF(SDL_LIBRARY) - SET( SDL_FOUND "YES" ) + # For SDLmain + IF(SDLMAIN_LIBRARY) + SET(SDL_LIBRARY ${SDLMAIN_LIBRARY} ${SDL_LIBRARY}) + ENDIF(SDLMAIN_LIBRARY) + + # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there. I think it has something to do + # 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") + 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}) + ENDIF(NOT APPLE) + + # For MinGW library + IF(MINGW) + SET(SDL_LIBRARY ${MINGW32_LIBRARY} ${SDL_LIBRARY}) + ENDIF(MINGW) + + SET(SDL_FOUND "YES") ENDIF(SDL_LIBRARY) + diff --git a/Modules/FindSDL_image.cmake b/Modules/FindSDL_image.cmake new file mode 100644 index 000000000..2ee3360f8 --- /dev/null +++ b/Modules/FindSDL_image.cmake @@ -0,0 +1,53 @@ +# Locate SDL_image library +# This module defines +# SDLIMAGE_LIBRARY, the name of the library to link against +# SDLIMAGE_FOUND, if false, do not try to link to SDL +# SDLIMAGE_INCLUDE_DIR, where to find SDL/SDL.h +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDLIMAGE_LIBRARY to override this selection. +FIND_PATH(SDLIMAGE_INCLUDE_DIR SDL_image.h + ~/Library/Frameworks/SDL_image.framework/Headers + /Library/Frameworks/SDL_image.framework/Headers + $ENV{SDLDIR}/include + /usr/include/SDL + /usr/include/SDL12 + /usr/include/SDL11 + /usr/include + /usr/local/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 + /usr/local/include + /sw/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") +ELSE(${SDLIMAGE_INCLUDE_DIR} MATCHES ".framework") + FIND_LIBRARY(SDLIMAGE_LIBRARY + NAMES SDL_image + PATHS + $ENV{SDLDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${SDLIMAGE_INCLUDE_DIR} MATCHES ".framework") + +SET(SDLIMAGE_FOUND "NO") +IF(SDLIMAGE_LIBRARY) + SET(SDLIMAGE_FOUND "YES") +ENDIF(SDLIMAGE_LIBRARY) + diff --git a/Modules/FindSDL_mixer.cmake b/Modules/FindSDL_mixer.cmake new file mode 100644 index 000000000..f792e4183 --- /dev/null +++ b/Modules/FindSDL_mixer.cmake @@ -0,0 +1,53 @@ +# Locate SDL_mixer library +# This module defines +# SDLMIXER_LIBRARY, the name of the library to link against +# SDLMIXER_FOUND, if false, do not try to link to SDL +# SDLMIXER_INCLUDE_DIR, where to find SDL/SDL.h +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDLMIXER_LIBRARY to override this selection. +FIND_PATH(SDLMIXER_INCLUDE_DIR SDL_mixer.h + ~/Library/Frameworks/SDL_mixer.framework/Headers + /Library/Frameworks/SDL_mixer.framework/Headers + $ENV{SDLDIR}/include + /usr/include/SDL + /usr/include/SDL12 + /usr/include/SDL11 + /usr/include + /usr/local/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 + /usr/local/include + /sw/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") +ELSE(${SDLMIXER_INCLUDE_DIR} MATCHES ".framework") + FIND_LIBRARY(SDLMIXER_LIBRARY + NAMES SDL_mixer + PATHS + $ENV{SDLDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${SDLMIXER_INCLUDE_DIR} MATCHES ".framework") + +SET(SDLMIXER_FOUND "NO") +IF(SDLMIXER_LIBRARY) + SET(SDLMIXER_FOUND "YES") +ENDIF(SDLMIXER_LIBRARY) + diff --git a/Modules/FindSDL_net.cmake b/Modules/FindSDL_net.cmake new file mode 100644 index 000000000..e17cb7244 --- /dev/null +++ b/Modules/FindSDL_net.cmake @@ -0,0 +1,53 @@ +# Locate SDL_net library +# This module defines +# SDLNET_LIBRARY, the name of the library to link against +# SDLNET_FOUND, if false, do not try to link against +# SDLNET_INCLUDE_DIR, where to find the headers +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDLNET_LIBRARY to override this selection. +FIND_PATH(SDLNET_INCLUDE_DIR SDL_net.h + ~/Library/Frameworks/SDL_net.framework/Headers + /Library/Frameworks/SDL_net.framework/Headers + $ENV{SDLDIR}/include + /usr/include/SDL + /usr/include/SDL12 + /usr/include/SDL11 + /usr/include + /usr/local/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 + /usr/local/include + /sw/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") +ELSE(${SDLNET_INCLUDE_DIR} MATCHES ".framework") + FIND_LIBRARY(SDLNET_LIBRARY + NAMES SDL_net + PATHS + $ENV{SDLDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${SDLNET_INCLUDE_DIR} MATCHES ".framework") + +SET(SDLNET_FOUND "NO") +IF(SDLNET_LIBRARY) + SET(SDLNET_FOUND "YES") +ENDIF(SDLNET_LIBRARY) + diff --git a/Modules/FindSDL_ttf.cmake b/Modules/FindSDL_ttf.cmake new file mode 100644 index 000000000..7dea03382 --- /dev/null +++ b/Modules/FindSDL_ttf.cmake @@ -0,0 +1,53 @@ +# Locate SDL_ttf library +# This module defines +# SDLTTF_LIBRARY, the name of the library to link against +# SDLTTF_FOUND, if false, do not try to link to SDL +# SDLTTF_INCLUDE_DIR, where to find SDL/SDL.h +# +# $SDLDIR is an environment variable that would +# correspond to the ./configure --prefix=$SDLDIR +# used in building SDL. +# +# Created by Eric Wing. This was influenced by the FindSDL.cmake +# module, but with modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). + +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDLTTF_LIBRARY to override this selection. +FIND_PATH(SDLTTF_INCLUDE_DIR SDL_ttf.h + ~/Library/Frameworks/SDL_ttf.framework/Headers + /Library/Frameworks/SDL_ttf.framework/Headers + $ENV{SDLDIR}/include + /usr/include/SDL + /usr/include/SDL12 + /usr/include/SDL11 + /usr/include + /usr/local/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 + /usr/local/include + /sw/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") +ELSE(${SDLTTF_INCLUDE_DIR} MATCHES ".framework") + FIND_LIBRARY(SDLTTF_LIBRARY + NAMES SDL_ttf + PATHS + $ENV{SDLDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${SDLTTF_INCLUDE_DIR} MATCHES ".framework") + +SET(SDLTTF_FOUND "NO") +IF(SDLTTF_LIBRARY) + SET(SDLTTF_FOUND "YES") +ENDIF(SDLTTF_LIBRARY) +