stk-code_catmod/CMakeLists.txt
auria 3404d4cf46 Improvement to Cmake on OSX suggested by riebl, thanks
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@10925 178a84e3-b1eb-0310-8ba1-8eac791a3b58
2012-03-06 01:46:38 +00:00

265 lines
8.6 KiB
CMake

# root CMakeLists for the SuperTuxKart project
project(SuperTuxKart)
set(PROJECT_VERSION "0.7.3")
cmake_minimum_required(VERSION 2.8.1)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
if (NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, default to Release")
set(CMAKE_BUILD_TYPE "Release")
endif()
find_package(Irrlicht 1.8 REQUIRED)
include_directories(${IRRLICHT_INCLUDE_DIRS})
#set(CMAKE_VERBOSE_MAKEFILE TRUE)
set(STK_SOURCE_DIR "src")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin")
set(CMAKE_CXX_FLAGS_RELEASE -O2)
# Tweakable values
if(CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG ON)
else()
set(DEBUG OFF)
endif()
option(USE_WIIUSE "Support for wiimote input devices" OFF)
option(USE_FRIBIDI "Support for right-to-left languages" ON)
option(FONT_TOOL "Compile font tool" OFF)
# Build the Bullet physics library
add_subdirectory("${STK_SOURCE_DIR}/bullet")
# Build the ENet UDP network library
add_subdirectory("${STK_SOURCE_DIR}/enet")
# Build the Wiiuse library
if(USE_WIIUSE)
add_subdirectory("${STK_SOURCE_DIR}/wiiuse")
endif()
# Set include paths
include_directories("${STK_SOURCE_DIR}")
include_directories("${STK_SOURCE_DIR}/enet/include")
include_directories("${STK_SOURCE_DIR}/bullet/src")
if(USE_WIIUSE)
include_directories("${STK_SOURCE_DIR}/wiiuse")
endif()
if(APPLE)
# We could use smarter detection of the frameworks but supporting a single official setup makes things easy...
include_directories("/Library/Frameworks/Ogg.framework/Headers")
include_directories("/Library/Frameworks/Vorbis.framework/Headers")
include_directories("/usr/local/include")
include_directories("/usr/include")
find_library(Ogg /Library/Frameworks/Ogg.framework)
find_library(Vorbis /Library/Frameworks/Vorbis.framework)
endif()
# Set lib paths
link_directories("${STK_SOURCE_DIR}/bullet")
if(USE_WIIUSE)
link_directories("${STK_SOURCE_DIR}/wiiuse")
endif()
# OpenGL
find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
# OpenAL
if(APPLE)
find_library(OpenAL /Library/Frameworks/OpenAL.framework)
else()
find_package(OpenAL)
if(OPENAL_FOUND)
message(STATUS "OpenAL found (include dir: ${OPENAL_INCLUDE_DIR})")
include_directories(${OPENAL_INCLUDE_DIR})
else()
message(FATAL_ERROR "OpenAL not found.")
endif()
endif()
# CURL
find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIRS})
# Fribidi
if(USE_FRIBIDI)
find_package(Fribidi)
if(FRIBIDI_FOUND)
include_directories(${FRIBIDI_INCLUDE_DIRS})
else()
message(FATAL_ERROR "Fribidi not found. "
"Either install fribidi or disable bidi support with -DUSE_FRIBIDI=0 "
"(if you don't use a right-to-left language then you don't need this).")
endif()
endif()
# Set some compiler options
if(UNIX)
add_definitions(-Wall)
endif()
add_definitions(-DHAVE_OGGVORBIS) # TODO: remove this switch
if(DEBUG)
add_definitions(-DDEBUG)
else()
add_definitions(-DNDEBUG)
endif()
find_package(Freetype)
if(FONT_TOOL)
if(FREETYPE_FOUND)
message(STATUS "Freetype found")
find_package(X11)
include_directories(${FREETYPE_INCLUDE_DIRS})
add_executable(font_tool
tools/font_tool/CFontTool.cpp
tools/font_tool/CFontTool.h
tools/font_tool/CVectorFontTool.h
tools/font_tool/main.cpp
)
target_link_libraries(font_tool ${FREETYPE_LIBRARIES})
target_link_libraries(font_tool ${X11_Xft_LIB})
target_link_libraries(font_tool ${OPENGL_LIBRARIES})
target_link_libraries(font_tool ${IRRLICHT_LIBRARIES})
else()
message(STATUS "Freetype was not found, the font tool won't be built (only useful for developers)")
endif()
else()
message(STATUS "Font tool deactivated, the font tool won't be built (only useful for developers)")
endif()
include(sources.cmake)
set(SRCS ${SRCS} ${STK_SOURCES})
if (APPLE)
# icon files to copy in the bundle
set( OSX_ICON_FILES ${PROJECT_SOURCE_DIR}/src/ide/Xcode/stk.icns)
set_source_files_properties( ${OSX_ICON_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
set( SRCS ${SRCS} ${OSX_ICON_FILES} )
# build the executable and create an app bundle
add_executable(supertuxkart MACOSX_BUNDLE ${SRCS} )
target_link_libraries(supertuxkart
bulletdynamics
bulletcollision
bulletmath
enet
${CURL_LIBRARIES}
# We could use smarter detection of the frameworks but supporting a single official setup makes things easy...
${IRRLICHT_LIBRARIES}
${OPENGL_LIBRARIES}
/Library/Frameworks/Ogg.framework
/Library/Frameworks/OpenAL.framework
/Library/Frameworks/Vorbis.framework
# TODO: allow linking against frameworks from a SDK.
/System/Library/Frameworks/IOKit.framework
/System/Library/Frameworks/QuickTime.framework
/System/Library/Frameworks/Carbon.framework
/System/Library/Frameworks/AudioUnit.framework
/System/Library/Frameworks/Cocoa.framework)
# configure CMake to use a custom Info.plist
set_target_properties(supertuxkart PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/src/ide/Xcode/SuperTuxKart-Info.plist )
add_custom_command(TARGET supertuxkart PRE_BUILD COMMAND ln -s ${PROJECT_SOURCE_DIR}/data ${CMAKE_BINARY_DIR}/bin/supertuxkart.app/Contents/Resources)
else()
add_definitions(-DSUPERTUXKART_DATADIR=\"${CMAKE_INSTALL_PREFIX}/share/games/supertuxkart\")
# Build the final executable
add_executable(supertuxkart ${SRCS})
target_link_libraries(supertuxkart
${IRRLICHT_LIBRARIES}
bulletdynamics
bulletcollision
bulletmath
enet
pthread
${CURL_LIBRARIES}
${OPENGL_LIBRARIES}
${OPENAL_LIBRARY}
vorbisfile)
endif()
if(USE_FRIBIDI)
target_link_libraries(supertuxkart ${FRIBIDI_LIBRARIES})
add_definitions(-DENABLE_BIDI=1)
endif()
if(USE_WIIUSE)
target_link_libraries(supertuxkart wiiuse bluetooth)
add_definitions(-DENABLE_WIIUSE)
endif()
if(UNIX AND NOT APPLE)
target_link_libraries(supertuxkart Xxf86vm)
elseif(APPLE)
# We could use smarter detection of the frameworks but supporting a single official setup makes things easy...
target_link_libraries(supertuxkart /Library/Frameworks/Ogg.framework)
target_link_libraries(supertuxkart /Library/Frameworks/OpenAL.framework)
target_link_libraries(supertuxkart /Library/Frameworks/Vorbis.framework)
target_link_libraries(supertuxkart /System/Library/Frameworks/IOKit.framework)
target_link_libraries(supertuxkart /System/Library/Frameworks/QuickTime.framework)
target_link_libraries(supertuxkart /System/Library/Frameworks/Carbon.framework)
target_link_libraries(supertuxkart /System/Library/Frameworks/AudioUnit.framework)
target_link_libraries(supertuxkart /System/Library/Frameworks/Cocoa.framework)
endif()
# ==== Make dist target ====
add_custom_target(dist
COMMAND rm -rf ${CMAKE_BINARY_DIR}/SuperTuxKart-${PROJECT_VERSION} && rm -f ${CMAKE_BINARY_DIR}/SuperTuxKart-${PROJECT_VERSION}.tar.bz2
&& echo "Exporting..."
&& svn export ${PROJECT_SOURCE_DIR} ${CMAKE_BINARY_DIR}/SuperTuxKart-${PROJECT_VERSION}
&& echo "Compressing..."
&& cd ${CMAKE_BINARY_DIR}
&& tar -cjf ${CMAKE_BINARY_DIR}/SuperTuxKart-${PROJECT_VERSION}.tar.bz2 ./SuperTuxKart-${PROJECT_VERSION}
&& echo "Done, cleaning up"
&& rm -rf ${CMAKE_BINARY_DIR}/SuperTuxKart-${PROJECT_VERSION}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
# ==== Install target ====
MACRO(installfilemacro filepath)
set(source_regex "(.*)/data/(.*)")
set(svn_regex "(.*).svn(.*)")
string(REGEX MATCH "${svn_regex}" is_svn_dir "${curr}")
if(is_svn_dir)
# don't install SVN files
else()
string(REGEX MATCH "${source_regex}" source_path "${curr}")
if(source_path)
string(REGEX REPLACE "${source_regex}" "\\2" after_source "${source_path}")
get_filename_component(install_location ${after_source} PATH)
install(FILES ${filepath} DESTINATION "share/games/supertuxkart/data/${install_location}")
endif(source_path)
endif()
ENDMACRO(installfilemacro)
FILE(GLOB_RECURSE datafiles "${CMAKE_CURRENT_SOURCE_DIR}/data/*")
foreach(curr ${datafiles})
installfilemacro(${curr})
endforeach()
install(TARGETS supertuxkart RUNTIME DESTINATION games BUNDLE DESTINATION .)
install(FILES ${PROJECT_BINARY_DIR}/supertuxkart.desktop DESTINATION share/applications)
install(FILES data/supertuxkart_32.xpm data/supertuxkart_64.xpm DESTINATION share/pixmaps)
set(PREFIX ${CMAKE_INSTALL_PREFIX})
configure_file(data/supertuxkart_desktop.template supertuxkart.desktop)
add_dependencies(supertuxkart supertuxkart.desktop)