mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 09:36:41 -04:00
114 lines
5.5 KiB
CMake
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()
|