| 
									
										
										
										
											2020-08-11 09:07:04 +02:00
										 |  |  | # 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 | 
					
						
							| 
									
										
										
										
											2021-10-08 22:31:06 +04:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2021-10-09 01:46:10 +04:00
										 |  |  | from pathlib import Path | 
					
						
							| 
									
										
										
										
											2020-08-11 09:07:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | __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])) | 
					
						
							| 
									
										
										
										
											2021-10-08 22:31:06 +04:00
										 |  |  |     for mod in sys.modules.values(): | 
					
						
							|  |  |  |         if hasattr(mod, '__file__'): | 
					
						
							|  |  |  |             if mod.__file__: | 
					
						
							|  |  |  |                 yield mod.__file__ | 
					
						
							| 
									
										
										
										
											2021-10-09 01:46:10 +04:00
										 |  |  |     # this is perhaps going to include unused files: | 
					
						
							| 
									
										
										
										
											2021-10-09 01:57:51 +04:00
										 |  |  |     for static_path in env.config.html_static_path + env.config.templates_path: | 
					
						
							| 
									
										
										
										
											2021-10-09 01:46:10 +04:00
										 |  |  |         for path in Path(static_path).rglob('*'): | 
					
						
							|  |  |  |             yield str(path) | 
					
						
							| 
									
										
										
										
											2020-08-11 09:07:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-08 22:31:06 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | def write_depfile(app, exception): | 
					
						
							|  |  |  |     if exception: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     env = app.env | 
					
						
							| 
									
										
										
										
											2020-08-11 09:07:04 +02:00
										 |  |  |     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') | 
					
						
							| 
									
										
										
										
											2021-10-08 22:31:06 +04:00
										 |  |  |     app.connect('build-finished', write_depfile) | 
					
						
							| 
									
										
										
										
											2020-08-11 09:07:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return dict( | 
					
						
							|  |  |  |         version = __version__, | 
					
						
							|  |  |  |         parallel_read_safe = True, | 
					
						
							|  |  |  |         parallel_write_safe = True | 
					
						
							|  |  |  |     ) |