Skip to content

Commit 60da858

Browse files
srikantharunSrikanth Arunachalam
authored andcommitted
Use readdir() instead of executing ls command
1 parent af903f5 commit 60da858

File tree

1 file changed

+21
-25
lines changed

1 file changed

+21
-25
lines changed

toolchain/internal/configure.bzl

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -86,35 +86,31 @@ def _detect_gcc_cxx_headers(rctx, sysroot_path, target_system_name):
8686

8787
# Check for GCC C++ headers in common locations
8888
# Modern distros (Debian 10+, Ubuntu 18.04+): /usr/include/c++/<version>
89-
cxx_include_base = sysroot_path + "/usr/include/c++"
90-
if rctx.path(cxx_include_base).exists:
89+
cxx_include_path = rctx.path(sysroot_path + "/usr/include/c++")
90+
if cxx_include_path.exists:
9191
# Find GCC version directories (e.g., "14", "13", "12")
92-
result = rctx.execute(["ls", cxx_include_base])
93-
if result.return_code == 0:
94-
versions = [v.strip() for v in result.stdout.strip().split("\n") if v.strip()]
95-
for version in versions:
96-
# Add main C++ headers
97-
include_dirs.append("/usr/include/c++/" + version)
98-
# Add target-specific headers (for multi-arch)
99-
include_dirs.append("/usr/include/" + gnu_triple + "/c++/" + version)
100-
# Add backward compatibility headers
101-
include_dirs.append("/usr/include/c++/" + version + "/backward")
92+
for entry in cxx_include_path.readdir():
93+
version = entry.basename
94+
# Add main C++ headers
95+
include_dirs.append("/usr/include/c++/" + version)
96+
# Add target-specific headers (for multi-arch)
97+
include_dirs.append("/usr/include/" + gnu_triple + "/c++/" + version)
98+
# Add backward compatibility headers
99+
include_dirs.append("/usr/include/c++/" + version + "/backward")
102100

103101
# Also check traditional GCC installation path: /usr/lib/gcc/<triple>/<version>/...
104102
# This is the layout used by older distros and Chromium sysroots
105-
gcc_lib_base = sysroot_path + "/usr/lib/gcc/" + gnu_triple
106-
if rctx.path(gcc_lib_base).exists:
107-
result = rctx.execute(["ls", gcc_lib_base])
108-
if result.return_code == 0:
109-
versions = [v.strip() for v in result.stdout.strip().split("\n") if v.strip()]
110-
for version in versions:
111-
# Traditional GCC include path structure uses relative paths from gcc lib dir
112-
# e.g., /usr/lib/gcc/x86_64-linux-gnu/6/../../../../include/c++/6
113-
# which resolves to /usr/include/c++/6
114-
base = "/usr/lib/gcc/" + gnu_triple + "/" + version
115-
include_dirs.append(base + "/../../../../include/c++/" + version)
116-
include_dirs.append(base + "/../../../../include/" + gnu_triple + "/c++/" + version)
117-
include_dirs.append(base + "/../../../../include/c++/" + version + "/backward")
103+
gcc_lib_path = rctx.path(sysroot_path + "/usr/lib/gcc/" + gnu_triple)
104+
if gcc_lib_path.exists:
105+
for entry in gcc_lib_path.readdir():
106+
version = entry.basename
107+
# Traditional GCC include path structure uses relative paths from gcc lib dir
108+
# e.g., /usr/lib/gcc/x86_64-linux-gnu/6/../../../../include/c++/6
109+
# which resolves to /usr/include/c++/6
110+
base = "/usr/lib/gcc/" + gnu_triple + "/" + version
111+
include_dirs.append(base + "/../../../../include/c++/" + version)
112+
include_dirs.append(base + "/../../../../include/" + gnu_triple + "/c++/" + version)
113+
include_dirs.append(base + "/../../../../include/c++/" + version + "/backward")
118114

119115
return include_dirs
120116

0 commit comments

Comments
 (0)