mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-03 17:56:21 +03:00
Linking against 3rd-party libs when configuring a static OCCT build is eliminated. math library is not linked if build is static also: an info message is expanded by several words describing using of only header files of 3rdparties Removed unnecessary for static build CMake gui variables
294 lines
11 KiB
CMake
294 lines
11 KiB
CMake
# tcl
|
|
|
|
if (NOT DEFINED INSTALL_TCL AND BUILD_SHARED_LIBS)
|
|
set (INSTALL_TCL OFF CACHE BOOL "${INSTALL_TCL_DESCR}")
|
|
endif()
|
|
|
|
# tcl directory
|
|
if (NOT DEFINED 3RDPARTY_TCL_DIR)
|
|
set (3RDPARTY_TCL_DIR "" CACHE PATH "The directory containing tcl")
|
|
endif()
|
|
|
|
# tcl include directory
|
|
if (NOT DEFINED 3RDPARTY_TCL_INCLUDE_DIR)
|
|
set (3RDPARTY_TCL_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of tcl")
|
|
endif()
|
|
|
|
if (BUILD_SHARED_LIBS)
|
|
# tcl library file (with absolute path)
|
|
if (NOT DEFINED 3RDPARTY_TCL_LIBRARY OR NOT 3RDPARTY_TCL_LIBRARY_DIR)
|
|
set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "tcl library" FORCE)
|
|
endif()
|
|
|
|
# tcl library directory
|
|
if (NOT DEFINED 3RDPARTY_TCL_LIBRARY_DIR)
|
|
set (3RDPARTY_TCL_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tcl library")
|
|
endif()
|
|
|
|
# tcl shared library (with absolute path)
|
|
if (WIN32)
|
|
if (NOT DEFINED 3RDPARTY_TCL_DLL OR NOT 3RDPARTY_TCL_DLL_DIR)
|
|
set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "tcl shared library" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
# tcl shared library directory
|
|
if (WIN32 AND NOT DEFINED 3RDPARTY_TCL_DLL_DIR)
|
|
set (3RDPARTY_TCL_DLL_DIR "" CACHE FILEPATH "The directory containing tcl shared library")
|
|
endif()
|
|
endif()
|
|
|
|
# search for tcl in user defined directory
|
|
if (NOT 3RDPARTY_TCL_DIR AND 3RDPARTY_DIR)
|
|
FIND_PRODUCT_DIR("${3RDPARTY_DIR}" tcl TCL_DIR_NAME)
|
|
if (TCL_DIR_NAME)
|
|
set (3RDPARTY_TCL_DIR "${3RDPARTY_DIR}/${TCL_DIR_NAME}" CACHE PATH "The directory containing tcl" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
# define paths for default engine
|
|
if (3RDPARTY_TCL_DIR AND EXISTS "${3RDPARTY_TCL_DIR}")
|
|
set (TCL_INCLUDE_PATH "${3RDPARTY_TCL_DIR}/include")
|
|
endif()
|
|
|
|
# check tcl include dir, library dir and shared library dir
|
|
COMPLIANCE_PRODUCT_CONSISTENCY(TCL)
|
|
|
|
# use default (CMake) TCL search
|
|
find_package(TCL)
|
|
|
|
# tcl include dir
|
|
if (NOT 3RDPARTY_TCL_INCLUDE_DIR)
|
|
if (TCL_INCLUDE_PATH AND EXISTS "${TCL_INCLUDE_PATH}")
|
|
set (3RDPARTY_TCL_INCLUDE_DIR "${TCL_INCLUDE_PATH}" CACHE FILEPATH "The directory containing headers of TCL" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if (BUILD_SHARED_LIBS)
|
|
# tcl dir and library
|
|
if (NOT 3RDPARTY_TCL_LIBRARY)
|
|
if (TCL_LIBRARY AND EXISTS "${TCL_LIBRARY}")
|
|
set (3RDPARTY_TCL_LIBRARY "${TCL_LIBRARY}" CACHE FILEPATH "TCL library" FORCE)
|
|
|
|
if (NOT 3RDPARTY_TCL_LIBRARY_DIR)
|
|
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
|
|
set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
|
|
if (WIN32)
|
|
if (NOT 3RDPARTY_TCL_DLL)
|
|
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll)
|
|
|
|
set (DLL_FOLDER_FOR_SEARCH "")
|
|
if (3RDPARTY_TCL_DLL_DIR)
|
|
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
|
|
elseif (3RDPARTY_TCL_DIR)
|
|
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
|
|
elseif (3RDPARTY_TCL_LIBRARY_DIR)
|
|
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
|
|
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
|
|
endif()
|
|
|
|
set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
|
|
find_library (3RDPARTY_TCL_DLL NAMES tcl86 tcl85
|
|
PATHS "${DLL_FOLDER_FOR_SEARCH}"
|
|
NO_DEFAULT_PATH)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
COMPLIANCE_PRODUCT_CONSISTENCY(TCL)
|
|
|
|
if (BUILD_SHARED_LIBS)
|
|
# tcl dir and library
|
|
if (NOT 3RDPARTY_TCL_LIBRARY)
|
|
set (3RDPARTY_TCL_LIBRARY "3RDPARTY_TCL_LIBRARY-NOTFOUND" CACHE FILEPATH "TCL library" FORCE)
|
|
find_library (3RDPARTY_TCL_LIBRARY NAMES tcl8.6 tcl86 tcl8.5 tcl85
|
|
PATHS "${3RDPARTY_TCL_LIBRARY_DIR}"
|
|
NO_DEFAULT_PATH)
|
|
|
|
# search in another place if previous search doesn't find anything
|
|
find_library (3RDPARTY_TCL_LIBRARY NAMES tcl8.6 tcl86 tcl8.5 tcl85
|
|
PATHS "${3RDPARTY_TCL_DIR}/lib"
|
|
NO_DEFAULT_PATH)
|
|
|
|
|
|
if (NOT 3RDPARTY_TCL_LIBRARY OR NOT EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
|
set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "TCL library" FORCE)
|
|
endif()
|
|
|
|
if (NOT 3RDPARTY_TCL_LIBRARY_DIR AND 3RDPARTY_TCL_LIBRARY)
|
|
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
|
|
set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
set (3RDPARTY_TCL_LIBRARY_VERSION "")
|
|
if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
|
get_filename_component (TCL_LIBRARY_NAME "${3RDPARTY_TCL_LIBRARY}" NAME)
|
|
string(REGEX REPLACE "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY_NAME}")
|
|
|
|
if (NOT "${TCL_LIBRARY_VERSION}" STREQUAL "${TCL_LIBRARY_NAME}")
|
|
set (3RDPARTY_TCL_LIBRARY_VERSION "${TCL_LIBRARY_VERSION}")
|
|
else() # if the version isn't found - seek other library with 8.6 or 8.5 version in the same dir
|
|
message (STATUS "Info: TCL version isn't found")
|
|
endif()
|
|
endif()
|
|
|
|
set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "")
|
|
if (3RDPARTY_TCL_LIBRARY_VERSION)
|
|
string (REGEX REPLACE "^.*([0-9])[^0-9]*[0-9].*$" "\\1" 3RDPARTY_TCL_MAJOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
|
|
string (REGEX REPLACE "^.*[0-9][^0-9]*([0-9]).*$" "\\1" 3RDPARTY_TCL_MINOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
|
|
set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "${3RDPARTY_TCL_MAJOR_VERSION}.${3RDPARTY_TCL_MINOR_VERSION}")
|
|
endif()
|
|
|
|
if (WIN32)
|
|
if (NOT 3RDPARTY_TCL_DLL)
|
|
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll)
|
|
|
|
set (DLL_FOLDER_FOR_SEARCH "")
|
|
if (3RDPARTY_TCL_DLL_DIR)
|
|
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
|
|
elseif (3RDPARTY_TCL_DIR)
|
|
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
|
|
else()
|
|
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
|
|
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
|
|
endif()
|
|
|
|
set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
|
|
find_library (3RDPARTY_TCL_DLL NAMES tcl${3RDPARTY_TCL_LIBRARY_VERSION}
|
|
PATHS "${DLL_FOLDER_FOR_SEARCH}"
|
|
NO_DEFAULT_PATH)
|
|
|
|
if (NOT 3RDPARTY_TCL_DLL OR NOT EXISTS "${3RDPARTY_TCL_DLL}")
|
|
set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "TCL shared library" FORCE)
|
|
endif()
|
|
endif()
|
|
if (NOT 3RDPARTY_TCL_DLL_DIR AND 3RDPARTY_TCL_DLL)
|
|
get_filename_component (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL}" PATH)
|
|
set (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL_DIR}" CACHE FILEPATH "The directory containing TCL shared library" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
# include found paths to common variables
|
|
if (3RDPARTY_TCL_INCLUDE_DIR AND EXISTS "${3RDPARTY_TCL_INCLUDE_DIR}")
|
|
list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TCL_INCLUDE_DIR}")
|
|
else()
|
|
list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_INCLUDE_DIR)
|
|
endif()
|
|
|
|
if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
|
list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_TCL_LIBRARY_DIR}")
|
|
else()
|
|
list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_LIBRARY_DIR})
|
|
endif()
|
|
|
|
if (WIN32)
|
|
if (3RDPARTY_TCL_DLL OR EXISTS "${3RDPARTY_TCL_DLL}")
|
|
list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_TCL_DLL_DIR}")
|
|
else()
|
|
list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_DLL_DIR)
|
|
endif()
|
|
endif()
|
|
|
|
# install tcl
|
|
if (INSTALL_TCL)
|
|
# include occt macros. compiler_bitness, os_wiht_bit, compiler
|
|
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
|
|
|
|
OCCT_MAKE_OS_WITH_BITNESS()
|
|
OCCT_MAKE_COMPILER_SHORT_NAME()
|
|
|
|
if (WIN32)
|
|
# tcl 8.6 requires zlib. install all dlls from tcl bin folder that may contain zlib also
|
|
|
|
# collect and install all dlls from tcl dll dirs
|
|
file (GLOB TCL_DLLS "${3RDPARTY_TCL_DLL_DIR}/*.dll")
|
|
|
|
if (SINGLE_GENERATOR)
|
|
install (FILES ${TCL_DLLS} DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}")
|
|
else()
|
|
install (FILES ${TCL_DLLS}
|
|
CONFIGURATIONS Release
|
|
DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}")
|
|
install (FILES ${TCL_DLLS}
|
|
CONFIGURATIONS RelWithDebInfo
|
|
DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}i")
|
|
install (FILES ${TCL_DLLS}
|
|
CONFIGURATIONS Debug
|
|
DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_BIN}d")
|
|
endif()
|
|
else()
|
|
get_filename_component(3RDPARTY_TCL_LIBRARY_REALPATH ${3RDPARTY_TCL_LIBRARY} REALPATH)
|
|
|
|
if (SINGLE_GENERATOR)
|
|
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH} DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}")
|
|
else()
|
|
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
|
CONFIGURATIONS Release
|
|
DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}")
|
|
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
|
CONFIGURATIONS RelWithDebInfo
|
|
DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}i")
|
|
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
|
CONFIGURATIONS Debug
|
|
DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}d")
|
|
endif()
|
|
endif()
|
|
|
|
if (TCL_TCLSH_VERSION)
|
|
# tcl is required to install in lib folder (without)
|
|
install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl8" DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}")
|
|
install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_LIB}")
|
|
else()
|
|
message (STATUS "\nWarning: tclX.X subdir won't be copyied during the installation process.")
|
|
message (STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
|
|
endif()
|
|
|
|
set (USED_3RDPARTY_TCL_DIR "")
|
|
else()
|
|
# the library directory for using by the executable
|
|
if (WIN32)
|
|
set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_DLL_DIR})
|
|
else()
|
|
set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_LIBRARY_DIR})
|
|
endif()
|
|
endif()
|
|
|
|
mark_as_advanced (3RDPARTY_TCL_LIBRARY 3RDPARTY_TCL_DLL)
|
|
endif()
|
|
|
|
if (TK_FOUND AND 3RDPARTY_TCL_DIR)
|
|
|
|
get_filename_component (TK_WISH_ABSOLUTE "${TK_WISH}" ABSOLUTE)
|
|
get_filename_component (3RDPARTY_TCL_DIR_ABSOLUTE "${3RDPARTY_TCL_DIR}" ABSOLUTE)
|
|
|
|
string (FIND "${TK_WISH_ABSOLUTE}" "${3RDPARTY_TCL_DIR_ABSOLUTE}" THE_SAME_FOLDER)
|
|
|
|
if (${THE_SAME_FOLDER} EQUAL 0)
|
|
set (3RDPARTY_TCLTK_DIR "${3RDPARTY_TCL_DIR}")
|
|
message (STATUS "Info: TK is used from TCL folder: ${3RDPARTY_TCLTK_DIR}")
|
|
endif()
|
|
endif()
|
|
|
|
# unset all redundant variables
|
|
#TCL
|
|
OCCT_CHECK_AND_UNSET (TCL_LIBRARY)
|
|
OCCT_CHECK_AND_UNSET (TCL_INCLUDE_PATH)
|
|
OCCT_CHECK_AND_UNSET (TCL_TCLSH)
|
|
#TK
|
|
OCCT_CHECK_AND_UNSET (TK_LIBRARY)
|
|
OCCT_CHECK_AND_UNSET (TK_INCLUDE_PATH)
|
|
OCCT_CHECK_AND_UNSET (TK_WISH)
|
|
|
|
if (NOT BUILD_SHARED_LIBS)
|
|
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_LIBRARY)
|
|
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_LIBRARY_DIR)
|
|
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_DLL)
|
|
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_DLL_DIR)
|
|
OCCT_CHECK_AND_UNSET (INSTALL_TCL)
|
|
endif() |