Added scripts for source code maintainance
[supertux.git] / CMakeLists.txt
index b8b3c41..52faff5 100644 (file)
@@ -39,8 +39,12 @@ PROJECT(SUPERTUX)
 
 ### CMake configuration
 
-# allow building with old CMake. Use some bundled modules as a fallback
-CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
+# allow building with CMake 2.6. Set compatibility options. Use some bundled modules as a fallback
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+IF(COMMAND cmake_policy)
+       CMAKE_POLICY(SET CMP0003 NEW)
+ENDIF(COMMAND cmake_policy)
+
 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${SUPERTUX_SOURCE_DIR}/mk/cmake)
 
 # move some config clutter to the advanced section
@@ -128,37 +132,48 @@ ENDIF(CURL_FOUND)
 #LINK_LIBRARIES(${ICONV_LIBRARY})
 
 ## Find revision of WC
-FIND_PACKAGE(Subversion)
-IF(Subversion_FOUND)
-  Subversion_WC_INFO(${SUPERTUX_SOURCE_DIR} SUPERTUX)
+MARK_AS_ADVANCED(SVNVERSION_EXECUTABLE)
+FIND_PROGRAM(SVNVERSION_EXECUTABLE svnversion)
+IF(SVNVERSION_EXECUTABLE)
+  EXECUTE_PROCESS(COMMAND svnversion -n ${SUPERTUX_SOURCE_DIR}
+                  OUTPUT_VARIABLE SUPERTUX_WC_REVISION)
   SET(REVISION " r${SUPERTUX_WC_REVISION}")
-ENDIF(Subversion_FOUND)
+ENDIF(SVNVERSION_EXECUTABLE)
 
 ## Check platform-dependent build options
 
 INCLUDE(ConfigureChecks)
 
-## Create config.h
+## Create config.h and version.h
 
 configure_file(config.h.cmake ${CMAKE_BINARY_DIR}/config.h )
+configure_file(version.h.cmake ${CMAKE_BINARY_DIR}/version.h )
 include_directories (${CMAKE_BINARY_DIR}/)
 
 ## Also execute instructions in src/squirrel/CMakeLists.txt
 
-ADD_SUBDIRECTORY(src/squirrel)
+ADD_SUBDIRECTORY(external/squirrel)
 
 ## Add squirrel lib dir to search path
 
-LINK_DIRECTORIES(src/squirrel)
+LINK_DIRECTORIES(external/squirrel)
 
 ## Some additional include paths
 
 include_directories (${SUPERTUX_SOURCE_DIR}/src/)
-include_directories (${SUPERTUX_SOURCE_DIR}/src/squirrel/include/)
+include_directories (${SUPERTUX_SOURCE_DIR}/external/squirrel/include/)
+include_directories (${SUPERTUX_SOURCE_DIR}/external/)
+include_directories (${SUPERTUX_SOURCE_DIR}/external/findlocale/)
+include_directories (${SUPERTUX_SOURCE_DIR}/external/obstack/)
 
 ## Build list of sources for supertux binary
 
-FILE(GLOB SUPERTUX_SOURCES RELATIVE ${SUPERTUX_SOURCE_DIR} src/*.cpp src/*/*.cpp src/obstack/*.c)
+FILE(GLOB SUPERTUX_SOURCES RELATIVE ${SUPERTUX_SOURCE_DIR} src/*.cpp src/*/*.cpp src/supertux/menu/*.cpp src/video/sdl/*.cpp external/obstack/*.c external/tinygettext/*.cpp external/findlocale/findlocale.c)
+
+IF(HAVE_OPENGL)
+  FILE(GLOB SUPERTUX_OPENGL_SOURCES RELATIVE ${SUPERTUX_SOURCE_DIR} src/video/gl/*.cpp)
+  SET(SUPERTUX_SOURCES ${SUPERTUX_SOURCES} ${SUPERTUX_OPENGL_SOURCES})
+ENDIF(HAVE_OPENGL)
 
 ## Precompile "a few" headers in GCC
 OPTION(PRECOMPILE_HEADERS "Precompile headers (experimental)" OFF)
@@ -194,34 +209,33 @@ ENDIF(PRECOMPILE_HEADERS)
 
 ## Debug options
 
-OPTION(DEBUG "Build with debugging options" OFF)
-OPTION(PROFILE "Build with profiling information" OFF)
-OPTION(WERROR "Stops on first compiler warning in debug mode" ON)
+OPTION(DEBUG "Build with debugging options" ON)
+OPTION(WERROR "Stop on first compiler warning" ON)
 IF(CMAKE_COMPILER_IS_GNUCC)
-  ADD_DEFINITIONS(-Wall -W)
+  ADD_DEFINITIONS(-Wall -Wextra -W)
   IF (DEBUG)
     REMOVE_DEFINITIONS(-O2)
     ADD_DEFINITIONS(-O0 -g)
-    IF(WERROR)
-      ADD_DEFINITIONS(-Werror)
-    ENDIF(WERROR)
   ELSE (DEBUG)
     ADD_DEFINITIONS(-O2)
     REMOVE_DEFINITIONS(-O0 -g)
   ENDIF (DEBUG)
-  IF (PROFILE)
-    ADD_DEFINITIONS(-pg)
-  ELSE (PROFILE)
-    REMOVE_DEFINITIONS(-pg)
-  ENDIF (PROFILE)
+  SET(CMAKE_CXX_FLAGS_PROFILE "-pg")
+  SET(CMAKE_C_FLAGS_PROFILE "-pg")
+  SET(CMAKE_LD_FLAGS_PROFILE "-pg")
+  IF(WERROR)
+    ADD_DEFINITIONS(-Werror)
+  ELSE(WERROR)
+    REMOVE_DEFINITIONS(-Werror)
+  ENDIF(WERROR)
 ENDIF(CMAKE_COMPILER_IS_GNUCC)
 
 ## Add in squirrel debug stuff
 
 OPTION(ENABLE_SQDBG "Build squirrel script interpreter with debugging options" OFF)
 IF(ENABLE_SQDBG)
-  include_directories (${SUPERTUX_SOURCE_DIR}/src/squirrel/)
-  FILE(GLOB SQDBG_SOURCES RELATIVE ${SUPERTUX_SOURCE_DIR} src/squirrel/sqdbg/*.cpp)
+  include_directories (${SUPERTUX_SOURCE_DIR}/external/squirrel/)
+  FILE(GLOB SQDBG_SOURCES RELATIVE ${SUPERTUX_SOURCE_DIR} external/squirrel/sqdbg/*.cpp)
   SET(SUPERTUX_SOURCES ${SQDBG_SOURCES} ${SUPERTUX_SOURCES})
 ENDIF(ENABLE_SQDBG)
 
@@ -230,15 +244,14 @@ ENDIF(ENABLE_SQDBG)
 OPTION(GENERATE_WRAPPER "Build miniswig and generate the wrapper" ${DEBUG})
 IF(GENERATE_WRAPPER)
   ADD_SUBDIRECTORY(tools/miniswig)
-  FILE(GLOB GENERATE_WRAPPER_SOURCES RELATIVE ${SUPERTUX_SOURCE_DIR} src/scripting/*.?pp)
-  LIST(REMOVE_ITEM GENERATE_WRAPPER_SOURCES "src/scripting/wrapper.cpp" "src/scripting/wrapper.hpp")
   ADD_CUSTOM_COMMAND(
     OUTPUT ${SUPERTUX_SOURCE_DIR}/src/scripting/wrapper.cpp ${SUPERTUX_SOURCE_DIR}/src/scripting/wrapper.hpp
     COMMAND cd ${SUPERTUX_SOURCE_DIR} && ${CMAKE_CXX_COMPILER}
-    ARGS -x "c++" -E -CC -DSCRIPTING_API src/scripting/wrapper.interface.hpp -o ${SUPERTUX_BINARY_DIR}/miniswig.tmp
+    ARGS -x "c++" -E -CC -DSCRIPTING_API src/scripting/wrapper.interface.hpp -o ${SUPERTUX_BINARY_DIR}/miniswig.tmp -I${SUPERTUX_SOURCE_DIR}/src
     COMMAND tools/miniswig/miniswig
     ARGS --input miniswig.tmp --output-cpp ${SUPERTUX_SOURCE_DIR}/src/scripting/wrapper.cpp --output-hpp ${SUPERTUX_SOURCE_DIR}/src/scripting/wrapper.hpp --module supertux --select-namespace Scripting
-    DEPENDS ${GENERATE_WRAPPER_SOURCES} tools/miniswig/miniswig
+    DEPENDS tools/miniswig/miniswig
+    IMPLICIT_DEPENDS CXX ${SUPERTUX_SOURCE_DIR}/src/scripting/wrapper.interface.hpp
   )
 ENDIF(GENERATE_WRAPPER)
 
@@ -281,7 +294,7 @@ IF(GENERATE_MESSAGESPOT)
       ADD_CUSTOM_COMMAND(
         OUTPUT ${MESSAGES_POT_FILE}
         COMMAND ${XGETTEXT_EXECUTABLE}
-        ARGS --keyword="_:1" --language=Lisp --sort-by-file --output=${MESSAGES_POT_FILE} ${SUPERTUX_LEVELS}
+        ARGS --keyword="_:1" --language=Lisp --force-po --sort-by-file "--output=${MESSAGES_POT_FILE}" ${SUPERTUX_LEVELS}
         DEPENDS ${SUPERTUX_LEVELS}
         WORKING_DIRECTORY ${SUPERTUX_SOURCE_DIR}
         COMMENT "Generating POT file ${MESSAGES_POT_FILE}"
@@ -325,7 +338,7 @@ ENDIF(WIN32)
 
 ## Add binreloc.c if enabled
 IF(ENABLE_BINRELOC)
-  SET(SUPERTUX_SOURCES ${SUPERTUX_SOURCES} ${SUPERTUX_SOURCE_DIR}/src/binreloc/binreloc.c)
+  SET(SUPERTUX_SOURCES ${SUPERTUX_SOURCES} ${SUPERTUX_SOURCE_DIR}/external/binreloc/binreloc.c)
 ENDIF(ENABLE_BINRELOC)
 
 
@@ -352,6 +365,15 @@ IF(HAVE_LIBCURL)
   TARGET_LINK_LIBRARIES(supertux2 ${CURL_LIBRARY})
 ENDIF(HAVE_LIBCURL)
 
+# Warnings to add
+OPTION(WARNINGS "Enable long list of warnings for compiler to check" ON)
+IF(WARNINGS)
+  SET_PROPERTY(TARGET supertux2 APPEND PROPERTY COMPILE_FLAGS
+# -ansi fails in MinGW
+# still left:  -Weffc++ -Wold-style-cast -Wpadded -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
+        "-fdiagnostics-show-option -O3 -pedantic -Wno-long-long -Wabi -Wctor-dtor-privacy -Wstrict-null-sentinel -Wcast-align -Wdisabled-optimization -Winit-self -Winvalid-pch -Wlogical-op -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wredundant-decls -Wstack-protector")
+ENDIF(WARNINGS)
+
 ## Install stuff
 
 IF(WIN32 AND NOT UNIX)
@@ -360,14 +382,14 @@ IF(WIN32 AND NOT UNIX)
   SET(INSTALL_SUBDIR_SHARE "data/")
   SET(INSTALL_SUBDIR_DOC ".")
 
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/SDL.dll DESTINATION ${INSTALL_SUBDIR_BIN})
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/SDL_image.dll DESTINATION ${INSTALL_SUBDIR_BIN})
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/iconv.dll DESTINATION ${INSTALL_SUBDIR_BIN})
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/libogg-0.dll DESTINATION ${INSTALL_SUBDIR_BIN})
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/libphysfs-1-0-0.dll DESTINATION ${INSTALL_SUBDIR_BIN})
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/OpenAl32.dll DESTINATION ${INSTALL_SUBDIR_BIN})
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/wrap_oal.dll DESTINATION ${INSTALL_SUBDIR_BIN})
-  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/libcurl-4.dll DESTINATION ${INSTALL_SUBDIR_BIN})
+  INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/SDL.dll
+                ${SUPERTUX_SOURCE_DIR}/SDL_image.dll
+                ${SUPERTUX_SOURCE_DIR}/iconv.dll
+                ${SUPERTUX_SOURCE_DIR}/libogg-0.dll
+                ${SUPERTUX_SOURCE_DIR}/libphysfs-1-0-0.dll
+                ${SUPERTUX_SOURCE_DIR}/OpenAl32.dll
+                ${SUPERTUX_SOURCE_DIR}/wrap_oal.dll
+                ${SUPERTUX_SOURCE_DIR}/libcurl-4.dll DESTINATION ${INSTALL_SUBDIR_BIN})
 
   INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/data/images/engine/icons/supertux.png ${SUPERTUX_SOURCE_DIR}/data/images/engine/icons/supertux.ico DESTINATION ".")
 
@@ -400,13 +422,16 @@ INSTALL(TARGETS supertux2 DESTINATION ${INSTALL_SUBDIR_BIN})
 INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/INSTALL ${SUPERTUX_SOURCE_DIR}/README ${SUPERTUX_SOURCE_DIR}/COPYING ${SUPERTUX_SOURCE_DIR}/WHATSNEW.txt DESTINATION ${INSTALL_SUBDIR_DOC})
 
 INSTALL(FILES ${SUPERTUX_SOURCE_DIR}/data/credits.txt DESTINATION ${INSTALL_SUBDIR_SHARE})
-INSTALL(DIRECTORY data/images DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
-INSTALL(DIRECTORY data/levels DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
-INSTALL(DIRECTORY data/music DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
-INSTALL(DIRECTORY data/scripts DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
-INSTALL(DIRECTORY data/speech DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
-INSTALL(DIRECTORY data/sounds DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
-INSTALL(DIRECTORY data/locale DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
+
+INSTALL(DIRECTORY data/images
+                  data/fonts
+                  data/levels
+                  data/music
+                  data/scripts
+                  data/speech
+                  data/sounds
+                  data/locale
+                               DESTINATION ${INSTALL_SUBDIR_SHARE} PATTERN ".svn" EXCLUDE)
 
 
 ## CPack/Installation-specific stuff