From ae356560a0715fca2f78e1df47723357f3c0c739 Mon Sep 17 00:00:00 2001
From: Sebastien Barre <sebastien.barre@kitware.com>
Date: Wed, 23 Jan 2008 14:07:09 -0500
Subject: ENH: keep cleaning up Tcl/Tk modules

---
 Modules/FindTCL.cmake     | 142 ++++++++++------------------------------------
 Modules/FindTclStub.cmake |  89 +++++++++++++++++++++++++++++
 2 files changed, 119 insertions(+), 112 deletions(-)
 create mode 100644 Modules/FindTclStub.cmake

diff --git a/Modules/FindTCL.cmake b/Modules/FindTCL.cmake
index cf11789..583ebed 100644
--- a/Modules/FindTCL.cmake
+++ b/Modules/FindTCL.cmake
@@ -1,23 +1,35 @@
 # - Find Tcl includes and libraries.
-# This module finds if TCL is installed and determines where the
+# This module finds if Tcl is installed and determines where the
 # include files and libraries are. It also determines what the name of
 # the library is. This code sets the following variables:
-#  TCL_FOUND          = Tcl was found
-#  TK_FOUND           = Tk was found
-#  TCLTK_FOUND        = Tcl and Tk were found
-#  TCL_LIBRARY        = path to Tcl library (tcl tcl80)
-#  TCL_LIBRARY_DEBUG  = path to Tcl library (debug)
-#  TCL_STUB_LIBRARY   = path to Tcl stub library
-#  TCL_STUB_LIBRARY_DEBUG = path to debug stub library
-#  TCL_INCLUDE_PATH   = path to where tcl.h can be found
-#  TCL_TCLSH          = path to tclsh binary (tcl tcl80)
-#  TK_LIBRARY         = path to Tk library (tk tk80 etc)
-#  TK_LIBRARY_DEBUG   = path to Tk library (debug)
-#  TK_STUB_LIBRARY    = path to Tk stub library
-#  TK_STUB_LIBRARY_DEBUG = path to debug Tk stub library
-#  TK_INCLUDE_PATH    = path to where tk.h can be found
-#  TK_INTERNAL_PATH   = path to where tkWinInt.h is found
-#  TK_WISH            = full path to the wish executable
+#  TCL_FOUND              = Tcl was found
+#  TK_FOUND               = Tk was found
+#  TCLTK_FOUND            = Tcl and Tk were found
+#  TCL_LIBRARY            = path to Tcl library (tcl tcl80)
+#  TCL_INCLUDE_PATH       = path to where tcl.h can be found
+#  TCL_TCLSH              = path to tclsh binary (tcl tcl80)
+#  TK_LIBRARY             = path to Tk library (tk tk80 etc)
+#  TK_INCLUDE_PATH        = path to where tk.h can be found
+#  TK_WISH                = full path to the wish executable
+#
+# In an effort to remove some clutter and clear up some issues for people
+# who are not necessarily Tcl/Tk gurus/developpers, some variables were
+# moved or removed. Changes compared to CMake 2.4 are:
+# - The stub libraries are now found in FindTclStub.cmake
+#   => they were only useful for people writing Tcl/Tk extensions.
+# - TCL_LIBRARY_DEBUG and TK_LIBRARY_DEBUG were removed.
+#   => these libs are not packaged by default with Tcl/Tk distributions. 
+#      Even when Tcl/Tk is built from source, several flavors of debug libs
+#      are created and there is no real reason to pick a single one
+#      specifically (say, amongst tcl84g, tcl84gs, or tcl84sgx). 
+#      Let's leave that choice to the user by allowing him to assign 
+#      TCL_LIBRARY to any Tcl library, debug or not.
+# - TK_INTERNAL_PATH was removed.
+#   => this ended up being only a Win32 variable, and there is a lot of
+#      confusion regarding the location of this file in an installed Tcl/Tk
+#      tree anyway (see 8.5 for example). If you need the internal path at
+#      this point it is safer you ask directly where the *source* tree is
+#      and dig from there.
 
 INCLUDE(CMakeFindFrameworks)
 INCLUDE(FindTclsh)
@@ -73,45 +85,6 @@ FIND_LIBRARY(TCL_LIBRARY
   PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
 )
 
-FIND_LIBRARY(TCL_LIBRARY_DEBUG
-  NAMES tcld 
-  tcl86d tcl8.6d 
-  tcl86g tcl8.6g 
-  tcl85d tcl8.5d 
-  tcl85g tcl8.5g 
-  tcl84d tcl8.4d 
-  tcl84g tcl8.4g 
-  tcl83d tcl8.3d 
-  tcl82d tcl8.2d 
-  tcl80d tcl8.0d
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-)
-
-FIND_LIBRARY(TCL_STUB_LIBRARY
-  NAMES tclstub 
-  tclstub86 tclstub8.6
-  tclstub85 tclstub8.5 
-  tclstub84 tclstub8.4 
-  tclstub83 tclstub8.3 
-  tclstub82 tclstub8.2 
-  tclstub80 tclstub8.0
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-)
-
-FIND_LIBRARY(TCL_STUB_LIBRARY_DEBUG
-  NAMES tclstubd 
-  tclstub86d tclstub8.6d 
-  tclstub86g tclstub8.6g 
-  tclstub85d tclstub8.5d 
-  tclstub85g tclstub8.5g 
-  tclstub84d tclstub8.4d 
-  tclstub84g tclstub8.4g 
-  tclstub83d tclstub8.3d 
-  tclstub82d tclstub8.2d 
-  tclstub80d tclstub8.0d
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-)
-
 FIND_LIBRARY(TK_LIBRARY 
   NAMES tk 
   tk86 tk8.6
@@ -123,45 +96,6 @@ FIND_LIBRARY(TK_LIBRARY
   PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
 )
 
-FIND_LIBRARY(TK_LIBRARY_DEBUG
-  NAMES tkd 
-  tk86d tk8.6d 
-  tk86g tk8.6g 
-  tk85d tk8.5d 
-  tk85g tk8.5g 
-  tk84d tk8.4d 
-  tk84g tk8.4g 
-  tk83d tk8.3d 
-  tk82d tk8.2d 
-  tk80d tk8.0d
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-)
-
-FIND_LIBRARY(TK_STUB_LIBRARY 
-  NAMES tkstub 
-  tkstub86 tkstub8.6
-  tkstub85 tkstub8.5 
-  tkstub84 tkstub8.4 
-  tkstub83 tkstub8.3 
-  tkstub82 tkstub8.2 
-  tkstub80 tkstub8.0
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-)
-
-FIND_LIBRARY(TK_STUB_LIBRARY_DEBUG
-  NAMES tkstubd 
-  tkstub86d tkstub8.6d 
-  tkstub86g tkstub8.6g 
-  tkstub85d tkstub8.5d 
-  tkstub85g tkstub8.5g 
-  tkstub84d tkstub8.4d 
-  tkstub84g tkstub8.4g 
-  tkstub83d tkstub8.3d 
-  tkstub82d tkstub8.2d 
-  tkstub80d tkstub8.0d
-  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
-)
-
 CMAKE_FIND_FRAMEWORKS(Tcl)
 CMAKE_FIND_FRAMEWORKS(Tk)
 
@@ -217,14 +151,7 @@ FIND_PATH(TK_INCLUDE_PATH tk.h
   ${TK_FRAMEWORK_INCLUDES} ${TCLTK_POSSIBLE_INCLUDE_PATHS}
 )
 
-IF (WIN32)
-  FIND_PATH(TK_INTERNAL_PATH tkWinInt.h
-    ${TCLTK_POSSIBLE_INCLUDE_PATHS}
-  )
-  MARK_AS_ADVANCED(TK_INTERNAL_PATH)
-ENDIF(WIN32)
-
-# handle the QUIETLY and REQUIRED arguments and set TIFF_FOUND to TRUE if 
+# handle the QUIETLY and REQUIRED arguments and set TCL_FOUND to TRUE if 
 # all listed variables are TRUE
 INCLUDE(FindPackageHandleStandardArgs)
 
@@ -236,20 +163,11 @@ SET(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
 SET(TK_FIND_QUIETLY  ${TCL_FIND_QUIETLY})
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK DEFAULT_MSG TK_LIBRARY TK_INCLUDE_PATH)
 
-
 MARK_AS_ADVANCED(
   TCL_TCLSH_PATH
   TK_WISH_PATH
   TCL_INCLUDE_PATH
   TK_INCLUDE_PATH
   TCL_LIBRARY
-  TCL_LIBRARY_DEBUG
   TK_LIBRARY
-  TK_LIBRARY_DEBUG
-  TCL_STUB_LIBRARY
-  TCL_STUB_LIBRARY_DEBUG
-  TK_STUB_LIBRARY  
-  TK_STUB_LIBRARY
-  TK_STUB_LIBRARY_DEBUG
   )
-
diff --git a/Modules/FindTclStub.cmake b/Modules/FindTclStub.cmake
new file mode 100644
index 0000000..1b1361d
--- /dev/null
+++ b/Modules/FindTclStub.cmake
@@ -0,0 +1,89 @@
+# - Find Tcl stub libraries.
+# This module finds Tcl stub libraries. It first finds Tcl include files and
+# libraries by calling FindTCL.cmake.
+# How to Use the Tcl Stubs Library:
+#   http://tcl.activestate.com/doc/howto/stubs.html
+# Using Stub Libraries:
+#   http://safari.oreilly.com/0130385603/ch48lev1sec3
+# This code sets the following variables:
+#  TCL_STUB_LIBRARY       = path to Tcl stub library
+#  TK_STUB_LIBRARY        = path to Tk stub library
+#
+# In an effort to remove some clutter and clear up some issues for people
+# who are not necessarily Tcl/Tk gurus/developpers, some variables were
+# moved or removed. Changes compared to CMake 2.4 are:
+# - TCL_STUB_LIBRARY_DEBUG and TK_STUB_LIBRARY_DEBUG were removed.
+#   => these libs are not packaged by default with Tcl/Tk distributions. 
+#      Even when Tcl/Tk is built from source, several flavors of debug libs
+#      are created and there is no real reason to pick a single one
+#      specifically (say, amongst tclstub84g, tclstub84gs, or tclstub84sgx). 
+#      Let's leave that choice to the user by allowing him to assign 
+#      TCL_STUB_LIBRARY to any Tcl library, debug or not.
+
+INCLUDE(FindTCL)
+
+GET_FILENAME_COMPONENT(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH)
+GET_FILENAME_COMPONENT(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH)
+
+GET_FILENAME_COMPONENT(TK_WISH_PATH "${TK_WISH}" PATH)
+GET_FILENAME_COMPONENT(TK_WISH_PATH_PARENT "${TK_WISH_PATH}" PATH)
+
+GET_FILENAME_COMPONENT(TCL_INCLUDE_PATH_PARENT "${TCL_INCLUDE_PATH}" PATH)
+GET_FILENAME_COMPONENT(TK_INCLUDE_PATH_PARENT "${TK_INCLUDE_PATH}" PATH)
+
+GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH "${TCL_LIBRARY}" PATH)
+GET_FILENAME_COMPONENT(TCL_LIBRARY_PATH_PARENT "${TCL_LIBRARY_PATH}" PATH)
+
+GET_FILENAME_COMPONENT(TK_LIBRARY_PATH "${TK_LIBRARY}" PATH)
+GET_FILENAME_COMPONENT(TK_LIBRARY_PATH_PARENT "${TK_LIBRARY_PATH}" PATH)
+
+GET_FILENAME_COMPONENT(
+  ActiveTcl_CurrentVersion 
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]" 
+  NAME)
+
+SET (TCLTK_POSSIBLE_LIB_PATHS
+  "${TCL_TCLSH_PATH_PARENT}/lib"
+  "${TK_WISH_PATH_PARENT}/lib"
+  "${TCL_INCLUDE_PATH_PARENT}/lib"
+  "${TK_INCLUDE_PATH_PARENT}/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib"
+  "$ENV{ProgramFiles}/Tcl/Lib"
+  "C:/Program Files/Tcl/lib" 
+  "C:/Tcl/lib" 
+  /usr/lib 
+  /usr/local/lib
+)
+
+FIND_LIBRARY(TCL_STUB_LIBRARY
+  NAMES tclstub 
+  tclstub86 tclstub8.6
+  tclstub85 tclstub8.5 
+  tclstub84 tclstub8.4 
+  tclstub83 tclstub8.3 
+  tclstub82 tclstub8.2 
+  tclstub80 tclstub8.0
+  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
+)
+
+FIND_LIBRARY(TK_STUB_LIBRARY 
+  NAMES tkstub 
+  tkstub86 tkstub8.6
+  tkstub85 tkstub8.5 
+  tkstub84 tkstub8.4 
+  tkstub83 tkstub8.3 
+  tkstub82 tkstub8.2 
+  tkstub80 tkstub8.0
+  PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
+)
+
+MARK_AS_ADVANCED(
+  TCL_STUB_LIBRARY
+  TK_STUB_LIBRARY
+  )
-- 
cgit v0.12