Salome HOME
Updated copyright comment
[tools/configuration.git] / cmake / UseSphinx.cmake
index 4372e42ca624a00c39bfbb0607a53feebe96eeba..c8c750ecc5342cc58dceb789789829d4bba0c8de 100644 (file)
@@ -1,8 +1,5 @@
 ###########################################################################
-# Copyright (C) 2007-2018  CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -27,6 +24,22 @@ IF(NOT Sphinx_FOUND)
    MESSAGE(FATAL_ERROR "Developer error -> UseSphinx file should be included after detection of the sphinx!")
 ENDIF()
 
+FUNCTION(SPHINX_CHECK_EXTENSIONS)
+  CMAKE_PARSE_ARGUMENTS(CHECK_EXTENSIONS "REQUIRED" "" "" ${ARGN})
+  FOREACH(_ext ${CHECK_EXTENSIONS_UNPARSED_ARGUMENTS})
+    EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import ${_ext}; print('ok')" OUTPUT_VARIABLE _has_ext ERROR_QUIET)
+    IF(_has_ext)
+      MESSAGE(STATUS "Required Sphinx extension '${_ext}' has been found!")
+    ELSE()
+      IF(CHECK_EXTENSIONS_REQUIRED)
+        MESSAGE(FATAL_ERROR "Required Sphinx extension '${_ext}' is not found!")
+      ELSE()
+        MESSAGE(WARNING "Required Sphinx extension '${_ext}' is not found!")
+      ENDIF()
+    ENDIF()
+  ENDFOREACH()
+ENDFUNCTION()
+
 function(JOIN OUTPUT GLUE)
     set(_TMP_RESULT "")
     set(_GLUE "") # effective glue is empty at the beginning
@@ -41,20 +54,22 @@ endfunction()
 # ADD_MULTI_LANG_DOCUMENTATION is a macro which adds sphinx multi-language 
 # documentation.
 #
-# USAGE: SALOME_CONFIGURE_FILE(TARGET <target_name> MODULE <module_name> 
-#                              LANGUAGES <languages_list>)
+# USAGE: ADD_MULTI_LANG_DOCUMENTATION(TARGET <target_name> MODULE <module_name>
+#                                     LANGUAGES <languages_list>)
 #
 # ARGUMENTS:
 # TARGET_NAME : IN : target name for the documentation
 # MODULE : IN : SALOME module name
 # LANGUAGES : IN : list of the languages
+# ADDITIONAL_ENVIRONMENT: IN : list of additional enviromnent variable used 
+# for generation of the documentation
 #----------------------------------------------------------------------------
 MACRO(ADD_MULTI_LANG_DOCUMENTATION)
   # Common options
   SET(PAPEROPT_a4 "-D latex_paper_size=a4")
 
   # Parse input argument
-  PARSE_ARGUMENTS(MULTI_LANG "TARGET_NAME;MODULE;LANGUAGES" "" ${ARGN})
+  PARSE_ARGUMENTS(MULTI_LANG "TARGET_NAME;MODULE;LANGUAGES;ADDITIONAL_ENVIRONMENT" "" ${ARGN})
 
   # Content of the executable file to generate documentation
   SET(CMDS)
@@ -90,36 +105,17 @@ MACRO(ADD_MULTI_LANG_DOCUMENTATION)
   ENDFOREACH()
 
   # 6. Create command file
+  SET(_script_wo "build_doc")
   IF(WIN32)
     SET(_ext "bat")
-    SET(_call_cmd "call")
   ELSE()
     SET(_ext "sh")
-    SET(_call_cmd ".")
   ENDIF()
-  
-  SET(_env)
-  FOREACH(_item ${_${PROJECT_NAME}_EXTRA_ENV})
-    FOREACH(_val ${_${PROJECT_NAME}_EXTRA_ENV_${_item}})
-      IF(WIN32)
-        IF(${_item} STREQUAL "LD_LIBRARY_PATH")
-          SET(_item PATH)
-        ENDIF()
-        STRING(REPLACE "/" "\\" _env "${_env} @SET ${_item}=${_val};%${_item}%\n")        
-      ELSEIF(APPLE)
-        IF(${_item} STREQUAL "LD_LIBRARY_PATH")
-          SET(_env "${_env} export DYLD_LIBRARY_PATH=${_val}:\${DYLD_LIBRARY_PATH}\n")
-        ELSE()
-          SET(_env "${_env} export ${_item}=${_val}:\${${_item}}\n")
-        ENDIF()
-      ELSE()
-        SET(_env "${_env} export ${_item}=${_val}:\${${_item}}\n")
-      ENDIF()
-    ENDFOREACH()
-  ENDFOREACH()
-  
-  SET(_script ${CMAKE_CURRENT_BINARY_DIR}/build_doc.${_ext})
-  FILE(WRITE ${_script} ${_env}${CMDS})
+  SET(_script "${_script_wo}.${_ext}")
+
+  SALOME_GENERATE_ENVIRONMENT_SCRIPT(_not_used_output ${_script_wo} "" "" CONTEXT "${MULTI_LANG_TARGET_NAME}" CONTEXT_NAME "DO_GENERATION" ADDITIONAL_VARIABLES ${MULTI_LANG_ADDITIONAL_ENVIRONMENT})
+
+  FILE(APPEND ${_script} "${CMDS}")
 
   # 7. Create custom target
   ADD_CUSTOM_TARGET(${MULTI_LANG_TARGET_NAME}
@@ -133,6 +129,8 @@ MACRO(ADD_MULTI_LANG_DOCUMENTATION)
   # 8. Update PO files
   FOREACH(lang ${MULTI_LANG_LANGUAGES})
     FILE(GLOB _pfiles ${CMAKE_CURRENT_BINARY_DIR}/locale/${lang}/LC_MESSAGES/*.po)
+    ADD_CUSTOM_COMMAND(TARGET ${MULTI_LANG_TARGET_NAME} POST_BUILD
+      COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/locale/${lang}/LC_MESSAGES)
     FOREACH(pofile ${_pfiles})
       GET_FILENAME_COMPONENT(fn_wo_path ${pofile} NAME)
       ADD_CUSTOM_COMMAND(TARGET ${MULTI_LANG_TARGET_NAME} POST_BUILD
@@ -148,4 +146,4 @@ MACRO(ADD_MULTI_LANG_DOCUMENTATION)
   ENDFOREACH()
   SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}")
 
-ENDMACRO(ADD_MULTI_LANG_DOCUMENTATION)
\ No newline at end of file
+ENDMACRO(ADD_MULTI_LANG_DOCUMENTATION)