@@ -97,6 +97,7 @@ Explicit cross-referencing syntax for QAPI modules is available with
:since: 13.37
:deprecated:
:unstable:
+ :ifcond: CONFIG_LINUX
This is a fake command, it's not real. It can't hurt you.
@@ -188,3 +188,16 @@ div[class^="highlight"] pre {
.qapi-deprecated::before {
content: '⚠️ ';
}
+
+.qapi-ifcond::before {
+ /* gaze ye into the crystal ball to determine feature availability */
+ content: '🔮 ';
+}
+
+.qapi-ifcond {
+ background-color: #f9f5ff;
+ border: solid #dac2ff 6px;
+ padding: 8px;
+ border-radius: 15px;
+ margin: 5px;
+}
@@ -15,6 +15,7 @@
NamedTuple,
Optional,
Tuple,
+ Union,
cast,
)
@@ -150,6 +151,7 @@ class QAPIObject(ObjectDescription[Signature]):
"module": directives.unchanged, # Override contextual module name
# These are QAPI originals:
"since": since_validator,
+ "ifcond": directives.unchanged,
"deprecated": directives.flag,
"unstable": directives.flag,
}
@@ -176,6 +178,20 @@ def get_signature_suffix(self, sig: str) -> List[nodes.Node]:
"""Returns a suffix to put after the object name in the signature."""
ret: List[nodes.Node] = []
+ if "ifcond" in self.options:
+ ret += [
+ addnodes.desc_sig_space(),
+ nodes.inline(
+ self.options["ifcond"],
+ "",
+ nodes.Text("["),
+ nodes.literal("", "#if"),
+ addnodes.desc_sig_space(),
+ nodes.literal(self.options["ifcond"], self.options["ifcond"]),
+ nodes.Text("]"),
+ ),
+ ]
+
if "since" in self.options:
ret += [
addnodes.desc_sig_space(),
@@ -257,9 +273,14 @@ def _add_infopips(self, contentnode: addnodes.desc_content) -> None:
infopips = nodes.container()
infopips.attributes["classes"].append("qapi-infopips")
- def _add_pip(source: str, content: str, classname: str) -> None:
+ def _add_pip(
+ source: str, content: Union[str, List[nodes.Node]], classname: str
+ ) -> None:
node = nodes.container(source)
- node.append(nodes.Text(content))
+ if isinstance(content, str):
+ node.append(nodes.Text(content))
+ else:
+ node.extend(content)
node.attributes["classes"].extend(["qapi-infopip", classname])
infopips.append(node)
@@ -277,6 +298,18 @@ def _add_pip(source: str, content: str, classname: str) -> None:
"qapi-unstable",
)
+ if self.options.get("ifcond", ""):
+ ifcond = self.options["ifcond"]
+ _add_pip(
+ f":ifcond: {ifcond}",
+ [
+ nodes.emphasis("", "Availability"),
+ nodes.Text(": "),
+ nodes.literal(ifcond, ifcond),
+ ],
+ "qapi-ifcond",
+ )
+
if infopips.children:
contentnode.insert(0, infopips)