+IF(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.cpp)
+ SET(SUPERTUX_SOURCES_CXX ${SUPERTUX_SOURCES_CXX} ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.cpp)
+ENDIF(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.cpp)
+
+## Compile everything at once (roughly equivalent to cat *.cpp | gcc)
+
+OPTION(COMPILE_AMALGATION "Compile all the files together at once (experimental)" OFF)
+IF(COMPILE_AMALGATION)
+ FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/amalgation.cpp "// Includes all source files of the project\n")
+ FOREACH(ST_FILE ${SUPERTUX_SOURCES_CXX})
+ FILE(RELATIVE_PATH CXX_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src "${CMAKE_CURRENT_SOURCE_DIR}/${ST_FILE}")
+ FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/amalgation.cpp "#include \"${CXX_FILE}\"\n")
+ ENDFOREACH(ST_FILE)
+ ## Build instead of CXX sources
+ SET(SUPERTUX_SOURCES_CXX ${CMAKE_CURRENT_BINARY_DIR}/amalgation.cpp)
+ELSE(COMPILE_AMALGATION)
+ IF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/amalgation.cpp)
+ FILE(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/amalgation.cpp)
+ ENDIF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/amalgation.cpp)
+ENDIF(COMPILE_AMALGATION)
+
+## Debug options
+
+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")
+ SET(CMAKE_CXX_FLAGS_PROFILE "-pg" CACHE STRING "Profile flags")
+ SET(CMAKE_C_FLAGS_PROFILE "-pg" CACHE STRING "Profile flags")
+ SET(CMAKE_LD_FLAGS_PROFILE "-lgmon" CACHE STRING "Profile flags")
+ ADD_DEFINITIONS(-Wall -Wextra -Wno-unused-parameter -funit-at-a-time)
+ IF(WERROR)
+ ADD_DEFINITIONS(-Werror)
+ ELSE(WERROR)
+ REMOVE_DEFINITIONS(-Werror)
+ ENDIF(WERROR)
+ IF(WARNINGS)
+ # 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
+ # fails on clang:
+ # -Wlogical-op -Wstrict-null-sentinel
+ SET(SUPERTUX2_EXTRA_WARNING_FLAGS "-fdiagnostics-show-option -pedantic -Wno-long-long -Wcast-align -Wdisabled-optimization -Winit-self -Winvalid-pch -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wredundant-decls -Wstack-protector -Wformat=2 -Weffc++ -Wctor-dtor-privacy -Wno-unused-parameter -Wshadow -Wnon-virtual-dtor -Wcast-qual")
+ ENDIF(WARNINGS)
+ENDIF(CMAKE_COMPILER_IS_GNUCC)