]> OCCT Git - occt.git/commitdiff
[Employ find_package] CR33117_2a
authorddzama <ddzama@opencascade.com>
Wed, 28 Sep 2022 10:44:00 +0000 (13:44 +0300)
committerddzama <ddzama@opencascade.com>
Wed, 28 Sep 2022 15:00:49 +0000 (18:00 +0300)
adm/cmake/tbb.cmake

index 56c691c7e67c55c8e9e3ec9997fd858573b5a016..1b4975e93b006af9c8dd8d28df57e8c38c24d4cc 100644 (file)
 # tbb
 
-if ((NOT DEFINED 3RDPARTY_DIR) AND WIN32)
-  message (FATAL_ERROR "3RDPARTY_DIR is not defined.")
-endif()
-
-if (WIN32 AND ((NOT EXISTS "${3RDPARTY_DIR}") OR ("${3RDPARTY_DIR}" STREQUAL "")))
-  message (FATAL_ERROR "Directory ${3RDPARTY_DIR} is not set.")
+if (MSVC AND BUILD_SHARED_LIBS)
+  add_definitions (-D__TBB_NO_IMPLICIT_LINKAGE)
+  add_definitions (-D__TBBMALLOC_NO_IMPLICIT_LINKAGE)
 endif()
 
 if (NOT DEFINED INSTALL_TBB AND BUILD_SHARED_LIBS)
   set (INSTALL_TBB OFF CACHE BOOL "${INSTALL_TBB_DESCR}")
 endif()
 
-# tbb directory
+# Initialize tbb directory.
 if (NOT DEFINED 3RDPARTY_TBB_DIR)
   set (3RDPARTY_TBB_DIR "" CACHE PATH "The directory containing tbb")
 endif()
 
-if (MSVC AND BUILD_SHARED_LIBS)
-  add_definitions (-D__TBB_NO_IMPLICIT_LINKAGE)
-  add_definitions (-D__TBBMALLOC_NO_IMPLICIT_LINKAGE)
-endif()
-
-# include occt macros. compiler_bitness, os_wiht_bit, compiler
-OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
+if (WIN32)
+  if (NOT DEFINED 3RDPARTY_DIR)
+    message (FATAL_ERROR "3RDPARTY_DIR is not defined.")
+  endif()
+  if ("${3RDPARTY_DIR}" STREQUAL "")
+    message (FATAL_ERROR "3RDPARTY_DIR is empty string.")
+  endif()
+  if (NOT EXISTS "${3RDPARTY_DIR}")
+    message (FATAL_ERROR "3RDPARTY_DIR is not exist.")
+  endif()
 
-# specify TBB folder in connectin with 3RDPARTY_DIR
-if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
-  #CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_DIR 3RDPARTY_TBB_DIR PATH "The directory containing tbb")
+  # Below, we have correct 3RDPARTY_DIR.
 
-  if (NOT 3RDPARTY_TBB_DIR OR NOT EXISTS "${3RDPARTY_TBB_DIR}")
+  # Initialize TBB folder in connectin with 3RDPARTY_DIR.
+  if (("${3RDPARTY_TBB_DIR}" STREQUAL "") OR (NOT EXISTS "${3RDPARTY_TBB_DIR}"))
     FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" TBB TBB_DIR_NAME)
     if (TBB_DIR_NAME)
       set (3RDPARTY_TBB_DIR "${3RDPARTY_DIR}/${TBB_DIR_NAME}" CACHE PATH "The directory containing tbb" FORCE)
     endif()
   endif()
-else()
-  #set (3RDPARTY_TBB_DIR "" CACHE PATH "The directory containing TBB" FORCE)
-endif()
-
-if (NOT DEFINED 3RDPARTY_TBB_INCLUDE_DIR)
-  set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "The directory containing headers of the TBB")
-endif()
-
-if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
-    # check 3RDPARTY_TBB_INCLUDE_DIR for consictency with specified 3RDPARTY_TBB_DIR
-    CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_TBB_INCLUDE_DIR PATH "The directory containing headers of the TBB")
-endif()
-
-# tbb.h
-if (NOT 3RDPARTY_TBB_INCLUDE_DIR OR NOT EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
-
-  set (HEADER_NAMES tbb.h tbb/tbb.h)
-
-  # set 3RDPARTY_TBB_INCLUDE_DIR as notfound, otherwise find_library can't assign a new value to 3RDPARTY_TBB_INCLUDE_DIR
-  set (3RDPARTY_TBB_INCLUDE_DIR "3RDPARTY_TBB_INCLUDE_DIR-NOTFOUND" CACHE PATH "the path to tbb.h" FORCE)
-
-  if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
-    find_path (3RDPARTY_TBB_INCLUDE_DIR NAMES ${HEADER_NAMES}
-                                              PATHS ${3RDPARTY_TBB_DIR}
-                                              PATH_SUFFIXES include
-                                              CMAKE_FIND_ROOT_PATH_BOTH
-                                              NO_DEFAULT_PATH)
-  else()
-    find_path (3RDPARTY_TBB_INCLUDE_DIR NAMES ${HEADER_NAMES}
-                                              PATH_SUFFIXES include
-                                              CMAKE_FIND_ROOT_PATH_BOTH)
-  endif()
-endif()
-
-if (3RDPARTY_TBB_INCLUDE_DIR AND EXISTS "${3RDPARTY_TBB_INCLUDE_DIR}")
-  list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TBB_INCLUDE_DIR}")
-else()
-  list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TBB_INCLUDE_DIR)
-
-  set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "the path to tbb.h" FORCE)
-endif()
-
-# On Windows throw execution if 3RDPARTY_TBB_DIR is equal to void string.
-if (("${3RDPARTY_TBB_DIR}" STREQUAL "") AND WIN32)
-  message (FATAL_ERROR "Directory with one TBB have not found.")
-endif()
-
-set (TBB_DIR_FOUND OFF)
-if ((NOT "${3RDPARTY_TBB_DIR}" STREQUAL "") AND (EXISTS "${3RDPARTY_TBB_DIR}"))
-  set (TBB_DIR_FOUND ON)
-endif()
-
-if (TBB_DIR_FOUND)
-  # Searching TBBConfig.cmake and TBBTargets-release.cmake in 3RDPARTY_TBB_DIR
-  # TBBConfig.cmake - is required, TBBTargets-release.cmake is optional.
-  file (GLOB_RECURSE TBB_CONFIG_CMAKE_FILE "${3RDPARTY_TBB_DIR}/*TBBConfig.cmake")
-  if (NOT EXISTS "${TBB_CONFIG_CMAKE_FILE}")
-    message (FATAL_ERROR "TBBConfig.cmake has not been found.")
-  endif()
-  include ("${TBB_CONFIG_CMAKE_FILE}")
-
-  file (GLOB_RECURSE TBB_TARGET_CMAKE_FILE "${3RDPARTY_TBB_DIR}/*TBBTargets-release.cmake")
-  if (EXISTS "${TBB_TARGET_CMAKE_FILE}")
-    include ("${TBB_TARGET_CMAKE_FILE}")
-  endif()
-endif()
 
-# We do not know, full path to file is pointed, or local.
-# So, we should check it and output FULL PATH to FILE.
-macro (TBB_FILE_NAME_TO_FILEPATH FL_NAME FL_PATH)
-  if (EXISTS "${FL_NAME}")
-    # FL_NAME is full path.
-    set (${FL_PATH} "${FL_NAME}")
-  else()
-    # Here we deal with local path, so assign to var full path to file.
-    # Acquire full path.
-    set (${FL_PATH} "${3RDPARTY_TBB_DIR}${FL_NAME}")
-    if (NOT EXISTS "${${FL_PATH}}")
-      message (FATAL_ERROR "TBB: needed file not found (${FL_PATH}).")
+  # Here we have full path name to installation directory of TBB.
+  # Employ it.
+  if (EXISTS "${3RDPARTY_TBB_DIR}")
+    find_package (
+      TBB 2021.5
+      PATHS "${3RDPARTY_TBB_DIR}" NO_DEFAULT_PATH
+      REQUIRED
+      CONFIG)
+
+    # Achive include directory
+    get_target_property (TBB_INCLUDE_DIR TBB::tbb INTERFACE_INCLUDE_DIRECTORIES)
+    if (NOT DEFINED 3RDPARTY_TBB_INCLUDE_DIR)
+      set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "The directory containing headers of the TBB")
     endif()
-  endif()
-endmacro()
-
-# TARGET_NAME - is target name from oneTBB cmake file
-# it is either "TBB::tbb", or "TBB::tbbmalloc"
-# LIB_NAME_UC - is library id (TBB or TBBMALLOC)
-# PROPERTY_TO_SET - LIBRARY or DLL
-macro (WIN_TBB_PARSE TARGET_NAME LIB_NAME PROPERTY_TO_SET)
-  set (FILE_NAME "")
-  set (FILE_PATH "")
-  set (FILE_DIR "")
-
-  if ("${PROPERTY_TO_SET}" STREQUAL "LIBRARY")
-    get_target_property (FILE_NAME "${TARGET_NAME}" IMPORTED_IMPLIB_RELEASE)
-  else()
-    get_target_property (FILE_NAME "${TARGET_NAME}" IMPORTED_LOCATION_RELEASE)
-  endif()
-
-  # acquire full path
-  TBB_FILE_NAME_TO_FILEPATH("${FILE_NAME}" FILE_PATH)
-
-  get_filename_component (FILE_NAME "${FILE_PATH}" NAME)
-  get_filename_component (FILE_DIR "${FILE_PATH}" DIRECTORY)
-
-  if (NOT EXISTS "${FILE_DIR}/${FILE_NAME}")
-    set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET} "" CACHE FILEPATH "${LIB_NAME} library" FORCE)
-    set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR "" CACHE PATH "The directory containing ${LIB_NAME} shared library" FORCE)
-
-    if ("${PROPERTY_TO_SET}" STREQUAL "LIBRARY")
-      list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR)
+    if (EXISTS "${TBB_INCLUDE_DIR}")
+      set (3RDPARTY_TBB_INCLUDE_DIR "${TBB_INCLUDE_DIR}" CACHE PATH "The directory containing headers of the TBB" FORCE)
+      list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TBB_INCLUDE_DIR}")
     else()
-      list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR)
+      list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TBB_INCLUDE_DIR)
     endif()
-  else()
-    set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET} "${FILE_DIR}/${FILE_NAME}" CACHE FILEPATH "${LIB_NAME} library" FORCE)
-    set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR "${FILE_DIR}" CACHE PATH "The directory containing ${LIB_NAME} shared library" FORCE)
 
-    if ("${PROPERTY_TO_SET}" STREQUAL "LIBRARY")
-      list (APPEND 3RDPARTY_LIBRARY_DIRS "${FILE_DIR}")
+    separate_arguments (CSF_TBB)
+    foreach (LIB IN LISTS CSF_TBB)
+      string(TOLOWER "${LIB}" LIB_LOWER)
+      string(TOUPPER "${LIB}" LIB_UPPER)
+
+      # Achive *.lib files and directory containing it.
+      get_target_property (TBB_LIB_FILE "TBB::${LIB_LOWER}" IMPORTED_IMPLIB_RELEASE)
+      # Reserve cache variable for *.lib.
+      if (NOT DEFINED 3RDPARTY_${LIB_UPPER}_LIBRARY)
+        set (3RDPARTY_${LIB_UPPER}_LIBRARY "" CACHE FILEPATH "${LIB_UPPER} library (*.lib)")
+      endif()
+      # Reserve cache variable for directory containing *.lib file.
+      if (NOT DEFINED 3RDPARTY_${LIB_UPPER}_LIBRARY_DIR)
+        set (3RDPARTY_${LIB_UPPER}_LIBRARY_DIR "" CACHE PATH "The directory containing ${LIB_UPPER} library (*.lib)")
+      endif()
+      if (EXISTS "${TBB_LIB_FILE}")
+        set (3RDPARTY_${LIB_UPPER}_LIBRARY
+             "${TBB_LIB_FILE}"
+             CACHE FILEPATH
+             "${LIB_UPPER} library (*.lib)"
+             FORCE)
+        get_filename_component (TBB_LIB_FILE_DIRECTORY "${TBB_LIB_FILE}" DIRECTORY)
+        set (3RDPARTY_${LIB_UPPER}_LIBRARY_DIR
+             "${TBB_LIB_FILE_DIRECTORY}"
+             CACHE PATH
+             "The directory containing ${LIB_UPPER} library (*.lib)"
+             FORCE)
+        list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${LIB_UPPER}_LIBRARY_DIR}")
+      else()
+        list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${LIB_UPPER}_LIBRARY_DIR)
+      endif()
+
+      # Achive *.dll files and directory containing it.
+      get_target_property (TBB_DLL_FILE "TBB::${LIB_LOWER}" IMPORTED_LOCATION_RELEASE)
+      # Reserve cache variable for *.dll.
+      if (NOT DEFINED 3RDPARTY_${LIB_UPPER}_DLL)
+        set (3RDPARTY_${LIB_UPPER}_DLL "" CACHE FILEPATH "${LIB_UPPER} library (*.dll)")
+      endif()
+      # Reserve cache variable for directory containing *.dll file.
+      if (NOT DEFINED 3RDPARTY_${LIB_UPPER}_DLL_DIR)
+        set (3RDPARTY_${LIB_UPPER}_DLL_DIR "" CACHE PATH "The directory containing ${LIB_UPPER} library (*.dll)")
+      endif()
+      if (EXISTS "${TBB_DLL_FILE}")
+        set (3RDPARTY_${LIB_UPPER}_DLL
+             "${TBB_DLL_FILE}"
+             CACHE FILEPATH
+             "${LIB_UPPER} library (*.dll)"
+             FORCE)
+        get_filename_component (TBB_DLL_FILE_DIRECTORY "${TBB_DLL_FILE}" DIRECTORY)
+        set (3RDPARTY_${LIB_UPPER}_DLL_DIR
+             "${TBB_DLL_FILE_DIRECTORY}"
+             CACHE PATH
+             "The directory containing ${LIB_UPPER} library (*.dll)"
+             FORCE)
+        list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_${LIB_UPPER}_DLL_DIR}")
+      else()
+        list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_${LIB_UPPER}_DLL_DIR)
+      endif()
+
+      # install *.dll (tbb & tbbmalloc)
+      if (INSTALL_TBB)
+        OCCT_MAKE_OS_WITH_BITNESS()
+        OCCT_MAKE_COMPILER_SHORT_NAME()
+
+        if (WIN32)
+          if (SINGLE_GENERATOR)
+            install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} DESTINATION "${INSTALL_DIR_BIN}")
+          else()
+            install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS Release DESTINATION "${INSTALL_DIR_BIN}")
+            install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS RelWithDebInfo DESTINATION "${INSTALL_DIR_BIN}i")
+            install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS Debug DESTINATION "${INSTALL_DIR_BIN}d")
+          endif()
+        else()
+          if (SINGLE_GENERATOR)
+            install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} DESTINATION "${INSTALL_DIR_LIB}")
+          else()
+            install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS Release DESTINATION "${INSTALL_DIR_LIB}")
+            install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS RelWithDebInfo DESTINATION "${INSTALL_DIR_LIB}i")
+            install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS Debug DESTINATION "${INSTALL_DIR_LIB}d")
+          endif()
+        endif()
+      endif()
+      mark_as_advanced (3RDPARTY_${LIB_UPPER}_LIBRARY 3RDPARTY_${LIB_UPPER}_DLL)
+    endforeach()
+    if (INSTALL_TBB)
+      set (USED_3RDPARTY_TBB_DIR "")
     else()
-      list (APPEND 3RDPARTY_DLL_DIRS "${FILE_DIR}")
+      # the *.dll/*.so* directory for using by the executable
+      if (WIN32)
+        set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_DLL_DIR})
+      else()
+        set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_LIBRARY_DIR})
+      endif()
     endif()
-  endif()
-endmacro()
-
-# TARGET_NAME - is target name from oneTBB cmake file
-# it is either "TBB::tbb", or "TBB::tbbmalloc"
-# LIB_NAME - is library id (TBB or TBBMALLOC)
-macro (LIN_TBB_PARSE TARGET_NAME LIB_NAME)
-  set (FILE_NAME "")
-  set (FILE_PATH "")
-  set (FILE_DIR "")
-
-  get_target_property (FILE_NAME "${TARGET_NAME}" IMPORTED_LOCATION_RELEASE)
-
-  # acquire full path
-  TBB_FILE_NAME_TO_FILEPATH("${FILE_NAME}" FILE_PATH)
-
-  get_filename_component (FILE_NAME "${FILE_PATH}" NAME)
-  get_filename_component (FILE_DIR "${FILE_PATH}" DIRECTORY)
-
-  if (NOT EXISTS "${FILE_DIR}/${FILE_NAME}")
-    set (3RDPARTY_${LIB_NAME}_LIBRARY "" CACHE FILEPATH "${LIB_NAME} library" FORCE)
-    set (3RDPARTY_${LIB_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${LIB_NAME} shared library" FORCE)
-
-    list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${LIB_NAME}_LIBRARY_DIR)
   else()
-    set (3RDPARTY_${LIB_NAME}_LIBRARY "${FILE_DIR}/${FILE_NAME}" CACHE FILEPATH "${LIB_NAME} library" FORCE)
-    set (3RDPARTY_${LIB_NAME}_LIBRARY_DIR "${FILE_DIR}" CACHE PATH "The directory containing ${LIB_NAME} shared library" FORCE)
-
-    list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${LIB_NAME}_LIBRARY_DIR}")
+    message (FATAL_ERROR "Installation directory with TBB is not exist.")
   endif()
-endmacro()
-
-# LIB_NAME - is library id (TBB or TBBMALLOC)
-# This script executes, when installation directory
-# has not found, but TBB has been installed as libtbb-dev package
-macro (LIN_TBB_DEV_PACKAGE_PARSE LIB_NAME)
-  string(TOLOWER "${LIB_NAME}" LIB_LOWER)
-  string(TOUPPER "${LIB_NAME}" LIB_UPPER)
-  # Taking into account Unix/Apple (MacOS);
-  # tbb, tbbmalloc different specification suffixes: 12.5 and 2.5 correspondingly
-  set (SPECIFICATION_SUFFIX "")
-  set (SPECIFICATION_PREFIX "")
-  set (SHARED_LIB_EXTENSION "")
-  if (APPLE)
-    set (SHARED_LIB_EXTENSION "dylib")
-
-    if (LIB_LOWER STREQUAL "tbb")
-      set (SPECIFICATION_PREFIX ".12.5")
-    else()
-      set (SPECIFICATION_PREFIX ".2.5")
+else ()
+  # NOT WIN32 branch
+  if ((DEFINED 3RDPARTY_DIR) AND (NOT "${3RDPARTY_DIR}" STREQUAL "") AND (EXISTS "${3RDPARTY_DIR}"))
+    # Here, we have correct 3RDPARTY_DIR.
+    # Trying to specify TBB folder in connection with 3RDPARTY_DIR
+    if (("${3RDPARTY_TBB_DIR}" STREQUAL "") OR (NOT EXISTS "${3RDPARTY_TBB_DIR}"))
+      FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" TBB TBB_DIR_NAME)
+      if (TBB_DIR_NAME)
+        set (3RDPARTY_TBB_DIR "${3RDPARTY_DIR}/${TBB_DIR_NAME}" CACHE PATH "The directory containing tbb" FORCE)
+      endif()
     endif()
-  else()
-    set (SHARED_LIB_EXTENSION "so")
-
-    if (LIB_LOWER STREQUAL "tbb")
-      set (SPECIFICATION_SUFFIX ".12.5")
+    if ((NOT "${3RDPARTY_TBB_DIR}" STREQUAL "") AND (EXISTS "${3RDPARTY_TBB_DIR}"))
+      # Find TBB 2021.5 in existing directory.
+      find_package (
+      TBB 2021.5
+      PATHS "${3RDPARTY_TBB_DIR}" NO_DEFAULT_PATH
+      REQUIRED
+      CONFIG)
     else()
-      set (SPECIFICATION_SUFFIX ".2.5")
+      # Find TBB 2021.5 in system directory.
+      find_package (
+      TBB 2021.5
+      REQUIRED
+      CONFIG)
     endif()
+  else()
+    # Find TBB 2021.5 in system directory.
+    find_package (
+    TBB 2021.5
+    REQUIRED
+    CONFIG)
   endif()
-  set (LIB_FILE_NAME "lib${LIB_LOWER}${SPECIFICATION_PREFIX}.${SHARED_LIB_EXTENSION}${SPECIFICATION_SUFFIX}")
-  # (!) The THE_LIB_FULL_FILE_NAMES should not be set before to run finding procedure.
-  find_library (THE_LIB_FULL_FILE_NAMES NAMES "${LIB_FILE_NAME}")
-  # Get only first founded file.
-  list (GET THE_LIB_FULL_FILE_NAMES 0 THE_LIB_FULL_FILE_NAME_BEGIN)
-
-  set (FILE_NAME "")
-  set (FILE_PATH "")
-  set (FILE_DIR "")
-
-  get_filename_component (FILE_NAME "${THE_LIB_FULL_FILE_NAME_BEGIN}" NAME)
-  get_filename_component (FILE_DIR "${THE_LIB_FULL_FILE_NAME_BEGIN}" DIRECTORY)
-
-  if (NOT EXISTS "${FILE_DIR}/${FILE_NAME}")
-    set (3RDPARTY_${LIB_UPPER}_LIBRARY "" CACHE FILEPATH "${LIB_UPPER} library" FORCE)
-    set (3RDPARTY_${LIB_UPPER}_LIBRARY_DIR "" CACHE PATH "The directory containing ${LIB_UPPER} shared library" FORCE)
+  # TBB has been configured (in other case FATAL_ERROR occures).
 
-    list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${LIB_UPPER}_LIBRARY_DIR)
+  # Achive include directory.
+  get_target_property (TBB_INCLUDE_DIR TBB::tbb INTERFACE_INCLUDE_DIRECTORIES)
+  if (NOT DEFINED 3RDPARTY_TBB_INCLUDE_DIR)
+    set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "The directory containing headers of the TBB")
+  endif()
+  if (EXISTS "${TBB_INCLUDE_DIR}")
+    set (3RDPARTY_TBB_INCLUDE_DIR "${TBB_INCLUDE_DIR}" CACHE PATH "The directory containing headers of the TBB" FORCE)
+    list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TBB_INCLUDE_DIR}")
   else()
-    set (3RDPARTY_${LIB_UPPER}_LIBRARY "${FILE_DIR}/${FILE_NAME}" CACHE FILEPATH "${LIB_UPPER} library" FORCE)
-    set (3RDPARTY_${LIB_UPPER}_LIBRARY_DIR "${FILE_DIR}" CACHE PATH "The directory containing ${LIB_UPPER} shared library" FORCE)
-
-    list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${LIB_UPPER}_LIBRARY_DIR}")
+    list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TBB_INCLUDE_DIR)
   endif()
-endmacro()
-
-if (WIN32)
-  # Here we should set:
-  #  - 3RDPARTY_*_LIBRARY
-  #  - 3RDPARTY_*_LIBRARY_DIR
-  #  - 3RDPARTY_*_DLL
-  #  - 3RDPARTY_*_DLL_DIR
-  # where * - is TBB or TBBMALLOC
 
   separate_arguments (CSF_TBB)
   foreach (LIB IN LISTS CSF_TBB)
     string(TOLOWER "${LIB}" LIB_LOWER)
     string(TOUPPER "${LIB}" LIB_UPPER)
-    WIN_TBB_PARSE("TBB::${LIB_LOWER}" "${LIB_UPPER}" "LIBRARY")
-    WIN_TBB_PARSE("TBB::${LIB_LOWER}" "${LIB_UPPER}" "DLL")
-  endforeach()
-else()
-  # Here we should set:
-  #  - 3RDPARTY_*_LIBRARY
-  #  - 3RDPARTY_*_LIBRARY_DIR
 
-  separate_arguments (CSF_TBB)
-  foreach (LIB IN LISTS CSF_TBB)
-    string(TOLOWER "${LIB}" LIB_LOWER)
-    string(TOUPPER "${LIB}" LIB_UPPER)
-    if (TBB_DIR_FOUND)
-      LIN_TBB_PARSE("TBB::${LIB_LOWER}" "${LIB_UPPER}")
+    # Achive *.so files and directory containing it.
+    get_target_property (TBB_SO_FILE "TBB::${LIB_LOWER}" IMPORTED_LOCATION_RELEASE)
+    # Reserve cache variable for *.so.
+    if (NOT DEFINED 3RDPARTY_${LIB_UPPER}_LIBRARY)
+      set (3RDPARTY_${LIB_UPPER}_LIBRARY "" CACHE FILEPATH "${LIB_UPPER} library (*.so)")
+    endif()
+    # Reserve cache variable for directory containing *.so file.
+    if (NOT DEFINED 3RDPARTY_${LIB_UPPER}_LIBRARY_DIR)
+      set (3RDPARTY_${LIB_UPPER}_LIBRARY_DIR "" CACHE PATH "The directory containing ${LIB_UPPER} library (*.so)")
+    endif()
+    if (EXISTS "${TBB_SO_FILE}")
+      set (3RDPARTY_${LIB_UPPER}_LIBRARY
+           "${TBB_SO_FILE}"
+           CACHE FILEPATH
+           "${LIB_UPPER} library (*.so)"
+           FORCE)
+      get_filename_component (TBB_SO_FILE_DIRECTORY "${TBB_SO_FILE}" DIRECTORY)
+      set (3RDPARTY_${LIB_UPPER}_LIBRARY_DIR
+           "${TBB_SO_FILE_DIRECTORY}"
+           CACHE PATH
+           "The directory containing ${LIB_UPPER} library (*.so)"
+           FORCE)
+      list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${LIB_NAME}_LIBRARY_DIR}")
     else()
-      LIN_TBB_DEV_PACKAGE_PARSE("${LIB_UPPER}")
+      list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${LIB_UPPER}_LIBRARY_DIR)
     endif()
-  endforeach()
-endif()
 
-# install tbb/tbbmalloc
-if (INSTALL_TBB)
-  OCCT_MAKE_OS_WITH_BITNESS()
-  OCCT_MAKE_COMPILER_SHORT_NAME()
+    # install *.so* (tbb & tbbmalloc)
+    if (INSTALL_TBB)
+      OCCT_MAKE_OS_WITH_BITNESS()
+      OCCT_MAKE_COMPILER_SHORT_NAME()
 
-  if (WIN32)
-    if (SINGLE_GENERATOR)
-      foreach (LIB IN LISTS CSF_TBB)
-        string(TOUPPER "${LIB}" LIB_UPPER)
-        install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} DESTINATION "${INSTALL_DIR_BIN}")
-      endforeach()
-    else()
-      foreach (LIB IN LISTS CSF_TBB)
-        string(TOUPPER "${LIB}" LIB_UPPER)
-        install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS Release DESTINATION "${INSTALL_DIR_BIN}")
-        install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS RelWithDebInfo DESTINATION "${INSTALL_DIR_BIN}i")
-        install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS Debug DESTINATION "${INSTALL_DIR_BIN}d")
-      endforeach()
-    endif()
-  else()
-    if (SINGLE_GENERATOR)
-      foreach (LIB IN LISTS CSF_TBB)
-        string(TOUPPER "${LIB}" LIB_UPPER)
+      if (SINGLE_GENERATOR)
         install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} DESTINATION "${INSTALL_DIR_LIB}")
-      endforeach()
-    else()
-      foreach (LIB IN LISTS CSF_TBB)
-        string(TOUPPER "${LIB}" LIB_UPPER)
+      else()
         install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS Release DESTINATION "${INSTALL_DIR_LIB}")
         install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS RelWithDebInfo DESTINATION "${INSTALL_DIR_LIB}i")
         install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS Debug DESTINATION "${INSTALL_DIR_LIB}d")
-      endforeach()
+      endif()
     endif()
-  endif()
-endif()
-foreach (LIB IN LISTS CSF_TBB)
-  string(TOUPPER "${LIB}" LIB_UPPER)
-  mark_as_advanced (3RDPARTY_${LIB_UPPER}_LIBRARY 3RDPARTY_${LIB_UPPER}_DLL)
-endforeach()
-
-if (INSTALL_TBB)
-  set (USED_3RDPARTY_TBB_DIR "")
-else()
-  # the library directory for using by the executable
-  if (WIN32)
-    set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_DLL_DIR})
+  endforeach()
+  if (INSTALL_TBB)
+    set (USED_3RDPARTY_TBB_DIR "")
   else()
+    # the *.so* directory for using by the executable
     set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_LIBRARY_DIR})
   endif()
 endif()