Removed binreloc support, SDL2 provides that functionality now with SDL_GetBasePath()
[supertux.git] / CMakeLists.txt
index 2abf1f2..607b976 100644 (file)
@@ -6,12 +6,12 @@
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -37,7 +37,7 @@
 PROJECT(SUPERTUX)
 
 ## Version, for display in title bar.
 PROJECT(SUPERTUX)
 
 ## Version, for display in title bar.
-## Will add r<revision number> to the end if svnversion is available.
+## Will add 'commit <hash>' to the end if git is available.
 SET(SUPERTUX_VERSION "0.3.4-GIT")
 
 ### CMake configuration
 SET(SUPERTUX_VERSION "0.3.4-GIT")
 
 ### CMake configuration
@@ -51,7 +51,6 @@ ENDIF(COMMAND cmake_policy)
 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/mk/cmake)
 
 ## For autopackage
 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/mk/cmake)
 
 ## For autopackage
-OPTION(ENABLE_BINRELOC "Enable autopackage's BINRELOC features" OFF)
 SET(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/games/supertux2")
 
 ## Check endianess
 SET(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/games/supertux2")
 
 ## Check endianess
@@ -68,17 +67,9 @@ LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
 
 INCLUDE(FindPkgConfig)
 PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
 
 INCLUDE(FindPkgConfig)
 PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
-INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS})
-LINK_LIBRARIES(supertux2 ${SDL2_LIBRARIES})
-
 PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image>=2.0.0)
 PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image>=2.0.0)
-INCLUDE_DIRECTORIES(${SDL2IMAGE_INCLUDE_DIRS})
-LINK_LIBRARIES(supertux2 ${SDL2IMAGE_LIBRARIES})
 SET(HAVE_SDL TRUE)
 
 SET(HAVE_SDL TRUE)
 
-#FIND_PACKAGE(SDL_image REQUIRED)
-#INCLUDE_DIRECTORIES(${SDLIMAGE_INCLUDE_DIR})
-
 OPTION(ENABLE_OPENGL "Enable OpenGL support" ON)
 IF(ENABLE_OPENGL)
   FIND_PACKAGE(OpenGL)
 OPTION(ENABLE_OPENGL "Enable OpenGL support" ON)
 IF(ENABLE_OPENGL)
   FIND_PACKAGE(OpenGL)
@@ -167,10 +158,9 @@ LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/external/squirrel)
 include_directories (${CMAKE_BINARY_DIR}/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/src/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/squirrel/include/)
 include_directories (${CMAKE_BINARY_DIR}/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/src/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/squirrel/include/)
-include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/tinygettext/)
+include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/tinygettext/include/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/findlocale/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/obstack/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/findlocale/)
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/obstack/)
-include_directories (${CMAKE_CURRENT_SOURCE_DIR}/external/binreloc/)
 
 ## MSVC Compatibility headers and definitions
 
 
 ## MSVC Compatibility headers and definitions
 
@@ -185,7 +175,7 @@ FILE(GLOB SUPERTUX_SOURCES_C RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} external/obsta
 
 FILE(GLOB SUPERTUX_SOURCES_CXX RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/main.cpp src/*/*.cpp src/supertux/menu/*.cpp src/video/sdl/*.cpp)
 
 
 FILE(GLOB SUPERTUX_SOURCES_CXX RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/main.cpp src/*/*.cpp src/supertux/menu/*.cpp src/video/sdl/*.cpp)
 
-FILE(GLOB TINYGETTEXT_SOURCES_CXX RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} external/tinygettext/tinygettext/*.cpp)
+FILE(GLOB TINYGETTEXT_SOURCES_CXX RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} external/tinygettext/src/*.cpp)
 SET_SOURCE_FILES_PROPERTIES(${TINYGETTEXT_SOURCES_CXX} PROPERTIES COMPILE_DEFINITIONS HAVE_SDL)
 
 IF(HAVE_OPENGL)
 SET_SOURCE_FILES_PROPERTIES(${TINYGETTEXT_SOURCES_CXX} PROPERTIES COMPILE_DEFINITIONS HAVE_SDL)
 
 IF(HAVE_OPENGL)
@@ -234,6 +224,22 @@ ENDIF(COMPILE_AMALGATION)
 
 OPTION(WERROR "Stop on first compiler warning" OFF)
 OPTION(WARNINGS "Enable long list of warnings for compiler to check" OFF)
 
 OPTION(WERROR "Stop on first compiler warning" OFF)
 OPTION(WARNINGS "Enable long list of warnings for compiler to check" OFF)
+
+# http://www.guyrutenberg.com/2014/01/05/enabling-c11-c0x-in-cmake/
+include(CheckCXXCompilerFlag)
+CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
+if(COMPILER_SUPPORTS_CXX11)
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+else(COMPILER_SUPPORTS_CXX11)
+  CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
+  if(COMPILER_SUPPORTS_CXX0X)
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
+  else(COMPILER_SUPPORTS_CXX0X)
+        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
+  endif(COMPILER_SUPPORTS_CXX0X)
+endif(COMPILER_SUPPORTS_CXX11)
+
+
 IF(CMAKE_COMPILER_IS_GNUCC)
   SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug flags")
   SET(CMAKE_C_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug flags")
 IF(CMAKE_COMPILER_IS_GNUCC)
   SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug flags")
   SET(CMAKE_C_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug flags")
@@ -247,9 +253,13 @@ IF(CMAKE_COMPILER_IS_GNUCC)
     REMOVE_DEFINITIONS(-Werror)
   ENDIF(WERROR)
   IF(WARNINGS)
     REMOVE_DEFINITIONS(-Werror)
   ENDIF(WERROR)
   IF(WARNINGS)
-    ADD_DEFINITIONS(-fdiagnostics-show-option -pedantic -Wno-long-long -Wcast-align -Wdisabled-optimization -Winit-self -Winvalid-pch -Wlogical-op -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wredundant-decls -Wstack-protector -Wconversion -Wundef -Wsign-conversion -Wshadow -Winline -Wunsafe-loop-optimizations -Wfloat-equal -Wswitch-default -Wswitch-enum -Wcast-qual -Wsign-promo -Woverloaded-virtual -Wmissing-format-attribute -Wstrict-overflow=5 -Wformat=2-Weffc++ -Wabi -Wctor-dtor-privacy -Wstrict-null-sentinel -Wno-unused-parameter)
-    # -ansi fails in MinGW
-    # still left:  -Wold-style-cast -Wpadded
+    # temporarily disabled:
+    #   -Wsign-conversion -Wfloat-equal -Wconversion -Wundef -Wswitch-default
+    #   -Wswitch-enum -Wsign-promo -Wcast-qual -Woverloaded-virtual -Wmissing-format-attribute
+    #   -Wold-style-cast -Wpadded -Wabi -Winline -Wunsafe-loop-optimizations -Wstrict-overflow=5
+    # fails on MinGW:
+    #   -ansi
+    SET(SUPERTUX2_EXTRA_WARNING_FLAGS "-fdiagnostics-show-option -pedantic -Wno-long-long -Wcast-align -Wdisabled-optimization -Winit-self -Winvalid-pch -Wlogical-op -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wredundant-decls -Wstack-protector -Wformat=2 -Weffc++ -Wctor-dtor-privacy -Wstrict-null-sentinel -Wno-unused-parameter -Wshadow")
   ENDIF(WARNINGS)
 ENDIF(CMAKE_COMPILER_IS_GNUCC)
 
   ENDIF(WARNINGS)
 ENDIF(CMAKE_COMPILER_IS_GNUCC)
 
@@ -278,7 +288,6 @@ IF(GENERATE_MESSAGESPOT)
     LIST(APPEND MESSAGES_POT_FILES ${MESSAGES_POT_FILE})
 
     FILE(GLOB SUPERTUX_LEVEL_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} data/levels/*)
     LIST(APPEND MESSAGES_POT_FILES ${MESSAGES_POT_FILE})
 
     FILE(GLOB SUPERTUX_LEVEL_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} data/levels/*)
-    LIST(REMOVE_ITEM SUPERTUX_LEVEL_DIRS "data/levels/.svn")
     FOREACH(SUPERTUX_LEVEL_DIR ${SUPERTUX_LEVEL_DIRS})
       FILE(GLOB SUPERTUX_LEVELS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SUPERTUX_LEVEL_DIR}/*.stl ${SUPERTUX_LEVEL_DIR}/*.stwm ${SUPERTUX_LEVEL_DIR}/*.txt)
 
     FOREACH(SUPERTUX_LEVEL_DIR ${SUPERTUX_LEVEL_DIRS})
       FILE(GLOB SUPERTUX_LEVELS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SUPERTUX_LEVEL_DIR}/*.stl ${SUPERTUX_LEVEL_DIR}/*.stwm ${SUPERTUX_LEVEL_DIR}/*.txt)
 
@@ -299,7 +308,7 @@ IF(GENERATE_MESSAGESPOT)
     ENDFOREACH(SUPERTUX_LEVEL_DIR)
 
     ADD_CUSTOM_TARGET(
     ENDFOREACH(SUPERTUX_LEVEL_DIR)
 
     ADD_CUSTOM_TARGET(
-      supertux2-messages ALL 
+      supertux2-messages ALL
       DEPENDS ${MESSAGES_POT_FILES}
     )
 
       DEPENDS ${MESSAGES_POT_FILES}
     )
 
@@ -330,26 +339,25 @@ IF(WIN32)
   ENDIF(MINGW)
 ENDIF(WIN32)
 
   ENDIF(MINGW)
 ENDIF(WIN32)
 
-## Add binreloc.c if enabled
-IF(ENABLE_BINRELOC)
-  SET(SUPERTUX_SOURCES_C ${SUPERTUX_SOURCES_C} ${CMAKE_CURRENT_SOURCE_DIR}/external/binreloc/binreloc.c)
-ENDIF(ENABLE_BINRELOC)
-
-
 ## Generate supertux executable in the right place
 
 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
 
 ## Add target for supertux binary
 
 ## Generate supertux executable in the right place
 
 SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
 
 ## Add target for supertux binary
 
-ADD_EXECUTABLE(supertux2 ${CMAKE_BINARY_DIR}/version.h ${SUPERTUX_SOURCES_C} ${SUPERTUX_SOURCES_CXX} ${TINYGETTEXT_SOURCES_CXX})
+ADD_LIBRARY(supertux2_c OBJECT ${SUPERTUX_SOURCES_C})
+ADD_EXECUTABLE(supertux2 ${CMAKE_BINARY_DIR}/version.h ${SUPERTUX_SOURCES_CXX} ${TINYGETTEXT_SOURCES_CXX} $<TARGET_OBJECTS:supertux2_c>)
 ADD_DEPENDENCIES(supertux2 gitversion)
 ADD_DEPENDENCIES(supertux2 gitversion)
+SET_TARGET_PROPERTIES(supertux2 PROPERTIES COMPILE_FLAGS "${SUPERTUX2_EXTRA_WARNING_FLAGS}")
 
 ## Link supertux binary with squirrel and other libraries
 
 
 ## Link supertux binary with squirrel and other libraries
 
+TARGET_INCLUDE_DIRECTORIES(supertux2 SYSTEM PUBLIC ${SDL2_INCLUDE_DIRS})
+TARGET_INCLUDE_DIRECTORIES(supertux2 SYSTEM PUBLIC ${SDL2IMAGE_INCLUDE_DIRS})
+TARGET_LINK_LIBRARIES(supertux2 ${SDL2_LIBRARIES})
+TARGET_LINK_LIBRARIES(supertux2 ${SDL2IMAGE_LIBRARIES})
+
 TARGET_LINK_LIBRARIES(supertux2 squirrel)
 TARGET_LINK_LIBRARIES(supertux2 squirrel)
-TARGET_LINK_LIBRARIES(supertux2 ${SDL_LIBRARY})
-TARGET_LINK_LIBRARIES(supertux2 ${SDLIMAGE_LIBRARY})
 TARGET_LINK_LIBRARIES(supertux2 ${OPENAL_LIBRARY})
 TARGET_LINK_LIBRARIES(supertux2 ${OGGVORBIS_LIBRARIES})
 TARGET_LINK_LIBRARIES(supertux2 ${PHYSFS_LIBRARY})
 TARGET_LINK_LIBRARIES(supertux2 ${OPENAL_LIBRARY})
 TARGET_LINK_LIBRARIES(supertux2 ${OGGVORBIS_LIBRARIES})
 TARGET_LINK_LIBRARIES(supertux2 ${PHYSFS_LIBRARY})
@@ -413,7 +421,7 @@ INSTALL(DIRECTORY data/images
                   data/speech
                   data/sounds
                   data/locale
                   data/speech
                   data/sounds
                   data/locale
-                               DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
+                  DESTINATION ${INSTALL_SUBDIR_SHARE})
 
 ## Create config.h now that INSTALL_SUBDIR_* have been set.
 
 
 ## Create config.h now that INSTALL_SUBDIR_* have been set.
 
@@ -470,7 +478,6 @@ MARK_AS_ADVANCED(
 )
 
 MARK_AS_ADVANCED(
 )
 
 MARK_AS_ADVANCED(
-       ENABLE_BINRELOC
        APPDATADIR
 )
 
        APPDATADIR
 )
 
@@ -480,14 +487,13 @@ MARK_AS_ADVANCED(
 )
 
 MARK_AS_ADVANCED(
 )
 
 MARK_AS_ADVANCED(
-       SDLMAIN_LIBRARY
-       SDL_INCLUDE_DIR
-       SDL_LIBRARY
+       SDL2_INCLUDE_DIRS
+       SDL2_LIBRARIES
 )
 
 MARK_AS_ADVANCED(
 )
 
 MARK_AS_ADVANCED(
-       SDLIMAGE_INCLUDE_DIR
-       SDLIMAGE_LIBRARY
+       SDL2IMAGE_INCLUDE_DIRS
+       SDL2IMAGE_LIBRARIES
 )
 
 MARK_AS_ADVANCED(
 )
 
 MARK_AS_ADVANCED(