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 <ajord...@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 <ajord...@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 <ajord...@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) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits