From b51b691c8b18f5e7cf01689752c9b03a4212bdf6 Mon Sep 17 00:00:00 2001 From: Alexander Golubev Date: Sun, 15 Sep 2013 12:52:01 +0200 Subject: [PATCH] Add support for all-in-one-dir structure in tde_create_translation --- modules/TDEMacros.cmake | 60 +++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/modules/TDEMacros.cmake b/modules/TDEMacros.cmake index f290e2b..282b765 100644 --- a/modules/TDEMacros.cmake +++ b/modules/TDEMacros.cmake @@ -1049,6 +1049,7 @@ macro( tde_create_translation ) unset( _srcs ) unset( _lang ) unset( _dest ) + unset( _out_name ) unset( _directive ) unset( _var ) @@ -1075,6 +1076,13 @@ macro( tde_create_translation ) set( _directive 1 ) endif( ) + # found directive "DESTINATION" + if( "${_arg}" STREQUAL "OUTPUT_NAME" ) + unset( _proj ) + set( _var _out_name ) + set( _directive 1 ) + endif( ) + # collect data if( _directive ) unset( _directive ) @@ -1088,30 +1096,60 @@ macro( tde_create_translation ) tde_message_fatal( "MSGFMT_EXECUTABLE variable is not defined" ) elseif( NOT _lang ) tde_message_fatal( "missing LANG directive" ) - elseif( NOT _dest ) - set( _dest "${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES" ) endif( ) # if no file specified, include all *.po files if( NOT _srcs ) file( GLOB _srcs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.po ) - endif() + endif( ) if( NOT _srcs ) tde_message_fatal( "no source files" ) - endif() + endif( ) + + if( NOT _lang STREQUAL "auto") + set( _real_lang ${_lang} ) + + if( NOT _dest ) + set( _dest "${LOCALE_INSTALL_DIR}/${_lang}/LC_MESSAGES" ) + endif( ) + + # OUTPUT_NAME can only be used if we have only one file + list( LENGTH _srcs _srcs_num) + if( _out_name AND _srcs_num GREATER 1 ) + tde_message_fatal( "OUTPUT_NAME can be supplied only with single file or LANG=auto" ) + endif( ) + + elseif( NOT _out_name ) + tde_message_fatal( "LANG=auto reqires OUTPUT_NAME directive to be set" ) + elseif( _dest ) + tde_message_fatal( "DESTINATION cannot be used with LANG=auto" ) + endif( ) # generate *.mo files foreach( _src ${_srcs} ) + get_filename_component( _src ${_src} ABSOLUTE ) - get_filename_component( _out ${_src} NAME_WE ) - set( _out_name "${_out}-${_lang}.mo" ) - set( _out_real_name "${_out}.mo" ) + + if( _out_name ) + set( _out ${_out_name} ) + if( _lang STREQUAL "auto" ) + get_filename_component( _real_lang ${_src} NAME_WE ) + set( _dest "${LOCALE_INSTALL_DIR}/${_real_lang}/LC_MESSAGES" ) + endif( ) + else( ) + get_filename_component( _out ${_src} NAME_WE ) + endif( ) + + set( _out_filename "${_out}-${_real_lang}.mo" ) + set( _install_filename "${_out}.mo" ) + add_custom_command( - OUTPUT ${_out_name} - COMMAND ${MSGFMT_EXECUTABLE} ${_src} -o ${_out_name} + OUTPUT ${_out_filename} + COMMAND ${MSGFMT_EXECUTABLE} ${_src} -o ${_out_filename} DEPENDS ${_src} ) - add_custom_target( "${_out}-${_lang}-translation" ALL DEPENDS ${_out_name} ) - install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${_out_name} RENAME ${_out_real_name} DESTINATION ${_dest} ) + add_custom_target( "${_out}-${_real_lang}-translation" ALL DEPENDS ${_out_filename} ) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${_out_filename} RENAME ${_install_filename} DESTINATION ${_dest} ) + endforeach( ) endmacro( )