mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-03 17:56:21 +03:00
CMake scripts are corrected to do perform search of libs and dlls of third-party libraries even for static builds of OCCT. Treatment of errors in this case is relaxed: not found DLLs are reported as warnings, and not found libs as warning for static build, and continuable error for shared build. Code of samples is corrected to allow building with OCCT linked statically. Implementation of main application class is corrected to ensure that initialization is done after all global objects are created. Note however that samples still fails to start for unclear reason (creation of MFC frame window fails).
298 lines
12 KiB
CMake
298 lines
12 KiB
CMake
# vtk
|
|
|
|
if (NOT DEFINED INSTALL_VTK)
|
|
set (INSTALL_VTK OFF CACHE BOOL "${INSTALL_VTK_DESCR}")
|
|
endif()
|
|
|
|
# vtk directory
|
|
if (NOT DEFINED 3RDPARTY_VTK_DIR)
|
|
set (3RDPARTY_VTK_DIR "" CACHE PATH "The directory containing VTK")
|
|
endif()
|
|
|
|
# include occt macros. compiler_bitness, os_wiht_bit, compiler
|
|
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
|
|
|
|
# specify VTK folder in connectin with 3RDPARTY_DIR
|
|
if (3RDPARTY_DIR AND EXISTS "${3RDPARTY_DIR}")
|
|
#CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_DIR 3RDPARTY_VTK_DIR PATH "The directory containing VTK")
|
|
|
|
if (NOT 3RDPARTY_VTK_DIR OR NOT EXISTS "${3RDPARTY_VTK_DIR}")
|
|
FIND_PRODUCT_DIR ("${3RDPARTY_DIR}" VTK VTK_DIR_NAME)
|
|
if (VTK_DIR_NAME)
|
|
set (3RDPARTY_VTK_DIR "${3RDPARTY_DIR}/${VTK_DIR_NAME}" CACHE PATH "The directory containing VTK" FORCE)
|
|
endif()
|
|
endif()
|
|
else()
|
|
#set (3RDPARTY_VTK_DIR "" CACHE PATH "The directory containing VTK" FORCE)
|
|
endif()
|
|
|
|
# vtk include directory
|
|
if (NOT DEFINED 3RDPARTY_VTK_INCLUDE_DIR)
|
|
set (3RDPARTY_VTK_INCLUDE_DIR "" CACHE PATH "The directory containing headers of VTK")
|
|
endif()
|
|
|
|
#if (BUILD_SHARED_LIBS)
|
|
# vtk library directory
|
|
if (NOT DEFINED 3RDPARTY_VTK_LIBRARY_DIR)
|
|
set (3RDPARTY_VTK_LIBRARY_DIR "" CACHE PATH "The directory containing VTK libraries")
|
|
endif()
|
|
|
|
# vtk dll directory
|
|
if (WIN32 AND NOT DEFINED 3RDPARTY_VTK_DLL_DIR)
|
|
set (3RDPARTY_VTK_DLL_DIR "" CACHE PATH "The directory containing VTK shared libraries")
|
|
endif()
|
|
#endif()
|
|
|
|
# check 3RDPARTY_VTK_ paths for consistency with specified 3RDPARTY_VTK_DIR
|
|
if (3RDPARTY_VTK_DIR AND EXISTS "${3RDPARTY_VTK_DIR}")
|
|
CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_VTK_DIR 3RDPARTY_VTK_INCLUDE_DIR PATH "The directory containing headers of VTK")
|
|
if (BUILD_SHARED_LIBS)
|
|
CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_VTK_DIR 3RDPARTY_VTK_LIBRARY_DIR PATH "The directory containing VTK libraries")
|
|
|
|
if (WIN32)
|
|
CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_VTK_DIR 3RDPARTY_VTK_DLL_DIR PATH "The directory containing VTK shared library")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if (3RDPARTY_VTK_DIR AND EXISTS "${3RDPARTY_VTK_DIR}")
|
|
set (CACHED_VTK_DIR $ENV{VTK_DIR})
|
|
set (ENV{VTK_DIR} "${3RDPARTY_VTK_DIR}")
|
|
endif()
|
|
|
|
find_package(VTK QUIET)
|
|
|
|
if (3RDPARTY_VTK_DIR AND EXISTS "${3RDPARTY_VTK_DIR}")
|
|
set (ENV{VTK_DIR} ${CACHED_VTK_DIR})
|
|
endif()
|
|
|
|
if (VTK_FOUND)
|
|
|
|
# add compiler flags, preprocessor definitions, include and link dirs
|
|
include (${VTK_USE_FILE})
|
|
|
|
if (VTK_LIBRARIES)
|
|
|
|
set (3RDPARTY_VTK_INCLUDE_DIRS)
|
|
|
|
# if (BUILD_SHARED_LIBS)
|
|
set (3RDPARTY_VTK_LIBRARY_DIRS)
|
|
set (3RDPARTY_VTK_DLL_DIRS)
|
|
# endif()
|
|
|
|
foreach (VTK_LIBRARY ${VTK_LIBRARIES})
|
|
string (REGEX MATCH "^vtk" IS_VTK_LIBRARY ${VTK_LIBRARY})
|
|
if (IS_VTK_LIBRARY AND TARGET ${VTK_LIBRARY})
|
|
# get paths from corresponding variables
|
|
if (${VTK_LIBRARY}_INCLUDE_DIRS AND EXISTS "${${VTK_LIBRARY}_INCLUDE_DIRS}")
|
|
list (APPEND 3RDPARTY_VTK_INCLUDE_DIRS "${${VTK_LIBRARY}_INCLUDE_DIRS}")
|
|
endif()
|
|
|
|
if (${VTK_LIBRARY}_LIBRARY_DIRS AND EXISTS "${${VTK_LIBRARY}_LIBRARY_DIRS}")
|
|
list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${${VTK_LIBRARY}_LIBRARY_DIRS}")
|
|
endif()
|
|
|
|
if (${VTK_LIBRARY}_RUNTIME_LIBRARY_DIRS AND EXISTS "${${VTK_LIBRARY}_RUNTIME_LIBRARY_DIRS}")
|
|
list (APPEND 3RDPARTY_VTK_DLL_DIRS "${${VTK_LIBRARY}_RUNTIME_LIBRARY_DIRS}")
|
|
if (NOT WIN32)
|
|
list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${${VTK_LIBRARY}_RUNTIME_LIBRARY_DIRS}")
|
|
endif()
|
|
endif()
|
|
|
|
# get paths from corresponding properties
|
|
get_target_property (TARGET_VTK_IMPORT_CONFS ${VTK_LIBRARY} IMPORTED_CONFIGURATIONS)
|
|
|
|
if (TARGET_VTK_IMPORT_CONFS)
|
|
list (GET TARGET_VTK_IMPORT_CONFS 0 CHOSEN_IMPORT_CONF)
|
|
|
|
# todo: choose configuration in connection with the build type
|
|
#if (CMAKE_BUILD_TYPE)
|
|
# foreach (IMPORT_CONF ${TARGET_VTK_IMPORT_CONFS})
|
|
# endforeach()
|
|
#endif()
|
|
|
|
# Work-around against link failure in case if VTK contains dependency
|
|
# on DirectX: its run-time is always present on Windows, but SDK can
|
|
# be absent on current workstation, while not actually needed for
|
|
# OCCT linking.
|
|
# VTK 6.1 for VC 10
|
|
get_target_property (TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES ${VTK_LIBRARY} IMPORTED_LINK_INTERFACE_LIBRARIES_${CHOSEN_IMPORT_CONF})
|
|
if(TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES)
|
|
string (REGEX MATCH "[^;]*d3d[0-9]+[.]lib" HARDCODED_D3D9_LIB "${TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES}")
|
|
if (HARDCODED_D3D9_LIB)
|
|
message (STATUS "Warning: ${HARDCODED_D3D9_LIB} has been removed from imported dependencies of ${VTK_LIBRARY}")
|
|
|
|
list (REMOVE_ITEM TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES ${HARDCODED_D3D9_LIB})
|
|
set_target_properties (${VTK_LIBRARY} PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES_${CHOSEN_IMPORT_CONF} "${TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES}")
|
|
endif()
|
|
endif()
|
|
# VTK 6.1 for VC 12, 14
|
|
get_target_property (TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES ${VTK_LIBRARY} INTERFACE_LINK_LIBRARIES)
|
|
if(TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES)
|
|
string (REGEX MATCH "[^;]*d3d[0-9]+[.]lib" HARDCODED_D3D9_LIB "${TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES}")
|
|
if (HARDCODED_D3D9_LIB)
|
|
message (STATUS "Warning: ${HARDCODED_D3D9_LIB} has been removed from imported dependencies of ${VTK_LIBRARY}")
|
|
|
|
list (REMOVE_ITEM TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES ${HARDCODED_D3D9_LIB})
|
|
set_target_properties (${VTK_LIBRARY} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET_PROPERTY_IMP_LINK_INTERFACE_LIBRARIES}")
|
|
endif()
|
|
endif()
|
|
|
|
get_target_property (TARGET_PROPERTY_IMP_PATH ${VTK_LIBRARY} IMPORTED_IMPLIB_${CHOSEN_IMPORT_CONF})
|
|
if(TARGET_PROPERTY_IMP_PATH AND EXISTS "${TARGET_PROPERTY_IMP_PATH}")
|
|
get_filename_component (TARGET_PROPERTY_IMP_DIR "${TARGET_PROPERTY_IMP_PATH}" PATH)
|
|
list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${TARGET_PROPERTY_IMP_DIR}")
|
|
endif()
|
|
|
|
get_target_property (TARGET_PROPERTY_LOCATION_PATH ${VTK_LIBRARY} IMPORTED_LOCATION_${CHOSEN_IMPORT_CONF})
|
|
if(TARGET_PROPERTY_LOCATION_PATH AND EXISTS "${TARGET_PROPERTY_LOCATION_PATH}")
|
|
get_filename_component (TARGET_PROPERTY_LOCATION_DIR "${TARGET_PROPERTY_LOCATION_PATH}" PATH)
|
|
|
|
if (WIN32)
|
|
list (APPEND 3RDPARTY_VTK_DLL_DIRS "${TARGET_PROPERTY_LOCATION_DIR}")
|
|
else()
|
|
list (APPEND 3RDPARTY_VTK_LIBRARY_DIRS "${TARGET_PROPERTY_LOCATION_DIR}")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
if (3RDPARTY_VTK_INCLUDE_DIRS)
|
|
list (REMOVE_DUPLICATES 3RDPARTY_VTK_INCLUDE_DIRS)
|
|
list (APPEND 3RDPARTY_INCLUDE_DIRS ${3RDPARTY_VTK_INCLUDE_DIRS})
|
|
|
|
list (GET 3RDPARTY_VTK_INCLUDE_DIRS 0 3RDPARTY_VTK_INCLUDE_DIR)
|
|
set (3RDPARTY_VTK_INCLUDE_DIR "${3RDPARTY_VTK_INCLUDE_DIR}" CACHE PATH "The directory containing headers of VTK" FORCE)
|
|
endif()
|
|
|
|
# if (BUILD_SHARED_LIBS)
|
|
if (3RDPARTY_VTK_LIBRARY_DIRS)
|
|
list (REMOVE_DUPLICATES 3RDPARTY_VTK_LIBRARY_DIRS)
|
|
list (APPEND 3RDPARTY_LIBRARY_DIRS ${3RDPARTY_VTK_LIBRARY_DIRS})
|
|
|
|
list (GET 3RDPARTY_VTK_LIBRARY_DIRS 0 3RDPARTY_VTK_LIBRARY_DIR)
|
|
set (3RDPARTY_VTK_LIBRARY_DIR "${3RDPARTY_VTK_LIBRARY_DIR}" CACHE PATH "The directory containing VTK libraries" FORCE)
|
|
endif()
|
|
|
|
if (WIN32)
|
|
if (3RDPARTY_VTK_DLL_DIRS)
|
|
list (REMOVE_DUPLICATES 3RDPARTY_VTK_DLL_DIRS)
|
|
list (APPEND 3RDPARTY_DLL_DIRS ${3RDPARTY_VTK_DLL_DIRS})
|
|
|
|
list (GET 3RDPARTY_VTK_DLL_DIRS 0 3RDPARTY_VTK_DLL_DIR)
|
|
set (3RDPARTY_VTK_DLL_DIR "${3RDPARTY_VTK_DLL_DIR}" CACHE PATH "The directory containing VTK shared libraries" FORCE)
|
|
endif()
|
|
endif()
|
|
# endif()
|
|
|
|
if (3RDPARTY_VTK_INCLUDE_DIR AND EXISTS "${3RDPARTY_VTK_INCLUDE_DIR}")
|
|
list (APPEND 3RDPARTY_INCLUDE_DIRS ${3RDPARTY_VTK_INCLUDE_DIR})
|
|
else()
|
|
list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_VTK_INCLUDE_DIR)
|
|
endif()
|
|
|
|
if (BUILD_SHARED_LIBS)
|
|
if (3RDPARTY_VTK_LIBRARY_DIR AND EXISTS "${3RDPARTY_VTK_LIBRARY_DIR}")
|
|
list (APPEND 3RDPARTY_LIBRARY_DIRS ${3RDPARTY_VTK_LIBRARY_DIR})
|
|
else()
|
|
list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_VTK_LIBRARY_DIR)
|
|
endif()
|
|
|
|
if (WIN32)
|
|
if (3RDPARTY_VTK_DLL_DIR OR EXISTS "${3RDPARTY_VTK_DLL_DIR}")
|
|
list (APPEND 3RDPARTY_DLL_DIRS ${3RDPARTY_VTK_DLL_DIR})
|
|
else()
|
|
list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_VTK_DLL_DIR)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Install vtk library using vtk targets
|
|
macro (OCCT_INSTALL_VTK VTK_LIBRARY_NAME)
|
|
# Check that input library name contains "vtk" prefix
|
|
string (REGEX MATCH "^vtk" IS_VTK_LIBRARY ${VTK_LIBRARY_NAME})
|
|
# Check that input library was not already installed
|
|
list (FIND OCCT_VTK_USED_TARGETS ${VTK_LIBRARY_NAME} VTK_LIBRARY_IS_USED)
|
|
if (BUILD_SHARED_LIBS AND INSTALL_VTK AND TARGET ${VTK_LIBRARY_NAME} AND VTK_LIBRARY_IS_USED EQUAL -1 AND IS_VTK_LIBRARY)
|
|
OCCT_MAKE_OS_WITH_BITNESS()
|
|
|
|
# Get configuration of vtk
|
|
get_target_property (TARGET_VTK_IMPORT_CONFS ${VTK_LIBRARY_NAME} IMPORTED_CONFIGURATIONS)
|
|
list (GET TARGET_VTK_IMPORT_CONFS 0 CHOSEN_IMPORT_CONF)
|
|
|
|
# Get dependencies for current input library
|
|
get_property(VTK_LIBRARY_PATH TARGET ${VTK_LIBRARY_NAME} PROPERTY LOCATION)
|
|
get_property(VTK_DEPEND TARGET ${VTK_LIBRARY_NAME} PROPERTY IMPORTED_LINK_DEPENDENT_LIBRARIES_${CHOSEN_IMPORT_CONF})
|
|
get_property(VTK_IMPORTED_INTERFACE TARGET ${VTK_LIBRARY_NAME} PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES_${CHOSEN_IMPORT_CONF})
|
|
get_property(VTK_INTERFACE TARGET ${VTK_LIBRARY_NAME} PROPERTY INTERFACE_LINK_LIBRARIES)
|
|
list (APPEND VTK_DEPEND ${VTK_INTERFACE} ${VTK_IMPORTED_INTERFACE})
|
|
|
|
# Install
|
|
if (WIN32)
|
|
if (SINGLE_GENERATOR)
|
|
install (FILES "${VTK_LIBRARY_PATH}" DESTINATION "${INSTALL_DIR_BIN}")
|
|
else()
|
|
install (FILES "${VTK_LIBRARY_PATH}"
|
|
CONFIGURATIONS Release
|
|
DESTINATION "${INSTALL_DIR_BIN}")
|
|
install (FILES "${VTK_LIBRARY_PATH}"
|
|
CONFIGURATIONS RelWithDebInfo
|
|
DESTINATION "${INSTALL_DIR_BIN}i")
|
|
install (FILES "${VTK_LIBRARY_PATH}"
|
|
CONFIGURATIONS Debug
|
|
DESTINATION "${INSTALL_DIR_BIN}d")
|
|
endif()
|
|
else()
|
|
get_filename_component(3RDPARTY_VTK_LIBRARY_ABS ${VTK_LIBRARY_PATH} REALPATH)
|
|
|
|
if (SINGLE_GENERATOR)
|
|
install (FILES "${3RDPARTY_VTK_LIBRARY_ABS}"
|
|
DESTINATION "${INSTALL_DIR_LIB}")
|
|
else()
|
|
install (FILES "${3RDPARTY_VTK_LIBRARY_ABS}"
|
|
CONFIGURATIONS Release
|
|
DESTINATION "${INSTALL_DIR_LIB}")
|
|
install (FILES "${3RDPARTY_VTK_LIBRARY_ABS}"
|
|
CONFIGURATIONS RelWithDebInfo
|
|
DESTINATION "${INSTALL_DIR_LIB}i")
|
|
install (FILES "${3RDPARTY_VTK_LIBRARY_ABS}"
|
|
CONFIGURATIONS Debug
|
|
DESTINATION "${INSTALL_DIR_LIB}d")
|
|
endif()
|
|
endif()
|
|
|
|
set (USED_3RDPARTY_VTK_DIR "")
|
|
|
|
# Mark current library as already installed
|
|
list (APPEND OCCT_VTK_USED_TARGETS ${VTK_LIBRARY_NAME})
|
|
set (OCCT_VTK_USED_TARGETS "${OCCT_VTK_USED_TARGETS}" CACHE INTERNAL "" FORCE)
|
|
|
|
# Recursively install all depended libraries
|
|
foreach(VTK_TARGET ${VTK_DEPEND})
|
|
OCCT_INSTALL_VTK(${VTK_TARGET})
|
|
endforeach()
|
|
endif()
|
|
endmacro()
|
|
|
|
if (NOT BUILD_SHARED_LIBS)
|
|
OCCT_CHECK_AND_UNSET(3RDPARTY_VTK_DLL_DIR)
|
|
OCCT_CHECK_AND_UNSET(3RDPARTY_VTK_LIBRARY_DIR)
|
|
OCCT_CHECK_AND_UNSET(INSTALL_VTK)
|
|
endif()
|
|
|
|
# the library directory for using by the executable
|
|
if (NOT INSTALL_VTK)
|
|
if (WIN32)
|
|
set (USED_3RDPARTY_VTK_DIR ${3RDPARTY_VTK_DLL_DIR})
|
|
else()
|
|
set (USED_3RDPARTY_VTK_DIR ${3RDPARTY_VTK_LIBRARY_DIR})
|
|
endif()
|
|
endif()
|
|
|
|
OCCT_CHECK_AND_UNSET (VTK_INCLUDE_DIRS)
|
|
OCCT_CHECK_AND_UNSET (VTK_LIBRARY_DIRS)
|
|
OCCT_CHECK_AND_UNSET (VTK_DIR)
|