blob: e07ed7ad317539f2a1d51c6babdb32bb92e427a6 (
plain)
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
|
PROJECT(i18n)
# List of the supported locales.
SET(XTRKCAD_LOCALE_IDS
de_DE
fi
fr_FR
pt_BR
)
# Misc variables
SET(XTC_LOCALE_TARGETS )
SET(POTFILE "${i18n_BINARY_DIR}/${XTRKCAD_PACKAGE}.pot")
SET(XGTKEYWORDS
--keyword=_
--keyword=p_
--keyword=N_)
# Programs
FIND_PROGRAM(XTC_XGETTEXT xgettext PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\;InstallPath]/bin )
FIND_PROGRAM(XTC_MSGINIT msginit PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\;InstallPath]/bin )
FIND_PROGRAM(XTC_MSGMERGE msgmerge PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\;InstallPath]/bin )
FIND_PROGRAM(XTC_MSGFMT msgfmt PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\;InstallPath]/bin )
SET(XTC_TRANSLATOR "" CACHE FILEPATH "Translator program for editing the .po files.")
MARK_AS_ADVANCED(XTC_XGETTEXT XTC_MSGINIT XTC_MSGMERGE
XTC_MSGFMT XTC_TRANSLATOR)
# Create the list of the original source files.
FILE(GLOB_RECURSE XGT_SOURCE_FILES
RELATIVE ${i18n_SOURCE_DIR}
${XTrkCAD_SOURCE_DIR}/*.c
${XTrkCAD_SOURCE_DIR}/*.h)
# add wlib files that have translatable strings
FILE(RELATIVE_PATH TEMP_FILENAME ${i18n_SOURCE_DIR} "${wlib_SOURCE_DIR}/mswlib/mswmisc.c")
LIST(APPEND XGT_SOURCE_FILES ${TEMP_FILENAME})
# Dynamically generated files, such as messages.h and bllnhlp.c, must be added
# to the list manually to make sure that everything works properly.
# "FILE(RELATIVE_PATH ..." is used to get rid of the absolute paths like
# "/home/my_funny_username/very_long_path_to_my_projects/source_file.c"
# in the .pot and .po files.
FILE(RELATIVE_PATH TEMP_FILENAME ${i18n_SOURCE_DIR} "${help_BINARY_DIR}/messages.h")
LIST(APPEND XGT_SOURCE_FILES ${TEMP_FILENAME})
FILE(RELATIVE_PATH TEMP_FILENAME ${i18n_SOURCE_DIR} "${XTrkCAD_BINARY_DIR}/app/bin/bllnhlp.c")
LIST(APPEND XGT_SOURCE_FILES ${TEMP_FILENAME})
FILE(RELATIVE_PATH TEMP_FILENAME ${i18n_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/custmsg.h")
LIST(APPEND XGT_SOURCE_FILES ${TEMP_FILENAME})
# Extract strings and create xtrkcad.pot
ADD_CUSTOM_COMMAND(
OUTPUT ${POTFILE}
COMMAND ${XTC_XGETTEXT} ${XGTKEYWORDS} --add-comments=i18n -d ${GETTEXT_PACKAGE} -F -o ${POTFILE} --from-code=ISO-8859-15 ${XGT_SOURCE_FILES}
DEPENDS xtrkcad ${CMAKE_CURRENT_BINARY_DIR}/custmsg.h
WORKING_DIRECTORY ${i18n_SOURCE_DIR}
)
# Loop through the list of the supported locales
FOREACH(localeid ${XTRKCAD_LOCALE_IDS})
SET(POFILE ${i18n_SOURCE_DIR}/${localeid}.po)
SET(MOFILE_DIR ${i18n_BINARY_DIR}/${localeid}/LC_MESSAGES)
SET(MOFILE ${MOFILE_DIR}/${XTRKCAD_PACKAGE}.mo)
# Merge .pot file changes to .po file
ADD_CUSTOM_TARGET(msgmerge-${localeid}
COMMAND ${XTC_MSGMERGE} -U --backup=none ${POFILE} ${POTFILE}
DEPENDS ${POTFILE} ${POFILE}
)
# If new locale id was added, add .po file creation routine
IF(NOT EXISTS ${POFILE})
ADD_CUSTOM_COMMAND(
OUTPUT ${POFILE}
COMMAND ${XTC_MSGINIT} -l ${localeid} -o ${POFILE} -i ${POTFILE}
DEPENDS ${POTFILE}
)
ENDIF(NOT EXISTS ${POFILE})
FILE(MAKE_DIRECTORY ${MOFILE_DIR})
# Compile .po file to binary format .mo file
ADD_CUSTOM_COMMAND(
OUTPUT ${MOFILE}
COMMAND ${XTC_MSGFMT} -c -v -o ${MOFILE} ${POFILE}
DEPENDS ${POFILE}
)
# If translator program was given, add target to edit .po files with it
IF(XTC_TRANSLATOR)
ADD_CUSTOM_TARGET(msgtranslate-${localeid}
COMMAND ${XTC_TRANSLATOR} ${POFILE}
)
ENDIF(XTC_TRANSLATOR)
# Install all .mo files
INSTALL(
FILES ${MOFILE}
DESTINATION ${XTRKCAD_LOCALE_INSTALL_DIR}/${localeid}/LC_MESSAGES
)
SET(XTC_LOCALE_TARGETS
${XTC_LOCALE_TARGETS}
${i18n_BINARY_DIR}/${localeid}/LC_MESSAGES/xtrkcad.mo
)
ENDFOREACH(localeid)
# Target to be executed with "make all". Xtrkcad must be built before this to
# make sure that the dynamically generated files messages.h and bllnhlp.c are
# up to date.
ADD_CUSTOM_TARGET(messages ALL
DEPENDS xtrkcad ${POTFILE} ${XTC_LOCALE_TARGETS}
)
# Custom message files list
FILE(GLOB_RECURSE XTC_CUSTOM_MSG_FILES
${XTrkCAD_SOURCE_DIR}/*.xtq
${XTrkCAD_SOURCE_DIR}/*.xtr
${XTrkCAD_SOURCE_DIR}/*.tip)
# Custom string extractor utility
ADD_EXECUTABLE(stripmsg stripmsg.c)
# Extract translatable strings from custom message files to one temporary file
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/custmsg.h
COMMAND stripmsg ${XTC_CUSTOM_MSG_FILES} > ${CMAKE_CURRENT_BINARY_DIR}/custmsg.h
DEPENDS stripmsg ${XTC_CUSTOM_MSG_FILES}
)
|