[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