77
88import os
99import re
10- import sys
1110
1211from pygccxml import parser
1312from pygccxml import utils
1413from pyplusplus import module_builder , decl_wrappers
1514
1615import fileinput
17-
16+ import subprocess
1817import warnings
1918
2019
@@ -40,6 +39,20 @@ def get_list_of_files(directory, ignore_files):
4039
4140 return all_files
4241
42+ def get_compiler_include_dirs (compiler_path ):
43+ # 1. Get the multiarch triplet (e.g., x86_64-linux-gnu)
44+ triplet = subprocess .check_output ([compiler_path , "-dumpmachine" ]).decode ().strip ()
45+
46+ # 2. Get the GCC version (e.g., 13)
47+ version = subprocess .check_output ([compiler_path , "-dumpfullversion" ]).decode ().strip ().split ('.' )[0 ]
48+
49+ # 3. Construct the standard paths
50+ # Usually: /usr/include/c++/13
51+ base_dir = f"/usr/include/c++/{ version } "
52+ # Usually: /usr/include/x86_64-linux-gnu/c++/13
53+ arch_dir = f"/usr/include/{ triplet } /c++/{ version } "
54+
55+ return [base_dir , arch_dir ]
4356
4457def generate_python_wrapper (header_directories , include_paths , library_name , cpp_filename , declarations , main_namespace = "" , ignore_declarations = {}, ignore_files = {}, add_declarations = {}):
4558 """
@@ -71,7 +84,7 @@ def generate_python_wrapper(header_directories, include_paths, library_name, cpp
7184
7285 # Find out the xml generator (gccxml or castxml)
7386 generator_path , generator_name = utils .find_xml_generator ()
74- compiler = "@CXX @"
87+ compiler = "@CMAKE_CXX_COMPILER @"
7588
7689 # Create configuration for CastXML
7790 xml_generator_config = parser .xml_generator_configuration_t (
@@ -85,6 +98,10 @@ def generate_python_wrapper(header_directories, include_paths, library_name, cpp
8598 xml_generator_config .append_cflags ("-Wno-error=invalid-constexpr" )
8699 xml_generator_config .append_cflags ("-DSAFE_DATATYPES_EXPLICIT_CONVERSION=1" )
87100 xml_generator_config .append_cflags ("-fsized-deallocation" )
101+ for folder in get_compiler_include_dirs (compiler ):
102+ if os .path .exists (folder ):
103+ xml_generator_config .append_cflags (f"-isystem { folder } " )
104+
88105
89106 for inc_dir in include_paths :
90107 xml_generator_config .include_paths .append (inc_dir )
0 commit comments