upsj created this revision.
upsj added reviewers: mgorny, MaskRay.
Herald added subscribers: StephenFan, hiraditya.
Herald added a project: All.
upsj requested review of this revision.
Herald added projects: LLDB, LLVM.
Herald added subscribers: llvm-commits, lldb-commits.
Currently, LLVM's LineEditor and LLDB both use libedit, but find them in 
different (inconsistent) ways.
This causes issues e.g. when you are using a locally installed version of 
libedit, which will not be used            
by clang-query, but by lldb if picked up by FindLibEdit.cmake


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D124673

Files:
  cmake/Modules/FindLibEdit.cmake
  lldb/cmake/modules/FindLibEdit.cmake
  lldb/cmake/modules/LLDBConfig.cmake
  llvm/cmake/config-ix.cmake
  llvm/include/llvm/Config/config.h.cmake
  llvm/lib/LineEditor/CMakeLists.txt
  utils/bazel/llvm_configs/config.h.cmake

Index: utils/bazel/llvm_configs/config.h.cmake
===================================================================
--- utils/bazel/llvm_configs/config.h.cmake
+++ utils/bazel/llvm_configs/config.h.cmake
@@ -105,7 +105,7 @@
 #cmakedefine HAVE_ISATTY 1
 
 /* Define to 1 if you have the `edit' library (-ledit). */
-#cmakedefine HAVE_LIBEDIT ${HAVE_LIBEDIT}
+#cmakedefine HAVE_LIBEDIT ${LibEdit_FOUND}
 
 /* Define to 1 if you have the `pfm' library (-lpfm). */
 #cmakedefine HAVE_LIBPFM ${HAVE_LIBPFM}
Index: llvm/lib/LineEditor/CMakeLists.txt
===================================================================
--- llvm/lib/LineEditor/CMakeLists.txt
+++ llvm/lib/LineEditor/CMakeLists.txt
@@ -1,15 +1,14 @@
-if(HAVE_LIBEDIT)
-  set(link_libs edit)
-endif()
+# LibEdit is found in llvm/cmake/config-ix.cmake
 
 add_llvm_component_library(LLVMLineEditor
   LineEditor.cpp
 
   ADDITIONAL_HEADER_DIRS
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/LineEditor
+  ${LibEdit_INCLUDE_DIRS}
 
   LINK_LIBS
-  ${link_libs}
+  ${LibEdit_LIBRARIES}
 
   LINK_COMPONENTS
   Support
Index: llvm/include/llvm/Config/config.h.cmake
===================================================================
--- llvm/include/llvm/Config/config.h.cmake
+++ llvm/include/llvm/Config/config.h.cmake
@@ -105,7 +105,7 @@
 #cmakedefine HAVE_ISATTY 1
 
 /* Define to 1 if you have the `edit' library (-ledit). */
-#cmakedefine HAVE_LIBEDIT ${HAVE_LIBEDIT}
+#cmakedefine HAVE_LIBEDIT ${LibEdit_FOUND}
 
 /* Define to 1 if you have the `pfm' library (-lpfm). */
 #cmakedefine HAVE_LIBPFM ${HAVE_LIBPFM}
Index: llvm/cmake/config-ix.cmake
===================================================================
--- llvm/cmake/config-ix.cmake
+++ llvm/cmake/config-ix.cmake
@@ -64,7 +64,6 @@
 check_symbol_exists(FE_INEXACT "fenv.h" HAVE_DECL_FE_INEXACT)
 
 check_include_file(mach/mach.h HAVE_MACH_MACH_H)
-check_include_file(histedit.h HAVE_HISTEDIT_H)
 check_include_file(CrashReporterClient.h HAVE_CRASHREPORTERCLIENT_H)
 if(APPLE)
   include(CheckCSourceCompiles)
@@ -184,10 +183,11 @@
   # Don't look for these libraries on Windows.
   if (NOT PURE_WINDOWS)
     # Skip libedit if using ASan as it contains memory leaks.
-    if (LLVM_ENABLE_LIBEDIT AND HAVE_HISTEDIT_H AND NOT LLVM_USE_SANITIZER MATCHES ".*Address.*")
-      check_library_exists(edit el_init "" HAVE_LIBEDIT)
-    else()
-      set(HAVE_LIBEDIT 0)
+    if (LLVM_ENABLE_LIBEDIT)
+      if (LLVM_USE_SANITIZER MATCHES ".*Address.*")
+        message(FATAL_ERROR "LLVM_ENABLE_LIBEDIT cannot be enabled with LLVM_USE_SANITIZER set to AddressSanitizer")
+      endif()
+      find_package(LibEdit REQUIRED)
     endif()
     if(LLVM_ENABLE_TERMINFO)
       if(LLVM_ENABLE_TERMINFO STREQUAL FORCE_ON)
Index: lldb/cmake/modules/LLDBConfig.cmake
===================================================================
--- lldb/cmake/modules/LLDBConfig.cmake
+++ lldb/cmake/modules/LLDBConfig.cmake
@@ -56,7 +56,9 @@
   message(STATUS "${description}: ${${variable}}")
 endmacro()
 
-add_optional_dependency(LLDB_ENABLE_LIBEDIT "Enable editline support in LLDB" LibEdit LibEdit_FOUND)
+if(LLVM_ENABLE_LIBEDIT)
+  find_package(LibEdit REQUIRED)
+endif()
 add_optional_dependency(LLDB_ENABLE_CURSES "Enable curses support in LLDB" CursesAndPanel CURSESANDPANEL_FOUND)
 add_optional_dependency(LLDB_ENABLE_LZMA "Enable LZMA compression support in LLDB" LibLZMA LIBLZMA_FOUND)
 add_optional_dependency(LLDB_ENABLE_LUA "Enable Lua scripting support in LLDB" LuaAndSwig LUAANDSWIG_FOUND)
Index: lldb/cmake/modules/FindLibEdit.cmake
===================================================================
--- /dev/null
+++ lldb/cmake/modules/FindLibEdit.cmake
@@ -1,64 +0,0 @@
-#.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_STRING - 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}")
-
-    file(STRINGS "${LibEdit_INCLUDE_DIRS}/histedit.h"
-         libedit_minor_version_str
-         REGEX "^#define[ \t]+LIBEDIT_MINOR[ \t]+[0-9]+")
-    string(REGEX REPLACE "^#define[ \t]+LIBEDIT_MINOR[ \t]+([0-9]+)" "\\1"
-           LIBEDIT_MINOR_VERSION "${libedit_minor_version_str}")
-
-    set(LibEdit_VERSION_STRING "${libedit_major_version}.${libedit_minor_version}")
-  endif()
-
-  include(FindPackageHandleStandardArgs)
-  find_package_handle_standard_args(LibEdit
-                                    FOUND_VAR
-                                      LibEdit_FOUND
-                                    REQUIRED_VARS
-                                      LibEdit_INCLUDE_DIRS
-                                      LibEdit_LIBRARIES
-                                    VERSION_VAR
-                                      LibEdit_VERSION_STRING)
-  mark_as_advanced(LibEdit_INCLUDE_DIRS LibEdit_LIBRARIES)
-endif()
-
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to