https://github.com/ajordanr-google updated https://github.com/llvm/llvm-project/pull/126810
>From ddd3febff5b77cc7b2101996d49729added00f2b Mon Sep 17 00:00:00 2001 From: Jordan R Abrahams-Whitehead <ajord...@google.com> Date: Tue, 1 Oct 2024 18:41:28 +0000 Subject: [PATCH 1/5] [lldb] Add terminfo dependency for ncurses support For some operating systems (e.g. chromiumos), terminfo is a separate package and library from ncurses. Both are still requirements for curses support in lldb, individually. This is a rebase of this original spack commit: https://github.com/spack/spack/commit/9ea261265010eacd250691a8361f661d0576f25c Without this fix, LLDB cannot be built on these systems. Fixes #101368 --- lldb/cmake/modules/FindCursesAndPanel.cmake | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lldb/cmake/modules/FindCursesAndPanel.cmake b/lldb/cmake/modules/FindCursesAndPanel.cmake index aaadf214bf54b..df4980cc5e0d1 100644 --- a/lldb/cmake/modules/FindCursesAndPanel.cmake +++ b/lldb/cmake/modules/FindCursesAndPanel.cmake @@ -2,12 +2,15 @@ # FindCursesAndPanel # ----------- # -# Find the curses and panel library as a whole. +# Find the curses, terminfo, and panel library as a whole. +# NOTE: terminfo and curses libraries are required separately, as +# some systems do not bundle them together. -if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND PANEL_LIBRARIES) +if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND TINFO_LIBRARIES AND PANEL_LIBRARIES) set(CURSESANDPANEL_FOUND TRUE) else() find_package(Curses QUIET) + find_package(TINFO_LIBRARIES NAMES tinfo DOC "The curses tinfo library" QUIET) find_library(PANEL_LIBRARIES NAMES panel DOC "The curses panel library" QUIET) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CursesAndPanel @@ -16,9 +19,10 @@ else() REQUIRED_VARS CURSES_INCLUDE_DIRS CURSES_LIBRARIES + TINFO_LIBRARIES PANEL_LIBRARIES) - if(CURSES_FOUND AND PANEL_LIBRARIES) - mark_as_advanced(CURSES_INCLUDE_DIRS CURSES_LIBRARIES PANEL_LIBRARIES) + if(CURSES_FOUND AND TINFO_LIBRARIES AND PANEL_LIBRARIES) + mark_as_advanced(CURSES_INCLUDE_DIRS CURSES_LIBRARIES TINFO_LIBRARIES PANEL_LIBRARIES) endif() endif() >From 41ad79112bc2242a1cb10ae688353863155d9038 Mon Sep 17 00:00:00 2001 From: Jordan R Abrahams-Whitehead <ajord...@google.com> Date: Wed, 12 Feb 2025 18:22:09 +0000 Subject: [PATCH 2/5] fixup! [lldb] Add terminfo dependency for ncurses support --- lldb/source/Core/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/source/Core/CMakeLists.txt b/lldb/source/Core/CMakeLists.txt index cf5f6ac9da489..6c7a50056f751 100644 --- a/lldb/source/Core/CMakeLists.txt +++ b/lldb/source/Core/CMakeLists.txt @@ -10,7 +10,7 @@ set(LLDB_CURSES_LIBS) set(LLDB_LIBEDIT_LIBS) if (LLDB_ENABLE_CURSES) - list(APPEND LLDB_CURSES_LIBS ${PANEL_LIBRARIES} ${CURSES_LIBRARIES}) + list(APPEND LLDB_CURSES_LIBS ${PANEL_LIBRARIES} ${CURSES_LIBRARIES} ${TINFO_LIBRARIES}) if (LLVM_BUILD_STATIC) list(APPEND LLDB_CURSES_LIBS gpm) endif() >From 9ffc89356cc635ac31f11c66dcb6f32cd73380fc Mon Sep 17 00:00:00 2001 From: Jordan R Abrahams-Whitehead <ajord...@google.com> Date: Wed, 12 Feb 2025 19:29:23 +0000 Subject: [PATCH 3/5] fixup! fixup! [lldb] Add terminfo dependency for ncurses support --- lldb/cmake/modules/FindCursesAndPanel.cmake | 41 +++++++++++++++++---- lldb/cmake/modules/FindTerminfo.cmake | 21 +++++++++++ lldb/source/Core/CMakeLists.txt | 5 ++- 3 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 lldb/cmake/modules/FindTerminfo.cmake diff --git a/lldb/cmake/modules/FindCursesAndPanel.cmake b/lldb/cmake/modules/FindCursesAndPanel.cmake index df4980cc5e0d1..646113155343d 100644 --- a/lldb/cmake/modules/FindCursesAndPanel.cmake +++ b/lldb/cmake/modules/FindCursesAndPanel.cmake @@ -3,26 +3,53 @@ # ----------- # # Find the curses, terminfo, and panel library as a whole. -# NOTE: terminfo and curses libraries are required separately, as -# some systems do not bundle them together. + +include(CMakePushCheckState) + +function(lldb_check_curses_tinfo 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) +endfunction() if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND TINFO_LIBRARIES AND PANEL_LIBRARIES) set(CURSESANDPANEL_FOUND TRUE) else() find_package(Curses QUIET) - find_package(TINFO_LIBRARIES NAMES tinfo DOC "The curses tinfo library" QUIET) find_library(PANEL_LIBRARIES NAMES panel DOC "The curses panel library" QUIET) include(FindPackageHandleStandardArgs) + + # 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) + if(CURSES_FOUND AND PANEL_LIBRARIES) + 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) + endif() + set(HAS_TERMINFO_SYMBOLS "$<OR:$<BOOL:${TERMINFO_LIBRARIES}>,$<BOOL:${CURSES_HAS_TINFO}>>") + endif() find_package_handle_standard_args(CursesAndPanel FOUND_VAR CURSESANDPANEL_FOUND REQUIRED_VARS CURSES_INCLUDE_DIRS CURSES_LIBRARIES - TINFO_LIBRARIES - PANEL_LIBRARIES) - if(CURSES_FOUND AND TINFO_LIBRARIES AND PANEL_LIBRARIES) - mark_as_advanced(CURSES_INCLUDE_DIRS CURSES_LIBRARIES TINFO_LIBRARIES PANEL_LIBRARIES) + PANEL_LIBRARIES + HAS_TERMINFO_SYMBOLS + ) + + if(CURSES_FOUND AND PANEL_LIBRARIES AND HAS_TERMINFO_SYMBOLS) + mark_as_advanced(CURSES_INCLUDE_DIRS + PANEL_LIBRARIES + HAS_TERMINFO_SYMBOLS + CURSES_HAS_TINFO) + endif() + if(TINFO_LIBRARIES) + mark_as_advanced(TINFO_LIBRARIES) endif() endif() diff --git a/lldb/cmake/modules/FindTerminfo.cmake b/lldb/cmake/modules/FindTerminfo.cmake new file mode 100644 index 0000000000000..c6c71e0f29dbe --- /dev/null +++ b/lldb/cmake/modules/FindTerminfo.cmake @@ -0,0 +1,21 @@ +#.rst: +# FindTerminfo +# ----------- +# +# Find a separate libtinfo (terminfo) library, if not included in ncurses. +# Some systems do not bundle them together, so we try to detect if it's needed. + +if(TINFO_LIBRARIES) + set(TERMINFO_FOUND TRUE) +else() + find_library(TINFO_LIBRARIES NAMES tinfo DOC "The curses tinfo library" QUIET) + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(Terminfo + FOUND_VAR + TERMINFO_FOUND + REQUIRED_VARS + TINFO_LIBRARIES) + if(TERMINFO_FOUND) + mark_as_advanced(TERMINFO_FOUND) + endif() +endif() diff --git a/lldb/source/Core/CMakeLists.txt b/lldb/source/Core/CMakeLists.txt index 6c7a50056f751..8fda453ad8e45 100644 --- a/lldb/source/Core/CMakeLists.txt +++ b/lldb/source/Core/CMakeLists.txt @@ -10,7 +10,10 @@ set(LLDB_CURSES_LIBS) set(LLDB_LIBEDIT_LIBS) if (LLDB_ENABLE_CURSES) - list(APPEND LLDB_CURSES_LIBS ${PANEL_LIBRARIES} ${CURSES_LIBRARIES} ${TINFO_LIBRARIES}) + list(APPEND LLDB_CURSES_LIBS ${PANEL_LIBRARIES} ${CURSES_LIBRARIES}) + if(NOT CURSES_HAS_TINFO) + list(APPEND LLDB_CURSES_LIBS ${TINFO_LIBRARIES}) + endif() if (LLVM_BUILD_STATIC) list(APPEND LLDB_CURSES_LIBS gpm) endif() >From 1bb9f9c312b5d6478c038ab87297efeb7fcf9e87 Mon Sep 17 00:00:00 2001 From: Jordan R Abrahams-Whitehead <ajord...@google.com> Date: Sat, 15 Feb 2025 00:08:54 +0000 Subject: [PATCH 4/5] fixup! fixup! fixup! [lldb] Add terminfo dependency for ncurses support --- lldb/cmake/modules/FindTerminfo.cmake | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 lldb/cmake/modules/FindTerminfo.cmake diff --git a/lldb/cmake/modules/FindTerminfo.cmake b/lldb/cmake/modules/FindTerminfo.cmake deleted file mode 100644 index c6c71e0f29dbe..0000000000000 --- a/lldb/cmake/modules/FindTerminfo.cmake +++ /dev/null @@ -1,21 +0,0 @@ -#.rst: -# FindTerminfo -# ----------- -# -# Find a separate libtinfo (terminfo) library, if not included in ncurses. -# Some systems do not bundle them together, so we try to detect if it's needed. - -if(TINFO_LIBRARIES) - set(TERMINFO_FOUND TRUE) -else() - find_library(TINFO_LIBRARIES NAMES tinfo DOC "The curses tinfo library" QUIET) - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(Terminfo - FOUND_VAR - TERMINFO_FOUND - REQUIRED_VARS - TINFO_LIBRARIES) - if(TERMINFO_FOUND) - mark_as_advanced(TERMINFO_FOUND) - endif() -endif() >From 68505ab3528b5d7fc21651c07e7b66788e73ae8d Mon Sep 17 00:00:00 2001 From: Jordan R Abrahams-Whitehead <ajord...@google.com> Date: Sat, 15 Feb 2025 00:10:24 +0000 Subject: [PATCH 5/5] fixup! fixup! fixup! fixup! [lldb] Add terminfo dependency for ncurses support --- lldb/cmake/modules/FindCursesAndPanel.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lldb/cmake/modules/FindCursesAndPanel.cmake b/lldb/cmake/modules/FindCursesAndPanel.cmake index 646113155343d..fd4bdc648d923 100644 --- a/lldb/cmake/modules/FindCursesAndPanel.cmake +++ b/lldb/cmake/modules/FindCursesAndPanel.cmake @@ -39,8 +39,7 @@ else() CURSES_INCLUDE_DIRS CURSES_LIBRARIES PANEL_LIBRARIES - HAS_TERMINFO_SYMBOLS - ) + HAS_TERMINFO_SYMBOLS) if(CURSES_FOUND AND PANEL_LIBRARIES AND HAS_TERMINFO_SYMBOLS) mark_as_advanced(CURSES_INCLUDE_DIRS _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits