mirror of
https://github.com/yuzu-emu/unicorn
synced 2024-11-25 09:49:07 +00:00
qapi: Touch generated files only when they change
A massive number of objects depends on QAPI-generated headers. In my "build everything" tree, it's roughly 4800 out of 5100. This is particularly annoying when only some of the generated files change, say for a doc fix. Improve qapi-gen.py to touch its output files only if they actually change. Rebuild time for a QAPI doc fix drops from many minutes to a few seconds. Rebuilds get faster for certain code changes, too. For instance, adding a simple QMP event now recompiles less than 200 instead of 4800 objects. But adding a QAPI type is as bad as ever; we've clearly got more work to do. Backports commit 907b846653fb3757bf2ab98d6d66f92df34d875f from qemu
This commit is contained in:
parent
3b1d4defe3
commit
d74daa8fce
1 changed files with 9 additions and 2 deletions
|
@ -1956,9 +1956,16 @@ class QAPIGen(object):
|
|||
except os.error as e:
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
f = open(os.path.join(output_dir, fname), 'w')
|
||||
f.write(self._top(fname) + self._preamble + self._body
|
||||
fd = os.open(os.path.join(output_dir, fname),
|
||||
os.O_RDWR | os.O_CREAT, 0o666)
|
||||
f = os.fdopen(fd, 'r+')
|
||||
text = (self._top(fname) + self._preamble + self._body
|
||||
+ self._bottom(fname))
|
||||
oldtext = f.read(len(text) + 1)
|
||||
if text != oldtext:
|
||||
f.seek(0)
|
||||
f.truncate(0)
|
||||
f.write(text)
|
||||
f.close()
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue