Warning, /pim/trojita/cmake/FindQt5LinguistForTrojita.cmake is written in an unsupported language. File is not indexed.

0001 # check for lupdate and lrelease: we can't
0002 # do it using qmake as it doesn't have
0003 # QMAKE_LUPDATE and QMAKE_LRELEASE variables :(
0004 #
0005 #  I18N_LANGUAGE - if not empty, wraps only chosen language
0006 #
0007 
0008 get_filename_component(LINGUIST_PATH ${Qt5LinguistTools_DIR} PATH)
0009 get_filename_component(LINGUIST_PATH ${LINGUIST_PATH} PATH)
0010 get_filename_component(LINGUIST_PATH ${LINGUIST_PATH} PATH)
0011 set(LINGUIST_PATH ${LINGUIST_PATH}/bin)
0012 
0013 if(TARGET Qt5::lupdate)
0014     set(QT_LUPDATE_EXECUTABLE Qt5::lupdate)
0015 else(TARGET Qt5::lupdate)
0016     FIND_PROGRAM(QT_LUPDATE_EXECUTABLE NAMES lupdate-qt5 lupdate PATHS
0017         ${LINGUIST_PATH}
0018         NO_DEFAULT_PATH
0019     )
0020 endif(TARGET Qt5::lupdate)
0021 
0022 if(QT_LUPDATE_EXECUTABLE)
0023   message(STATUS "Found lupdate: ${QT_LUPDATE_EXECUTABLE}")
0024 else(QT_LUPDATE_EXECUTABLE)
0025   if(Qt5LinguistForTrojita_FIND_REQUIRED)
0026     message(FATAL_ERROR "Could NOT find lupdate")
0027   else()
0028     message(WARNING "Could NOT find lupdate")
0029   endif()
0030 endif(QT_LUPDATE_EXECUTABLE)
0031 
0032 if(TARGET Qt5::lrelease)
0033     set(QT_LRELEASE_EXECUTABLE Qt5::lrelease)
0034 else(TARGET Qt5::lrelease)
0035     FIND_PROGRAM(QT_LRELEASE_EXECUTABLE NAMES lrelease-qt5 lrelease PATHS
0036         ${LINGUIST_PATH}
0037         NO_DEFAULT_PATH
0038     )
0039 endif(TARGET Qt5::lrelease)
0040 
0041 if(QT_LRELEASE_EXECUTABLE)
0042   message(STATUS "Found lrelease: ${QT_LRELEASE_EXECUTABLE}")
0043 else(QT_LRELEASE_EXECUTABLE)
0044   if(Qt5LinguistForTrojita_FIND_REQUIRED)
0045     message(FATAL_ERROR "Could NOT find lrelease")
0046   else()
0047     message(WARNING "Could NOT find lrelease")
0048   endif()
0049 endif(QT_LRELEASE_EXECUTABLE)
0050 
0051 if(TARGET Qt5::lconvert)
0052     set(QT_LCONVERT_EXECUTABLE Qt5::lconvert)
0053 else(TARGET Qt5::lconvert)
0054     FIND_PROGRAM(QT_LCONVERT_EXECUTABLE NAMES lconvert-qt5 lconvert PATHS
0055         ${LINGUIST_PATH}
0056         NO_DEFAULT_PATH
0057     )
0058 endif(TARGET Qt5::lconvert)
0059 
0060 if(QT_LCONVERT_EXECUTABLE)
0061   message(STATUS "Found lconvert: ${QT_LCONVERT_EXECUTABLE}")
0062 else(QT_LCONVERT_EXECUTABLE)
0063   if(Qt5LinguistForTrojita_FIND_REQUIRED)
0064     message(FATAL_ERROR "Could NOT find lconvert")
0065   else()
0066     message(WARNING "Could NOT find lconvert")
0067   endif()
0068 endif(QT_LCONVERT_EXECUTABLE)
0069 
0070 mark_as_advanced(QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_LCONVERT_EXECUTABLE)
0071 
0072 if(QT_LUPDATE_EXECUTABLE AND QT_LRELEASE_EXECUTABLE AND QT_LCONVERT_EXECUTABLE)
0073   set(Qt5LinguistForTrojita_FOUND TRUE)
0074 
0075 # QT5_WRAP_TS(outfiles infiles ...)
0076 # outfiles receives .qm generated files from
0077 # .ts files in arguments
0078 # a target lupdate is created for you
0079 # update/generate your translations files
0080 # example: QT5_WRAP_TS(foo_QM ${foo_TS})
0081 MACRO (QT5_WRAP_TS outfiles)
0082   # a target to manually run lupdate
0083   #ADD_CUSTOM_TARGET(lupdate
0084                     #COMMAND ${QT_LUPDATE_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} -ts ${ARGN}
0085                     #WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
0086   #)
0087   FOREACH (it ${ARGN})
0088     GET_FILENAME_COMPONENT(it ${it} ABSOLUTE)
0089     GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
0090 
0091     SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.qm)
0092     ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
0093                        COMMAND ${QT_LRELEASE_EXECUTABLE}
0094                        ARGS -compress -removeidentical -silent ${it} -qm ${outfile}
0095                        DEPENDS ${it}
0096     )
0097 
0098     SET(${outfiles} ${${outfiles}} ${outfile})
0099   ENDFOREACH (it)
0100 ENDMACRO (QT5_WRAP_TS)
0101 
0102 # QT_WRAP_PO(outfiles infiles ...)
0103 # outfiles receives .qm generated files from
0104 # .po files in arguments
0105 # example: QT5_WRAP_PO(foo_TS ${foo_PO})
0106 MACRO (QT5_WRAP_PO outfiles)
0107    FOREACH (it ${ARGN})
0108       GET_FILENAME_COMPONENT(it ${it} ABSOLUTE)
0109       # PO files are foo-en_GB.po not foo_en_GB.po like Qt expects
0110       GET_FILENAME_COMPONENT(fileWithDash ${it} NAME_WE)
0111       if(NOT I18N_LANGUAGE)
0112         set(do_wrap ON)
0113       else(NOT I18N_LANGUAGE)
0114         string(REGEX MATCH "${I18N_LANGUAGE}" ln ${fileWithDash})
0115         if(ln)
0116           set(do_wrap ON)
0117         else(ln)
0118           set(do_wrap OFF)
0119         endif(ln)
0120       endif(NOT I18N_LANGUAGE)      
0121       if(do_wrap)
0122         STRING(REPLACE "-" "_" filenameBase "${fileWithDash}")
0123         file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/locale)
0124         SET(tsfile ${CMAKE_CURRENT_BINARY_DIR}/locale/${filenameBase}.ts)
0125         SET(qmfile ${CMAKE_CURRENT_BINARY_DIR}/locale/${filenameBase}.qm)
0126 
0127         if (NOT EXISTS "${it}")
0128            GET_FILENAME_COMPONENT(path ${it} PATH)
0129            STRING(REGEX MATCH "[^-]+$" lang "${fileWithDash}")
0130            set (it "${path}/${lang}.po")
0131         endif (NOT EXISTS "${it}")
0132 
0133         # lconvert from PO to TS and then run lupdate to generate the correct strings
0134         # finally run lrelease as used above
0135         ADD_CUSTOM_COMMAND(OUTPUT ${qmfile}
0136                          COMMAND ${QT_LCONVERT_EXECUTABLE}
0137                          ARGS -i ${it} -o ${tsfile}
0138                          COMMAND ${QT_LUPDATE_EXECUTABLE}
0139                          ARGS ${CMAKE_CURRENT_SOURCE_DIR} -silent -noobsolete -ts ${tsfile}
0140                          COMMAND ${QT_LRELEASE_EXECUTABLE}
0141                          ARGS -compress -removeidentical -nounfinished -silent ${tsfile} -qm ${qmfile}
0142                          DEPENDS ${it}
0143                          )
0144 
0145         SET(${outfiles} ${${outfiles}} ${qmfile})
0146       endif(do_wrap)
0147    ENDFOREACH (it)
0148 ENDMACRO (QT5_WRAP_PO)
0149 
0150 else(QT_LUPDATE_EXECUTABLE AND QT_LRELEASE_EXECUTABLE AND QT_LCONVERT_EXECUTABLE)
0151   set(Qt5LinguistForTrojita_FOUND FALSE)
0152 endif(QT_LUPDATE_EXECUTABLE AND QT_LRELEASE_EXECUTABLE AND QT_LCONVERT_EXECUTABLE)