diff --git a/CMakeLists.txt b/CMakeLists.txt index 022ede79..669bd876 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -508,9 +508,7 @@ add_custom_command(OUTPUT ${STA_TCL_INIT} # ################################################################ -find_package(TCL) -message(STATUS "TCL lib: ${TCL_LIB}") -message(STATUS "TCL header: ${TCL_HEADER}") +include(FindTcl) # Zlib include(FindZLIB) diff --git a/cmake/FindTcl.cmake b/cmake/FindTcl.cmake new file mode 100644 index 00000000..16920160 --- /dev/null +++ b/cmake/FindTcl.cmake @@ -0,0 +1,76 @@ +# OpenSTA, Static Timing Analyzer +# Copyright (c) 2019, Parallax Software, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +################################################################ +# +# Locate TCL library. +# +# Note that the cmake findTcl module is hopeless for OSX +# because there doesn't appear to be a way to override +# searching OSX system directories before unix directories. + +set(TCL_POSSIBLE_NAMES tcl87 tcl8.7 + tcl86 tcl8.6 + tcl85 tcl8.5 + tcl84 tcl8.4 + tcl83 tcl8.3 + tcl82 tcl8.2 + ) + +# tcl lib path guesses. +if (NOT TCL_LIB_PATHS) + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(TCL_LIB_PATHS /usr/local/lib) + set(TCL_NO_DEFAULT_PATH TRUE) + endif() +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(TCL_LIB_PATHS /usr/lib + /usr/local/lib + ) + set(TCL_NO_DEFAULT_PATH FALSE) +endif() + +if (NOT TCL_LIB) + # bagbiter cmake doesn't have a way to pass NO_DEFAULT_PATH as a parameter. + if (TCL_NO_DEFAULT_PATH) + find_library(TCL_LIB + NAMES tcl ${TCL_POSSIBLE_NAMES} + PATHS ${TCL_LIB_PATHS} + NO_DEFAULT_PATH + ) + else() + find_library(TCL_LIB + NAMES tcl ${TCL_POSSIBLE_NAMES} + PATHS ${TCL_LIB_PATHS} + ) + endif() +endif() +message(STATUS "TCL lib: ${TCL_LIB}") + +get_filename_component(TCL_LIB_DIR "${TCL_LIB}" PATH) +get_filename_component(TCL_LIB_PARENT1 "${TCL_LIB_DIR}" PATH) +get_filename_component(TCL_LIB_PARENT2 "${TCL_LIB_PARENT1}" PATH) + +# Locate tcl.h +if (NOT TCL_HEADER) + find_file(TCL_HEADER tcl.h + PATHS ${TCL_LIB_PARENT1} ${TCL_LIB_PARENT2} + PATH_SUFFIXES include include/tcl + NO_DEFAULT_PATH + ) +endif() +message(STATUS "TCL header: ${TCL_HEADER}") +get_filename_component(TCL_HEADER_DIR "${TCL_HEADER}" PATH)