X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=cmake%2FSalomeMacros.cmake;h=e67a6d9122105a62b25968984d980f06d503af9e;hb=3795aa29ab1e428e7060c39bc41daa4f796470ae;hp=2581731420f9d8092bfd2715bda386be8949f0ea;hpb=4d4768fa99c7de2678db292459f4376afe2604fe;p=tools%2Fconfiguration.git diff --git a/cmake/SalomeMacros.cmake b/cmake/SalomeMacros.cmake index 2581731..e67a6d9 100644 --- a/cmake/SalomeMacros.cmake +++ b/cmake/SalomeMacros.cmake @@ -1,4 +1,4 @@ -# 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 @@ -19,6 +19,18 @@ # 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 @@ -93,7 +105,7 @@ ENDMACRO(PARSE_ARGUMENTS) #---------------------------------------------------------------------------- # 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. @@ -101,26 +113,30 @@ ENDMACRO(PARSE_ARGUMENTS) # # 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) @@ -130,28 +146,22 @@ MACRO(SALOME_INSTALL_SCRIPTS file_list path) # 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) @@ -168,7 +178,14 @@ MACRO(SALOME_INSTALL_SCRIPTS file_list path) 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) @@ -176,12 +193,13 @@ 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}) @@ -196,9 +214,13 @@ MACRO(SALOME_CONFIGURE_FILE IN_FILE OUT_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) @@ -311,11 +333,11 @@ MACRO(SALOME_PACKAGE_REPORT_AND_CHECK) 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") @@ -335,9 +357,9 @@ MACRO(SALOME_PACKAGE_REPORT_AND_CHECK) 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) @@ -438,7 +460,7 @@ ENDMACRO() #################################################################### -# 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) @@ -563,12 +585,12 @@ MACRO(SALOME_FIND_PACKAGE_AND_DETECT_CONFLICTS pkg referenceVariable upCount) # 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() @@ -737,8 +759,11 @@ MACRO(SALOME_ACCUMULATE_ENVIRONMENT envvar) 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}) @@ -783,13 +808,39 @@ ENDMACRO(SALOME_ACCUMULATE_ENVIRONMENT) # Macro generates environement script using previously created variables # _${PROJECT_NAME}_EXTRA_ENV_, where is name of variable and # _${PROJECT_NAME}_EXTRA_ENV (see marco SALOME_ACCUMULATE_ENVIRONMENT); -# and puts generated command in proper environment into argument. -# +# and puts generated command in proper environment into argument. To ignore +# _${PROJECT_NAME}_EXTRA_ENV_ 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