소스 검색

ENH: Added find support for looking at Cable's build directory if the user sets the CABLE_BUILD_DIR cache entry.

Brad King 24 년 전
부모
커밋
0598697998
1개의 변경된 파일56개의 추가작업 그리고 23개의 파일을 삭제
  1. 56 23
      Modules/FindCABLE.cmake

+ 56 - 23
Modules/FindCABLE.cmake

@@ -11,28 +11,61 @@
 #  an include directory.
 #
 
-# Use some tricks to find the cable executable relative to somewhere
-# in the system search path.  CMake will collapse the relative paths
-# automatically.
-FIND_PROGRAM(CABLE
-  NAMES cable
-        ../share/Cable/bin/cable
-        ../Cable/bin/cable
-  PATHS /usr/share/Cable/bin
-        /usr/local/share/Cable/bin
-        "C:/Program Files/Cable/bin"
-)
+IF(NOT CABLE)
+  FIND_PATH(CABLE_BUILD_DIR cable.README.txt)
+ENDIF(NOT CABLE)
 
-# Get the path where the executable sits, but without the executable
-# name on it.
-GET_FILENAME_COMPONENT(CABLE_ROOT_BIN ${CABLE} PATH)
+IF(CABLE_BUILD_DIR)
+  LOAD_CACHE(${CABLE_BUILD_DIR}
+             EXCLUDE
+               BUILD_SHARED_LIBS
+               LIBRARY_OUTPUT_PATH
+               EXECUTABLE_OUTPUT_PATH
+               MAKECOMMAND
+             INCLUDE_INTERNALS
+               CABLE_LIBRARY_OUTPUT_PATH
+               CABLE_EXECUTABLE_OUTPUT_PATH)
+  
+  IF(CABLE_LIBRARY_OUTPUT_PATH)
+    FIND_LIBRARY(CABLE_TCL_LIBRARY NAMES WrapTclFacility PATHS
+                 ${CABLE_LIBRARY_OUTPUT_PATH})
+  ELSE(CABLE_LIBRARY_OUTPUT_PATH)
+    FIND_LIBRARY(CABLE_TCL_LIBRARY NAMES WrapTclFacility PATHS
+                 ${CABLE_BINARY_DIR}/WrapTclFacility)
+  ENDIF(CABLE_LIBRARY_OUTPUT_PATH)
+  
+  IF(CABLE_EXECUTABLE_OUTPUT_PATH)
+    FIND_PROGRAM(CABLE NAMES cable PATHS ${CABLE_EXECUTABLE_OUTPUT_PATH})
+  ELSE(CABLE_EXECUTABLE_OUTPUT_PATH)
+    FIND_PROGRAM(CABLE NAMES cable PATHS ${CABLE_BINARY_DIR}/Executables)
+  ENDIF(CABLE_EXECUTABLE_OUTPUT_PATH)
+   
+  SET(CABLE_INCLUDE_DIR ${CABLE_SOURCE_DIR}
+      CACHE STRING "Include path for Cable headers.")
+ELSE(CABLE_BUILD_DIR)
+  # Use some tricks to find the cable executable relative to somewhere
+  # in the system search path.  CMake will collapse the relative paths
+  # automatically.
+  FIND_PROGRAM(CABLE
+    NAMES cable
+          ../share/Cable/bin/cable
+          ../Cable/bin/cable
+    PATHS /usr/share/Cable/bin
+          /usr/local/share/Cable/bin
+          "C:/Program Files/Cable/bin"
+  )
 
-# Find the cable include directory in a path relative to the cable
-# executable.
-FIND_PATH(CABLE_INCLUDE_DIR WrapTclFacility/wrapCalls.h
-          ${CABLE_ROOT_BIN}/../include)
-
-# Find the WrapTclFacility library in a path relative to the cable
-# executable.
-FIND_LIBRARY(CABLE_TCL_LIBRARY NAMES WrapTclFacility PATHS
-             ${CABLE_ROOT_BIN}/../lib)
+  # Get the path where the executable sits, but without the executable
+  # name on it.
+  GET_FILENAME_COMPONENT(CABLE_ROOT_BIN ${CABLE} PATH)
+  
+  # Find the cable include directory in a path relative to the cable
+  # executable.
+  FIND_PATH(CABLE_INCLUDE_DIR WrapTclFacility/wrapCalls.h
+            ${CABLE_ROOT_BIN}/../include)
+  
+  # Find the WrapTclFacility library in a path relative to the cable
+  # executable.
+  FIND_LIBRARY(CABLE_TCL_LIBRARY NAMES WrapTclFacility PATHS
+               ${CABLE_ROOT_BIN}/../lib)  
+ENDIF(CABLE_BUILD_DIR)