You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
11 KiB
259 lines
11 KiB
# ----------------------------------------------------------------------------
|
|
# VTK_GET_TCL_TK_VERSION
|
|
# Return the major/minor version of the Tcl/Tk library used by VTK.
|
|
#
|
|
# in: tcl_tk_major_version: name of the var the major version is written to
|
|
# tcl_tk_minor_version: name of the var the minor version is written to
|
|
#
|
|
# ex: VTK_GET_TCL_TK_VERSION ("TCL_TK_MAJOR_VERSION" "TCL_TK_MINOR_VERSION")
|
|
# SET (TCL_TK_VERSION "${TCL_TK_MAJOR_VERSION}.${TCL_TK_MINOR_VERSION}")
|
|
|
|
MACRO (VTK_GET_TCL_TK_VERSION tcl_tk_major_version tcl_tk_minor_version)
|
|
|
|
# Try to find the current Tcl/Tk version by matching TK_INTERNAL_PATH
|
|
# or TCL_LIBRARY against some version numbers
|
|
|
|
SET (${tcl_tk_major_version} "")
|
|
SET (${tcl_tk_minor_version} "")
|
|
IF (TK_INTERNAL_PATH)
|
|
SET (try_tk_internal_path ${TK_INTERNAL_PATH})
|
|
ELSE (TK_INTERNAL_PATH)
|
|
SET (try_tk_internal_path ${VTK_TK_INTERNAL_DIR})
|
|
ENDIF (TK_INTERNAL_PATH)
|
|
FOREACH (tcl_tk_minor_version_try "2" "3" "4")
|
|
IF ("${try_tk_internal_path}" MATCHES "tk8\\.?${tcl_tk_minor_version_try}")
|
|
SET (${tcl_tk_major_version} "8")
|
|
SET (${tcl_tk_minor_version} ${tcl_tk_minor_version_try})
|
|
ENDIF ("${try_tk_internal_path}" MATCHES "tk8\\.?${tcl_tk_minor_version_try}")
|
|
IF ("${TCL_LIBRARY}" MATCHES "tcl8\\.?${tcl_tk_minor_version_try}")
|
|
SET (${tcl_tk_major_version} "8")
|
|
SET (${tcl_tk_minor_version} ${tcl_tk_minor_version_try})
|
|
ENDIF ("${TCL_LIBRARY}" MATCHES "tcl8\\.?${tcl_tk_minor_version_try}")
|
|
IF ("${TCL_INCLUDE_PATH}" MATCHES "tcl8\\.?${tcl_tk_minor_version_try}")
|
|
SET (${tcl_tk_major_version} "8")
|
|
SET (${tcl_tk_minor_version} ${tcl_tk_minor_version_try})
|
|
ENDIF ("${TCL_INCLUDE_PATH}" MATCHES "tcl8\\.?${tcl_tk_minor_version_try}")
|
|
# Mac
|
|
IF ("${TCL_INCLUDE_PATH}" MATCHES "Tcl.*8\\.${tcl_tk_minor_version_try}")
|
|
SET (${tcl_tk_major_version} "8")
|
|
SET (${tcl_tk_minor_version} ${tcl_tk_minor_version_try})
|
|
ENDIF ("${TCL_INCLUDE_PATH}" MATCHES "Tcl.*8\\.${tcl_tk_minor_version_try}")
|
|
ENDFOREACH (tcl_tk_minor_version_try)
|
|
|
|
FOREACH(dir ${TCL_INCLUDE_PATH})
|
|
IF(EXISTS "${dir}/tcl.h")
|
|
FILE(READ "${TCL_INCLUDE_PATH}/tcl.h" tcl_include_file)
|
|
STRING(REGEX REPLACE
|
|
".*#define TCL_VERSION[ \t]*\"([0-9][0-9]*\\.[0-9][0-9]*)\".*" "\\1"
|
|
tcl_include_file "${tcl_include_file}")
|
|
IF(${tcl_include_file} MATCHES "^[0-9]*\\.[0-9]*$")
|
|
STRING(REGEX REPLACE "^([0-9]*)\\.([0-9]*)$" "\\1" "${tcl_tk_major_version}"
|
|
"${tcl_include_file}")
|
|
STRING(REGEX REPLACE "^([0-9]*)\\.([0-9]*)$" "\\2" "${tcl_tk_minor_version}"
|
|
"${tcl_include_file}")
|
|
ENDIF(${tcl_include_file} MATCHES "^[0-9]*\\.[0-9]*$")
|
|
ENDIF(EXISTS "${dir}/tcl.h")
|
|
ENDFOREACH(dir)
|
|
|
|
ENDMACRO (VTK_GET_TCL_TK_VERSION)
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# VTK_GET_TCL_SUPPORT_FILES, VTK_GET_TK_SUPPORT_FILES
|
|
# Get a list of Tcl/Tk support files for a given Tcl/Tk repository.
|
|
# Tcl/Tk support files are additional files that are mandatory for Tcl/Tk
|
|
# to work properly. Linking against Tcl/Tk shared/static library is just
|
|
# not enough, Tcl/Tk needs to access those files at run-time.
|
|
# A typical Tcl/Tk installation will store support files in sub-directories
|
|
# inside the Tcl/Tk lib directory, organized by version number.
|
|
# Example:
|
|
# c:/tcl/lib/tcl8.4
|
|
# c:/tcl/lib/tcl8.3
|
|
# c:/tcl/lib/tk8.4
|
|
# c:/tcl/lib/tk8.3
|
|
# A typical source repository is organized differently:
|
|
# c:/tcl8.4.5/library
|
|
# c:/tk8.4.5/library
|
|
# Given the path to the Tcl support lib dir, VTK_GET_TCL_SUPPORT_FILES will
|
|
# return the corresponding list of support files.
|
|
# Given the path to the Tk support lib dir, VTK_GET_TK_SUPPORT_FILES will
|
|
# return the corresponding list of support files.
|
|
#
|
|
# in: support_lib_dir: path to the Tcl (or Tk) support lib dir
|
|
# list: name of the var the list is written to
|
|
|
|
MACRO (VTK_GET_TCL_SUPPORT_FILES tcl_support_lib_dir list)
|
|
|
|
# Tcl support files (*.tcl + encoding + tclIndex, etc.)
|
|
|
|
FILE (GLOB TCL_SUPPORT_FILES_TCL "${tcl_support_lib_dir}/*.tcl")
|
|
FILE (GLOB TCL_SUPPORT_FILES_ENC "${tcl_support_lib_dir}/encoding/*.enc")
|
|
SET (${list}
|
|
"${tcl_support_lib_dir}/tclIndex"
|
|
${TCL_SUPPORT_FILES_TCL}
|
|
${TCL_SUPPORT_FILES_ENC})
|
|
|
|
ENDMACRO (VTK_GET_TCL_SUPPORT_FILES)
|
|
|
|
MACRO (VTK_GET_TK_SUPPORT_FILES tk_support_lib_dir list)
|
|
|
|
# Tk support files (*.tcl + tclIndex, etc.)
|
|
|
|
FILE (GLOB TK_SUPPORT_FILES_TCL "${tk_support_lib_dir}/*.tcl")
|
|
SET (${list}
|
|
"${tk_support_lib_dir}/tclIndex"
|
|
${TK_SUPPORT_FILES_TCL})
|
|
|
|
ENDMACRO (VTK_GET_TK_SUPPORT_FILES)
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# VTK_COPY_TCL_TK_SUPPORT_FILES
|
|
# Copy (or install) Tcl/Tk support files to a specific location.
|
|
# See VTK_GET_TCL_SUPPORT_FILES for more info about support files.
|
|
# Given the paths to the Tcl and Tk support lib dirs, this macro will
|
|
# copy (or install) the appropriate support files to destination dirs,
|
|
# recreating the subdirs.
|
|
# This macro takes an optional last parameter, if set to INSTALL the
|
|
# files will be scheduled for installation (using CMake's INSTALL_FILES)
|
|
# instead of copied.
|
|
#
|
|
# in: tcl_support_lib_dir: path to the Tcl support lib dir
|
|
# tcl_support_lib_dest: destination dir for the Tcl support lib files
|
|
# tk_support_lib_dir: path to the Tk support lib dir
|
|
# tk_support_lib_dest: destination dir for the Tk support lib files
|
|
# INSTALL: optional parameter (install files instead of copy)
|
|
#
|
|
# ex: VTK_COPY_TCL_TK_SUPPORT_FILES (
|
|
# "c:/tcl/lib/tcl8.4" "d:/vtk-bin/TclTk/lib/tcl8.4"
|
|
# "c:/tcl/lib/tk8.4" "d:/vtk-bin/TclTk/lib/tk8.4")
|
|
# this will copy support files from:
|
|
# c:/tcl/lib/tcl8.4
|
|
# c:/tcl/lib/tk8.4
|
|
# to:
|
|
# d:/vtk-bin/TclTk/lib/tcl8.4
|
|
# d:/vtk-bin/TclTk/lib/tk8.4
|
|
|
|
MACRO (VTK_COPY_TCL_TK_SUPPORT_FILES tcl_support_lib_dir tcl_support_lib_dest tk_support_lib_dir tk_support_lib_dest)
|
|
|
|
# Get the support files and copy them to dest dir
|
|
# Check if EXISTS to work around CONFIGURE_FILE bug (if file does not
|
|
# exist, it would create the subdirs anyway)
|
|
|
|
VTK_GET_TCL_SUPPORT_FILES(${tcl_support_lib_dir} "TCL_SUPPORT_FILES")
|
|
FOREACH (file ${TCL_SUPPORT_FILES})
|
|
IF (EXISTS ${file})
|
|
STRING (REGEX REPLACE "${tcl_support_lib_dir}/" "" filebase ${file})
|
|
IF ("${ARGV4}" STREQUAL "INSTALL")
|
|
GET_FILENAME_COMPONENT(dir ${filebase} PATH)
|
|
INSTALL_FILES ("${tcl_support_lib_dest}/${dir}" FILES ${file})
|
|
ELSE ("${ARGV4}" STREQUAL "INSTALL")
|
|
CONFIGURE_FILE (${file} "${tcl_support_lib_dest}/${filebase}" COPYONLY)
|
|
ENDIF ("${ARGV4}" STREQUAL "INSTALL")
|
|
ENDIF (EXISTS ${file})
|
|
ENDFOREACH (file)
|
|
|
|
VTK_GET_TK_SUPPORT_FILES(${tk_support_lib_dir} "TK_SUPPORT_FILES")
|
|
FOREACH (file ${TK_SUPPORT_FILES})
|
|
IF (EXISTS ${file})
|
|
STRING (REGEX REPLACE "${tk_support_lib_dir}/" "" filebase ${file})
|
|
IF ("${ARGV4}" STREQUAL "INSTALL")
|
|
GET_FILENAME_COMPONENT(dir ${filebase} PATH)
|
|
INSTALL_FILES ("${tk_support_lib_dest}/${dir}" FILES ${file})
|
|
ELSE ("${ARGV4}" STREQUAL "INSTALL")
|
|
CONFIGURE_FILE (${file} "${tk_support_lib_dest}/${filebase}" COPYONLY)
|
|
ENDIF ("${ARGV4}" STREQUAL "INSTALL")
|
|
ENDIF (EXISTS ${file})
|
|
ENDFOREACH (file)
|
|
|
|
ENDMACRO (VTK_COPY_TCL_TK_SUPPORT_FILES)
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# VTK_COPY_TCL_TK_SUPPORT_FILES_TO_DIR
|
|
# Front-end to VTK_COPY_TCL_TK_SUPPORT_FILES, this macro will
|
|
# copy (or install) the appropriate Tcl/Tk support files to a directory.
|
|
# The Tcl/Tk version is retrieved automatically and used to create
|
|
# the subdirectories (see example below)
|
|
# This macro takes an optional last parameter, if set to INSTALL the
|
|
# files will be scheduled for installation (using CMake's INSTALL_FILES)
|
|
# instead of copied.
|
|
#
|
|
# in: tcl_support_lib_dir: path to the Tcl support lib dir
|
|
# tk_support_lib_dir: path to the Tk support lib dir
|
|
# target_dir: target directory
|
|
# INSTALL: optional parameter (install files instead of copy)
|
|
#
|
|
# ex: VTK_COPY_TCL_TK_SUPPORT_FILES_TO_DIR (
|
|
# "c:/tcl/lib/tcl8.4" "c:/tcl/lib/tk8.4" "d:/vtk-bin/lib")
|
|
# if this project is configured to use TclTk 8.4, this will copy support
|
|
# files from:
|
|
# c:/tcl/lib/tcl8.4
|
|
# c:/tcl/lib/tk8.4
|
|
# to:
|
|
# d:/vtk-bin/lib/tcl8.4
|
|
# d:/vtk-bin/lib/tk8.4
|
|
|
|
MACRO (VTK_COPY_TCL_TK_SUPPORT_FILES_TO_DIR tcl_support_lib_dir tk_support_lib_dir target_dir)
|
|
VTK_GET_TCL_TK_VERSION ("TCL_TK_MAJOR_VERSION" "TCL_TK_MINOR_VERSION")
|
|
IF (TCL_TK_MAJOR_VERSION AND TCL_TK_MINOR_VERSION)
|
|
SET (TCL_TK_VERSION "${TCL_TK_MAJOR_VERSION}.${TCL_TK_MINOR_VERSION}")
|
|
VTK_COPY_TCL_TK_SUPPORT_FILES (
|
|
"${tcl_support_lib_dir}"
|
|
"${target_dir}/tcl${TCL_TK_VERSION}"
|
|
"${tk_support_lib_dir}"
|
|
"${target_dir}/tk${TCL_TK_VERSION}"
|
|
"${ARGV3}"
|
|
)
|
|
ENDIF (TCL_TK_MAJOR_VERSION AND TCL_TK_MINOR_VERSION)
|
|
|
|
ENDMACRO (VTK_COPY_TCL_TK_SUPPORT_FILES_TO_DIR)
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# VTK_COPY_TCL_TK_SUPPORT_FILES_TO_BUILD_DIR
|
|
# Front-end to VTK_COPY_TCL_TK_SUPPORT_FILES_TO_DIR, this macro will copy the
|
|
# appropriate Tcl/Tk support files to a project build directory.
|
|
# The support files will be copied simultaneously to all configuration
|
|
# sub-directories (Release, RelInfo, Debug, etc.) if needed.
|
|
# The Tcl/Tk version is retrieved automatically and used to create
|
|
# the subdirectories (see example below)
|
|
#
|
|
# in: tcl_support_lib_dir: path to the Tcl support lib dir
|
|
# tk_support_lib_dir: path to the Tk support lib dir
|
|
# build_dir: project build dir
|
|
# dir: relative subdir inside the build dir, into which the
|
|
# support files will be copied.
|
|
#
|
|
# ex: VTK_COPY_TCL_TK_SUPPORT_FILES_TO_BUILD_DIR (
|
|
# "c:/tcl/lib/tcl8.4" "c:/tcl/lib/tk8.4" "d:/vtk-bin" "TclTk/lib")
|
|
# if this project is configured to use TclTk 8.4, this will copy support
|
|
# files from:
|
|
# c:/tcl/lib/tcl8.4
|
|
# c:/tcl/lib/tk8.4
|
|
# to:
|
|
# d:/vtk-bin/TclTk/lib/tcl8.4
|
|
# d:/vtk-bin/TclTk/lib/tk8.4
|
|
# or (if configuration types are supported by the generator):
|
|
# d:/vtk-bin/Release/TclTk/lib/tcl8.4
|
|
# d:/vtk-bin/Release/TclTk/lib/tk8.4
|
|
# d:/vtk-bin/Debug/TclTk/lib/tcl8.4
|
|
# d:/vtk-bin/Debug/TclTk/lib/tk8.4
|
|
# etc.
|
|
|
|
MACRO (VTK_COPY_TCL_TK_SUPPORT_FILES_TO_BUILD_DIR tcl_support_lib_dir tk_support_lib_dir build_dir dir)
|
|
|
|
# For each configuration type (Debug, RelInfo, Release, etc.)
|
|
# Copy the TclTk support files to the corresponding sub-directory inside
|
|
# the build dir
|
|
|
|
IF (CMAKE_CONFIGURATION_TYPES)
|
|
SET (CONFIG_TYPES ${CMAKE_CONFIGURATION_TYPES})
|
|
ELSE (CMAKE_CONFIGURATION_TYPES)
|
|
SET (CONFIG_TYPES .)
|
|
ENDIF (CMAKE_CONFIGURATION_TYPES)
|
|
FOREACH (config ${CONFIG_TYPES})
|
|
VTK_COPY_TCL_TK_SUPPORT_FILES_TO_DIR (
|
|
"${tcl_support_lib_dir}"
|
|
"${tk_support_lib_dir}"
|
|
"${build_dir}/${config}/${dir}"
|
|
)
|
|
ENDFOREACH (config)
|
|
|
|
ENDMACRO (VTK_COPY_TCL_TK_SUPPORT_FILES_TO_BUILD_DIR)
|
|
|