Skip to content

Commit 249cf35

Browse files
authored
[lldb][test][NFC] Add option to exclude third_party packages (#83191)
The goal here is to remove the third_party/Python/module tree, which LLDB tests only use to `import pexpect`. This package is available on `pip`, and I believe should not be hard to obtain. However, in case it isn't easily available, deleting the tree right now could cause disruption. This introduces a `LLDB_TEST_USE_VENDOR_PACKAGES` cmake param that can be enabled, and the tests will continue loading that tree. By default, it is enabled, meaning there's really no change here. A followup change will disable it by default once all known build bots are updated to include this package. When disabled, an eager cmake check runs that makes sure `pexpect` is available before waiting for the test to fail in an obscure way. Later, this option will go away, and when it does, we can delete the tree too. Ideally this is not disruptive, and we can remove it in a week or two.
1 parent 330793c commit 249cf35

File tree

7 files changed

+31
-2
lines changed

7 files changed

+31
-2
lines changed

lldb/cmake/modules/LLDBConfig.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ option(LLDB_SKIP_STRIP "Whether to skip stripping of binaries when installing ll
6767
option(LLDB_SKIP_DSYM "Whether to skip generating a dSYM when installing lldb." OFF)
6868
option(LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS
6969
"Fail to configure if certain requirements are not met for testing." OFF)
70+
option(LLDB_TEST_USE_VENDOR_PACKAGES
71+
"Use packages from lldb/third_party/Python/module instead of system deps." ON)
7072

7173
set(LLDB_GLOBAL_INIT_DIRECTORY "" CACHE STRING
7274
"Path to the global lldbinit directory. Relative paths are resolved relative to the

lldb/test/API/lit.cfg.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,3 +309,6 @@ def delete_module_cache(path):
309309
# Propagate XDG_CACHE_HOME
310310
if "XDG_CACHE_HOME" in os.environ:
311311
config.environment["XDG_CACHE_HOME"] = os.environ["XDG_CACHE_HOME"]
312+
313+
if is_configured("use_vendor_packages"):
314+
config.environment["LLDB_TEST_USE_VENDOR_PACKAGES"] = "1"

lldb/test/API/lit.site.cfg.py.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ config.libcxx_include_target_dir = "@LIBCXX_GENERATED_INCLUDE_TARGET_DIR@"
3838
# The API tests use their own module caches.
3939
config.lldb_module_cache = os.path.join("@LLDB_TEST_MODULE_CACHE_LLDB@", "lldb-api")
4040
config.clang_module_cache = os.path.join("@LLDB_TEST_MODULE_CACHE_CLANG@", "lldb-api")
41+
config.use_vendor_packages = @LLDB_TEST_USE_VENDOR_PACKAGES@
4142

4243
# Plugins
4344
lldb_build_intel_pt = '@LLDB_BUILD_INTEL_PT@'

lldb/test/CMakeLists.txt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@ if(LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS)
2626
endforeach()
2727
endif()
2828

29+
# The "pexpect" package should come from the system environment, not from the
30+
# LLDB tree. However, we delay the deletion of it from the tree in case
31+
# users/buildbots don't have the package yet and need some time to install it.
32+
if (NOT LLDB_TEST_USE_VENDOR_PACKAGES)
33+
lldb_find_python_module(pexpect)
34+
if (NOT PY_pexpect_FOUND)
35+
message(FATAL_ERROR
36+
"Python module 'pexpect' not found. Please install it via pip or via "
37+
"your operating system's package manager. For a temporary workaround, "
38+
"use a version from the LLDB tree with "
39+
"`LLDB_TEST_USE_VENDOR_PACKAGES=ON`")
40+
endif()
41+
endif()
42+
2943
if(LLDB_BUILT_STANDALONE)
3044
# In order to run check-lldb-* we need the correct map_config directives in
3145
# llvm-lit. Because this is a standalone build, LLVM doesn't know about LLDB,
@@ -240,7 +254,8 @@ llvm_canonicalize_cmake_booleans(
240254
LLDB_HAS_LIBCXX
241255
LLDB_TOOL_LLDB_SERVER_BUILD
242256
LLDB_USE_SYSTEM_DEBUGSERVER
243-
LLDB_IS_64_BITS)
257+
LLDB_IS_64_BITS
258+
LLDB_TEST_USE_VENDOR_PACKAGES)
244259

245260
# Configure the individual test suites.
246261
add_subdirectory(API)

lldb/use_lldb_suite_root.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,7 @@ def add_lldbsuite_packages_dir(lldb_root):
2121

2222
lldb_root = os.path.dirname(inspect.getfile(inspect.currentframe()))
2323

24-
add_third_party_module_dirs(lldb_root)
24+
# Use environment variables to avoid plumbing flags, lit configs, etc.
25+
if os.getenv("LLDB_TEST_USE_VENDOR_PACKAGES"):
26+
add_third_party_module_dirs(lldb_root)
2527
add_lldbsuite_packages_dir(lldb_root)

lldb/utils/lldb-dotest/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ set(LLDB_LIBS_DIR "${LLVM_LIBRARY_OUTPUT_INTDIR}")
1010
llvm_canonicalize_cmake_booleans(
1111
LLDB_BUILD_INTEL_PT
1212
LLDB_HAS_LIBCXX
13+
LLDB_TEST_USE_VENDOR_PACKAGES
1314
)
1415

1516
if ("libcxx" IN_LIST LLVM_ENABLE_RUNTIMES)

lldb/utils/lldb-dotest/lldb-dotest.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!@Python3_EXECUTABLE@
2+
import os
23
import subprocess
34
import sys
45

@@ -17,8 +18,12 @@ has_libcxx = @LLDB_HAS_LIBCXX@
1718
libcxx_libs_dir = "@LIBCXX_LIBRARY_DIR@"
1819
libcxx_include_dir = "@LIBCXX_GENERATED_INCLUDE_DIR@"
1920
libcxx_include_target_dir = "@LIBCXX_GENERATED_INCLUDE_TARGET_DIR@"
21+
use_vendor_packages = @LLDB_TEST_USE_VENDOR_PACKAGES@
2022

2123
if __name__ == '__main__':
24+
if use_vendor_packages:
25+
os.putenv("LLDB_TEST_USE_VENDOR_PACKAGES", "1")
26+
2227
wrapper_args = sys.argv[1:]
2328
dotest_args = []
2429
# split on an empty string will produce [''] and if you

0 commit comments

Comments
 (0)