Skip to content

Instantly share code, notes, and snippets.

@take-cheeze
Created February 6, 2013 23:58
Show Gist options
  • Select an option

  • Save take-cheeze/4727076 to your computer and use it in GitHub Desktop.

Select an option

Save take-cheeze/4727076 to your computer and use it in GitHub Desktop.
cotire test
cmake_minimum_required(VERSION 2.8)
project(EasyRPG_Player CXX C)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../lib)
link_directories(${LIBRARY_OUTPUT_PATH})
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Modules")
# cotire
find_package(Wget REQUIRED)
execute_process(COMMAND "${WGET_EXECUTABLE}"
"--no-check-certificate"
"https://github.com/sakra/cotire/raw/master/CMake/cotire.cmake"
"-O" "${CMAKE_CURRENT_SOURCE_DIR}/Modules/cotire.cmake")
include(cotire)
add_definitions(
${PNG_DEFINITIONS}
-D UNIX=1
-D USE_SDL=1)
if(CMAKE_GENERATOR MATCHES "Makefile")
add_definitions(-fno-rtti)
endif()
# shinonome font
set(SHINONOME_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../lib/shinonome")
set(SHINONOME_SRCS
"${SHINONOME_PATH}/hankaku.cxx" "${SHINONOME_PATH}/latin1.cxx"
"${SHINONOME_PATH}/gothic.cxx" "${SHINONOME_PATH}/mincho.cxx")
include_directories(${SHINONOME_PATH})
find_package(Ruby)
if(RUBY_FOUND)
set(SHINONOME_GENERATOR "${SHINONOME_PATH}/generate_cxx_font.rb")
add_custom_command(
OUTPUT ${SHINONOME_SRCS} "${SHINONOME_PATH}/shinonome.hxx"
COMMAND "${RUBY_EXECUTABLE}" "${SHINONOME_GENERATOR}"
DEPENDS "${SHINONOME_GENERATOR}" WORKING_DIRECTORY "${SHINONOME_PATH}")
endif()
# endianess check
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
include(TestBigEndian)
test_big_endian(IS_BIG_ENDIAN)
if(IS_BIG_ENDIAN)
add_definitions(-D READER_BIG_ENDIAN=1)
endif()
endif()
if(CMAKE_BUILD_TYPE MATCHES "Debug")
add_definitions(-D _DEBUG=1)
endif()
foreach(i Iconv Expat Freetype JPEG Pixman PNG SDL ZLIB Boost)
find_package(${i} REQUIRED)
string(TOUPPER ${i} i)
include_directories(${${i}_INCLUDE_DIR} ${${i}_INCLUDE_DIRS})
list(APPEND EASYRPG_PLAYER_LIBRARIES ${${i}_LIBRARY} ${${i}_LIBRARIES})
endforeach()
# SDL_mixer
find_package(SDL_mixer)
if(SDLMIXER_FOUND)
include_directories(${SDLMIXER_INCLUDE_DIR})
list(APPEND EASYRPG_PLAYER_LIBRARIES ${SDLMIXER_LIBRARY})
add_definitions(-D HAVE_SDL_MIXER=1)
else()
add_definitions(-DNO_SDL_MIXER)
endif()
# OpenAL
find_package(OpenAL)
if(OPENAL_FOUND)
find_package(SndFile REQUIRED)
include_directories(${OPENAL_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR})
list(APPEND EASYRPG_PLAYER_LIBRARIES ${OPENAL_LIBRARY} ${SNDFILE_LIBRARIES})
add_definitions(-D HAVE_OPENAL=1)
endif()
# Lua 5.1
find_package(Lua51)
if(LUA51_FOUND)
include_directories(${LUA_INCLUDE_DIR})
list(APPEND EASYRPG_PLAYER_LIBRARIES ${LUA_LIBRARIES})
add_definitions(-D HAVE_LUA=1)
endif()
# Boost (libraries that need to link)
unset(Boost_FOUND)
find_package(Boost COMPONENTS thread chrono system)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
list(APPEND EASYRPG_PLAYER_LIBRARIES ${Boost_LIBRARIES})
add_definitions(-D HAVE_BOOST_LIBRARIES)
endif()
# library
set(EASYRPG_PLAYER_LIBRARIES_ALL ${EASYRPG_PLAYER_LIBRARIES} ${PROJECT_NAME}_Static)
# entry point
set(MAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../../src/main.cpp")
# lcf reader
set(LCF_READER_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../lib/lcf_reader")
set(LCF_SCHEMA_CXX "${LCF_READER_PATH}/schema/schema.cxx")
include_directories("${LCF_READER_PATH}")
aux_source_directory("${LCF_READER_PATH}" READER_SRCS)
if(RUBY_FOUND)
file(GLOB LCF_SCHEMA_SRCS "${LCF_READER_PATH}/schema/*.json")
add_custom_command(OUTPUT "${LCF_SCHEMA_CXX}"
COMMAND "${RUBY_EXECUTABLE}"
ARGS "${LCF_READER_PATH}/to_cxx.rb" "${LCF_READER_PATH}/schema" "${LCF_SCHEMA_CXX}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
DEPENDS ${LCF_SCHEMA_SRCS} "${LCF_READER_PATH}/to_cxx.rb")
endif()
list(APPEND READER_SRCS ${LCF_SCHEMA_CXX})
# static library
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../../src SRCS)
list(REMOVE_ITEM SRCS ${MAIN_FILE})
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
list(APPEND SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../../resources/player.rc")
endif()
set(SRCS ${SHINONOME_SRCS} ${READER_SRCS} ${SRCS})
add_library(${PROJECT_NAME}_Static STATIC ${SRCS})
cotire(${PROJECT_NAME}_Static)
# executable
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${MAIN_FILE})
add_executable(${PROJECT_NAME}_com ${MAIN_FILE})
foreach(i ${PROJECT_NAME} ${PROJECT_NAME}_com)
target_link_libraries(${i} ${EASYRPG_PLAYER_LIBRARIES_ALL})
add_dependencies(${i} EasyRPG_Reader ${i}_Static)
endforeach()
# RTP Table
if(NOT WIN32)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/../../src/rtp_table_bom.h"
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/../../resources/add_bom.sh"
"${CMAKE_CURRENT_SOURCE_DIR}/../../src/rtp_table.h"
"${CMAKE_CURRENT_SOURCE_DIR}/../../src/rtp_table_bom.h"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../../src/rtp_table.h")
endif()
# CPack
set(CPACK_GENERATOR "ZIP" "TGZ")
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
list(APPEND CPACK_GENERATOR "NSIS")
endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
list(APPEND CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_NAME "easyrpg-player")
set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://easy-rpg.org/")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "take_cheeze")
set(CPACK_DEBIAN_PACKAGE_DEPENDS
libexpat1 libfreetype6 libjpeg8 libpixman-1-0 libpng12-0 zlib1g libsdl1.2debian
libsdl-mixer1.2 libopenal1 libogg0 libflac8 libvorbis0a libvorbisenc2 libsndfile1
liblua5.1-0 libboost-thread-dev libboost-chrono-dev libboost-system-dev libstdc++6
libgcc1 libasound2 libpulse0 libxext6 libcaca0 libmikmod2 libvorbisfile3 libmad0
libjson0 libslang2 libncurses5 libtinfo5 libwrap0 libasyncns0 libxau6 libxdmcp6)
endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
list(APPEND CPACK_GENERATOR "DMG")
set(CPACK_DMG_FORMAT "UDRO")
endif()
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VERSION "0.1")
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/../../resources/player.ico")
set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/../../README)
include(CPack)
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} DESTINATION bin)
# Doxygen
find_package(Doxygen)
if(DOXYGEN_FOUND)
add_custom_target(player_doc
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/../Doxyfile
DEPENDS ${SRCS} ${MAIN_FILE}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/..
COMMENT "Generating API documentation with Doxygen" VERBATIM)
add_custom_target(doc)
add_dependencies(doc player_doc reader_doc)
endif()
# test
enable_testing()
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src)
set(TEST_GAME_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../lib/TestGame")
if(NOT EXISTS ${TEST_GAME_PATH})
execute_process(COMMAND ${GIT_EXECUTABLE} clone
"https://github.com/EasyRPG/TestGame.git"
"${TEST_GAME_PATH}")
endif()
file(GLOB TEST_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../test/*.cpp")
foreach(i ${TEST_FILES})
get_filename_component(name "${i}" NAME_WE)
add_executable(test_${name} ${i})
target_link_libraries(test_${name} ${EASYRPG_PLAYER_LIBRARIES_ALL})
add_dependencies(test_${name} ${PROJECT_NAME}_Static)
add_test(
NAME test_${name}
WORKING_DIRECTORY "${TEST_GAME_PATH}/TestGame-2000"
COMMAND ${EXECUTABLE_OUTPUT_PATH}/test_${name})
set_tests_properties(test_${name}
PROPERTIES ENVIRONMENT "RPG_TEST_GAME_PATH=${TEST_GAME_PATH}/TestGame-2000")
endforeach()
file(GLOB LUA_TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/../../test/lua_script/*.lua)
foreach(i ${LUA_TEST_FILES})
get_filename_component(name "${i}" NAME_WE)
add_test(NAME lua_test_${name}
WORKING_DIRECTORY "${TEST_GAME_PATH}/TestGame-2000"
COMMAND ${EXECUTABLE_OUTPUT_PATH}/${PROJECT_NAME}_com)
set_tests_properties(lua_test_${name}
PROPERTIES ENVIRONMENT "RPG_LUABOT_SCRIPT=${i}")
set_tests_properties(lua_test_${name}
PROPERTIES ENVIRONMENT "RPG_TEST_GAME_PATH=${TEST_GAME_PATH}/TestGame-2000")
endforeach()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment