ports/cad/uranium/files/UraniumTranslationTools.cmake
Matthieu Volat c71e832a6d cad/uranium: upgrade to 5.7.0 for cura
- Work around complicated upstream build system
2024-09-04 16:46:18 -04:00

114 lines
5.5 KiB
CMake

## 3rd party code:
# Macro needed to list all sub-directory of a directory.
# There is no function in cmake as far as I know.
# Found at: http://stackoverflow.com/a/7788165
MACRO(SUBDIRLIST result curdir)
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
SET(dirlist "")
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})
STRING(REPLACE "/" "" child ${child})
LIST(APPEND dirlist ${child})
ENDIF()
ENDFOREACH()
SET(${result} ${dirlist})
ENDMACRO()
## Translation tools:
SET(CURA_BINARY_DATA_DIRECTORY CACHE PATH "Directory to the cura-binary-data repository")
if(NOT CURA_BINARY_DATA_DIRECTORY AND NOT DEFINED $ENV{CURA_BINARY_DATA_DIRECTORY})
message(STATUS "Using CURA_BINARY_DATA_DIRECTORY from set of environment variables...")
SET(CURA_BINARY_DATA_DIRECTORY $ENV{CURA_BINARY_DATA_DIRECTORY})
endif()
# Dynamically creates targets for each language to create a *.po-file
MACRO(TARGETS_FOR_PO_FILES language)
if(DEFINED GETTEXT_MSGINIT_EXECUTABLE)
message(STATUS "Creating target i18n-create-po-${language}")
add_custom_target(i18n-create-po-${language})
add_dependencies(i18n-create-po i18n-create-po-${language})
endif()
message(STATUS "Creating target i18n-update-po-${language}")
add_custom_target(i18n-update-po-${language})
add_dependencies(i18n-update-po i18n-update-po-${language})
foreach(pot_file ${pot_files})
string(REGEX REPLACE ".*/(.*).pot" "${CMAKE_SOURCE_DIR}/resources/i18n/${language}/\\1.po" po_file ${pot_file})
if(DEFINED GETTEXT_MSGINIT_EXECUTABLE)
add_custom_command(TARGET i18n-create-po-${language} POST_BUILD
COMMAND ${GETTEXT_MSGINIT_EXECUTABLE} ARGS --no-wrap --no-translator -l ${language} -i ${pot_file} -o ${po_file})
endif()
add_custom_command(TARGET i18n-update-po-${language} POST_BUILD
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} ARGS --no-wrap --no-fuzzy-matching -o ${po_file} ${po_file} ${pot_file})
endforeach()
ENDMACRO()
# Dynamically creates targets for each language to create a *.mo-file
MACRO(TARGETS_FOR_MO_FILES language)
message(STATUS "Creating target i18n-create-mo-${language}")
add_custom_target(i18n-create-mo-${language})
add_dependencies(i18n-create-mo i18n-create-mo-${language})
if(TARGET i18n-copy-mo)
message(STATUS "Creating target i18n-copy-mo-${language}")
add_custom_target(i18n-copy-mo-${language})
add_dependencies(i18n-copy-mo i18n-copy-mo-${language})
endif()
file(GLOB po_files ${CMAKE_SOURCE_DIR}/resources/i18n/${language}/*.po)
foreach(po_file ${po_files})
string(REGEX REPLACE ".*/(.*).po" "${CMAKE_BINARY_DIR}/resources/i18n/${language}/LC_MESSAGES/\\1.mo" mo_file ${po_file})
add_custom_command(TARGET i18n-create-mo-${language} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/resources/i18n/${language}/LC_MESSAGES/
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ARGS ${po_file} -o ${mo_file} -f)
if(TARGET i18n-copy-mo-${language})
string(REGEX REPLACE ".*/(.*).po" "${CURA_BINARY_DATA_DIRECTORY}/${PROJECT_NAME}/resources/i18n/${language}/LC_MESSAGES/\\1.mo" mo_file_binary_copy ${po_file})
add_custom_command(TARGET i18n-copy-mo-${language} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${CURA_BINARY_DATA_DIRECTORY}/resources/i18n/${language}/LC_MESSAGES/
COMMAND ${CMAKE_COMMAND} -E copy ${mo_file} ${mo_file_binary_copy})
add_dependencies(i18n-copy-mo-${language} i18n-create-mo-${language})
endif()
endforeach()
ENDMACRO()
# Checks for availability of gettext and when found creates all targets
# TODO: Adding option to set the PROJECT_NAME externally!
MACRO(CREATE_TRANSLATION_TARGETS)
find_package(Gettext)
if(GETTEXT_FOUND)
# translations target will convert .po files into .mo and .qm as needed.
# The files are checked for a _qt suffix and if it is found, converted to
# qm, otherwise they are converted to .po.
if(DEFINED GETTEXT_MSGINIT_EXECUTABLE)
message(STATUS "Creating target i18n-create-po")
add_custom_target(i18n-create-po)
else()
message(WARNING "GETTEXT_MSGINIT_EXECUTABLE is undefined!\nSkipping to create i18n-create-po* targets...")
endif()
if(CURA_BINARY_DATA_DIRECTORY)
if(EXISTS ${CURA_BINARY_DATA_DIRECTORY})
message(STATUS "CURA_BINARY_DATA_DIRECTORY: ${CURA_BINARY_DATA_DIRECTORY}")
message(STATUS "Creating target i18n-copy-mo")
add_custom_target(i18n-copy-mo)
else()
message(WARNING "CURA_BINARY_DATA_DIRECTORY does not exist! (${CURA_BINARY_DATA_DIRECTORY})")
endif()
else()
message(WARNING "CURA_BINARY_DATA_DIRECTORY is not set!")
endif()
message(STATUS "Creating target i18n-update-po")
add_custom_target(i18n-update-po)
message(STATUS "Creating target i18n-create-mo")
add_custom_target(i18n-create-mo ALL)
SUBDIRLIST(languages ${CMAKE_SOURCE_DIR}/resources/i18n/)
file(GLOB pot_files ${CMAKE_SOURCE_DIR}/resources/i18n/*.pot)
foreach(language ${languages})
TARGETS_FOR_PO_FILES(${language})
TARGETS_FOR_MO_FILES(${language})
endforeach()
install(DIRECTORY ${CMAKE_BINARY_DIR}/resources DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/)
endif()
ENDMACRO()