rom-properties/locale/CMakeLists.txt
David Korth f8e7b84130 [locale] CMakeLists.txt: Add TC_(), QC_(), and related to the xgettext call.
Without these, various strings that are only used in the Qt or Win32
frontends and were changed to use these shorter macros won't be added to
and/or will be removed from rom-properties.pot.

Forgot to do this in commit 1ff728e22d.
([kde,win32] Add QString/tstring macros for localization.)
2024-10-04 18:38:57 -04:00

153 lines
5.0 KiB
CMake

# Localization files.
PROJECT(locale)
# Find gettext.
INCLUDE(CheckGettext)
CHECK_GETTEXT()
# Find standard Unix utilities.
# On Windows, these are included with git.
FIND_PROGRAM(FIND find)
FIND_PROGRAM(SORT sort)
FIND_PROGRAM(SED sed)
# Variables for xgettext.
SET(DOMAIN "rom-properties")
SET(COPYRIGHT_HOLDER "David Korth")
SET(MSGID_BUGS_ADDRESS "gerbilsoft@gerbilsoft.com")
SET(LINGUAS ar de es fr it pt ro ru uk)
# Installation.
INCLUDE(DirInstallPaths)
SET(_gmoFiles)
FOREACH(_lingua ${LINGUAS})
# Convert the .po files to .mo files.
# TODO: ${_lingua}@quot
SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lingua}.gmo)
SET(_poFile ${CMAKE_CURRENT_SOURCE_DIR}/${_lingua}.po)
ADD_CUSTOM_COMMAND(OUTPUT ${_gmoFile}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -c -o ${_gmoFile} ${_poFile}
DEPENDS ${_poFile}
)
SET(_gmoFiles ${_gmoFiles} ${_gmoFile})
# Custom target to initialize a new .po file.
# Use this after adding the language code to LINGUAS.
# TODO: ${_lingua}@quot
ADD_CUSTOM_TARGET(init-${_lingua}.po
COMMAND ${GETTEXT_MSGINIT_EXECUTABLE}
--no-translator
--input=${DOMAIN}.pot
--locale=${_lingua}
--output=${_lingua}.po
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
VERBATIM
)
SET(INIT_ALL_PO_TARGETS ${INIT_ALL_PO_TARGETS} init-${_lingua}.po)
# Custom target to update a .po file.
# Use this after adding new strings to the source code.
# TODO: ${_lingua}@quot
IF(WIN32)
SET(MV move)
ELSE(WIN32)
SET(MV mv)
ENDIF(WIN32)
ADD_CUSTOM_TARGET(update-${_lingua}.po
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE}
--lang=${_lingua}
${_lingua}.po ${DOMAIN}.pot
-o ${_lingua}.new.po
COMMAND ${MV} ${_lingua}.new.po ${_lingua}.po
DEPENDS ${_lingua}.po
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
VERBATIM
)
SET(UPDATE_ALL_PO_TARGETS ${UPDATE_ALL_PO_TARGETS} update-${_lingua}.po)
# Install the .mo file.
INSTALL(FILES ${_gmoFile}
DESTINATION ${DIR_INSTALL_LOCALE}/${_lingua}/LC_MESSAGES
RENAME ${DOMAIN}.mo
COMPONENT "i18n"
)
ENDFOREACH()
# "ALL" targets.
# NOTE: Don't run init-all.po unless you know what you're doing!
#ADD_CUSTOM_TARGET(init-all.po DEPENDS ${INIT_ALL_PO_TARGETS})
ADD_CUSTOM_TARGET(update-all.po DEPENDS ${UPDATE_ALL_PO_TARGETS})
ADD_CUSTOM_TARGET(translations ALL DEPENDS ${_gmoFiles})
# Determine the Qt UI target.
IF(TARGET kf6_generate_ui_h)
SET(QT_UI_TARGET kf6_generate_ui_h)
ELSEIF(TARGET kf5_generate_ui_h)
SET(QT_UI_TARGET kf5_generate_ui_h)
ELSEIF(TARGET kde5_generate_ui_h)
SET(QT_UI_TARGET kde5_generate_ui_h)
ELSEIF(TARGET kde4_generate_ui_h)
SET(QT_UI_TARGET kde4_generate_ui_h)
ENDIF()
# Create the POTFILES.unsort file. (Requires a Unix-like `find` command.)
ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/POTFILES.unsort"
COMMAND ${FIND} "../src/" -type f
( -name *.c -or -name *.h -or -name *.cpp -or -name *.hpp )
> "${CMAKE_CURRENT_BINARY_DIR}/POTFILES.unsort"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
VERBATIM
)
# Create the UIHFILES.unsort file. (Requires a Unix-like `find` command.)
FILE(RELATIVE_PATH RELBINDIR ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_BINARY_DIR})
ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/UIHFILES.unsort"
COMMAND ${FIND} "${RELBINDIR}/src/" -type f -name ui_*.h
> "${CMAKE_CURRENT_BINARY_DIR}/UIHFILES.unsort"
DEPENDS ${QT_UI_TARGET}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
VERBATIM
)
# Create the POTFILES file.
ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/POTFILES"
COMMAND ${SORT} -u POTFILES.unsort UIHFILES.unsort > POTFILES
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/POTFILES.unsort"
"${CMAKE_CURRENT_BINARY_DIR}/UIHFILES.unsort"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
VERBATIM
)
# Regenerate the rom-properties.pot file.
ADD_CUSTOM_TARGET(rom-properties.pot
COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE}
-o ${DOMAIN}.pot
--default-domain=${DOMAIN}
--from-code=UTF-8
--add-comments=tr:
--keyword=_ --keyword=C_:1c,2 --keyword=N_:1,2 --keyword=NC_:1c,2,3
--keyword=NOP_ --keyword=NOP_C_:1c,2 --keyword=NOP_N_:1,2 --keyword=NOP_NC_:1c,2,3
--keyword=T_ --keyword=TC_:1c,2 --keyword=TN_:1,2 --keyword=TNC_:1c,2,3
--keyword=tpgettext_expr:1c,2 --keyword=tdpgettext_expr:2c,3
--keyword=tnpgettext_expr:1c,2,3 --keyword=tdnpgettext_expr:2c,3,4
--keyword=Q_ --keyword=QC_:1c,2 --keyword=QN_:1,2 --keyword=QNC_:1c,2,3
--keyword=qpgettext_expr:1c,2 --keyword=qdpgettext_expr:2c,3
--keyword=qnpgettext_expr:1c,2,3 --keyword=qdnpgettext_expr:2c,3,4
--keyword=translate:1c,2
--language=C++
--exclude-file=exclusions.po
--copyright-holder=${COPYRIGHT_HOLDER}
--msgid-bugs-address=${MSGID_BUGS_ADDRESS}
--files-from=${CMAKE_CURRENT_BINARY_DIR}/POTFILES
--package-version=${VERSION_STRING}
--package-name=${CMAKE_PROJECT_NAME}
# Set the character set to UTF-8.
# Reference: Reference: http://mingw-users.1079350.n2.nabble.com/Getting-rid-of-xgettext-s-quot-CHARSET-quot-warning-td5620533.html
COMMAND ${SED} -i -e "s/CHARSET/UTF-8/" ${DOMAIN}.pot
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/POTFILES"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
VERBATIM
)