#!/usr/bin/env python3 # Copyright 2022-2023, Collabora, Ltd. # # SPDX-License-Identifier: BSL-1.0 # # Original author: Rylie Pavlik ", "public", "\\"math/m_mathinclude.h\\"", "public"] },""", """{ include: ["", "public", "\\"math/m_mathinclude.h\\"", "public"] },""", """{ symbol: ["M_PI", "public", "\\"math/m_mathinclude.h\\"", "public"] },""", """{ symbol: ["M_PIl", "public", "\\"math/m_mathinclude.h\\"", "public"] },""", """{ symbol: ["M_1_PI", "public", "\\"math/m_mathinclude.h\\"", "public"] },""", """{ symbol: ["ssize_t", "public", "\\"xrt/xrt_compiler.h\\"", "public"] },""", ] _MISC_ERRORS = [ """{ include: ["@[<\\"]bits/exception.h[>\\"]", "private", "", "public"] },""", """{ include: ["@[<\\"]ext/alloc_traits.h[>\\"]", "private", "", "public"] },""", """{ include: ["@[<\\"]bits/types/struct_iovec.h.", "private", "", "public"] },""", ] _MISC_DEPS = [ """{ include: ["@[<\\"]jmoreconfig.h>\\"]", "private", "\\"jpeglib.h\\"", "public"] },""", ] _OPENCV_ENTRIES = [ """{ include: ["@", "private", "", "public"] },""", """{ include: ["@", "public"] },""", ] def _generate_openxr_entries(): for header in ("openxr_platform.h", "openxr_platform_defines.h"): yield """{ include: ["@[<\\"]openxr/%s.*", "private", "\\"xrt/xrt_openxr_includes.h\\"", "public"] },""" % header def _generate_eigen_entries(): for stubborn_header in ("ArrayBase", "MatrixBase", "DenseBase"): yield """{ include: ["@[<\\"]src/Core/%s.h[>\\"]", "private", "", "public"] },""" % ( stubborn_header, ) for module in ("Core", "Geometry", "LU", "SparseCore", "Sparse"): yield """{ include: ["@[<\\"]Eigen/src/%s/.*", "private", "", "public"] },""" % ( module, module, ) yield """{ include: ["@[<\\"]src/%s/.*", "private", "", "public"] },""" % ( module, module, ) _CONFIG_HEADERS = ( "xrt_config_android.h", "xrt_config_build.h", "xrt_config_drivers.h", "xrt_config_have.h", "xrt_config_vulkan.h", ) def _generate_config_header_defines(): for header in _CONFIG_HEADERS: input_filename = header + ".cmake_in" input_file = _REPO / "src" / "xrt" / "include" / "xrt" / input_filename with open(str(input_file), "r", encoding="utf-8") as fp: for line in fp: if line.startswith("#cmakedefine"): parts = line.split(" ") symbol = parts[1].strip() yield """{ symbol: ["%s", "public", "\\"xrt/%s\\"", "public"] },""" % ( symbol, header, ) def get_all_entries(): entries = [] entries.extend(_WRAPPERS) entries.extend(_MISC_ERRORS) entries.extend(_MISC_DEPS) # entries.extend(_OPENCV_ENTRIES) # entries.extend(_generate_eigen_entries()) entries.extend(_generate_openxr_entries()) entries.extend(_generate_config_header_defines()) return entries # REUSE-IgnoreStart def _find_copyright_lines(fn: Path, *args): with open(fn, encoding="utf-8") as f: copyright_lines = [line.strip() for line in f if line.startswith("# Copyright")] known_lines = set(copyright_lines) for alt_fn in args: with open(_SCRIPT_DIR / alt_fn, encoding="utf-8") as f: new_lines = [line.strip() for line in f if line.startswith("# Copyright")] copyright_lines.extend(line for line in new_lines if line not in known_lines) known_lines.update(new_lines) return copyright_lines def write_mapping_file(entries: List[str], output_filename: Path, script_name: str): """Write an IWYU mapping file with the given entries.""" # Grab all lines from this and our other script. lines = _find_copyright_lines(_FILE, script_name) lines += [ """#""", "# SPDX-License" + "-Identifier: BSL-1.0", # split to avoid breaking REUSE tool """#""", """# GENERATED - edit %s instead of this file""" % script_name, "[", ] lines.extend(entries) lines += "]" content = "".join(line + "\n" for line in lines) with open(output_filename, "w", encoding="utf-8") as fp: fp.write(content) # REUSE-IgnoreEnd def write_file(): my_script_fn = Path(__file__).resolve().name eigen_path = _SCRIPT_DIR / "eigen.imp" write_mapping_file(list(_generate_eigen_entries()), eigen_path, my_script_fn) opencv_path = _SCRIPT_DIR / "opencv.imp" write_mapping_file(_OPENCV_ENTRIES, opencv_path, my_script_fn) entries = get_all_entries() for ref_path in (eigen_path, opencv_path): entries.append("""{ ref: "%s" },""" % ref_path.name) write_mapping_file(entries, _OUTPUT_FILENAME, my_script_fn) if __name__ == "__main__": write_file()