# coding=utf-8 # # QEMU depfile generation extension # # Copyright (c) 2020 Red Hat, Inc. # # This work is licensed under the terms of the GNU GPLv2 or later. # See the COPYING file in the top-level directory. """depfile is a Sphinx extension that writes a dependency file for an external build system""" import os import sphinx import sys from pathlib import Path __version__ = '1.0' def get_infiles(env): for x in env.found_docs: yield env.doc2path(x) yield from ((os.path.join(env.srcdir, dep) for dep in env.dependencies[x])) for mod in sys.modules.values(): if hasattr(mod, '__file__'): if mod.__file__: yield mod.__file__ # this is perhaps going to include unused files: for static_path in env.config.html_static_path + env.config.templates_path: for path in Path(static_path).rglob('*'): yield str(path) def write_depfile(app, exception): if exception: return env = app.env if not env.config.depfile: return # Using a directory as the output file does not work great because # its timestamp does not necessarily change when the contents change. # So create a timestamp file. if env.config.depfile_stamp: with open(env.config.depfile_stamp, 'w') as f: pass with open(env.config.depfile, 'w') as f: print((env.config.depfile_stamp or app.outdir) + ": \\", file=f) print(*get_infiles(env), file=f) for x in get_infiles(env): print(x + ":", file=f) def setup(app): app.add_config_value('depfile', None, 'env') app.add_config_value('depfile_stamp', None, 'env') app.connect('build-finished', write_depfile) return dict( version = __version__, parallel_read_safe = True, parallel_write_safe = True )