@@ -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