| #!/usr/bin/env python3 |
| # |
| # Copyright © 2021 Intel Corporation |
| # |
| # Permission is hereby granted, free of charge, to any person obtaining a |
| # copy of this software and associated documentation files (the |
| # "Software"), to deal in the Software without restriction, including |
| # without limitation the rights to use, copy, modify, merge, publish, |
| # distribute, sub license, and/or sell copies of the Software, and to |
| # permit persons to whom the Software is furnished to do so, subject to |
| # the following conditions: |
| # |
| # The above copyright notice and this permission notice (including the |
| # next paragraph) shall be included in all copies or substantial portions |
| # of the Software. |
| # |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| # IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR |
| # ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| |
| import argparse |
| from mako.template import Template |
| import os |
| import subprocess |
| import tempfile |
| |
| INPUT_PATHS = [ |
| 'src/compiler/nir/nir.h', |
| 'src/intel/isl', |
| 'src/vulkan/runtime', |
| ] |
| |
| TEMPLATE_DOXYFILE = Template(""" |
| # Doxyfile 1.9.1 |
| DOXYFILE_ENCODING = UTF-8 |
| PROJECT_NAME = "Mesa" |
| |
| INPUT = ${' '.join(input_files)} |
| XML_OUTPUT = ${output_xml} |
| |
| # Only generate XML |
| GENERATE_HTML = NO |
| GENERATE_LATEX = NO |
| GENERATE_XML = YES |
| |
| # Add aliases for easily writing reStructuredText in comments |
| ALIASES = "rst=\\verbatim embed:rst:leading-asterisk" |
| ALIASES += "endrst=\endverbatim" |
| |
| ENABLE_PREPROCESSING = YES |
| MACRO_EXPANSION = YES |
| EXPAND_ONLY_PREDEF = YES |
| |
| # Defines required to keep doxygen from tripping on our attribute macros |
| PREDEFINED = PACKED= |
| PREDEFINED += ATTRIBUTE_CONST= |
| PREDEFINED += MUST_CHECK= |
| """) |
| |
| def run_doxygen(output_path, input_paths=[]): |
| doxyfile = tempfile.NamedTemporaryFile(mode='w', delete=False) |
| try: |
| doxyfile.write(TEMPLATE_DOXYFILE.render( |
| input_files=[ os.path.abspath(i) for i in input_paths ], |
| output_xml=os.path.abspath(output_path), |
| )) |
| doxyfile.close() |
| |
| subprocess.run(['doxygen', doxyfile.name]) |
| |
| finally: |
| doxyfile.close() |
| os.unlink(doxyfile.name) |
| |
| if __name__ == '__main__': |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--out-dir', |
| help='Output XML directory.', |
| required=True) |
| args = parser.parse_args() |
| |
| this_dir = os.path.dirname(os.path.abspath(__file__)) |
| mesa_dir = os.path.join(this_dir, '..') |
| def fixpath(p): |
| if os.path.isabs(p): |
| return p |
| return os.path.join(mesa_dir, p) |
| |
| input_paths = [ fixpath(p) for p in INPUT_PATHS ] |
| |
| run_doxygen(args.out_dir, input_paths) |