qapi: untie 'if' conditions from C preprocessor Hi, This series makes the 'if' conditions less liberal, by formalizing a simple expression tree based on bare boolean logic of configure option identifiers. (this will allow to express conditions in Rust in my QAPI-Rust PoC series, but it is worth a standalone post) This is based on John Snow QAPI cleanup branch: https://gitlab.com/jsnow/qemu/-/tree/python-qapi-cleanup-pt6 thanks v4: - keep gen_if/gen_endif in common.py, reducing C codegen in schema.py - raise NotImplemented instead of False for unhandled __eq__ - change check_if() to keep the json/raw form, add _make_if() to build a QAPISchemaIfCond - improve __repr__ usage - drop ABC usage - tweaks here and there - add various commit tags v3: - rebasing on queued pt4 (after waiting for it to land) - improve documentation generation, to be more human-friendly - drop typing annotations from schema.py (not yet queued) - commit message tweaks v2: - fix the normalization step to handle recursive expr - replace IfCond by QAPISchemaIf (JohnS) - commit message and documentation tweaks - mypy/flake8/isort