desktop/sfml/FindSFML.cmake
2011-09-03 01:01:18 +00:00

209 lines
6.4 KiB
CMake

# Locate SFML library
# This module defines
# SFML_FOUND, if false, do not try to link to SFML
# SFML_LIBRARY, the name of the librarys to link against
# SFML_INCLUDE_DIR, where to find SFML headers
#
# By default this script will link to the shared-nondebug version of SFML
# You can change this by define this variables befor calling FIND_PACKAGE
#
# SFML_DEBUG - If defined it will link to the debug version of SFML
# SFML_STATIC - If defined it will link to the static version of SFML
#
# For example:
# SET(SFML_STATIC true)
# FIND_PACKAGE(SFML REQUIRED COMPONENTS System Window)
#
# Created by Nils Hasenbanck. Based on the FindSDL_*.cmake modules,
# created by Eric Wing, which were influenced by the FindSDL.cmake
# module, but with modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
#
# Changelog:
# 2010-04-04 - Add support for visual studio 2008 (9.0)
# 2010-04-09 - Add support for visual studio 2005 (8.0)
# - Now the test for the requested components is also implemented.
# - It also will only link to the requested components
# - You can chose wich debug/nondebug static/shared versions of the librarys you want to link to
SET(SFML_LIBRARY "")
SET(SFML_INCLUDE_DIR "")
SET( SFMLDIR $ENV{SFMLDIR} )
IF(WIN32 AND NOT(CYGWIN))
# Convert backslashes to slashes
STRING(REGEX REPLACE "\\\\" "/" SFMLDIR "${SFMLDIR}")
ENDIF(WIN32 AND NOT(CYGWIN))
SET(SFML_COMPONENTS
System
Audio
Graphics
Network
Window
)
SET(SFML_MODE
_SHARED_NONDEBUG
_SHARED_DEBUG
_STATIC_NONDEBUG
_STATIC_DEBUG
)
SET(SFML_INCLUDE_SEARCH_DIR
~/Library/Frameworks
/Library/Frameworks
/usr/local/include/SFML
/usr/include/SFML
/usr/local/include
/usr/include
/sw/include/SFML # Fink
/sw/include
/opt/local/include/SFML # DarwinPorts
/opt/local/include
/opt/csw/include/SFML # Blastwave
/opt/csw/include
/opt/include/SFML
/opt/include
${SFMLDIR}
${SFMLDIR}/include
)
SET(SFML_LIBRARY_SEARCH_DIR
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw
/opt/local
/opt/csw
/opt
${SFMLDIR}
${SFMLDIR}/lib/vc2008
${SFMLDIR}/lib/vc2005
)
#looking for the include files
FOREACH(COMPONENT ${SFML_COMPONENTS})
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
STRING(TOLOWER ${COMPONENT} LOWERCOMPONENT)
FIND_PATH(SFML_${UPPERCOMPONENT}_INCLUDE_DIR
${COMPONENT}.hpp
PATH_SUFFIXES include SFML
PATHS ${SFML_INCLUDE_SEARCH_DIR}
)
IF(SFML_${UPPERCOMPONENT}_INCLUDE_DIR)
IF(WIN32)
# In wxWIN we need the root include directory without the "/SFML" at the end... so we have to remove it.
# This is a oversized "remove 5 chars at the right end of the string" function:
string(LENGTH ${SFML_${UPPERCOMPONENT}_INCLUDE_DIR} STRING_SIZE)
math(EXPR STRING_SIZE ${STRING_SIZE}-5)
string(SUBSTRING "${SFML_${UPPERCOMPONENT}_INCLUDE_DIR}" 0 ${STRING_SIZE} SFML_${UPPERCOMPONENT}_INCLUDE_DIR)
ENDIF(WIN32)
LIST(APPEND SFML_INCLUDE_DIR ${SFML_${UPPERCOMPONENT}_INCLUDE_DIR})
LIST(REMOVE_DUPLICATES SFML_INCLUDE_DIR)
ENDIF(SFML_${UPPERCOMPONENT}_INCLUDE_DIR)
ENDFOREACH(COMPONENT)
#looking for the librarys
FOREACH(MODE ${SFML_MODE})
string(COMPARE EQUAL ${MODE} "_SHARED_NONDEBUG" string_equal_result)
IF(string_equal_result)
SET(_STA "")
SET(_DBG "")
ENDIF(string_equal_result)
string(COMPARE EQUAL ${MODE} "_SHARED_DEBUG" string_equal_result)
IF(string_equal_result)
SET(_STA "")
SET(_DBG "-d")
ENDIF(string_equal_result)
string(COMPARE EQUAL ${MODE} "_STATIC_NONDEBUG" string_equal_result)
IF(string_equal_result)
SET(_STA "-s")
SET(_DBG "")
ENDIF(string_equal_result)
string(COMPARE EQUAL ${MODE} "_STATIC_DEBUG" string_equal_result)
IF(string_equal_result)
SET(_STA "-s")
SET(_DBG "-d")
ENDIF(string_equal_result)
FOREACH(COMPONENT ${SFML_COMPONENTS})
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
STRING(TOLOWER ${COMPONENT} LOWERCOMPONENT)
FIND_LIBRARY(SFML_${UPPERCOMPONENT}_LIBRARY${MODE}
NAMES sfml-${LOWERCOMPONENT}${_STA}${_DBG}
PATH_SUFFIXES lib64 lib
PATHS ${SFML_LIBRARY_SEARCH_DIR}
)
ENDFOREACH(COMPONENT)
IF(WIN32)
#Now we are looking for "sfml-main.lib".
#Because we need it if we give ADD_EXECUTABLE the WIN32 switch to creat a GUI application (that one without a cmd promt)
FIND_LIBRARY( SFML_MAIN_LIBRARY${MODE}
NAMES sfml-main${_DBG}
PATH_SUFFIXES lib64 lib
PATHS ${SFML_LIBRARY_SEARCH_DIR}
)
ENDIF(WIN32)
ENDFOREACH(MODE)
#Test if we have the include directory, the system lib and other needed components
#We also fill SFML_LIBRARY here with all the files we like to link to
IF(NOT(SFML_DEBUG) AND NOT(SFML_STATIC))
SET(MODE_LABEL "_SHARED_NONDEBUG")
ENDIF(NOT(SFML_DEBUG) AND NOT(SFML_STATIC))
IF(SFML_DEBUG AND NOT(SFML_STATIC))
SET(MODE_LABEL "_SHARED_DEBUG")
ENDIF(SFML_DEBUG AND NOT(SFML_STATIC))
IF(NOT(SFML_DEBUG) AND SFML_STATIC)
SET(MODE_LABEL "_STATIC_NONDEBUG")
ENDIF(NOT(SFML_DEBUG) AND SFML_STATIC)
IF(SFML_DEBUG AND SFML_STATIC)
SET(MODE_LABEL "_STATIC_DEBUG")
ENDIF(SFML_DEBUG AND SFML_STATIC)
LIST(APPEND SFML_LIBRARY ${SFML_MAIN_LIBRARY${MODE_LABEL}})
LIST(APPEND SFML_FIND_COMPONENTS "System") #We allways need at last the System component
LIST(REMOVE_DUPLICATES SFML_FIND_COMPONENTS)
SET(SFML_FOUND "YES")
FOREACH(COMPONENT ${SFML_FIND_COMPONENTS})
SET( MODUL_NAME SFML_${COMPONENT}_LIBRARY${MODE_LABEL} )
STRING(TOUPPER ${MODUL_NAME} MODUL_NAME)
IF(NOT ${MODUL_NAME})
SET(SFML_FOUND "NO")
MESSAGE("-- SFML: Could not locate : ${MODUL_NAME}")
ELSE(NOT ${MODUL_NAME})
LIST(APPEND SFML_LIBRARY ${${MODUL_NAME}})
ENDIF(NOT ${MODUL_NAME})
ENDFOREACH(COMPONENT)
LIST(REMOVE_DUPLICATES SFML_LIBRARY)
IF(NOT SFML_INCLUDE_DIR)
SET(SFML_FOUND "NO")
MESSAGE("-- SFML: Could not locate include directory")
ENDIF(NOT SFML_INCLUDE_DIR)
IF(NOT SFML_FOUND)
MESSAGE(FATAL_ERROR "Components of SFML are missing!")
ENDIF(NOT SFML_FOUND)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SFML DEFAULT_MSG SFML_LIBRARY SFML_INCLUDE_DIR)