Browse Source

fileAPI: Refactor toolchains schema to prepare for new version

Co-authored-by: Craig Scott <[email protected]>
Christian Walther 2 weeks ago
parent
commit
1e02926c9a
1 changed files with 117 additions and 73 deletions
  1. 117 73
      Help/manual/file_api/schema_toolchains.json

+ 117 - 73
Help/manual/file_api/schema_toolchains.json

@@ -7,13 +7,18 @@
     "version",
     "toolchains"
   ],
-  "properties": {
+  "oneOf": [
+    {
+      "$ref": "#/definitions/toolchainsObjV1_0"
+    }
+  ],
+  "definitions": {
     "kind": {
       "type": "string",
       "const": "toolchains",
       "description": "Specifies the object kind"
     },
-    "version": {
+    "versionV1_0": {
       "type": "object",
       "required": [
         "major",
@@ -31,87 +36,126 @@
       },
       "additionalProperties": false
     },
-    "toolchains": {
+    "language": {
+      "type": "string",
+      "description": "Toolchain language identifier (e.g. C, CXX)"
+    },
+    "sourceFileExtensions": {
       "type": "array",
-      "description": "Array of toolchain configurations per language",
       "items": {
-        "type": "object",
-        "required": [
-          "language",
-          "compiler"
-        ],
-        "properties": {
-          "language": {
-            "type": "string",
-            "description": "Toolchain language identifier (e.g. C, CXX)"
+        "type": "string"
+      },
+      "description": "List of source file extensions (without leading dot) supported by this toolchain"
+    },
+    "compilerPath": {
+      "type": "string",
+      "description": "Path to the compiler executable. This is present when the CMAKE_<LANG>_COMPILER variable is defined."
+    },
+    "compilerCommandFragment": {
+      "type": "string",
+      "description": "Mandatory arguments to the compiler, as a command line fragment. This is present when the CMAKE_<LANG>_COMPILER variable is a list containing multiple elements or the CC or similar environment variable contains command line arguments."
+    },
+    "compilerId": {
+      "type": "string",
+      "description": "Compiler identifier (e.g. GNU, MSVC). This is present when the CMAKE_<LANG>_COMPILER_ID variable is defined."
+    },
+    "compilerVersion": {
+      "type": "string",
+      "description": "Version of the compiler. This is present when the CMAKE_<LANG>_COMPILER_VERSION variable is defined."
+    },
+    "compilerTarget": {
+      "type": "string",
+      "description": "Cross-compiling target of the compiler. This is present when the CMAKE_<LANG>_COMPILER_TARGET variable is defined."
+    },
+    "compilerImplicit": {
+      "type": "object",
+      "properties": {
+        "includeDirectories": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "List of implicit include directories for the compiler. This is present when the CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES variable is defined."
+        },
+        "linkDirectories": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "List of implicit link directories for the compiler front end. This is present when the CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES variable is defined."
+        },
+        "linkFrameworkDirectories": {
+          "type": "array",
+          "items": {
+            "type": "string"
           },
-          "compiler": {
+          "description": "List of implicit link framework directories for the compiler front end. This is present when the CMAKE_<LANG>_IMPLICIT_FRAMEWORK_DIRECTORIES variable is defined."
+        },
+        "linkLibraries": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "List of implicit link libraries for the compiler front end. This is present when the CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES variable is defined."
+        }
+      },
+      "additionalProperties": false
+    },
+    "compiler": {
+      "type": "object",
+      "properties": {
+        "path": {
+          "$ref": "#/definitions/compilerPath"
+        },
+        "id": {
+          "$ref": "#/definitions/compilerId"
+        },
+        "version": {
+          "$ref": "#/definitions/compilerVersion"
+        },
+        "target": {
+          "$ref": "#/definitions/compilerTarget"
+        },
+        "implicit": {
+          "$ref": "#/definitions/compilerImplicit"
+        }
+      },
+      "additionalProperties": false
+    },
+    "toolchainsObjV1_0": {
+      "type": "object",
+      "properties": {
+        "kind": {
+          "$ref": "#/definitions/kind"
+        },
+        "version": {
+          "$ref": "#/definitions/versionV1_0"
+        },
+        "toolchains": {
+          "type": "array",
+          "description": "Array of toolchain configurations per language",
+          "items": {
             "type": "object",
+            "required": [
+              "language",
+              "compiler"
+            ],
             "properties": {
-              "path": {
-                "type": "string",
-                "description": "Path to the compiler executable. This is present when the CMAKE_<LANG>_COMPILER variable is defined."
-              },
-              "id": {
-                "type": "string",
-                "description": "Compiler identifier (e.g. GNU, MSVC). This is present when the CMAKE_<LANG>_COMPILER_ID variable is defined."
-              },
-              "version": {
-                "type": "string",
-                "description": "Version of the compiler. This is present when the CMAKE_<LANG>_COMPILER_VERSION variable is defined."
+              "language": {
+                "$ref": "#/definitions/language"
               },
-              "target": {
-                "type": "string",
-                "description": "Cross-compiling target of the compiler. This is present when the CMAKE_<LANG>_COMPILER_TARGET variable is defined."
+              "compiler": {
+                "$ref": "#/definitions/compiler"
               },
-              "implicit": {
-                "type": "object",
-                "properties": {
-                  "includeDirectories": {
-                    "type": "array",
-                    "items": {
-                      "type": "string"
-                    },
-                    "description": "List of implicit include directories for the compiler. This is present when the CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES variable is defined."
-                  },
-                  "linkDirectories": {
-                    "type": "array",
-                    "items": {
-                      "type": "string"
-                    },
-                    "description": "List of implicit link directories for the compiler front end. This is present when the CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES variable is defined."
-                  },
-                  "linkFrameworkDirectories": {
-                    "type": "array",
-                    "items": {
-                      "type": "string"
-                    },
-                    "description": "List of implicit link framework directories for the compiler front end. This is present when the CMAKE_<LANG>_IMPLICIT_FRAMEWORK_DIRECTORIES variable is defined."
-                  },
-                  "linkLibraries": {
-                    "type": "array",
-                    "items": {
-                      "type": "string"
-                    },
-                    "description": "List of implicit link libraries for the compiler front end. This is present when the CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES variable is defined."
-                  }
-                },
-                "additionalProperties": false
+              "sourceFileExtensions": {
+                "$ref": "#/definitions/sourceFileExtensions"
               }
             },
             "additionalProperties": false
-          },
-          "sourceFileExtensions": {
-            "type": "array",
-            "items": {
-              "type": "string"
-            },
-            "description": "List of source file extensions (without leading dot) supported by this toolchain"
           }
-        },
-        "additionalProperties": false
-      }
+        }
+      },
+      "additionalProperties": false
     }
-  },
-  "additionalProperties": false
+  }
 }