ADD_SUBDIRECTORY(glossary) # Set of available languages. SET (TP_LINGUAS az ca cs da eu fa ja nl rw sk sr sv tr uk zh_CN) # already marked as external at TP: SET (GC_LINGUAS ar bg de el en_GB es fi fr gu he hi hu it kn ko lt lv mr nb ne pl pt pt_BR ro ru ta te ur vi zh_TW) # not marked or no TP team: SET (NEW_LINGUAS as brx doi es_NI kok kok@latin ks mai mni mni@bengali) SET (ALL_LINGUAS ${TP_LINGUAS} ${GC_LINGUAS} ${NEW_LINGUAS}) SET (CATALOGS "") SET (BUILD_CATALOGS "") SET(CMAKE_COMMAND_TMP "") IF (${CMAKE_VERSION} VERSION_GREATER 3.1) SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env) ENDIF() SET(po_SOURCES "") FOREACH(lingua ${ALL_LINGUAS}) LIST(APPEND po_SOURCES ${lingua}.po) ENDFOREACH() SET_LOCAL_DIST(po_DIST_local ${po_SOURCES} CMakeLists.txt ChangeLog Makevars POTFILES.ignore POTFILES.in POTFILES.skip README check-po.cmake gnucash-pot.cmake) SET(po_DIST ${po_DIST_local} ${po_glossary_DIST} PARENT_SCOPE) FOREACH(lingua ${ALL_LINGUAS}) SET(_OUTPUT_FILE ${lingua}.mo) LIST(APPEND CATALOGS ${_OUTPUT_FILE}) ADD_CUSTOM_COMMAND( OUTPUT ${_OUTPUT_FILE} COMMAND ${CMAKE_COMMAND_TMP} ${MSGFMT} -o ${_OUTPUT_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${lingua}.po ) SET(_BUILD_FILE_DIR ${DATADIR_BUILD}/locale/${lingua}/LC_MESSAGES) MAKE_DIRECTORY(${_BUILD_FILE_DIR}) SET(_BUILD_FILE ${_BUILD_FILE_DIR}/gnucash.mo) LIST(APPEND BUILD_CATALOGS ${_BUILD_FILE}) ADD_CUSTOM_COMMAND( OUTPUT ${_BUILD_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${lingua}.mo ${_BUILD_FILE} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_OUTPUT_FILE} #APPEND ) ENDFOREACH(lingua) ADD_CUSTOM_TARGET(po-gmo ALL DEPENDS ${CATALOGS}) ADD_CUSTOM_TARGET(po-gmo-build ALL DEPENDS ${BUILD_CATALOGS}) FOREACH(lingua ${ALL_LINGUAS}) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${lingua}.mo RENAME gnucash.mo DESTINATION ${CMAKE_INSTALL_DATADIR}/locale/${lingua}/LC_MESSAGES) ENDFOREACH(lingua) FUNCTION(READ_FILE_REMOVING_COMMENTS OUTPUT PATH) SET(RESULT "") FILE(STRINGS "${PATH}" LINES_IN) FOREACH(line ${LINES_IN}) STRING(REGEX REPLACE "#.*" "" line2 ${line}) LIST(APPEND RESULT ${line2}) ENDFOREACH() SET(${OUTPUT} ${RESULT} PARENT_SCOPE) ENDFUNCTION() FUNCTION(MAKE_GNUCASH_POTFILES) SET(IGNORE_PATTERNS "gw-" "test" "experimental" "python-bindings" "swig-.*\\.c") # Create a list of candidate translation files FILE(GLOB_RECURSE FILES_IN RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/*.c ${CMAKE_SOURCE_DIR}/*.cpp ${CMAKE_SOURCE_DIR}/*.glade ${CMAKE_SOURCE_DIR}/*.desktop.in ${CMAKE_SOURCE_DIR}/*.keys.in ${CMAKE_SOURCE_DIR}/*.gschema.xml.in.in ${CMAKE_SOURCE_DIR}/*.scm) # Only consider files in the common, libgnucash, and gnucash/ directories. Also check against list of ignore patterns SET(FILES "") FOREACH(path ${FILES_IN}) STRING(REGEX MATCH "^(bindings/|common/|borrowed/|libgnucash/|gnucash/)" IS_SRC ${path}) IF (IS_SRC) SET(IS_IGNORED FALSE) FOREACH(pattern ${IGNORE_PATTERNS}) STRING(REGEX MATCH ${pattern} YES_IGNORE ${path}) IF (YES_IGNORE) SET(IS_IGNORED TRUE) ENDIF() ENDFOREACH(pattern) IF (NOT IS_IGNORED) LIST(APPEND FILES ${path}) ENDIF(NOT IS_IGNORED) ENDIF(IS_SRC) ENDFOREACH(path) # Read in list of paths to skip from POTFILES.{skip,ignore} READ_FILE_REMOVING_COMMENTS(SKIP_LINES POTFILES.skip) READ_FILE_REMOVING_COMMENTS(IGNORE_LINES POTFILES.ignore) # Remove the paths that are skipped or ignored FOREACH(path ${SKIP_LINES} ${IGNORE_LINES}) list(REMOVE_ITEM FILES ${path}) ENDFOREACH() # CMake sorting is different from UNIX sorting. Use perl to # sort POTFILES.in universally. This may no longer be needed # now we have dropped autotools support. STRING(REPLACE ";" "\n" SORT_IN "${FILES}") SET(SORT_IN "${SORT_IN}\n") FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.in "${SORT_IN}") EXECUTE_PROCESS(COMMAND "${PERL_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/util/elegant-sort.pl" INPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in.in OUTPUT_VARIABLE POTFILES_IN ) STRING(REPLACE "\n" ";" POTFILES "${POTFILES_IN}") # These are manually added, because they're not picked up by the generation script list(APPEND POTFILES "gnucash/gnome/gnucash.appdata.xml.in" "gnucash/gnome/gnucash.desktop.in.in" "libgnucash/engine/qofbookslots.h" "doc/tip_of_the_day.list.in") # Write out the final list. # intltool-update insists that this file be in the source directory. :-( SET(POTFILES_IN_PATH ${CMAKE_CURRENT_BINARY_DIR}/POTFILES.in) FILE(WRITE ${POTFILES_IN_PATH} "# This is a list of files which contain translatable strings. # This file was autogenerated by cmake. ") set(POTFILE_DEPS "") FOREACH(path ${POTFILES}) list(APPEND POTFILE_DEPS ${CMAKE_SOURCE_DIR}/${path}) STRING(REGEX MATCH gschema.xml.in.in IS_GSCHEMA ${path}) IF(IS_GSCHEMA) # Force parse type for gsettings files SET(path "[type: gettext/gsettings]${path}") ENDIF() FILE(APPEND ${POTFILES_IN_PATH} "${path}\n") ENDFOREACH() CONFIGURE_FILE(${POTFILES_IN_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/POTFILES.in NEWLINE_STYLE LF) set(gnucash_pot_depends ${POTFILE_DEPS} CACHE INTERNAL "List of files with translatable strings. If any of these change, gnucash.pot should be regenerated") ENDFUNCTION() find_program(INTLTOOL_UPDATE NAMES intltool-update) IF (${INTLTOOL_UPDATE} STREQUAL "INTLTOOL_UPDATE-NOTFOUND") MESSAGE(FATAL_ERROR "Can't find the 'intltool-update' program.") ENDIF () IF(BUILDING_FROM_VCS) MAKE_GNUCASH_POTFILES() find_program(INTLTOOL_EXTRACT NAMES intltool-extract) find_program(XGETTEXT xgettext) IF (${INTLTOOL_EXTRACT} STREQUAL "INTLTOOL_EXTRACT-NOTFOUND") MESSAGE(FATAL_ERROR "Can't find the 'intltool-extract' program.") ENDIF () IF (${XGETTEXT} STREQUAL "XGETTEXT-NOTFOUND") MESSAGE(FATAL_ERROR "Can't find the 'xgettext' program.") ENDIF () add_custom_command(OUTPUT gnucash.pot COMMAND ${CMAKE_COMMAND} -D INTLTOOL_EXTRACT=${INTLTOOL_EXTRACT} -D INTLTOOL_UPDATE=${INTLTOOL_UPDATE} -D PO_SRC_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D PO_BIN_DIR=${CMAKE_CURRENT_BINARY_DIR} -D PACKAGE=${PACKAGE} -D PERL=${PERL_EXECUTABLE} -D XGETTEXT=${XGETTEXT} -P ${CMAKE_CURRENT_SOURCE_DIR}/gnucash-pot.cmake DEPENDS ${gnucash_pot_depends} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) add_custom_target (pot DEPENDS gnucash.pot) ENDIF() dist_add_generated(gnucash.pot) ADD_CUSTOM_TARGET(check-po COMMAND ${CMAKE_COMMAND} -D INTLTOOL_UPDATE=${INTLTOOL_UPDATE} -D PO_DIR=${CMAKE_CURRENT_SOURCE_DIR} -P check-po.cmake WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )