compnerd created this revision.
compnerd added reviewers: davide, labath, vsk, zturner.
Herald added a subscriber: mgorny.

Use proper cmake techniques to detect where the libedit package resides.
This allows for the use of libedit from an alternative location which is
needed for supporting cross-compilation.


https://reviews.llvm.org/D46726

Files:
  CMakeLists.txt
  cmake/modules/FindLibEdit.cmake
  scripts/Python/modules/readline/CMakeLists.txt

Index: scripts/Python/modules/readline/CMakeLists.txt
===================================================================
--- scripts/Python/modules/readline/CMakeLists.txt
+++ scripts/Python/modules/readline/CMakeLists.txt
@@ -6,9 +6,12 @@
 # Build the readline python module
 include_directories(${PYTHON_INCLUDE_DIR})
 add_library(readline SHARED readline.cpp)
+target_include_directories(readline
+                           PRIVATE
+                             ${libedit_INCLUDE_DIRS})

 if (NOT LLDB_DISABLE_LIBEDIT)
-  target_link_libraries(readline ${PYTHON_LIBRARY} edit)
+  target_link_libraries(readline ${PYTHON_LIBRARY} ${libedit_LIBRARIES})
 else()
   target_link_libraries(readline ${PYTHON_LIBRARY})
 endif()
Index: cmake/modules/FindLibEdit.cmake
===================================================================
--- /dev/null
+++ cmake/modules/FindLibEdit.cmake
@@ -0,0 +1,66 @@
+#.rst:
+# FindLibEdit
+# -----------
+#
+# Find libedit library and headers
+#
+# The module defines the following variables:
+#
+# ::
+#
+#   libedit_FOUND         - true if libedit was found
+#   libedit_INCLUDE_DIRS  - include search path
+#   libedit_LIBRARIES     - libraries to link
+#   libedit_VERSION       - version number
+
+if(libedit_INCLUDE_DIRS AND libedit_LIBRARIES)
+  set(libedit_FOUND TRUE)
+else()
+  find_package(PkgConfig QUIET)
+  pkg_check_modules(PC_LIBEDIT QUIET libedit)
+
+  find_path(libedit_INCLUDE_DIRS
+            NAMES
+              histedit.h
+            HINTS
+              ${PC_LIBEDIT_INCLUDEDIR}
+              ${PC_LIBEDIT_INCLUDE_DIRS}
+              ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+  find_library(libedit_LIBRARIES
+               NAMES
+                 edit libedit
+               HINTS
+                 ${PC_LIBEDIT_LIBDIR}
+                 ${PC_LIBEDIT_LIBRARY_DIRS}
+                 ${CMAKE_INSTALL_FULL_LIBDIR})
+
+  if(libedit_INCLUDE_DIRS AND EXISTS "${libedit_INCLUDE_DIRS}/histedit.h")
+    file(STRINGS "${libedit_INCLUDE_DIRS}/histedit.h"
+         libedit_major_version_str
+         REGEX "^#define[ \t]+LIBEDIT_MAJOR[ \t]+[0-9]+")
+    string(REGEX REPLACE "^#define[ \t]+LIBEDIT_MAJOR[ \t]+([0-9]+)" "\\1"
+           LIBEDIT_MAJOR_VERSION "${libedit_major_version_str}")
+    unset(libedit_major_version_str)
+
+    file(STRINGS "${libedit_INCLUDE_DIRS}/histedit.h"
+         libedit_minor_version_str
+         REGEX "^#define\s+LIBEDIT_MINOR\s+\d+")
+    string(REGEX REPLACE "^#define\s+LIBEDIT_MINOR\s+(\d+)" "\\1"
+           LIBEDIT_MINOR_VERSION "${libedit_minor_version_str}")
+    unset(libedit_minor_version_str)
+
+    set(libedit_VERSION_STRING "${libedit_major_version}.${libedit_minor_version}")
+    unset(libedit_major_version)
+    unset(libedit_minor_version)
+  endif()
+
+  include(FindPackageHandleStandardArgs)
+  find_package_handle_standard_args(libedit
+                                    REQUIRED_VARS
+                                      libedit_INCLUDE_DIRS
+                                      libedit_LIBRARIES
+                                    VERSION_VAR
+                                      libedit_VERSION_STRING)
+  mark_as_advanced(libedit_INCLUDE_DIRS libedit_LIBRARIES)
+endif()
+
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -29,6 +29,8 @@
 set(LLDB_DISABLE_LIBEDIT ${LLDB_DEFAULT_DISABLE_LIBEDIT} CACHE BOOL "Disables the use of editline.")
 if (LLDB_DISABLE_LIBEDIT)
   add_definitions( -DLLDB_DISABLE_LIBEDIT )
+else()
+  find_package(LibEdit REQUIRED)
 endif()

 if(APPLE)
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to