grim/guifications2

Parents a35a821ef420
Children 24d0dde5906e
gettext support. Need to add a ton of options to the pot file creation, but this works for now
--- a/CMakeLists.txt Fri May 17 01:58:19 2013 -0500
+++ b/CMakeLists.txt Fri May 17 02:08:14 2013 -0500
@@ -40,13 +40,6 @@
)
###############################################################################
-# i18n
-###############################################################################
-if(NLS)
- include(Gettextize)
-endif(NLS)
-
-###############################################################################
# Build Info
###############################################################################
if(INSTALL_TO_PIDGIN)
@@ -56,13 +49,14 @@
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=datadir pidgin
OUTPUT_VARIABLE PIDGIN_DATADIR)
string(STRIP ${PIDGIN_DATADIR} PIDGIN_DATADIR)
+
+ set(LOCALE_DIR ${PIDGIN_DATADIR}/locale)
else(INSTALL_TO_PIDGIN)
set(PIDGIN_LIBDIR ${CMAKE_INSTALL_PREFIX}/lib/pidgin)
set(PIDGIN_DATADIR ${CMAKE_INSTALL_PREFIX}/share/pidgin)
+ set(LOCALE_DIR ${CMAKE_INSTALL_PREFIX}/locale)
endif(INSTALL_TO_PIDGIN)
-set(GETTEXT_PACKAGE guifications)
-
include_directories(
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
@@ -87,10 +81,18 @@
-g -g3 -Wall
)
+###############################################################################
+# i18n
+###############################################################################
+set(GETTEXT_PACKAGE guifications)
+if(NLS)
+ include(Gettextize)
+endif(NLS)
+
+###############################################################################
+# Subdirectories
+###############################################################################
add_subdirectory(src)
add_subdirectory(po)
-message(STATUS "Installing plugin to ${PIDGIN_LIBDIR}")
-message(STATUS "Installing data to ${PIDGIN_DATADIR}")
-
--- a/cmake/Gettextize.cmake Fri May 17 01:58:19 2013 -0500
+++ b/cmake/Gettextize.cmake Fri May 17 02:08:14 2013 -0500
@@ -1,24 +1,51 @@
include(CMakeParseArguments)
-find_package(Gettext)
-
+###############################################################################
+# Dependencies
+###############################################################################
find_program(XGETTEXT_EXECUTABLE xgettext)
if(NOT XGETTEXT_EXECUTABLE)
message(FATAL_ERROR "Failed to find xgettext")
endif(NOT XGETTEXT_EXECUTABLE)
+find_program(GETTEXT_MSGFMT_EXECUTABLE msgfmt)
+if(NOT GETTEXT_MSGFMT_EXECUTABLE)
+ message(FATAL_ERROR "Failed to find msgfmt")
+endif(NOT GETTEXT_MSGFMT_EXECUTABLE)
+
+find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge)
+if(NOT GETTEXT_MSGMERGE_EXECUTABLE)
+ message(FATAL_ERROR "Failed to find msgmerge")
+endif(NOT GETTEXT_MSGMERGE_EXECUTABLE)
+
set(DEFAULT_XGETTEXT_OPTIONS
--language=C --keyword=_ --keyword=N_ --keyword=C_:1c,2 --keyword=NC_:1c,2 -s
--escape --add-comments="/" --package-name=${PROJECT_NAME}
--package-version=${VERSION}
)
+if(NOT DEFINED LOCALE_DIR)
+ set(LOCALE_DIR ${CMAKE_INSTALL_PREFIX}/share/locale/)
+ message(AUTHOR_WARNING "LOCALE_DIR is not set, using ${LOCALE_DIR}")
+endif(NOT DEFINED LOCALE_DIR)
+
+if(NOT DEFINED GETTEXT_PACKAGE)
+ set(GETTEXT_PACKAGE ${PROJECT_NAME})
+ message(AUTHOR_WARNING "GETTEXT_PACKAGE is not set, using ${GETTEXT_PACKAGE}")
+endif(NOT DEFINED GETTEXT_PACKAGE)
+
+###############################################################################
+# Functions
+###############################################################################
function(gettextize_pot_file _FIRST_ARG)
set(options)
set(oneValueArgs FILENAME)
set(multiValueArgs SOURCES BUILT_SOURCES OPTIONS)
- cmake_parse_arguments(POT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN})
+ cmake_parse_arguments(
+ POT "${options}" "${oneValueArgs}" "${multiValueArgs}"
+ ${_FIRST_ARG} ${ARGN}
+ )
if(POT_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown keys given to pot_file(): \"${POT_UNPARSED_ARGUMENTS}\"")
@@ -37,8 +64,11 @@
endif(NOT POT_OPTIONS)
# now tweak the sources
+ set(POT_REAL_BUILT_SOURCES)
if(POT_BUILT_SOURCES)
- foreach(ITEM ${POT_BUILT_SOURCES})
+ foreach(_item ${POT_BUILT_SOURCES})
+ get_source_file_property(_location ${_item} LOCATION)
+ list(APPEND POT_REAL_BUILT_SOURCES "${_location}")
endforeach(ITEM)
endif(POT_BUILT_SOURCES)
@@ -46,7 +76,7 @@
OUTPUT ${POT_FILENAME}
COMMAND ${XGETTEXT_EXECUTABLE} ${POT_OPTIONS}
-o ${CMAKE_CURRENT_BINARY_DIR}/${POT_FILENAME}
- ${POT_SOURCES} ${POT_BUILT_SOURCES}
+ ${POT_SOURCES} ${POT_REAL_BUILT_SOURCES}
DEPENDS ${POT_SOURCES} ${POT_BUILT_SOURCES}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM
@@ -55,3 +85,55 @@
add_custom_target("${POT_FILENAME} potfile" ALL DEPENDS ${POT_FILENAME})
endfunction(gettextize_pot_file)
+function(GETTEXTIZE_TRANSLATIONS)
+ set(options UPDATE)
+ set(oneValueArgs)
+ set(multiValueArgs)
+
+ CMAKE_PARSE_ARGUMENTS(
+ PO "${options}" "${oneValueArgs}" "${multiValueArgs}"
+ ${ARGV1} ${ARGN}
+ )
+
+ if(PO_UNPARSED_ARGUMENTS)
+ message(
+ FATAL_ERROR "Unknown keys given to GETTEXTIZE_TRANSLATIONS(): "
+ "\"${PO_UNPARSED_ARGUMENTS}\""
+ )
+ endif(PO_UNPARSED_ARGUMENTS)
+
+ file(GLOB _pos *.po)
+ set(_gmos)
+
+ foreach(_po ${_pos})
+ set(_update)
+ if(PO_UPDATE)
+ set(_update COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${_po} ${_po})
+ endif(PO_UPDATE)
+
+ get_filename_component(_base ${_po} NAME_WE)
+
+ set(_install_dir ${LOCALE_DIR}/${_base}/LC_MESSAGES/)
+ set(_install_file ${GETTEXT_DOMAIN}.mo)
+
+ set(_gmo ${_base}.gmo)
+ list(APPEND _gmos ${_gmo})
+
+ add_custom_command(
+ OUTPUT ${_gmo}
+ ${_update}
+ COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${_gmo} ${_po}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ DEPENDS ${_po}
+ )
+
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/${_gmo}
+ DESTINATION ${_install_dir}
+ RENAME ${_install_file}
+ )
+ endforeach(_po)
+
+ add_custom_target("translations" ALL DEPENDS ${_gmos})
+endfunction(GETTEXTIZE_TRANSLATIONS)
+
--- a/po/CMakeLists.txt Fri May 17 01:58:19 2013 -0500
+++ b/po/CMakeLists.txt Fri May 17 02:08:14 2013 -0500
@@ -1,1 +1,5 @@
+if(NLS)
+ GETTEXTIZE_TRANSLATIONS(UPDATE)
+endif(NLS)
+