/usr/lib/KWWidgets/CMake/KWWidgetsGettextInitOrMerge.cmake is in libkwwidgets1-dev 1.0.0~cvs20100930-8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | # This file is a helper file for the gettext translation macros found in
# KWWidgetsInternationalizationMacros.cmake.
# If is used as a custom command in the KWWidgets_CREATE_PO_TARGETS macro.
# This macro refreshes a PO file when its dependency, the POT template file,
# has changed. The problem is that if no PO file has ever been created yet,
# the 'msginit' executable should be used to initialize the PO file from
# the POT file. If it has been created already, the 'msgmerge' executable
# should be used to merge the PO file with the current POT file.
# Since ADD_CUSTOM_COMMAND does not support such logic, it will use
# this file instead, and execute it using CMake with the relevant parameters.
# Given the parameters, this file will either use 'msginit' or 'msgmerge'.
#
# 'po_file' (string): the original PO file in the source tree, if any
# 'po_build_file' (string): the build PO file to initialize or merge
# 'po_uptodate_file' (string): the dummy file which will be up to date
# 'default_po_encoding' (string): default encoding to initialize PO file with
# 'pot_build_file' (string): the POT file this PO file depends on
# 'locale' (string): the locale this PO file represents (say, "fr")
# GETTEXT_MSGINIT_EXECUTABLE (string): path to the 'msginit' executable
# GETTEXT_MSGCONV_EXECUTABLE (string): path to the 'msgconv' executable
# GETTEXT_MSGMERGE_EXECUTABLE (string): path to the 'msgmerge' executable
set(SUCCESS 1)
if(NOT EXISTS "${po_build_file}")
# Initialize PO file or copy from existing PO file
if(EXISTS "${po_file}")
message("Initializing PO file ${po_build_file} as a copy of ${po_file}")
configure_file("${po_file}" "${po_build_file}" COPYONLY)
else(EXISTS "${po_file}")
if(NOT "${GETTEXT_MSGINIT_EXECUTABLE}" STREQUAL "")
# Initialize PO file
message("Initializing PO file ${po_build_file}")
exec_program(${GETTEXT_MSGINIT_EXECUTABLE}
RETURN_VALUE msginit_return
OUTPUT_VARIABLE msginit_output
ARGS --no-translator --input="${pot_build_file}" --output-file="${po_build_file}" --locale="${locale}")
if(msginit_output)
if(NOT WIN32 OR NOT "${msginit_output}" MATCHES "Bad file desc")
message("${msginit_output}")
set(SUCCESS 0)
endif(NOT WIN32 OR NOT "${msginit_output}" MATCHES "Bad file desc")
endif(msginit_output)
# Change initialized PO file encoding
if(NOT "${GETTEXT_MSGCONV_EXECUTABLE}" STREQUAL "")
if(NOT default_po_encoding)
set(default_po_encoding "utf-8")
endif(NOT default_po_encoding)
exec_program(${GETTEXT_MSGCONV_EXECUTABLE}
RETURN_VALUE msgconv_return
OUTPUT_VARIABLE msgconv_output
ARGS --output-file="${po_build_file}" --to-code="${default_po_encoding}" \"${po_build_file}\")
if(msgconv_output)
message("${msgconv_output}")
set(SUCCESS 0)
endif(msgconv_output)
endif(NOT "${GETTEXT_MSGCONV_EXECUTABLE}" STREQUAL "")
endif(NOT "${GETTEXT_MSGINIT_EXECUTABLE}" STREQUAL "")
endif(EXISTS "${po_file}")
else(NOT EXISTS "${po_build_file}")
# Merge PO file with POT file
#MESSAGE("Merging PO file ${po_build_file} with POT file ${pot_build_file}")
# --output-file and --update are mutually exclusive. If --update is
# specified, the PO file will not be re-written if the result of
# the merge produces no modification. This can be problematic if the POT
# file is newer than the PO file, and a MO file is generated from the PO
# file: this seems to force the MO to always be regenerated.
# --output-file=${po_build_file}
# UPDATE: apparently --update still touches the file...
if(NOT "${GETTEXT_MSGMERGE_EXECUTABLE}" STREQUAL "")
# Merge the strings, store the result in a variable instead of a PO file
exec_program(${GETTEXT_MSGMERGE_EXECUTABLE}
RETURN_VALUE msgmerge_return
OUTPUT_VARIABLE msgmerge_output
ARGS --quiet --output-file="-" \"${po_build_file}\" \"${pot_build_file}\")
if(msgmerge_return)
message("${msgmerge_output}")
set(SUCCESS 0)
endif(msgmerge_return)
set(msgmerge_output "${msgmerge_output}\n")
# Check if the new PO file would be different than the old one
set(update_po_file 0)
if(EXISTS ${po_build_file})
file(READ "${po_build_file}" po_old)
if(NOT "${msgmerge_output}" STREQUAL "${po_old}")
set(update_po_file 1)
endif(NOT "${msgmerge_output}" STREQUAL "${po_old}")
else(EXISTS ${po_build_file})
set(update_po_file 1)
endif(EXISTS ${po_build_file})
# Create the PO file if it is really needed
if(update_po_file)
message("Updating ${po_build_file}")
file(WRITE "${po_build_file}" "${msgmerge_output}")
endif(update_po_file)
endif(NOT "${GETTEXT_MSGMERGE_EXECUTABLE}" STREQUAL "")
# msggrep.exe -T -e "#-#-#" would have done the trick but not in 0.13.1
# IF(NOT "${GETTEXT_MSGCAT_EXECUTABLE}" STREQUAL "" AND EXISTS "${po_file}")
# EXEC_PROGRAM(${GETTEXT_MSGCAT_EXECUTABLE}
# ARGS "${po_build_file}" "${po_file}"
# OUTPUT_VARIABLE msgcat_output)
# STRING(REGEX MATCH "^\"#-#.*$" matched "${msgcat_output}")
# MESSAGE("match: ${matched}")
# # STRING(REGEX REPLACE "^(Python )([0-9]\\.[0-9])(.*)$" "\\2"
# # major_minor "${version}")
# ENDIF(NOT "${GETTEXT_MSGCAT_EXECUTABLE}" STREQUAL "" AND EXISTS "${po_file}")
endif(NOT EXISTS "${po_build_file}")
# Update the dummy file to say: this PO target is up to date as
# far as its dependencies are concerned. This will prevent the PO
# targets to be triggered again and again because the POT file is older
# than the PO, but the PO does not really need to be changed, etc.
if(SUCCESS)
file(WRITE "${po_uptodate_file}"
"${po_build_file} is *really* up-to-date.")
endif(SUCCESS)
|