diff --git a/CMakeLists.txt b/CMakeLists.txt index 623234e720..b3dcda0c5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,231 +2,549 @@ cmake_minimum_required(VERSION 3.1) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED on) +include(CMakeDependentOption) project(EasyRPG_Player CXX C) -# liblcf -# - ${LIBLCF_PATH} - -set(DEFAULT_LIBLCF_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf") -if(NOT LIBLCF_PATH) - set(LIBLCF_PATH "${DEFAULT_LIBLCF_PATH}") -endif() -find_package(Git REQUIRED) -if(NOT EXISTS ${LIBLCF_PATH}) - execute_process(COMMAND ${GIT_EXECUTABLE} clone "--depth=1" - "https://github.com/EasyRPG/liblcf.git" - "${LIBLCF_PATH}") -endif() -add_subdirectory( - ${LIBLCF_PATH}/builds/cmake - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/liblcf) -link_directories(${ICU_LIBRARY_DIRS}) - -set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) -set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib) -#link_directories(${LIBRARY_OUTPUT_PATH}) -#cmake_policy(CMP0015 NEW) +# Source Files +set(PLAYER_SRCS + src/async_handler.cpp + src/audio_al.cpp + src/audio.cpp + src/audio_decoder.cpp + src/audio_resampler.cpp + src/audio_sdl.cpp + src/audio_secache.cpp + src/background.cpp + src/baseui.cpp + src/battle_animation.cpp + src/bitmap.cpp + src/cache.cpp + src/color.cpp + src/decoder_fmmidi.cpp + src/decoder_libsndfile.cpp + src/decoder_mpg123.cpp + src/decoder_oggvorbis.cpp + src/decoder_wav.cpp + src/decoder_wildmidi.cpp + src/decoder_xmp.cpp + src/effects.cpp + src/filefinder.cpp + src/font.cpp + src/frame.cpp + src/game_actor.cpp + src/game_actors.cpp + src/game_battlealgorithm.cpp + src/game_battle.cpp + src/game_battler.cpp + src/game_character.cpp + src/game_commonevent.cpp + src/game_enemy.cpp + src/game_enemyparty.cpp + src/game_event.cpp + src/game_interpreter_battle.cpp + src/game_interpreter.cpp + src/game_interpreter_map.cpp + src/game_map.cpp + src/game_message.cpp + src/game_party_base.cpp + src/game_party.cpp + src/game_picture.cpp + src/game_player.cpp + src/game_screen.cpp + src/game_switches.cpp + src/game_system.cpp + src/game_targets.cpp + src/game_temp.cpp + src/game_variables.cpp + src/game_vehicle.cpp + src/graphics.cpp + src/hslrgb.cpp + src/image_bmp.cpp + src/image_png.cpp + src/image_xyz.cpp + src/input_buttons_desktop.cpp + src/input_buttons_gekko.cpp + src/input_buttons_opendingux.cpp + src/input_buttons_psp.cpp + src/input.cpp + src/main_data.cpp + src/message_overlay.cpp + src/output.cpp + src/plane.cpp + src/player.cpp + src/rect.cpp + src/registry.cpp + src/registry_wine.cpp + src/rtp_table.cpp + src/scene_actortarget.cpp + src/scene_battle.cpp + src/scene_battle_rpg2k3.cpp + src/scene_battle_rpg2k.cpp + src/scene.cpp + src/scene_debug.cpp + src/scene_end.cpp + src/scene_equip.cpp + src/scene_file.cpp + src/scene_gamebrowser.cpp + src/scene_gameover.cpp + src/scene_item.cpp + src/scene_load.cpp + src/scene_logo.cpp + src/scene_map.cpp + src/scene_menu.cpp + src/scene_name.cpp + src/scene_order.cpp + src/scene_save.cpp + src/scene_shop.cpp + src/scene_skill.cpp + src/scene_status.cpp + src/scene_teleport.cpp + src/scene_title.cpp + src/screen.cpp + src/sdl_ui.cpp + src/shinonome_gothic.cpp + src/shinonome_mincho.cpp + src/sprite_airshipshadow.cpp + src/sprite_battler.cpp + src/sprite_character.cpp + src/sprite.cpp + src/spriteset_battle.cpp + src/spriteset_map.cpp + src/sprite_timer.cpp + src/text.cpp + src/tilemap.cpp + src/tilemap_layer.cpp + src/tone.cpp + src/utils.cpp + src/util_win.cpp + src/weather.cpp + src/window_about.cpp + src/window_actorinfo.cpp + src/window_actorstatus.cpp + src/window_actortarget.cpp + src/window_base.cpp + src/window_battlecommand.cpp + src/window_battlemessage.cpp + src/window_battleoption.cpp + src/window_battlestatus.cpp + src/window_command.cpp + src/window.cpp + src/window_equip.cpp + src/window_equipitem.cpp + src/window_equipstatus.cpp + src/window_face.cpp + src/window_gamelist.cpp + src/window_gold.cpp + src/window_help.cpp + src/window_item.cpp + src/window_keyboard.cpp + src/window_menustatus.cpp + src/window_message.cpp + src/window_name.cpp + src/window_numberinput.cpp + src/window_savefile.cpp + src/window_selectable.cpp + src/window_shopbuy.cpp + src/window_shop.cpp + src/window_shopnumber.cpp + src/window_shopparty.cpp + src/window_shopsell.cpp + src/window_shopstatus.cpp + src/window_skill.cpp + src/window_skillstatus.cpp + src/window_targetstatus.cpp + src/window_teleport.cpp + src/window_varlist.cpp +) + +# Include directories +include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src") +# Extra FindModule files list(APPEND CMAKE_MODULE_PATH - "${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf/builds/cmake/Modules" "${CMAKE_CURRENT_SOURCE_DIR}/builds/cmake/Modules") -add_definitions( - ${PNG_DEFINITIONS} - - -D USE_SDL=1) - +# Add compile flags if(CMAKE_GENERATOR MATCHES "Makefile") - add_definitions(-fno-rtti) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") endif() -# wine checking -find_program(WINE_EXECUTABLE wine) -if(EXISTS ${WINE_EXECUTABLE}) - message(STATUS "wine registry enabled") - add_definitions(-DHAVE_WINE=1) +if(CMAKE_BUILD_TYPE MATCHES "Debug") + add_definitions(-D_DEBUG=1) endif() -# shinonome font -set(SHINONOME_PATH "${CMAKE_CURRENT_SOURCE_DIR}/resources/shinonome") -set(SHINONOME_SRC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src") -set(SHINONOME_SRCS "${SHINONOME_SRC_PATH}/shinonome_gothic.cpp" - "${SHINONOME_SRC_PATH}/shinonome_mincho.cpp" - "${SHINONOME_SRC_PATH}/shinonome.h") -find_package(Ruby) -if(RUBY_FOUND) - set(SHINONOME_GENERATOR "${SHINONOME_PATH}/generate_cxx_font.rb") - add_custom_command( - OUTPUT ${SHINONOME_SRCS} - COMMAND "${RUBY_EXECUTABLE}" ARGS "${SHINONOME_GENERATOR}" - DEPENDS "${SHINONOME_GENERATOR}" - WORKING_DIRECTORY "${SHINONOME_PATH}") -endif() +add_definitions(-DUSE_SDL=1) -# endianess check +# Endianess check if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) - include(TestBigEndian) - test_big_endian(WORDS_BIGENDIAN) - if(WORDS_BIGENDIAN) - add_definitions(-D WORDS_BIGENDIAN=1) - endif() + include(TestBigEndian) + test_big_endian(WORDS_BIGENDIAN) + if(WORDS_BIGENDIAN) + add_definitions(-DWORDS_BIGENDIAN=1) + endif() endif() -if(CMAKE_BUILD_TYPE MATCHES "Debug") - add_definitions(-D _DEBUG=1) +# Adds a library to the liblist if COND is true and the lib is found +# When COND is REQUIRED the lib is required +function(find_lib LIBNAME COND) + set(REQ OFF) + if(${COND} MATCHES "REQUIRED") + set(COND ON) + set(REQ ON) + endif() + + if(${COND}) + if(${REQ}) + find_package(${LIBNAME} REQUIRED) + else() + find_package(${LIBNAME}) + endif() + + if(${${LIBNAME}_FOUND}) + string(TOUPPER ${LIBNAME} LIBNAMEUP) + include_directories(${${LIBNAMEUP}_INCLUDE_DIRS}) + set(EASYRPG_PLAYER_LIBRARIES ${EASYRPG_PLAYER_LIBRARIES} ${${LIBNAMEUP}_LIBRARIES} PARENT_SCOPE) + endif() + + set(${LIBNAME}_FOUND ${${LIBNAME}_FOUND} PARENT_SCOPE) + endif() +endfunction() + +# liblcf +option(PLAYER_BUILD_LIBLCF "Instead of detecting liblcf the liblcf repository is cloned into lib/liblcf and built together with the Player. This is convenient for development" OFF) +set(PLAYER_BUILD_LIBLCF_GIT "https://github.com/EasyRPG/liblcf.git" CACHE STRING "Git repository of liblcf to clone when building liblcf. Requires PLAYER_BUILD_LIBLCF=ON.") + +if(PLAYER_BUILD_LIBLCF) + # liblcf is built as part of this cmake file + set(LIBLCF_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf") + find_package(Git REQUIRED) + if(NOT EXISTS ${LIBLCF_PATH}) + execute_process(COMMAND ${GIT_EXECUTABLE} clone "--depth=1" + "${PLAYER_BUILD_LIBLCF_GIT}" + "${LIBLCF_PATH}") + endif() + list(APPEND CMAKE_MODULE_PATH + "${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf/builds/cmake/Modules") + add_subdirectory( + ${LIBLCF_PATH}/builds/cmake + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/liblcf) +else() + # Use system package + find_lib(liblcf REQUIRED) endif() -# mpg123 -find_package(libmpg123) -if (libmpg123_FOUND) - include_directories(${MPG123_INCLUDE_DIR}) - list(APPEND EASYRPG_PLAYER_LIBRARIES ${MPG123_LIBRARY}) - add_definitions(-DHAVE_MPG123) +# Detect all required libraries +foreach(i Pixman ZLIB PNG SDL2) + find_lib(${i} REQUIRED) +endforeach() + +# Always enable Wine registry support on non-Windows +if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + add_definitions(-DHAVE_WINE=1) endif() -# SDL_mixer -find_package(SDL2_mixer) -if(SDL2_MIXER_FOUND) - include_directories(${SDL2_MIXER_INCLUDE_DIR}) - list(APPEND EASYRPG_PLAYER_LIBRARIES ${SDL2_MIXER_LIBRARY}) - add_definitions(-D HAVE_SDL_MIXER=1) -else() - add_definitions(-DNO_SDL_MIXER) +# freetype and harfbuzz +option(PLAYER_WITH_FREETYPE "Support FreeType font rendering" ON) +CMAKE_DEPENDENT_OPTION(PLAYER_WITH_HARFBUZZ "Enable HarfBuzz text shaping (Requires FreeType)" ON "PLAYER_WITH_FREETYPE" OFF) +find_lib("Freetype" PLAYER_WITH_FREETYPE) +if(Freetype_FOUND) + add_definitions(-DHAVE_FREETYPE) + find_lib("Harfbuzz" PLAYER_WITH_HARFBUZZ) + if(Harfbuzz_FOUND) + add_definitions(-DHAVE_HARFBUZZ) + endif() endif() -# OpenAL -find_package(OpenAL) -if(OPENAL_FOUND) - find_package(SndFile REQUIRED) - find_package(FluidSynth REQUIRED) - include_directories(${OPENAL_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR} ${FLUIDSYNTH_INCLUDE_DIR}) - list(APPEND EASYRPG_PLAYER_LIBRARIES ${OPENAL_LIBRARY} ${SNDFILE_LIBRARIES} ${FLUIDSYNTH_LIBRARY}) - add_definitions(-D HAVE_OPENAL=1) +# Sound system to use +set(PLAYER_AUDIO_BACKEND "SDL2_mixer" CACHE STRING "Audio system to use. The SDL2_mixer audio system provides advanced features required by RPG Maker. Options: SDL2_mixer OpenAL OFF") +set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 OpenAL OFF) + +# Configure Audio backends +if(${PLAYER_AUDIO_BACKEND} MATCHES "SDL2_mixer") + # SDL2_mixer Audio + find_lib(SDL2_mixer REQUIRED) + add_definitions(-DHAVE_SDL_MIXER=1) + + # speexdsp + option(PLAYER_WITH_SPEEXDSP "Resample audio with speexdsp." ON) + find_lib("speexdsp" PLAYER_WITH_SPEEXDSP) + if(speexdsp_FOUND) + add_definitions(-DHAVE_LIBSPEEXDSP) + endif() + + # mpg123 + option(PLAYER_WITH_MPG123 "Play MP3 audio with libmpg123." ON) + find_lib("mpg123" PLAYER_WITH_MPG123) + if(mpg123_FOUND) + add_definitions(-DHAVE_MPG123) + endif() + + # libsndfile + option(PLAYER_WITH_LIBSNDFILE "Play WAV audio with libsndfile." ON) + find_lib("SndFile" PLAYER_WITH_LIBSNDFILE) + if(SndFile_FOUND) + add_definitions(-DHAVE_LIBSNDFILE) + endif() + + # libogg + option(PLAYER_WITH_OGGVORBIS "Play OGG audio with libogg." ON) + find_lib("OggVorbis" PLAYER_WITH_OGGVORBIS) + if(OggVorbis_FOUND) + add_definitions(-DHAVE_OGGVORBIS) + endif() + + # wildmidi (optional, OFF) + option(PLAYER_WITH_WILDMIDI "Play MIDI audio with wildmidi. (optional)" OFF) + find_lib("WildMidi" PLAYER_WITH_WILDMIDI) + if(WildMidi_FOUND) + add_definitions(-DHAVE_WILDMIDI) + endif() + + # Provide fmmidi options + set(PLAYER_ENABLE_FMMIDI "Fallback" CACHE STRING "Enable internal MIDI sequencer. Fallback (default) mode will use it when the external MIDI library fails. Options: Fallback ON OFF") + set_property(CACHE PLAYER_ENABLE_FMMIDI PROPERTY STRINGS Fallback ON OFF) + if(${PLAYER_ENABLE_FMMIDI} MATCHES "Fallback") + add_definitions(-DWANT_FMMIDI=2) + elseif(${PLAYER_ENABLE_FMMIDI} MATCHES "ON") + add_definitions(-DWANT_FMMIDI=1) + elseif(${PLAYER_ENABLE_FMMIDI} MATCHES "OFF") + # noop + else() + message(FATAL_ERROR "Bad FmMidi setting") + endif() + + if(NOT ${PLAYER_ENABLE_FMMIDI} MATCHES "OFF") + list(APPEND PLAYER_SRCS + src/midisequencer.cpp + src/midisynth.cpp + ) + endif() + + # xmp (lite) + option(PLAYER_WITH_XMP "Play MOD audio with libxmp." ON) + find_lib("XMP" PLAYER_WITH_XMP) + if(XMP_FOUND) + add_definitions(-DHAVE_XMP) + endif() + +elseif(${PLAYER_AUDIO_BACKEND} MATCHES "OpenAL") + # OpenAL Audio + add_definitions(-DNO_SDL_MIXER) + find_package(OpenAL REQUIRED) + find_package(SndFile REQUIRED) + find_package(FluidSynth REQUIRED) + include_directories(${OPENAL_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR} ${FLUIDSYNTH_INCLUDE_DIR}) + list(APPEND EASYRPG_PLAYER_LIBRARIES ${OPENAL_LIBRARY} ${SNDFILE_LIBRARIES} ${FLUIDSYNTH_LIBRARY}) + add_definitions(-DHAVE_OPENAL) +elseif(${PLAYER_AUDIO_BACKEND} MATCHES "OFF") + add_definitions(-DNO_SDL_MIXER) +else() + message(FATAL_ERROR "Invalid Audio Backend") endif() -include_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf/src") -include_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf/src/generated") -include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src") +# Additional include directories +if(PLAYER_BUILD_LIBLCF) + include_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf/src") + include_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib/liblcf/src/generated") +endif() -foreach(i Expat Freetype Harfbuzz Pixman ZLIB PNG SDL2 Iconv) - find_package(${i} REQUIRED) +# Libraries +set(EASYRPG_PLAYER_LIBRARIES_ALL ${EASYRPG_PLAYER_LIBRARIES} "${PROJECT_NAME}_Static") +if(PLAYER_BUILD_LIBLCF) + list(APPEND EASYRPG_PLAYER_LIBRARIES_ALL liblcf) +endif() - string(TOUPPER ${i} i) +# Output path +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) +set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib) - include_directories(${${i}_INCLUDE_DIR} ${${i}_INCLUDE_DIRS}) - list(APPEND EASYRPG_PLAYER_LIBRARIES ${${i}_LIBRARY} ${${i}_LIBRARIES}) -endforeach() +# Entry point +set(EXE_FILES "src/main.cpp") -# library -set(EASYRPG_PLAYER_LIBRARIES_ALL - ${EASYRPG_PLAYER_LIBRARIES} "${PROJECT_NAME}_Static" liblcf) +# Add prefix (CMAKE_CURRENT_SOURCE_DIR) to list elements +FUNCTION(PREPEND var prefix) + SET(listVar "") + FOREACH(f ${ARGN}) + LIST(APPEND listVar "${prefix}/${f}") + ENDFOREACH(f) + SET(${var} "${listVar}" PARENT_SCOPE) +ENDFUNCTION(PREPEND) -# entry point -set(MAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp") +PREPEND(PLAYER_SRCS ${CMAKE_CURRENT_SOURCE_DIR} ${PLAYER_SRCS}) +PREPEND(EXE_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${EXE_FILES}) -# static library -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRCS) -list(REMOVE_ITEM SRCS ${MAIN_FILE}) -list(APPEND SRCS ${SHINONOME_SRCS}) +# Static library if(CMAKE_SYSTEM_NAME MATCHES "Windows") - list(APPEND SRCS "${CMAKE_CURRENT_SOURCE_DIR}/resources/player.rc") + list(APPEND PLAYER_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/resources/player.rc") endif() -add_library(${PROJECT_NAME}_Static STATIC ${SRCS}) - -# 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} liblcf ${PROJECT_NAME}_Static) +add_library(${PROJECT_NAME}_Static STATIC ${PLAYER_SRCS}) + +# Executable +add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${EXE_FILES}) +foreach(i ${PROJECT_NAME} ${PROJECT_NAME}) + target_link_libraries(${i} ${EASYRPG_PLAYER_LIBRARIES_ALL}) + add_dependencies(${i} ${PROJECT_NAME}_Static) + if(PLAYER_BUILD_LIBLCF) + add_dependencies(${i} liblcf) + endif() endforeach() install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME} DESTINATION bin) # manpage +# Handled as extra target "man" set(MAN_NAME easyrpg-player.6) find_program(A2X_EXECUTABLE NAMES a2x a2x.py) if(NOT A2X_EXECUTABLE STREQUAL "A2X_EXECUTABLE-NOTFOUND") - add_custom_command(OUTPUT resources/${MAN_NAME} - COMMAND ${A2X_EXECUTABLE} -a player_version="0.4.1" -f manpage -D ${CMAKE_CURRENT_BINARY_DIR}/resources ${CMAKE_CURRENT_SOURCE_DIR}/resources/${MAN_NAME}.adoc - DEPENDS resources/${MAN_NAME}.adoc - COMMENT "(Re-)building manpage ${MAN_NAME}" - VERBATIM) - if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - add_custom_target(man ALL DEPENDS resources/${MAN_NAME}) - install(FILES resources/${MAN_NAME} DESTINATION share/man/man6) - else() - add_custom_target(man DEPENDS resources/${MAN_NAME}) - endif() + add_custom_command(OUTPUT resources/${MAN_NAME} + COMMAND ${A2X_EXECUTABLE} -a player_version="0.4.1" -f manpage -D ${CMAKE_CURRENT_BINARY_DIR}/resources ${CMAKE_CURRENT_SOURCE_DIR}/resources/${MAN_NAME}.adoc + DEPENDS resources/${MAN_NAME}.adoc + COMMENT "(Re-)building manpage ${MAN_NAME}" + VERBATIM) + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + add_custom_target(man ALL DEPENDS resources/${MAN_NAME}) + install(FILES resources/${MAN_NAME} DESTINATION share/man/man6) + else() + add_custom_target(man DEPENDS resources/${MAN_NAME}) + endif() else() - # no a2x, distribution archive? - if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/resources/${MAN_NAME}) - install(FILES resources/${MAN_NAME} DESTINATION share/man/man6) - endif() + # no a2x, distribution archive? + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/resources/${MAN_NAME}) + install(FILES resources/${MAN_NAME} DESTINATION share/man/man6) + endif() +endif() + +# Doxygen +# Handled as extra target "doc" +find_package(Doxygen) +if(DOXYGEN_FOUND) + # fake autotools variables + set(DX_DOCDIR ${CMAKE_CURRENT_BINARY_DIR}/doc) + set(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) + configure_file(resources/Doxyfile.in resources/Doxyfile @ONLY) + unset(DX_DOCDIR) + unset(PACKAGE_VERSION) + unset(srcdir) + + add_custom_target(player_doc + ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/resources/Doxyfile + DEPENDS ${PLAYER_SRCS} ${EXE_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resources + COMMENT "Generating API documentation with Doxygen" VERBATIM) + add_custom_target(doc) + add_dependencies(doc player_doc) + if(PLAYER_BUILD_LIBLCF) + add_dependencies(doc liblcf_doc) + endif() endif() -# CPack -set(CPACK_GENERATOR "ZIP" "TGZ") -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - list(APPEND CPACK_GENERATOR "NSIS") +# Unit tests +option(PLAYER_ENABLE_TESTS "Execute unit tests after compilation finishes" ON) + +if(PLAYER_ENABLE_TESTS) + enable_testing() + + set(TEST_GAME_REPOSITORY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/TestGame") + if(NOT EXISTS ${TEST_GAME_REPOSITORY_PATH}) + execute_process(COMMAND ${GIT_EXECUTABLE} clone "--depth=1" + "https://github.com/EasyRPG/TestGame.git" + "${TEST_GAME_REPOSITORY_PATH}") + endif() + set(TEST_GAME_PATH "${TEST_GAME_REPOSITORY_PATH}/TestGame-2000") + + set(TEST_ENVS "RPG_TEST_GAME_PATH=${TEST_GAME_PATH}") + if(EXISTS $ENV{RPG_RTP_PATH}) + get_filename_component(RPG_RTP_PATH "$ENV{RPG_RTP_PATH}" ABSOLUTE) + message(STATUS "using rtp path ${RPG_RTP_PATH}") + list(APPEND TEST_ENVS "RPG_RTP_PATH=${RPG_RTP_PATH}") + endif() + + file(GLOB TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.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} + COMMAND ${EXECUTABLE_OUTPUT_PATH}/test_${name}) + set_tests_properties(test_${name} + PROPERTIES ENVIRONMENT "${TEST_ENVS}") + endforeach() endif() -set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) -set(CPACK_PACKAGE_VERSION "0.4.1") -set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/player.ico") -set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README) +# Print summary +message(STATUS "") +if(PLAYER_BUILD_LIBLCF) + message(STATUS "liblcf: Built from ${PLAYER_BUILD_LIBLCF_GIT}") + message(STATUS "") +endif() +message(STATUS "Audio backend: ${PLAYER_AUDIO_BACKEND}") +if(${PLAYER_AUDIO_BACKEND} MATCHES "SDL2_mixer") + message(STATUS "") + + if(SndFile_FOUND) + message(STATUS "WAV playback: libsndfile") + else() + set(SDL_MIXER_USED ON) + message(STATUS "WAV playback: SDL2_mixer") + endif() + + if(wildmidi_FOUND) + message(STATUS "MIDI playback: WildMidi") + elseif(${PLAYER_ENABLE_FMMIDI} MATCHES "ON") + message(STATUS "MIDI playback: built-in (FmMidi)") + elseif(${PLAYER_ENABLE_FMMIDI} MATCHES "Fallback") + message(STATUS "MIDI playback: SDL2_mixer. Fallback to built-in (FmMidi)") + elseif(${PLAYER_ENABLE_FMMIDI} MATCHES "OFF") + message(STATUS "MIDI playback: SDL2_mixer.") + endif() + + if(mpg123_FOUND) + message(STATUS "MP3 playback: mpg123") + else() + set(SDL_MIXER_USED ON) + message(STATUS "MP3 playback: SDL2_mixer. Some MP3 files will crash or play noise.") + endif() + + if(OggVorbis_FOUND) + message(STATUS "OGG playback: libogg") + else() + set(SDL_MIXER_USED ON) + message(STATUS "OGG playback: SDL2_mixer") + endif() + + if(XMP_FOUND) + message(STATUS "MOD playback: libxmp") + else() + set(SDL_MIXER_USED ON) + message(STATUS "MOD playback: SDL2_mixer") + endif() + + if(speexdsp_FOUND) + message(STATUS "Resampler: speexdsp") + else() + set(SDL_MIXER_USED ON) + message(STATUS "Resampler: SDL2") + endif() + + if(SDL_MIXER_USED) + message(STATUS "") + message(STATUS "WARNING:") + message(STATUS "Using SDL2_mixer directly for playback or resampling is not recommended.") + message(STATUS "Some RPG Maker features (e.g. pitch changes) will not work.") + endif() +endif() -include(CPack) +message(STATUS "") -# Doxygen -find_package(Doxygen) -if(DOXYGEN_FOUND) - # fake autotools variables - set(DX_DOCDIR ${CMAKE_CURRENT_BINARY_DIR}/doc) - set(PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}) - set(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) - configure_file(resources/Doxyfile.in resources/Doxyfile @ONLY) - unset(DX_DOCDIR) - unset(PACKAGE_VERSION) - unset(srcdir) - - add_custom_target(player_doc - ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/resources/Doxyfile - DEPENDS ${SRCS} ${MAIN_FILE} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resources - COMMENT "Generating API documentation with Doxygen" VERBATIM) - add_custom_target(doc) - add_dependencies(doc player_doc liblcf_doc) -endif() - -# test -enable_testing() - -set(TEST_GAME_REPOSITORY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/TestGame") -if(NOT EXISTS ${TEST_GAME_REPOSITORY_PATH}) - execute_process(COMMAND ${GIT_EXECUTABLE} clone - "https://github.com/EasyRPG/TestGame.git" - "${TEST_GAME_REPOSITORY_PATH}") -endif() -set(TEST_GAME_PATH "${TEST_GAME_REPOSITORY_PATH}/TestGame-2000") - -set(TEST_ENVS "RPG_TEST_GAME_PATH=${TEST_GAME_PATH}") -if(EXISTS $ENV{RPG_RTP_PATH}) - get_filename_component(RPG_RTP_PATH "$ENV{RPG_RTP_PATH}" ABSOLUTE) - message(STATUS "using rtp path ${RPG_RTP_PATH}") - list(APPEND TEST_ENVS "RPG_RTP_PATH=${RPG_RTP_PATH}") -endif() - -file(GLOB TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.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} - COMMAND ${EXECUTABLE_OUTPUT_PATH}/test_${name}) - set_tests_properties(test_${name} - PROPERTIES ENVIRONMENT "${TEST_ENVS}") -endforeach() +if(Harfbuzz_FOUND) + message(STATUS "Font rendering: Freetype with Harfbuzz / built-in (Shinonome)") +elseif(FreeType_FOUND) + message(STATUS "Font rendering: Freetype and built-in (Shinonome)") +else() + message(STATUS "Font rendering: built-in (Shinonome)") +endif() + +message(STATUS "") diff --git a/builds/cmake/Modules/FindFluidSynth.cmake b/builds/cmake/Modules/FindFluidSynth.cmake index b65bb2e5d4..1dda99749f 100644 --- a/builds/cmake/Modules/FindFluidSynth.cmake +++ b/builds/cmake/Modules/FindFluidSynth.cmake @@ -3,3 +3,8 @@ find_path(FLUIDSYNTH_INCLUDE_DIR "fluidsynth.h") include(FindPackageHandleStandardArgs) find_package_handle_standard_args(FluidSynth DEFAULT_MSG FLUIDSYNTH_LIBRARY FLUIDSYNTH_INCLUDE_DIR) + +set(FLUIDSYNTH_INCLUDE_DIRS ${FLUIDSYNTH_INCLUDE_DIR}) +set(FLUIDSYNTH_LIBRARIES ${FLUIDSYNTH_LIBRARY}) + +mark_as_advanced(FLUIDSYNTH_INCLUDE_DIR FLUIDSYNTH_LIBRARY) diff --git a/builds/cmake/Modules/FindHarfbuzz.cmake b/builds/cmake/Modules/FindHarfbuzz.cmake index 4d4aed49ed..45956c80e6 100644 --- a/builds/cmake/Modules/FindHarfbuzz.cmake +++ b/builds/cmake/Modules/FindHarfbuzz.cmake @@ -12,3 +12,8 @@ endif() find_package_handle_standard_args(Harfbuzz REQUIRED_VARS HARFBUZZ_INCLUDE_DIR HARFBUZZ_LIBRARY) + +set(HARFBUZZ_INCLUDE_DIRS ${HARFBUZZ_INCLUDE_DIR}) +set(HARFBUZZ_LIBRARIES ${HARFBUZZ_LIBRARY}) + +mark_as_advanced(HARFBUZZ_INCLUDE_DIR HARFBUZZ_LIBRARY) diff --git a/builds/cmake/Modules/FindOggVorbis.cmake b/builds/cmake/Modules/FindOggVorbis.cmake new file mode 100644 index 0000000000..43a444bb40 --- /dev/null +++ b/builds/cmake/Modules/FindOggVorbis.cmake @@ -0,0 +1,10 @@ +find_path(OGGVORBIS_INCLUDE_DIR vorbis/vorbisfile.h) +find_library(OGGVORBIS_LIBRARY NAMES vorbisfile libvorbisfile) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OggVorbis DEFAULT_MSG OGGVORBIS_INCLUDE_DIR OGGVORBIS_LIBRARY) + +set(OGGVORBIS_INCLUDE_DIRS ${OGGVORBIS_INCLUDE_DIR}) +set(OGGVORBIS_LIBRARIES ${OGGVORBIS_LIBRARY}) + +mark_as_advanced(OGGVORBIS_INCLUDE_DIR OGGVORBIS_LIBRARY) diff --git a/builds/cmake/Modules/FindPixman.cmake b/builds/cmake/Modules/FindPixman.cmake index d07390fdf8..f6bc031063 100644 --- a/builds/cmake/Modules/FindPixman.cmake +++ b/builds/cmake/Modules/FindPixman.cmake @@ -12,3 +12,8 @@ endif() find_package_handle_standard_args(Pixman REQUIRED_VARS PIXMAN_INCLUDE_DIR PIXMAN_LIBRARY) + +set(PIXMAN_INCLUDE_DIRS ${PIXMAN_INCLUDE_DIR}) +set(PIXMAN_LIBRARIES ${PIXMAN_LIBRARY}) + +mark_as_advanced(PIXMAN_INCLUDE_DIR PIXMAN_LIBRARY) diff --git a/builds/cmake/Modules/FindSDL2.cmake b/builds/cmake/Modules/FindSDL2.cmake index 7f52d0448d..66bdd339b6 100644 --- a/builds/cmake/Modules/FindSDL2.cmake +++ b/builds/cmake/Modules/FindSDL2.cmake @@ -228,3 +228,8 @@ include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR VERSION_VAR SDL2_VERSION_STRING) + +set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) +set(SDL2_LIBRARIES ${SDL2_LIBRARY}) + +mark_as_advanced(SDL2_INCLUDE_DIR SDL2_LIBRARY) diff --git a/builds/cmake/Modules/FindSDL2_mixer.cmake b/builds/cmake/Modules/FindSDL2_mixer.cmake index 1c314950d8..2b6291783c 100644 --- a/builds/cmake/Modules/FindSDL2_mixer.cmake +++ b/builds/cmake/Modules/FindSDL2_mixer.cmake @@ -108,12 +108,12 @@ find_library(SDL2_MIXER_LIBRARY ) if(SDL2_MIXER_INCLUDE_DIR AND EXISTS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h") - file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL2_MIXER_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+[0-9]+$") - file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL2_MIXER_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+[0-9]+$") - file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL2_MIXER_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+[0-9]+$") - string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MAJOR "${SDL2_MIXER_VERSION_MAJOR_LINE}") - string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MINOR "${SDL2_MIXER_VERSION_MINOR_LINE}") - string(REGEX REPLACE "^#define[ \t]+SDL2_MIXER_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_PATCH "${SDL2_MIXER_VERSION_PATCH_LINE}") + file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL2_MIXER_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MIXER_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL2_MIXER_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MIXER_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_MIXER_INCLUDE_DIR}/SDL_mixer.h" SDL2_MIXER_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_MIXER_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL_MIXER_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MAJOR "${SDL2_MIXER_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_MIXER_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_MINOR "${SDL2_MIXER_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_MIXER_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_MIXER_VERSION_PATCH "${SDL2_MIXER_VERSION_PATCH_LINE}") set(SDL2_MIXER_VERSION_STRING ${SDL2_MIXER_VERSION_MAJOR}.${SDL2_MIXER_VERSION_MINOR}.${SDL2_MIXER_VERSION_PATCH}) unset(SDL2_MIXER_VERSION_MAJOR_LINE) unset(SDL2_MIXER_VERSION_MINOR_LINE) diff --git a/builds/cmake/Modules/FindSndFile.cmake b/builds/cmake/Modules/FindSndFile.cmake index d01ff06535..289847ece0 100644 --- a/builds/cmake/Modules/FindSndFile.cmake +++ b/builds/cmake/Modules/FindSndFile.cmake @@ -1,27 +1,10 @@ -# SNDFILE_LIBRARIES -# SNDFILE_INCLUDE_DIR -# SndFile_FOUND - -include(FindPackageHandleStandardArgs) - -find_library(OGG_LIBRARY ogg) -find_library(FLAC_LIBRARY FLAC) -find_library(VORBIS_LIBRARY vorbis) -find_library(VORBISENC_LIBRARY vorbisenc) - -find_library(SNDFILE_LIBRARY sndfile) find_path(SNDFILE_INCLUDE_DIR sndfile.h) +find_library(SNDFILE_LIBRARY NAMES sndfile libsndfile) -if((EXISTS ${SNDFILE_LIBRARY}) AND (EXISTS ${SNDFILE_INCLUDE_DIR})) - foreach(i OGG_LIBRARY FLAC_LIBRARY VORBIS_LIBRARY VORBISENC_LIBRARY) - if(EXISTS ${${i}}) - list(APPEND SNDFILE_LIBRARIES "${${i}}") - endif() - endforeach() +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SndFile DEFAULT_MSG SNDFILE_INCLUDE_DIR SNDFILE_LIBRARY) - list(APPEND SNDFILE_LIBRARIES "${SNDFILE_LIBRARY}") - message(STATUS "sndfile dependencies: ${SNDFILE_LIBRARIES}") -endif() +set(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR}) +set(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY}) -find_package_handle_standard_args(SndFile - REQUIRED_VARS SNDFILE_INCLUDE_DIR SNDFILE_LIBRARIES) +mark_as_advanced(SNDFILE_INCLUDE_DIR SNDFILE_LIBRARY) diff --git a/builds/cmake/Modules/FindWildMidi.cmake b/builds/cmake/Modules/FindWildMidi.cmake new file mode 100644 index 0000000000..096e4ed4bf --- /dev/null +++ b/builds/cmake/Modules/FindWildMidi.cmake @@ -0,0 +1,10 @@ +find_path(WILDMIDI_INCLUDE_DIR wildmidi_lib.h) +find_library(WILDMIDI_LIBRARY NAMES wildmidi libwildmidi WildMidi libWildMidi) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(wildmidi DEFAULT_MSG WILDMIDI_INCLUDE_DIR WILDMIDI_LIBRARY) + +set(WILDMIDI_INCLUDE_DIRS ${WILDMIDI_INCLUDE_DIR}) +set(WILDMIDI_LIBRARIES ${WILDMIDI_LIBRARY}) + +mark_as_advanced(WILDMIDI_INCLUDE_DIR WILDMIDI_LIBRARY) diff --git a/builds/cmake/Modules/FindXMP.cmake b/builds/cmake/Modules/FindXMP.cmake new file mode 100644 index 0000000000..5e4127e02c --- /dev/null +++ b/builds/cmake/Modules/FindXMP.cmake @@ -0,0 +1,24 @@ +include(FindPackageHandleStandardArgs) + +find_path(XMP_INCLUDE_DIR_INTERNAL xmp.h) +find_library(XMP_LIBRARY xmp libxmp xmp-lite libxmp-lite) +if(EXISTS "${XMP_INCLUDE_DIR_INTERNAL}") + set(XMP_INCLUDE_DIR "${XMP_INCLUDE_DIR_INTERNAL}") +else() + find_path(XMP_INCLUDE_DIR_INTERNAL libxmp/xmp.h) + if(EXISTS "${XMP_INCLUDE_DIR_INTERNAL}") + set(XMP_INCLUDE_DIR "${XMP_INCLUDE_DIR_INTERNAL}/libxmp") + else() + find_path(XMP_INCLUDE_DIR_INTERNAL libxmp-lite/xmp.h) + if(EXISTS "${XMP_INCLUDE_DIR_INTERNAL}") + set(XMP_INCLUDE_DIR "${XMP_INCLUDE_DIR_INTERNAL}/libxmp-lite") + endif() + endif() +endif() + +find_package_handle_standard_args(XMP REQUIRED_VARS XMP_INCLUDE_DIR XMP_LIBRARY) + +set(XMP_INCLUDE_DIRS ${XMP_INCLUDE_DIR}) +set(XMP_LIBRARIES ${XMP_LIBRARY}) + +mark_as_advanced(XMP_INCLUDE_DIR XMP_LIBRARY) diff --git a/builds/cmake/Modules/Findliblcf.cmake b/builds/cmake/Modules/Findliblcf.cmake new file mode 100644 index 0000000000..8932c9ae1e --- /dev/null +++ b/builds/cmake/Modules/Findliblcf.cmake @@ -0,0 +1,13 @@ +find_path(LIBLCF_INCLUDE_DIR_INTERNAL liblcf/reader_lcf.h) +find_library(LIBLCF_LIBRARY NAMES lcf liblcf) +if(EXISTS "${LIBLCF_INCLUDE_DIR_INTERNAL}") + set(LIBLCF_INCLUDE_DIR "${LIBLCF_INCLUDE_DIR_INTERNAL}/liblcf") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(liblcf DEFAULT_MSG LIBLCF_INCLUDE_DIR LIBLCF_LIBRARY) + +set(LIBLCF_INCLUDE_DIRS ${LIBLCF_INCLUDE_DIR}) +set(LIBLCF_LIBRARIES ${LIBLCF_LIBRARY}) + +mark_as_advanced(LIBLCF_INCLUDE_DIR LIBLCF_LIBRARY) diff --git a/builds/cmake/Modules/Findmpg123.cmake b/builds/cmake/Modules/Findmpg123.cmake index da4b07106b..850d310875 100644 --- a/builds/cmake/Modules/Findmpg123.cmake +++ b/builds/cmake/Modules/Findmpg123.cmake @@ -2,7 +2,7 @@ find_path(MPG123_INCLUDE_DIR mpg123.h) find_library(MPG123_LIBRARY NAMES mpg123 libmpg123) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(MPG123 DEFAULT_MSG MPG123_INCLUDE_DIR MPG123_LIBRARY) +find_package_handle_standard_args(mpg123 DEFAULT_MSG MPG123_INCLUDE_DIR MPG123_LIBRARY) set(MPG123_INCLUDE_DIRS ${MPG123_INCLUDE_DIR}) set(MPG123_LIBRARIES ${MPG123_LIBRARY}) diff --git a/builds/cmake/Modules/Findspeexdsp.cmake b/builds/cmake/Modules/Findspeexdsp.cmake new file mode 100644 index 0000000000..176e417532 --- /dev/null +++ b/builds/cmake/Modules/Findspeexdsp.cmake @@ -0,0 +1,10 @@ +find_path(SPEEXDSP_INCLUDE_DIR speex/speex_resampler.h) +find_library(SPEEXDSP_LIBRARY NAMES speexdsp libspeexdsp) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(speexdsp DEFAULT_MSG SPEEXDSP_INCLUDE_DIR SPEEXDSP_LIBRARY) + +set(SPEEXDSP_INCLUDE_DIRS ${SPEEXDSP_INCLUDE_DIR}) +set(SPEEXDSP_LIBRARIES ${SPEEXDSP_LIBRARY}) + +mark_as_advanced(SPEEXDSP_INCLUDE_DIR SPEEXDSP_LIBRARY) diff --git a/src/audio_al.h b/src/audio_al.h index a1580bcc8f..9fb67d32d4 100644 --- a/src/audio_al.h +++ b/src/audio_al.h @@ -42,7 +42,7 @@ struct ALAudio : public AudioInterface { void BGM_Stop() override; bool BGM_PlayedOnce() const override; bool BGM_IsPlaying() const override; - unsigned BGM_GetTicks() override; + unsigned BGM_GetTicks() const override; void BGM_Fade(int) override; void BGM_Volume(int) override; void BGM_Pitch(int) override; diff --git a/src/sdl_ui.cpp b/src/sdl_ui.cpp index ae1ed7626a..6836a20539 100644 --- a/src/sdl_ui.cpp +++ b/src/sdl_ui.cpp @@ -65,9 +65,11 @@ # include "audio_al.h" #endif +#ifdef SUPPORT_AUDIO AudioInterface& SdlUi::GetAudio() { return *audio_; } +#endif // SDL 1.2 compatibility #if SDL_MAJOR_VERSION==1 diff --git a/src/sdl_ui.h b/src/sdl_ui.h index cc091dfaf4..0b7b9a9058 100644 --- a/src/sdl_ui.h +++ b/src/sdl_ui.h @@ -78,7 +78,9 @@ class SdlUi : public BaseUi { uint32_t GetTicks() const override; void Sleep(uint32_t time_milli) override; +#ifdef SUPPORT_AUDIO AudioInterface& GetAudio() override; +#endif /** @} */ diff --git a/src/system.h b/src/system.h index c47dcb83e7..f8bcce6a36 100644 --- a/src/system.h +++ b/src/system.h @@ -65,7 +65,8 @@ #ifdef USE_SDL # define USE_SDL_MIXER - +# define SUPPORT_AUDIO +# # ifdef PSP # undef USE_SDL_MIXER # define NO_SDL_MIXER @@ -97,9 +98,9 @@ # endif # ifdef NO_SDL_MIXER -# undef SUPPORT_AUDIO -# else -# define SUPPORT_AUDIO +# if !defined(HAVE_OPENAL) +# undef SUPPORT_AUDIO +# endif # endif # ifdef WANT_FMMIDI diff --git a/tests/filefinder.cpp b/tests/filefinder.cpp index 89310b9e90..3c18b3d9b4 100644 --- a/tests/filefinder.cpp +++ b/tests/filefinder.cpp @@ -6,33 +6,33 @@ #include "main_data.h" namespace { -/* void CheckIsRPG2kProject() { - EASYRPG_SHARED_PTR const - tree = FileFinder::CreateProjectTree("."); + std::shared_ptr const + tree = FileFinder::CreateDirectoryTree("."); assert(FileFinder::IsRPG2kProject(*tree)); + FileFinder::SetDirectoryTree(tree); } -*/ + void CheckIsDirectory() { assert(FileFinder::IsDirectory(".")); } void CheckEnglishFilename() { - assert(!FileFinder::FindImage("Backdrop", "castle").empty()); + assert(!FileFinder::FindImage("CharSet", "Chara1").empty()); } - } int main(int, char**) { Main_Data::Init(); + + CheckIsDirectory(); + CheckIsRPG2kProject(); + Player::GetEncoding(); Player::escape_symbol = ReaderUtil::Recode("\\", Player::encoding); Player::engine = Player::EngineRpg2k; -// FileFinder::Init(); FileFinder::InitRtpPaths(); - CheckIsDirectory(); -// CheckIsRPG2kProject(); CheckEnglishFilename(); FileFinder::Quit();