[Lldb-commits] [lldb] [lldb] add terminfo name (PR #191740)

via lldb-commits lldb-commits at lists.llvm.org
Sun Apr 12 17:04:50 PDT 2026


https://github.com/nataliakokoromyti updated https://github.com/llvm/llvm-project/pull/191740

>From d735889d16e2293f43c40d521e8b5b6fff7aa571 Mon Sep 17 00:00:00 2001
From: nataliakokoromyti <nataliakokoromyti at gmail.com>
Date: Sun, 12 Apr 2026 16:25:34 -0700
Subject: [PATCH 1/3] [lldb] add terminfo name

---
 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 8628059f91ba1..5e13a1b79ecf9 100644
--- a/lldb/cmake/modules/FindCursesAndPanel.cmake
+++ b/lldb/cmake/modules/FindCursesAndPanel.cmake
@@ -40,7 +40,7 @@ else()
                             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)
+      find_library(TINFO_LIBRARIES NAMES tinfo terminfo DOC "The curses tinfo library" QUIET)
       list(APPEND CURSES_LIBRARIES "${TINFO_LIBRARIES}")
     endif()
     set(HAS_TERMINFO_SYMBOLS "$<OR:$<BOOL:${TERMINFO_LIBRARIES}>,$<BOOL:${CURSES_HAS_TINFO}>>")

>From e959df3ae92ecc3d638b2c612ad7579d0281949f Mon Sep 17 00:00:00 2001
From: nataliakokoromyti <nataliakokoromyti at gmail.com>
Date: Sun, 12 Apr 2026 17:02:32 -0700
Subject: [PATCH 2/3] add cmake test

---
 .../find-curses-and-panel-terminfo.test       | 44 +++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test

diff --git a/lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test b/lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test
new file mode 100644
index 0000000000000..ad5c89691e2d0
--- /dev/null
+++ b/lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test
@@ -0,0 +1,44 @@
+# UNSUPPORTED: windows-msvc, windows-gnu
+#
+# This verifies that FindCursesAndPanel.cmake accepts platforms where the
+# separate terminfo library is named libterminfo instead of libtinfo.
+#
+# RUN: rm -rf %t && mkdir -p %t/prefix/include %t/prefix/lib %t/src
+#
+# RUN: echo '#ifndef CURSES_H' > %t/prefix/include/curses.h
+# RUN: echo '#define CURSES_H' >> %t/prefix/include/curses.h
+# RUN: echo 'int cbreak(void);' >> %t/prefix/include/curses.h
+# RUN: echo 'int nodelay(void *, int);' >> %t/prefix/include/curses.h
+# RUN: echo '#endif' >> %t/prefix/include/curses.h
+#
+# RUN: echo 'int cbreak(void) { return 0; }' > %t/src/curses.c
+# RUN: echo 'int nodelay(void *w, int bf) { (void)w; (void)bf; return 0; }' >> %t/src/curses.c
+# RUN: echo 'int panel_dummy(void) { return 0; }' > %t/src/panel.c
+# RUN: echo 'int acs_map = 0;' > %t/src/terminfo.c
+#
+# RUN: %clang_host -c %t/src/curses.c -o %t/src/curses.o
+# RUN: %clang_host -c %t/src/panel.c -o %t/src/panel.o
+# RUN: %clang_host -c %t/src/terminfo.c -o %t/src/terminfo.o
+# RUN: ar rcs %t/prefix/lib/libcurses.a %t/src/curses.o
+# RUN: ar rcs %t/prefix/lib/libpanel.a %t/src/panel.o
+# RUN: ar rcs %t/prefix/lib/libterminfo.a %t/src/terminfo.o
+#
+# RUN: echo 'cmake_minimum_required(VERSION 3.20)' > %t/CMakeLists.txt
+# RUN: echo 'project(find-curses-and-panel-terminfo C)' >> %t/CMakeLists.txt
+# RUN: echo 'include(CheckSymbolExists)' >> %t/CMakeLists.txt
+# RUN: echo 'list(PREPEND CMAKE_MODULE_PATH "%S/../../../cmake/modules")' >> %t/CMakeLists.txt
+# RUN: echo 'find_package(CursesAndPanel REQUIRED)' >> %t/CMakeLists.txt
+# RUN: echo 'message(STATUS "CURSES_LIBRARIES=${CURSES_LIBRARIES}")' >> %t/CMakeLists.txt
+# RUN: echo 'message(STATUS "TINFO_LIBRARIES=${TINFO_LIBRARIES}")' >> %t/CMakeLists.txt
+#
+# RUN: cmake -S %t -B %t/build \
+# RUN:   -DCMAKE_FIND_ROOT_PATH=%t/prefix \
+# RUN:   -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
+# RUN:   -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
+# RUN:   -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \
+# RUN:   -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
+# RUN:   -DCMAKE_PREFIX_PATH=%t/prefix 2>&1 | FileCheck %s
+#
+# CHECK: Found CursesAndPanel:
+# CHECK: CURSES_LIBRARIES={{.*}}libcurses.a{{.*}}libterminfo.a
+# CHECK: TINFO_LIBRARIES={{.*}}libterminfo.a

>From f86c2a39c245ca59ef5112e5aa547163a4d8d9db Mon Sep 17 00:00:00 2001
From: nataliakokoromyti <nataliakokoromyti at gmail.com>
Date: Sun, 12 Apr 2026 17:04:39 -0700
Subject: [PATCH 3/3] shrink cmake test

---
 .../Inputs/setup-curses-and-panel-terminfo.py | 68 +++++++++++++++++++
 .../find-curses-and-panel-terminfo.test       | 34 ++--------
 2 files changed, 72 insertions(+), 30 deletions(-)
 create mode 100644 lldb/test/Shell/BuildScript/Inputs/setup-curses-and-panel-terminfo.py

diff --git a/lldb/test/Shell/BuildScript/Inputs/setup-curses-and-panel-terminfo.py b/lldb/test/Shell/BuildScript/Inputs/setup-curses-and-panel-terminfo.py
new file mode 100644
index 0000000000000..08aac5b93fed6
--- /dev/null
+++ b/lldb/test/Shell/BuildScript/Inputs/setup-curses-and-panel-terminfo.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+
+import pathlib
+import shutil
+import subprocess
+import sys
+
+
+def write(path: pathlib.Path, contents: str) -> None:
+    path.parent.mkdir(parents=True, exist_ok=True)
+    path.write_text(contents)
+
+
+def run(*args: str) -> None:
+    subprocess.run(args, check=True)
+
+
+def main() -> int:
+    root = pathlib.Path(sys.argv[1])
+    modules = pathlib.Path(sys.argv[2]).resolve()
+    prefix = root / "prefix"
+    src = root / "src"
+
+    shutil.rmtree(root, ignore_errors=True)
+    (prefix / "include").mkdir(parents=True)
+    (prefix / "lib").mkdir(parents=True)
+    src.mkdir(parents=True)
+
+    write(
+        prefix / "include" / "curses.h",
+        "#ifndef CURSES_H\n#define CURSES_H\nint cbreak(void);\n"
+        "int nodelay(void *, int);\n#endif\n",
+    )
+    write(
+        src / "curses.c",
+        "int cbreak(void) { return 0; }\n"
+        "int nodelay(void *w, int bf) { (void)w; (void)bf; return 0; }\n",
+    )
+    write(src / "panel.c", "int panel_dummy(void) { return 0; }\n")
+    write(src / "terminfo.c", "int acs_map = 0;\n")
+
+    cc = shutil.which("cc") or shutil.which("clang")
+    ar = shutil.which("ar")
+    if not cc or not ar:
+        raise RuntimeError("missing cc/clang or ar")
+
+    run(cc, "-c", str(src / "curses.c"), "-o", str(src / "curses.o"))
+    run(cc, "-c", str(src / "panel.c"), "-o", str(src / "panel.o"))
+    run(cc, "-c", str(src / "terminfo.c"), "-o", str(src / "terminfo.o"))
+    run(ar, "rcs", str(prefix / "lib" / "libcurses.a"), str(src / "curses.o"))
+    run(ar, "rcs", str(prefix / "lib" / "libpanel.a"), str(src / "panel.o"))
+    run(ar, "rcs", str(prefix / "lib" / "libterminfo.a"), str(src / "terminfo.o"))
+
+    write(
+        root / "CMakeLists.txt",
+        "cmake_minimum_required(VERSION 3.20)\n"
+        "project(find-curses-and-panel-terminfo C)\n"
+        "include(CheckSymbolExists)\n"
+        f'list(PREPEND CMAKE_MODULE_PATH "{modules}")\n'
+        "find_package(CursesAndPanel REQUIRED)\n"
+        'message(STATUS "CURSES_LIBRARIES=${CURSES_LIBRARIES}")\n'
+        'message(STATUS "TINFO_LIBRARIES=${TINFO_LIBRARIES}")\n',
+    )
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())
diff --git a/lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test b/lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test
index ad5c89691e2d0..19184ccdbdff7 100644
--- a/lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test
+++ b/lldb/test/Shell/BuildScript/find-curses-and-panel-terminfo.test
@@ -1,36 +1,10 @@
 # UNSUPPORTED: windows-msvc, windows-gnu
 #
-# This verifies that FindCursesAndPanel.cmake accepts platforms where the
-# separate terminfo library is named libterminfo instead of libtinfo.
-#
-# RUN: rm -rf %t && mkdir -p %t/prefix/include %t/prefix/lib %t/src
-#
-# RUN: echo '#ifndef CURSES_H' > %t/prefix/include/curses.h
-# RUN: echo '#define CURSES_H' >> %t/prefix/include/curses.h
-# RUN: echo 'int cbreak(void);' >> %t/prefix/include/curses.h
-# RUN: echo 'int nodelay(void *, int);' >> %t/prefix/include/curses.h
-# RUN: echo '#endif' >> %t/prefix/include/curses.h
-#
-# RUN: echo 'int cbreak(void) { return 0; }' > %t/src/curses.c
-# RUN: echo 'int nodelay(void *w, int bf) { (void)w; (void)bf; return 0; }' >> %t/src/curses.c
-# RUN: echo 'int panel_dummy(void) { return 0; }' > %t/src/panel.c
-# RUN: echo 'int acs_map = 0;' > %t/src/terminfo.c
-#
-# RUN: %clang_host -c %t/src/curses.c -o %t/src/curses.o
-# RUN: %clang_host -c %t/src/panel.c -o %t/src/panel.o
-# RUN: %clang_host -c %t/src/terminfo.c -o %t/src/terminfo.o
-# RUN: ar rcs %t/prefix/lib/libcurses.a %t/src/curses.o
-# RUN: ar rcs %t/prefix/lib/libpanel.a %t/src/panel.o
-# RUN: ar rcs %t/prefix/lib/libterminfo.a %t/src/terminfo.o
-#
-# RUN: echo 'cmake_minimum_required(VERSION 3.20)' > %t/CMakeLists.txt
-# RUN: echo 'project(find-curses-and-panel-terminfo C)' >> %t/CMakeLists.txt
-# RUN: echo 'include(CheckSymbolExists)' >> %t/CMakeLists.txt
-# RUN: echo 'list(PREPEND CMAKE_MODULE_PATH "%S/../../../cmake/modules")' >> %t/CMakeLists.txt
-# RUN: echo 'find_package(CursesAndPanel REQUIRED)' >> %t/CMakeLists.txt
-# RUN: echo 'message(STATUS "CURSES_LIBRARIES=${CURSES_LIBRARIES}")' >> %t/CMakeLists.txt
-# RUN: echo 'message(STATUS "TINFO_LIBRARIES=${TINFO_LIBRARIES}")' >> %t/CMakeLists.txt
+# Verify that FindCursesAndPanel.cmake accepts a separate libterminfo when
+# libtinfo is absent.
 #
+# RUN: rm -rf %t
+# RUN: %python %S/Inputs/setup-curses-and-panel-terminfo.py %t %S/../../../cmake/modules
 # RUN: cmake -S %t -B %t/build \
 # RUN:   -DCMAKE_FIND_ROOT_PATH=%t/prefix \
 # RUN:   -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \



More information about the lldb-commits mailing list