-# Copyright (C) 2012-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2021 CEA/DEN, EDF R&D, OPEN CASCADE
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# Author: A.Geay, V. Sandler, A. Bruneton
#
+#----------------------------------------------------------------------------
+# Set-up global policies
+#----------------------------------------------------------------------------
+CMAKE_POLICY(SET CMP0003 NEW) # Ensure proper linker behavior
+IF(WIN32)
+ CMAKE_POLICY(SET CMP0020 OLD) # Disable automatic linking to qtmain.lib
+ENDIF(WIN32)
+CMAKE_POLICY(SET CMP0053 NEW) # For correct Qt 5 detection procedure
+IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
+ CMAKE_POLICY(SET CMP0074 NEW) # Use ROOT variables when detecting packages
+ENDIF()
+
#----------------------------------------------------------------------------
# LIST_CONTAINS is a macro useful for determining whether a list has a
# particular entry
#----------------------------------------------------------------------------
# SALOME_INSTALL_SCRIPTS is a macro useful for installing scripts.
#
-# USAGE: SALOME_INSTALL_SCRIPTS(file_list path [WORKING_DIRECTORY dir] [DEF_PERMS])
+# USAGE: SALOME_INSTALL_SCRIPTS(file_list path [WORKING_DIRECTORY dir] [DEF_PERMS] [TARGET_NAME name])
#
# ARGUMENTS:
# file_list: IN : list of files to be installed. This list should be quoted.
#
# By default files to be installed as executable scripts.
# If DEF_PERMS option is provided, than permissions for installed files are
-# only OWNER_WRITE, OWNER_READ, GROUP_READ, and WORLD_READ.
+# only OWNER_WRITE, OWNER_READ, GROUP_READ, and WORLD_READ.
+# WORKING_DIRECTORY option may be used to specify the relative or absolute
+# path to the directory containing source files listed in file_list argument.
+# If TARGET_NAME option is specified, the name of the target being created
+# with this macro is returned via the given variable.
#----------------------------------------------------------------------------
MACRO(SALOME_INSTALL_SCRIPTS file_list path)
- PARSE_ARGUMENTS(SALOME_INSTALL_SCRIPTS "WORKING_DIRECTORY" "DEF_PERMS" ${ARGN})
+ PARSE_ARGUMENTS(SALOME_INSTALL_SCRIPTS "WORKING_DIRECTORY;TARGET_NAME;EXTRA_DPYS" "DEF_PERMS" ${ARGN})
SET(PERMS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
IF(NOT SALOME_INSTALL_SCRIPTS_DEF_PERMS)
SET(PERMS ${PERMS} OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
ENDIF(NOT SALOME_INSTALL_SCRIPTS_DEF_PERMS)
SET(_all_pyc)
SET(_all_pyo)
- SET(_all_subdirs)
FOREACH(file ${file_list})
SET(PREFIX "")
SET(_source_prefix "")
GET_FILENAME_COMPONENT(file_name ${file} NAME)
IF(NOT IS_ABSOLUTE ${file})
+ SET(_source_prefix "${CMAKE_CURRENT_SOURCE_DIR}/")
IF(SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY)
- SET(PREFIX "${SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY}/")
+ SET(PREFIX "${SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY}/")
+ SET(_source_prefix "${SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY}/")
ENDIF(SALOME_INSTALL_SCRIPTS_WORKING_DIRECTORY)
- SET(_source_prefix "${CMAKE_CURRENT_SOURCE_DIR}/")
ENDIF(NOT IS_ABSOLUTE ${file})
INSTALL(FILES ${PREFIX}${file} DESTINATION ${path} PERMISSIONS ${PERMS})
GET_FILENAME_COMPONENT(ext ${file} EXT)
# Generate and install the pyc and pyo
# [ABN] Important: we avoid references or usage of CMAKE_INSTALL_PREFIX which is not correctly set
# when using CPack.
- SET(_pyc_file "${CMAKE_CURRENT_BINARY_DIR}/${we_ext}.pyc")
- SET(_pyo_file "${CMAKE_CURRENT_BINARY_DIR}/${we_ext}.pyo")
+ SET(_pyc_file "${CMAKE_CURRENT_BINARY_DIR}/${we_ext}.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.pyc")
+ SET(_pyo_file "${CMAKE_CURRENT_BINARY_DIR}/${we_ext}.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.opt-1.pyc")
LIST(APPEND _all_pyc ${_pyc_file})
LIST(APPEND _all_pyo ${_pyo_file})
ADD_CUSTOM_COMMAND(
- OUTPUT ${_pyc_file}
- COMMAND ${PYTHON_EXECUTABLE} -c "import py_compile ; py_compile.compile('${_source_prefix}${file}', '${_pyc_file}', doraise=True )"
- DEPENDS ${PREFIX}${file}
- VERBATIM
- )
- ADD_CUSTOM_COMMAND(
- OUTPUT ${_pyo_file}
- COMMAND ${PYTHON_EXECUTABLE} -O -c "import py_compile ; py_compile.compile('${_source_prefix}${file}', '${_pyo_file}', doraise=True )"
- DEPENDS ${PREFIX}${file}
- VERBATIM
- )
+ OUTPUT ${_pyc_file} ${_pyo_file}
+ COMMAND ${PYTHON_EXECUTABLE} -c "from py_compile import compile; compile('${_source_prefix}${file}', '${_pyc_file}', doraise=True, optimize=0); compile('${_source_prefix}${file}', '${_pyo_file}', doraise=True, optimize=1)"
+ DEPENDS ${PREFIX}${file}
+ VERBATIM
+ )
# Install the .pyo and the .pyc
- INSTALL(FILES ${_pyc_file} DESTINATION ${path} PERMISSIONS ${PERMS})
- INSTALL(FILES ${_pyo_file} DESTINATION ${path} PERMISSIONS ${PERMS})
+ INSTALL(FILES ${_pyc_file} DESTINATION ${path}/__pycache__ PERMISSIONS ${PERMS})
+ INSTALL(FILES ${_pyo_file} DESTINATION ${path}/__pycache__ PERMISSIONS ${PERMS})
ENDIF(ext STREQUAL .py)
- # get relativa path (from CMAKE_SOURCE_DIR to CMAKE_CURRENT_SOURCE_DIR)
+ # get relative path (from CMAKE_SOURCE_DIR to CMAKE_CURRENT_SOURCE_DIR)
STRING(REGEX REPLACE ${CMAKE_SOURCE_DIR} "" rel_dir ${CMAKE_CURRENT_SOURCE_DIR})
# convert "/" to "_"
IF(rel_dir)
WHILE(TARGET "PYCOMPILE${unique_name}_${_cnt}")
MATH(EXPR _cnt ${_cnt}+1)
ENDWHILE()
- ADD_CUSTOM_TARGET("PYCOMPILE${unique_name}_${_cnt}" ALL DEPENDS ${_all_pyc} ${_all_pyo})
+ SET(_target_name "PYCOMPILE${unique_name}_${_cnt}")
+ ADD_CUSTOM_TARGET(${_target_name} ALL DEPENDS ${_all_pyc} ${_all_pyo})
+ IF(SALOME_INSTALL_SCRIPTS_TARGET_NAME)
+ SET(${SALOME_INSTALL_SCRIPTS_TARGET_NAME} ${_target_name})
+ ENDIF(SALOME_INSTALL_SCRIPTS_TARGET_NAME)
+ IF(SALOME_INSTALL_SCRIPTS_EXTRA_DPYS)
+ ADD_DEPENDENCIES(${_target_name} ${SALOME_INSTALL_SCRIPTS_EXTRA_DPYS})
+ ENDIF(SALOME_INSTALL_SCRIPTS_EXTRA_DPYS)
ENDIF()
ENDMACRO(SALOME_INSTALL_SCRIPTS)
# SALOME_CONFIGURE_FILE is a macro useful for copying a file to another location
# and modify its contents.
#
-# USAGE: SALOME_CONFIGURE_FILE(in_file out_file [INSTALL dir])
+# USAGE: SALOME_CONFIGURE_FILE(in_file out_file [INSTALL dir [EXEC_PERMS]])
#
# ARGUMENTS:
# in_file: IN : input file (if relative path is given, full file path is computed from current source dir).
# out_file: IN : output file (if relative path is given, full file path is computed from current build dir).
# If INSTALL is specified, then 'out_file' will be installed to the 'dir' directory.
+# In this case, EXEC_PERMS can be used to set execution permission for installed file.
#----------------------------------------------------------------------------
MACRO(SALOME_CONFIGURE_FILE IN_FILE OUT_FILE)
IF(IS_ABSOLUTE ${IN_FILE})
ENDIF()
MESSAGE(STATUS "Creation of ${_out_file}")
CONFIGURE_FILE(${_in_file} ${_out_file} @ONLY)
- PARSE_ARGUMENTS(SALOME_CONFIGURE_FILE "INSTALL" "" ${ARGN})
+ PARSE_ARGUMENTS(SALOME_CONFIGURE_FILE "INSTALL" "EXEC_PERMS" ${ARGN})
IF(SALOME_CONFIGURE_FILE_INSTALL)
- INSTALL(FILES ${_out_file} DESTINATION ${SALOME_CONFIGURE_FILE_INSTALL})
+ SET(PERMS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
+ IF(SALOME_CONFIGURE_FILE_EXEC_PERMS)
+ SET(PERMS ${PERMS} OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE)
+ ENDIF(SALOME_CONFIGURE_FILE_EXEC_PERMS)
+ INSTALL(FILES ${_out_file} DESTINATION ${SALOME_CONFIGURE_FILE_INSTALL} PERMISSIONS ${PERMS})
ENDIF(SALOME_CONFIGURE_FILE_INSTALL)
ENDMACRO(SALOME_CONFIGURE_FILE)
ELSE()
SET(_length 23)
ENDIF()
- MESSAGE(STATUS "")
- MESSAGE(STATUS " Optional packages - Detection report ")
- MESSAGE(STATUS " ==================================== ")
- MESSAGE(STATUS "")
IF(DEFINED _SALOME_OPTIONAL_PACKAGES_names)
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS " Optional packages - Detection report ")
+ MESSAGE(STATUS " ==================================== ")
+ MESSAGE(STATUS "")
LIST(LENGTH _SALOME_OPTIONAL_PACKAGES_names _list_len)
# Another CMake stupidity - FOREACH(... RANGE r) generates r+1 numbers ...
MATH(EXPR _range "${_list_len}-1")
MESSAGE(STATUS " * ${_pkg_name} -> ${_found_msg}${_flag_msg}")
ENDFOREACH()
+ MESSAGE(STATUS "")
+ MESSAGE(STATUS "")
ENDIF(DEFINED _SALOME_OPTIONAL_PACKAGES_names)
- MESSAGE(STATUS "")
- MESSAGE(STATUS "")
# Failure if some packages were missing:
IF(_will_fail)
####################################################################
-# SALOME_FIND_PACKAGE_DETECT_CONFLICTS(pkg referenceVariable upCount)
+# SALOME_FIND_PACKAGE_AND_DETECT_CONFLICTS(pkg referenceVariable upCount)
# pkg : name of the system package to be detected
# referenceVariable: variable containing a path that can be browsed up to
# retrieve the package root directory (xxx_ROOT_DIR)
# Note the double de-reference of "referenceVariable":
SET(_tmp_ROOT_DIR "${${referenceVariable}}")
ENDIF()
- # Up cound can be reset by detection procedure
+ # Up count can be reset by detection procedure
SET(_upCount ${upCount})
IF(DEFINED ${pkg_UC}_UPCOUNT)
SET(_upCount ${${pkg_UC}_UPCOUNT})
ENDIF()
- IF(${_upCount})
+ IF(${_upCount} GREATER 0)
FOREACH(_unused RANGE 1 ${_upCount})
GET_FILENAME_COMPONENT(_tmp_ROOT_DIR "${_tmp_ROOT_DIR}" PATH)
ENDFOREACH()
IF(_is_check)
IF(NOT IS_DIRECTORY ${_item})
IF(TARGET ${_item})
- GET_TARGET_PROPERTY(_item ${_item} LOCATION)
- ENDIF()
+ GET_TARGET_PROPERTY(_target_type ${_item} TYPE)
+ IF(NOT ${_target_type} STREQUAL "INTERFACE_LIBRARY")
+ GET_TARGET_PROPERTY(_item ${_item} LOCATION)
+ ENDIF()
+ ENDIF()
GET_FILENAME_COMPONENT(_item ${_item} PATH)
ENDIF()
IF(EXISTS ${_item})
# Macro generates environement script using previously created variables
# _${PROJECT_NAME}_EXTRA_ENV_<var>, where <var> is name of variable and
# _${PROJECT_NAME}_EXTRA_ENV (see marco SALOME_ACCUMULATE_ENVIRONMENT);
-# and puts generated command in proper environment into <output> argument.
-#
+# and puts generated command in proper environment into <output> argument. To ignore
+# _${PROJECT_NAME}_EXTRA_ENV_<var> and _${PROJECT_NAME}_EXTRA_ENV variables set
+# environment variable 'SALOME_HAS_GLOBAL_ENV=1'
+#
+# NAMED ARGUMENTS:
+# CONTEXT: is used under Windows platform only to generate command file. See explanations
+# below.
+# CONTEXT_NAME: is used under Windows platform only to generate command file. See
+# explanations below.
+# ADDITIONAL_VARIABLES: list of the additional variables to write into environment script.
+# Each item of this list should be in the 'Variable=Value' format.
+#
+#
# Notes:
# - If <script> is specified as relative path, it is computed from the current build
# directory.
+# - If CONTEXT variables is passed into this macro, then on
+# Windows platform command file looks like:
+# =================================================
+# IF SET_${CONTEXT}_VARS == 1 GOTO ${CONTEXT_NAME}
+# @SET VAR1=VAR1_VALUE;%VAR1%
+# .........
+# .........
+# .........
+# @SET VARN=VARN_VALUE;%VARN%
+# @SET SET_${CONTEXT}_VARS = 1
+# :${CONTEXT_NAME}
+# =================================================
+# By default CONTEXT_NAME is equal to 'END'
#
MACRO(SALOME_GENERATE_ENVIRONMENT_SCRIPT output script cmd opts)
+ PARSE_ARGUMENTS(SALOME_GENERATE_ENVIRONMENT_SCRIPT "CONTEXT;CONTEXT_NAME;ADDITIONAL_VARIABLES" "" ${ARGN})
+
IF(IS_ABSOLUTE ${script})
SET(_script ${script})
ELSE()
SET(_ext "sh")
SET(_call_cmd ".")
ENDIF()
+
+ SET(_ctx "END")
+ IF(SALOME_GENERATE_ENVIRONMENT_SCRIPT_CONTEXT_NAME)
+ SET(_ctx "${SALOME_GENERATE_ENVIRONMENT_SCRIPT_CONTEXT_NAME}")
+ 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")
+ SET(_env "")
+ IF(WIN32 AND SALOME_GENERATE_ENVIRONMENT_SCRIPT_CONTEXT)
+ SET(_env "IF ${_env}\"%SET_${SALOME_GENERATE_ENVIRONMENT_SCRIPT_CONTEXT}_VARS%\"==\"1\" GOTO ${_ctx}\n")
+ ENDIF()
+ IF (NOT "$ENV{SALOME_HAS_GLOBAL_ENV}" STREQUAL "1")
+ FOREACH(_item ${_${PROJECT_NAME}_EXTRA_ENV})
+ FOREACH(_val ${_${PROJECT_NAME}_EXTRA_ENV_${_item}})
+ SALOME_DO_VAR_SUBSTITUTION(_env ${_item} ${_val})
+ ENDFOREACH()
+ ENDFOREACH()
+ ENDIF()
+
+ # Additional variables
+ IF(SALOME_GENERATE_ENVIRONMENT_SCRIPT_ADDITIONAL_VARIABLES)
+ FOREACH(_item ${SALOME_GENERATE_ENVIRONMENT_SCRIPT_ADDITIONAL_VARIABLES})
+ STRING(REGEX MATCHALL "([^=]+|[^=]+$)" a_list "${_item}")
+ LIST(LENGTH a_list a_list_len)
+ IF(NOT ${a_list_len} EQUAL 2)
+ MESSAGE(FATAL_ERROR "Each item of ${ADDITIONAL_VARIABLES} list should be in 'Variable=Value' format")
ENDIF()
+ LIST(GET a_list 0 _item)
+ LIST(GET a_list 1 _val)
+ SALOME_DO_VAR_SUBSTITUTION(_env ${_item} ${_val})
ENDFOREACH()
- ENDFOREACH()
-
- SET(_script ${_script}.${_ext})
- FILE(WRITE ${_script} "${_env}")
-
- SET(${output} ${_call_cmd} ${_script} && ${cmd} ${opts})
-
+ ENDIF()
+
+ IF(WIN32 AND SALOME_GENERATE_ENVIRONMENT_SCRIPT_CONTEXT)
+ SET(_env "${_env}@SET SET_${SALOME_GENERATE_ENVIRONMENT_SCRIPT_CONTEXT}_VARS=1\n")
+ SET(_env "${_env}:${_ctx}\n" )
+ ENDIF()
+
+ IF(NOT "${_env}" STREQUAL "")
+ SET(_script ${_script}.${_ext})
+ FILE(WRITE ${_script} "${_env}")
+ SET(${output} ${_call_cmd} ${_script} && ${cmd} ${opts})
+ ELSE()
+ SET(${output} ${cmd} ${opts})
+ ENDIF()
+
ENDMACRO(SALOME_GENERATE_ENVIRONMENT_SCRIPT)
#########################################################################
# version 2.7.12+ and the interp is 2.7.12 ...
#
MACRO(SALOME_EXTRACT_VERSION version_string major minor patch)
- IF(${version_string} MATCHES "[0-9]+[^0-9]*\\.[0-9]+[^0-9]*\\.[0-9]+[^0-9]*")
- STRING(REGEX REPLACE "^([0-9]+)[^0-9]*\\.[0-9]+[^0-9]*\\.[0-9]+[^0-9]*" "\\1" ${major} "${version_string}")
- STRING(REGEX REPLACE "^[0-9]+[^0-9]*\\.([0-9]+)[^0-9]*\\.[0-9]+[^0-9]*" "\\1" ${minor} "${version_string}")
- STRING(REGEX REPLACE "^[0-9]+[^0-9]*\\.[0-9]+[^0-9]*\\.([0-9]+)[^0-9]*" "\\1" ${patch} "${version_string}")
+ IF(${version_string} MATCHES "[0-9]+[^0-9.]*\\.[0-9]+[^0-9.]*\\.*[0-9]*[^0-9]*[0-9]*")
+ STRING(REGEX REPLACE "^([0-9]+)[^0-9.]*\\.[0-9]+[^0-9.]*\\.*[0-9]*[^0-9]*[0-9]*$" "\\1" ${major} "${version_string}")
+ STRING(REGEX REPLACE "^[0-9]+[^0-9.]*\\.([0-9]+)[^0-9.]*\\.*[0-9]*[^0-9]*[0-9]*$" "\\1" ${minor} "${version_string}")
+
+ IF(${version_string} MATCHES "[0-9]+[^0-9.]*\\.[0-9]+[^0-9.]*\\.[0-9]+[^0-9]*[0-9]*")
+ # X.Y.Z format (python 3.5.2 ...)
+ STRING(REGEX REPLACE "^[0-9]+[^0-9.]*\\.[0-9]+[^0-9.]*\\.([0-9]+)[^0-9]*[0-9]*$" "\\1" ${patch} "${version_string}")
+ ELSE()
+ # X.Y format (python 3.5 ...)
+ SET(${patch} "0")
+ ENDIF()
ELSE()
MESSAGE("MACRO(SALOME_EXTRACT_VERSION ${version_string} ${major} ${minor} ${patch}")
MESSAGE(FATAL_ERROR "Problem parsing version string, I can't parse it properly.")
( (call ) >> @SWIG_GEN_FILE_NAME@ ) 2>null && (
echo The file @SWIG_GEN_FILE_NAME@ was created. & goto :eof
) || (
- echo The file @SWIG_GEN_FILE_NAME@ is still being created !!! & timeout /t 1 > null & goto :check
+ echo The file @SWIG_GEN_FILE_NAME@ is still being created !!! & goto :check
)
:eof")
- LIST(LENGTH swig_generated_sources NB_GEN_FILES)
+ SET(W_LIST)
+ LIST(LENGTH swig_generated_sources NB_GEN_FILES)
+ IF(NOT ${NB_GEN_FILES})
+ LIST(LENGTH swig_generated_file_fullname NB_GEN_FILES)
+ SET(W_LIST ${swig_generated_file_fullname})
+ ELSE()
+ SET(W_LIST ${swig_generated_sources})
+ ENDIF()
IF(${NB_GEN_FILES})
- LIST(GET swig_generated_sources 0 SWIG_GEN_FILE_NAME)
+ LIST(GET W_LIST 0 SWIG_GEN_FILE_NAME)
STRING(CONFIGURE ${SCRIPT} SCRIPT)
GET_FILENAME_COMPONENT(SWIG_GEN_FILE_NAME_DIR ${SWIG_GEN_FILE_NAME} DIRECTORY)
GET_FILENAME_COMPONENT(SWIG_GEN_FILE_NAME_WE ${SWIG_GEN_FILE_NAME} NAME_WE)
ENDIF()
ENDMACRO(SWIG_CHECK_GENERATION)
+#########################################################################
+# SALOME_DO_VAR_SUBSTITUTION()
+#
+# USAGE: SALOME_DO_VAR_SUBSTITUTION(env variable value)
+#
+# ARGUMENTS:
+# env [out]: output script.
+# variable [in]: varable name
+# value [in]: variable value
+#
+# This macro concatenate variable value into script, like this:
+# on Linux:
+# export variable=value:${varuable}
+#
+# or on Windows:
+# SET variable=value;${varuable}
+#
+# Platform dependat variables PATH (Windows),
+# DYLD_LIBRARY_PATH (Apple), LD_LIBRARY_PATH (Linux), should be
+# passed in Linux naming style, i.e. LD_LIBRARY_PATH. Macro
+# converts this variable into platform scpecific variable.
+#
+MACRO(SALOME_DO_VAR_SUBSTITUTION env variable value)
+ SET(_item ${variable})
+ SET(_val ${value})
+ 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()
+ENDMACRO(SALOME_DO_VAR_SUBSTITUTION)