1 ###########################################################################
2 # Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 MESSAGE(FATAL_ERROR "Developer error -> UseSphinx file should be included after detection of the sphinx!")
27 function(JOIN OUTPUT GLUE)
29 set(_GLUE "") # effective glue is empty at the beginning
31 set(_TMP_RESULT "${_TMP_RESULT}${_GLUE}${arg}")
34 set(${OUTPUT} "${_TMP_RESULT}" PARENT_SCOPE)
37 #----------------------------------------------------------------------------
38 # ADD_MULTI_LANG_DOCUMENTATION is a macro which adds sphinx multi-language
41 # USAGE: ADD_MULTI_LANG_DOCUMENTATION(TARGET <target_name> MODULE <module_name>
42 # LANGUAGES <languages_list>)
45 # TARGET_NAME : IN : target name for the documentation
46 # MODULE : IN : SALOME module name
47 # LANGUAGES : IN : list of the languages
48 # ADDITIONAL_ENVIRONMENT: IN : list of additional enviromnent variable used
49 # for generation of the documentation
50 #----------------------------------------------------------------------------
51 MACRO(ADD_MULTI_LANG_DOCUMENTATION)
53 SET(PAPEROPT_a4 "-D latex_paper_size=a4")
55 # Parse input argument
56 PARSE_ARGUMENTS(MULTI_LANG "TARGET_NAME;MODULE;LANGUAGES;ADDITIONAL_ENVIRONMENT" "" ${ARGN})
58 # Content of the executable file to generate documentation
61 JOIN(SPHINX_EXE " " ${SPHINX_EXECUTABLE})
62 STRING(REPLACE "$$" "$" SPHINX_EXE ${SPHINX_EXE})
64 IF(MULTI_LANG_LANGUAGES)
65 # 1. Options for generation POT files
66 SET(POT_SPHINXOPTS "-c ${CMAKE_CURRENT_BINARY_DIR} -b gettext ${CMAKE_CURRENT_SOURCE_DIR}/input potfiles")
67 SET(CMDS "${CMDS} ${SPHINX_EXE} ${POT_SPHINXOPTS}\n")
69 # 2. Update PO files options
71 FOREACH(lang ${MULTI_LANG_LANGUAGES})
72 SET(LANGS "${LANGS} -l ${lang}")
74 SET(PO_SPHINXOPTS "${PO_SPHINXOPTS} update -p potfiles ${LANGS}")
75 SET(CMDS "${CMDS} ${SPHINX_INTL_EXECUTABLE} ${PO_SPHINXOPTS}\n")
78 SET(CMDS "${CMDS} ${SPHINX_INTL_EXECUTABLE} build\n")
81 # 4. Options for EN documentation
82 SET(SPHINXOPTS "-c ${CMAKE_CURRENT_BINARY_DIR} -d doctrees -b html ${PAPEROPT_a4} ${CMAKE_CURRENT_SOURCE_DIR}/input ${MULTI_LANG_MODULE}")
83 SET(CMDS "${CMDS} ${SPHINX_EXE} ${SPHINXOPTS}\n")
85 # 5. Options for other documentation
86 FOREACH(lang ${MULTI_LANG_LANGUAGES})
87 SET(${lang}_SPHINXOPTS "-c ${CMAKE_CURRENT_BINARY_DIR} -d doctrees -b html ${PAPEROPT_a4} -D language=${lang} ${CMAKE_CURRENT_SOURCE_DIR}/input ${MULTI_LANG_MODULE}_${lang}")
88 SET(CMDS "${CMDS} ${SPHINX_EXE} ${${lang}_SPHINXOPTS}\n")
91 # 6. Create command file
92 SET(_script_wo "build_doc")
98 SET(_script "${_script_wo}.${_ext}")
100 SALOME_GENERATE_ENVIRONMENT_SCRIPT(_not_used_output ${_script_wo} "" "" CONTEXT "${MULTI_LANG_TARGET_NAME}" CONTEXT_NAME "DO_GENERATION" ADDITIONAL_VARIABLES ${MULTI_LANG_ADDITIONAL_ENVIRONMENT})
102 FILE(APPEND ${_script} "${CMDS}")
104 # 7. Create custom target
105 ADD_CUSTOM_TARGET(${MULTI_LANG_TARGET_NAME}
106 # 1. Copy existing po files
107 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/locale ${CMAKE_CURRENT_BINARY_DIR}/locale
108 # 2. Generate documentation
109 COMMAND ${_call_cmd} ${_script}
110 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
114 FOREACH(lang ${MULTI_LANG_LANGUAGES})
115 FILE(GLOB _pfiles ${CMAKE_CURRENT_BINARY_DIR}/locale/${lang}/LC_MESSAGES/*.po)
116 ADD_CUSTOM_COMMAND(TARGET ${MULTI_LANG_TARGET_NAME} POST_BUILD
117 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/locale/${lang}/LC_MESSAGES)
118 FOREACH(pofile ${_pfiles})
119 GET_FILENAME_COMPONENT(fn_wo_path ${pofile} NAME)
120 ADD_CUSTOM_COMMAND(TARGET ${MULTI_LANG_TARGET_NAME} POST_BUILD
121 COMMAND ${CMAKE_COMMAND} -E
122 copy_if_different ${pofile} ${CMAKE_CURRENT_SOURCE_DIR}/locale/${lang}/LC_MESSAGES/${fn_wo_path})
126 # 9. Make clean files/folders
127 SET(make_clean_files ${MULTI_LANG_MODULE} doctrees potfiles locale)
128 FOREACH(lang ${MULTI_LANG_LANGUAGES})
129 SET(make_clean_files ${make_clean_files} ${MULTI_LANG_MODULE}_${lang})
131 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}")
133 ENDMACRO(ADD_MULTI_LANG_DOCUMENTATION)