blob: 974caa99f226268e3b0a3b5ee9029be096152614 [file] [edit]
set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH OFF)
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH OFF)
set(CMAKE_FIND_FRAMEWORK NEVER)
function(check_layout name)
cmake_parse_arguments(PARSE_ARGV 1 arg ""
"ARCH;TCL_LIBRARY;TK_LIBRARY;INCLUDE_PATH"
"PREFIXES;SUFFIXES;FILES;PREFIX_PATH;SYSTEM_PREFIX_PATH")
set(prefix "${CMAKE_CURRENT_BINARY_DIR}/${name}")
file(REMOVE_RECURSE "${prefix}")
foreach(f IN LISTS arg_FILES)
get_filename_component(dir "${prefix}/${f}" DIRECTORY)
file(MAKE_DIRECTORY "${dir}")
file(WRITE "${prefix}/${f}" "")
endforeach()
set(CMAKE_FIND_LIBRARY_PREFIXES "${arg_PREFIXES}")
set(CMAKE_FIND_LIBRARY_SUFFIXES "${arg_SUFFIXES}")
set(CMAKE_LIBRARY_ARCHITECTURE "${arg_ARCH}")
if(arg_PREFIX_PATH OR arg_SYSTEM_PREFIX_PATH)
# The layout stands in for the whole filesystem, root-level /lib included
set(CMAKE_FIND_ROOT_PATH "${prefix}")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_PREFIX_PATH "${arg_PREFIX_PATH}")
set(CMAKE_SYSTEM_PREFIX_PATH "${arg_SYSTEM_PREFIX_PATH}")
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH ON)
else()
set(CMAKE_PREFIX_PATH "${prefix}")
endif()
# Empty skips the host tclsh/wish search, and FindTclsh running tclsh
set(TCL_TCLSH "")
set(TK_WISH "")
find_package(TCL QUIET)
set(TCL_INCLUDE_PATH_expect "${arg_INCLUDE_PATH}")
set(TK_INCLUDE_PATH_expect "${arg_INCLUDE_PATH}")
set(TCL_LIBRARY_expect "${arg_TCL_LIBRARY}")
set(TK_LIBRARY_expect "${arg_TK_LIBRARY}")
foreach(var IN ITEMS TCL_LIBRARY TK_LIBRARY TCL_INCLUDE_PATH TK_INCLUDE_PATH)
if(NOT "${${var}}" STREQUAL "${prefix}/${${var}_expect}")
message(SEND_ERROR "${name}: ${var} is\n ${${var}}\n"
"but expected\n ${prefix}/${${var}_expect}")
endif()
unset(${var} CACHE)
endforeach()
endfunction()
check_layout(Tk9-nmake
PREFIXES "" SUFFIXES .lib
FILES include/tcl.h include/tk.h lib/tcl90.lib lib/tcl9tk90.lib
TCL_LIBRARY lib/tcl90.lib TK_LIBRARY lib/tcl9tk90.lib INCLUDE_PATH include
)
check_layout(Tk9-mingw
PREFIXES lib "" SUFFIXES .dll.a .a .lib
FILES include/tcl.h include/tk.h lib/libtcl90.dll.a lib/libtcl9tk90.dll.a
TCL_LIBRARY lib/libtcl90.dll.a TK_LIBRARY lib/libtcl9tk90.dll.a
INCLUDE_PATH include
)
check_layout(Tk9-unix
PREFIXES lib SUFFIXES .so
FILES include/tcl.h include/tk.h lib/libtcl9.0.so lib/libtcl9tk9.0.so
TCL_LIBRARY lib/libtcl9.0.so TK_LIBRARY lib/libtcl9tk9.0.so
INCLUDE_PATH include
)
check_layout(Tk9-homebrew
PREFIXES lib SUFFIXES .dylib
FILES include/tcl-tk/tcl.h include/tcl-tk/tk.h
lib/libtcl9.0.dylib lib/libtcl9tk9.0.dylib
TCL_LIBRARY lib/libtcl9.0.dylib TK_LIBRARY lib/libtcl9tk9.0.dylib
INCLUDE_PATH include/tcl-tk
)
check_layout(Tk86-Tk9-nmake
PREFIXES "" SUFFIXES .lib
FILES include/tcl.h include/tk.h lib/tcl86t.lib lib/tk86t.lib
lib/tcl90.lib lib/tcl9tk90.lib
TCL_LIBRARY lib/tcl90.lib TK_LIBRARY lib/tcl9tk90.lib INCLUDE_PATH include
)
check_layout(Tk86-Tk9-unix
PREFIXES lib SUFFIXES .so
FILES include/tcl8.6/tcl.h include/tcl8.6/tk.h
include/tcl9.0/tcl.h include/tcl9.0/tk.h
lib/libtcl8.6.so lib/libtk8.6.so lib/libtcl9.0.so lib/libtcl9tk9.0.so
TCL_LIBRARY lib/libtcl9.0.so TK_LIBRARY lib/libtcl9tk9.0.so
INCLUDE_PATH include/tcl9.0
)
check_layout(Tk86-nmake
PREFIXES "" SUFFIXES .lib
FILES include/tcl.h include/tk.h lib/tcl86t.lib lib/tk86t.lib
TCL_LIBRARY lib/tcl86t.lib TK_LIBRARY lib/tk86t.lib INCLUDE_PATH include
)
check_layout(Tk86-debian
ARCH x86_64-linux-gnu PREFIXES lib SUFFIXES .so
FILES include/tcl8.6/tcl.h include/tcl8.6/tk.h
lib/x86_64-linux-gnu/libtcl8.6.so lib/x86_64-linux-gnu/libtk8.6.so
TCL_LIBRARY lib/x86_64-linux-gnu/libtcl8.6.so
TK_LIBRARY lib/x86_64-linux-gnu/libtk8.6.so
INCLUDE_PATH include/tcl8.6
)
# Distro default links (libtcl.so, libtk.so, include/tcl) still win.
check_layout(Tk86-Tk9-debian
ARCH x86_64-linux-gnu PREFIXES lib SUFFIXES .so
FILES include/tcl/tcl.h include/tcl/tk.h
include/tcl8.6/tcl.h include/tcl8.6/tk.h
include/tcl9.0/tcl.h include/tcl9.0/tk.h
lib/x86_64-linux-gnu/libtcl.so lib/x86_64-linux-gnu/libtk.so
lib/x86_64-linux-gnu/libtcl8.6.so lib/x86_64-linux-gnu/libtk8.6.so
lib/x86_64-linux-gnu/libtcl9.0.so lib/x86_64-linux-gnu/libtcl9tk9.0.so
TCL_LIBRARY lib/x86_64-linux-gnu/libtcl.so
TK_LIBRARY lib/x86_64-linux-gnu/libtk.so
INCLUDE_PATH include/tcl
)
# Plain names in /lib and /include, which nothing found points to, lose.
check_layout(Tk9-stray-root
PREFIXES lib SUFFIXES .so SYSTEM_PREFIX_PATH /usr
FILES include/tcl.h include/tk.h lib/libtcl.so lib/libtk.so
usr/include/tcl.h usr/include/tk.h
usr/lib/libtcl9.0.so usr/lib/libtcl9tk9.0.so
TCL_LIBRARY usr/lib/libtcl9.0.so TK_LIBRARY usr/lib/libtcl9tk9.0.so
INCLUDE_PATH usr/include
)
# Libraries follow prefix order, like headers, not the newest name.
check_layout(Tk86-Tk9-prefix-order
PREFIXES "" SUFFIXES .lib PREFIX_PATH /opt/tcl86 /opt/tcl90
FILES opt/tcl86/include/tcl.h opt/tcl86/include/tk.h
opt/tcl86/lib/tcl86t.lib opt/tcl86/lib/tk86t.lib
opt/tcl90/include/tcl.h opt/tcl90/include/tk.h
opt/tcl90/lib/tcl90.lib opt/tcl90/lib/tcl9tk90.lib
TCL_LIBRARY opt/tcl86/lib/tcl86t.lib TK_LIBRARY opt/tcl86/lib/tk86t.lib
INCLUDE_PATH opt/tcl86/include
)