[Lldb-commits] [lldb] [lldb] Fix manual CURSES_LIBRARIES tinfo finding (PR #128245)

Jordan R AW via lldb-commits lldb-commits at lists.llvm.org
Fri Feb 21 15:50:42 PST 2025


https://github.com/ajordanr-google updated https://github.com/llvm/llvm-project/pull/128245

>From ff5884d252b8359bcec41024f9dc9e3c7bbe3fc2 Mon Sep 17 00:00:00 2001
From: Jordan R Abrahams-Whitehead <ajordanr at google.com>
Date: Wed, 19 Feb 2025 19:24:40 +0000
Subject: [PATCH 1/3] [lldb] Fix manual CURSES_LIBRARIES tinfo finding

At present, we automatically detect terminfo symbols in CURSES_LIBRARIES
after it is found through `find_package`. However, by introducing a
check for TINFO_LIBRARIES, we break systems which pass all of
CURSES_INCLUDE_DIRS, CURSES_LIBRARIES, and PANEL_LIBRARIES individually
without passing TINFO_LIBRARIES. We'd rather not expose TINFO_LIBRARIES
at all.

This commit preemptively attempts to fix issues encountered
on systems that manually pass CURSES_LIBRARIES which already
contain the necessary terminfo symbols (e.g. 'acs_map').

Additionally, let's not make CURSES_LIBRARIES a list. That was odd
to begin with.

See this breakage in Google Fuchsia:
https://issues.fuchsia.dev/397455029

References Issue #101368
---
 lldb/cmake/modules/FindCursesAndPanel.cmake | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/lldb/cmake/modules/FindCursesAndPanel.cmake b/lldb/cmake/modules/FindCursesAndPanel.cmake
index 75ebaa35d7ea1..315810c87b67b 100644
--- a/lldb/cmake/modules/FindCursesAndPanel.cmake
+++ b/lldb/cmake/modules/FindCursesAndPanel.cmake
@@ -6,15 +6,24 @@
 
 include(CMakePushCheckState)
 
-function(lldb_check_curses_tinfo CURSES_LIBRARIES CURSES_HAS_TINFO)
+function(lldb_check_curses_tinfo CURSES_HEADER CURSES_LIBRARIES CURSES_HAS_TINFO)
   cmake_reset_check_state()
   set(CMAKE_REQUIRED_LIBRARIES "${CURSES_LIBRARIES}")
   # acs_map is one of many symbols that are part of tinfo but could
   # be bundled in curses.
-  check_symbol_exists(acs_map "curses.h" CURSES_HAS_TINFO)
+  check_symbol_exists(acs_map "${CURSES_HEADER}" CURSES_HAS_TINFO)
 endfunction()
 
-if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND TINFO_LIBRARIES AND PANEL_LIBRARIES)
+if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND PANEL_LIBRARIES)
+  if(NOT HAS_TERMINFO_SYMBOLS)
+    lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}/curses.h"
+                            "${CURSES_LIBRARIES}"
+                            CURSES_HAS_TINFO)
+    if (NOT CURSES_HAS_TINFO)
+      message(WARNING "CURSES_LIBRARIES was provided manually but is missing terminfo symbols")
+    endif()
+    mark_as_advanced(CURSES_HAS_TINFO)
+  endif()
   set(CURSESANDPANEL_FOUND TRUE)
 else()
   find_package(Curses QUIET)
@@ -25,7 +34,9 @@ else()
     # Sometimes the curses libraries define their own terminfo symbols,
     # other times they're extern and are defined by a separate terminfo library.
     # Auto-detect which.
-    lldb_check_curses_tinfo("${CURSES_LIBRARIES}" CURSES_HAS_TINFO)
+    lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}/curses.h"
+                            "${CURSES_LIBRARIES}"
+                            CURSES_HAS_TINFO)
     if (NOT CURSES_HAS_TINFO)
       message(STATUS "curses library missing terminfo symbols, looking for tinfo separately")
       find_library(TINFO_LIBRARIES NAMES tinfo DOC "The curses tinfo library" QUIET)

>From b25240267657f4d5c66125eac6fe74856b73b15a Mon Sep 17 00:00:00 2001
From: Jordan R Abrahams-Whitehead <ajordanr at google.com>
Date: Fri, 21 Feb 2025 23:39:01 +0000
Subject: [PATCH 2/3] fixup! [lldb] Fix manual CURSES_LIBRARIES tinfo finding

---
 lldb/cmake/modules/FindCursesAndPanel.cmake | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lldb/cmake/modules/FindCursesAndPanel.cmake b/lldb/cmake/modules/FindCursesAndPanel.cmake
index 315810c87b67b..9033813009977 100644
--- a/lldb/cmake/modules/FindCursesAndPanel.cmake
+++ b/lldb/cmake/modules/FindCursesAndPanel.cmake
@@ -6,12 +6,13 @@
 
 include(CMakePushCheckState)
 
-function(lldb_check_curses_tinfo CURSES_HEADER CURSES_LIBRARIES CURSES_HAS_TINFO)
+function(lldb_check_curses_tinfo CURSES_INCLUDE_DIRS CURSES_LIBRARIES CURSES_HAS_TINFO)
   cmake_reset_check_state()
+  set(CMAKE_REQUIRED_INCLUDES "${CURSES_INCLUDE_DIRS}")
   set(CMAKE_REQUIRED_LIBRARIES "${CURSES_LIBRARIES}")
   # acs_map is one of many symbols that are part of tinfo but could
   # be bundled in curses.
-  check_symbol_exists(acs_map "${CURSES_HEADER}" CURSES_HAS_TINFO)
+  check_symbol_exists(acs_map "curses.h" CURSES_HAS_TINFO)
 endfunction()
 
 if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND PANEL_LIBRARIES)
@@ -34,7 +35,7 @@ else()
     # Sometimes the curses libraries define their own terminfo symbols,
     # other times they're extern and are defined by a separate terminfo library.
     # Auto-detect which.
-    lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}/curses.h"
+    lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}"
                             "${CURSES_LIBRARIES}"
                             CURSES_HAS_TINFO)
     if (NOT CURSES_HAS_TINFO)

>From 0f16f66afc4e822824e0bf19d889ff3415701df1 Mon Sep 17 00:00:00 2001
From: Jordan R Abrahams-Whitehead <ajordanr at google.com>
Date: Fri, 21 Feb 2025 23:50:21 +0000
Subject: [PATCH 3/3] fixup! fixup! [lldb] Fix manual CURSES_LIBRARIES tinfo
 finding

---
 lldb/cmake/modules/FindCursesAndPanel.cmake | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/cmake/modules/FindCursesAndPanel.cmake b/lldb/cmake/modules/FindCursesAndPanel.cmake
index 9033813009977..b7cda2846bc8f 100644
--- a/lldb/cmake/modules/FindCursesAndPanel.cmake
+++ b/lldb/cmake/modules/FindCursesAndPanel.cmake
@@ -17,7 +17,7 @@ endfunction()
 
 if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND PANEL_LIBRARIES)
   if(NOT HAS_TERMINFO_SYMBOLS)
-    lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}/curses.h"
+    lldb_check_curses_tinfo("${CURSES_INCLUDE_DIRS}"
                             "${CURSES_LIBRARIES}"
                             CURSES_HAS_TINFO)
     if (NOT CURSES_HAS_TINFO)



More information about the lldb-commits mailing list