From 0c19587aec8428444d2878fc5e2c966613207f82 Mon Sep 17 00:00:00 2001 From: Alexander Golubev Date: Fri, 26 Feb 2021 23:58:45 +0300 Subject: tde_create_translated_desktop: Prevent FTBFS on generated desktop files Fix FTBFS when translations are missing and the desktop file passed to tde_create_translated_desktop() is build-time generated. See TDE/tde-packaging-gentoo #196 for details. Signed-off-by: Alexander Golubev (cherry picked from commit f0a5bcc7600c36f8fe59754d1167d1bbc70a4953) --- modules/TDEMacros.cmake | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/modules/TDEMacros.cmake b/modules/TDEMacros.cmake index 4507430..776e2e8 100644 --- a/modules/TDEMacros.cmake +++ b/modules/TDEMacros.cmake @@ -1986,14 +1986,18 @@ macro( tde_create_translated_desktop ) if( EXISTS "${_po_dir}" AND IS_DIRECTORY "${_po_dir}" ) file( GLOB _translations RELATIVE "${_po_dir}" "${_po_dir}/*.po" ) endif( ) - if( _translations ) - # prepare a full name for the target - get_filename_component( _target ${_basename} ABSOLUTE ) - file( RELATIVE_PATH _target "${CMAKE_SOURCE_DIR}" "${_target}" ) - string( REPLACE "/" "+" _target "${_target}-translated" ) + # prepare a full name for the target + get_filename_component( _target ${_basename} ABSOLUTE ) + file( RELATIVE_PATH _target "${CMAKE_SOURCE_DIR}" "${_target}" ) + string( REPLACE "/" "+" _target "${_target}-translated" ) - if( NOT TARGET ${_target} ) + if( NOT TARGET ${_target} ) + + # use absolute path for src + get_filename_component( _src ${_src} ABSOLUTE ) + + if( _translations ) if( DESKTOP_MERGE_MSGFMT ) @@ -2012,7 +2016,6 @@ macro( tde_create_translated_desktop ) endforeach( ) # merge translations command - get_filename_component( _src ${_src} ABSOLUTE ) add_custom_command( OUTPUT ${_basename}${_binsuffix} COMMAND ${CMAKE_COMMAND} -E env "LINGUAS=${_linguas}" ${MSGFMT_EXECUTABLE} --desktop --template ${_src} -d ${_po_dir} -o ${_basename}${_binsuffix} ${_keywords_arg} @@ -2026,7 +2029,6 @@ macro( tde_create_translated_desktop ) string( REPLACE ";" "|" _keywords_match "(${_keywords_desktop})" ) # merge translations command - get_filename_component( _src ${_src} ABSOLUTE ) add_custom_command( OUTPUT ${_basename}${_binsuffix} COMMAND ${PERL_EXECUTABLE} -p -e "'s/^${_keywords_match}[ ]*=[ ]*/_\\1=/'" < ${_src} > ${_basename}.in @@ -2038,15 +2040,20 @@ macro( tde_create_translated_desktop ) endif( ) # merge translations target - add_custom_target( "${_target}" ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_basename}${_binsuffix} ) - endif() + else( ) - else( ) + # just copy the original file without translations + add_custom_command( + OUTPUT ${_basename}${_binsuffix} + COMMAND ${CMAKE_COMMAND} -E copy ${_src} ${_basename}${_binsuffix} + DEPENDS ${_src} + COMMENT "Skiping translation and copying source file to ${_sourcename}" + ) + + endif( ) - # just write the original file without translations - file( READ ${_src} _src_data ) - file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}${_binsuffix} "${_src_data}" ) + add_custom_target( "${_target}" ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_basename}${_binsuffix} ) endif( ) -- cgit v1.2.1