cmake_minimum_required(VERSION 2.8) # Meta-infrastructure to allow po-based translation of Colobot help files and scene-description (level) files. # set(LEVELS_I18N_PATH ${CMAKE_CURRENT_SOURCE_DIR}) # set(LEVEL_CODENAME "scene100") # set(SCENEFILE "scene100/scene.txt") # set(SCENEDEST "scene101.txt") # If unset , use the same name as SCENEFILE # set(PODIR "scene100/po/") # set(HELPDIR "scene100/help/") # set(HELPDEST "") project(colobot-level-${LEVEL_CODENAME} NONE) if(NOT DEFINED COLOBOT_INSTALL_DATA_DIR) set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/games/colobot CACHE PATH "Colobot shared data directory") endif() set(LEVEL_INSTALL_DATA_DIR ${COLOBOT_INSTALL_DATA_DIR}/levels/) set(HELP_INSTALL_DATA_DIR ${COLOBOT_INSTALL_DATA_DIR}/help/) # Translate translatable material find_program(PO4A po4a) ### STEP 3 # Inject translations in levels set(_levels_i18n_target "levels_i18n") file(GLOB levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/${SCENEFILE}") foreach(levelfile ${levelfiles}) if(DEFINED SCENEDEST) get_filename_component(_scenedest ${SCENEDEST} NAME) else() get_filename_component(_scenedest ${levelfile} NAME) endif() get_filename_component(_levelfile ${levelfile} NAME_WE) if(PO4A AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PODIR}") add_custom_command(OUTPUT ${_levels_i18n_target}/${_scenedest} COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target} COMMAND ${LEVELS_I18N_PATH}/scripts/03_inject_translations.sh ${levelfile} ${CMAKE_CURRENT_BINARY_DIR}/${LEVEL_CODENAME}/${_levelfile} ${PODIR} > ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target}/${_scenedest} DEPENDS po4a-${LEVEL_CODENAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "${LEVEL_CODENAME}: Inject translation in ${_scenedest}" ) else() add_custom_command(OUTPUT ${_levels_i18n_target}/${_scenedest} COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target} COMMAND cp ${levelfile} ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target}/${_scenedest} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "${LEVEL_CODENAME}: Move untranslatable ${_scenedest}" ) endif() add_custom_target(level_i18n-${LEVEL_CODENAME}_${_levelfile} ALL DEPENDS ${_levels_i18n_target}/${_scenedest}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_levels_i18n_target}/${_scenedest} DESTINATION ${LEVEL_INSTALL_DATA_DIR}) endforeach() file(GLOB helpfiles "${CMAKE_CURRENT_SOURCE_DIR}/${HELPDIR}/E/*.txt") list(SORT helpfiles) if(PO4A AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PODIR}") foreach(helpfile ${helpfiles}) get_filename_component(_helpfile_we ${helpfile} NAME_WE) get_filename_component(_helpfile ${helpfile} NAME) ### STEP 4 # Put translated help files in the correct place set(_help_i18n_target "help_i18n_${LEVEL_CODENAME}_${_helpfile_we}") add_custom_command(OUTPUT moved-all-${LEVEL_CODENAME}-${_helpfile} COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${_help_i18n_target} COMMAND ${LEVELS_I18N_PATH}/scripts/04_move_helpfiles_to_paths.sh ${LEVEL_CODENAME} ${LEVEL_CODENAME}-help/${_helpfile} ${_help_i18n_target} '${HELPDIR}' '${HELPDEST}' ${CMAKE_CURRENT_SOURCE_DIR} > moved-all-${LEVEL_CODENAME}-${_helpfile} DEPENDS po4a-${LEVEL_CODENAME} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "${LEVEL_CODENAME}: Move ${_helpfile} translations around" ) add_custom_target(help_i18n-${LEVEL_CODENAME}_${_helpfile_we} ALL DEPENDS moved-all-${LEVEL_CODENAME}-${_helpfile}) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_help_i18n_target}/ DESTINATION ${HELP_INSTALL_DATA_DIR}) endforeach() elseif(DEFINED HELPDIR AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${HELPDIR}") set(_help_i18n_target "help_i18n_${LEVEL_CODENAME}") add_custom_command(OUTPUT moved-all-${LEVEL_CODENAME} COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${_help_i18n_target} COMMAND ${LEVELS_I18N_PATH}/scripts/05_move_untranslated_helpfiles_to_paths.sh '${_help_i18n_target}' '${HELPDEST}' '${CMAKE_CURRENT_SOURCE_DIR}/${HELPDIR}' > moved-all-${LEVEL_CODENAME}-${_helpfile} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "${LEVEL_CODENAME}: Move untranslatable help files" ) add_custom_target(help_i18n-${LEVEL_CODENAME} ALL DEPENDS moved-all-${LEVEL_CODENAME}) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_help_i18n_target}/ DESTINATION ${HELP_INSTALL_DATA_DIR}) endif() #### STEP 1 # Create po4a.cfg file out of the list of files add_custom_command(OUTPUT po4a-${LEVEL_CODENAME}.cfg COMMAND ${LEVELS_I18N_PATH}/scripts/01_create_po4a_file.sh ${CMAKE_CURRENT_SOURCE_DIR} ${PODIR} ${LEVEL_CODENAME} '${SCENEFILE}' '${HELPDIR}/E' > ${CMAKE_CURRENT_BINARY_DIR}/po4a-${LEVEL_CODENAME}.cfg COMMENT "${LEVEL_CODENAME}: Create po4a configuration file" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) if(PO4A AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${PODIR}) #### STEP 2 # Run po4a add_custom_command(OUTPUT po4a-ran-${LEVEL_CODENAME} COMMAND ${LEVELS_I18N_PATH}/scripts/02_run_po4a.sh ${LEVELS_I18N_PATH} ${CMAKE_CURRENT_BINARY_DIR}/po4a-${LEVEL_CODENAME}.cfg COMMAND touch po4a-ran-${LEVEL_CODENAME} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/po4a-${LEVEL_CODENAME}.cfg WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "${LEVEL_CODENAME}: Run po4a to generate the translated files out of the .po files") add_custom_target(po4a-${LEVEL_CODENAME} DEPENDS po4a-ran-${LEVEL_CODENAME}) else() message(STATUS "${LEVEL_CODENAME}: No translation needed or possible") file(GLOB levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/levels/*.txt") install(FILES ${levelfiles} DESTINATION ${LEVEL_INSTALL_DATA_DIR}/) endif()