From 57de72be35a2fe9f62fe5e0b4babbc2bf09a480b Mon Sep 17 00:00:00 2001 From: berndgassmann Date: Wed, 28 Jan 2026 15:23:28 +0100 Subject: [PATCH] Some robustness increase on Ubuntu 24.04 --- .../include/ad/map/point/GeoPoint.hpp | 2 ++ .../python/generate_python_lib.py.in | 3 +++ ad_physics/python/generate_python_lib.py.in | 2 ++ cmake/python/python_wrapper_helper.py.in | 23 ++++++++++++++++--- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ad_map_access/generated/include/ad/map/point/GeoPoint.hpp b/ad_map_access/generated/include/ad/map/point/GeoPoint.hpp index 73cee35ea..14ec2317d 100644 --- a/ad_map_access/generated/include/ad/map/point/GeoPoint.hpp +++ b/ad_map_access/generated/include/ad/map/point/GeoPoint.hpp @@ -17,6 +17,7 @@ #pragma once +#include #include #include #include @@ -171,6 +172,7 @@ inline std::ostream &operator<<(std::ostream &os, GeoPoint const &_value) { os << "GeoPoint("; os << "longitude:"; + os << std::setprecision(9); os << _value.longitude; os << ","; os << "latitude:"; diff --git a/ad_map_access/python/generate_python_lib.py.in b/ad_map_access/python/generate_python_lib.py.in index 03ef813e8..e90984169 100644 --- a/ad_map_access/python/generate_python_lib.py.in +++ b/ad_map_access/python/generate_python_lib.py.in @@ -136,6 +136,9 @@ def main(): additional_replacements_component.append( ("bp::class_< std::vector, false, true>>, boost::noncopyable >( \"PolygonVector\" )", "// generate_python_lib.py: PolygonVector manually removed here") ) + additional_replacements_component.append( + ("bp::class_, false, true>>, boost::noncopyable>( \"PolygonVector\" )", "// generate_python_lib.py: PolygonVector manually removed here") + ) additional_replacements_component.append( (".def( bp::indexing::vector_suite< std::vector< boost::geometry::model::polygon, false, true, std::vector, std::vector, std::allocator, std::allocator> > >() );", "// generate_python_lib.py: PolygonVector manually removed here") ) diff --git a/ad_physics/python/generate_python_lib.py.in b/ad_physics/python/generate_python_lib.py.in index 077ffdf8d..7d7918b6e 100644 --- a/ad_physics/python/generate_python_lib.py.in +++ b/ad_physics/python/generate_python_lib.py.in @@ -43,9 +43,11 @@ def main(): ("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less__double__greater__comma__false_comma__true__greater_", "Polygon"), ("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less__double__greater__comma__false__greater_", "Polygon"), ("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less_double_greater__comma__false_greater_", "Polygon"), + ("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_point_xy_less_double_greater__comma__false_comma__true_greater_", "Polygon"), ("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_comma__true_comma__std_scope_vector_comma__std_scope_vector_comma__std_scope_allocator_comma__std_scope_allocator__greater_", "Polygon"), ("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_comma__true__greater_", "Polygon"), + ("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_comma__true_greater_", "Polygon"), ("polygon_less__boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false__greater_", "Polygon"), ("polygon_less_boost_scope_geometry_scope_model_scope_d2_scope_Point_comma__false_greater_", "Polygon"), diff --git a/cmake/python/python_wrapper_helper.py.in b/cmake/python/python_wrapper_helper.py.in index ac9214a01..e37afec13 100644 --- a/cmake/python/python_wrapper_helper.py.in +++ b/cmake/python/python_wrapper_helper.py.in @@ -7,14 +7,13 @@ import os import re -import sys from pygccxml import parser from pygccxml import utils from pyplusplus import module_builder, decl_wrappers import fileinput - +import subprocess import warnings @@ -40,6 +39,20 @@ def get_list_of_files(directory, ignore_files): return all_files +def get_compiler_include_dirs(compiler_path): + # 1. Get the multiarch triplet (e.g., x86_64-linux-gnu) + triplet = subprocess.check_output([compiler_path, "-dumpmachine"]).decode().strip() + + # 2. Get the GCC version (e.g., 13) + version = subprocess.check_output([compiler_path, "-dumpfullversion"]).decode().strip().split('.')[0] + + # 3. Construct the standard paths + # Usually: /usr/include/c++/13 + base_dir = f"/usr/include/c++/{version}" + # Usually: /usr/include/x86_64-linux-gnu/c++/13 + arch_dir = f"/usr/include/{triplet}/c++/{version}" + + return [base_dir, arch_dir] def generate_python_wrapper(header_directories, include_paths, library_name, cpp_filename, declarations, main_namespace="", ignore_declarations={}, ignore_files={}, add_declarations={}): """ @@ -71,7 +84,7 @@ def generate_python_wrapper(header_directories, include_paths, library_name, cpp # Find out the xml generator (gccxml or castxml) generator_path, generator_name = utils.find_xml_generator() - compiler = "@CXX@" + compiler = "@CMAKE_CXX_COMPILER@" # Create configuration for CastXML xml_generator_config = parser.xml_generator_configuration_t( @@ -85,6 +98,10 @@ def generate_python_wrapper(header_directories, include_paths, library_name, cpp xml_generator_config.append_cflags("-Wno-error=invalid-constexpr") xml_generator_config.append_cflags("-DSAFE_DATATYPES_EXPLICIT_CONVERSION=1") xml_generator_config.append_cflags("-fsized-deallocation") + for folder in get_compiler_include_dirs(compiler): + if os.path.exists(folder): + xml_generator_config.append_cflags(f"-isystem {folder}") + for inc_dir in include_paths: xml_generator_config.include_paths.append(inc_dir)