@@ -61,12 +61,72 @@ namespace vix::cli::app
6161 std::optional<AppTargetType> app_target_type_from_string (
6262 const std::string &value);
6363
64+ /* *
65+ * @brief Package dependency declared in vix.app.
66+ *
67+ * Manifest syntax accepted by the parser:
68+ * - "<name>"
69+ * - "<name>:REQUIRED"
70+ * - "<name>:COMPONENTS=a,b"
71+ * - "<name>:COMPONENTS=a,b:REQUIRED"
72+ *
73+ * The order of `COMPONENTS=...` and `REQUIRED` does not matter.
74+ * Whitespace around components is trimmed.
75+ */
76+ struct AppPackage
77+ {
78+ /* *
79+ * @brief Package name as passed to CMake `find_package`.
80+ */
81+ std::string name;
82+
83+ /* *
84+ * @brief Optional component list.
85+ */
86+ std::vector<std::string> components;
87+
88+ /* *
89+ * @brief True when the package must be marked REQUIRED.
90+ */
91+ bool required{false };
92+ };
93+
94+ /* *
95+ * @brief Resource entry copied into the build output directory.
96+ *
97+ * Manifest syntax accepted by the parser:
98+ * - "<src>" copies `<src>` next to the built target,
99+ * preserving the basename of `<src>`
100+ * - "<src>=<dest>" copies `<src>` to `<dest>` next to the
101+ * built target
102+ *
103+ * Paths are interpreted relative to the user project directory.
104+ */
105+ struct AppResource
106+ {
107+ /* *
108+ * @brief Source path relative to the user project directory.
109+ */
110+ std::string source;
111+
112+ /* *
113+ * @brief Destination path relative to the runtime output
114+ * directory of the target. May be empty to keep the source
115+ * basename.
116+ */
117+ std::string destination;
118+ };
119+
64120 /* *
65121 * @brief Simple C++ application manifest.
66122 *
67123 * This structure represents the content of a vix.app file.
68124 * It is intentionally small and exists only as a user-friendly
69125 * layer above the internal generated CMake project.
126+ *
127+ * Backward compatibility:
128+ * Manifests using only `name`, `type`, `standard`, `sources`,
129+ * `include_dirs`, `defines` and `links` are still fully supported.
70130 */
71131 struct AppManifest
72132 {
@@ -84,9 +144,12 @@ namespace vix::cli::app
84144 * @brief C++ standard value.
85145 *
86146 * Example values:
147+ * - c++11
148+ * - c++14
87149 * - c++17
88150 * - c++20
89151 * - c++23
152+ * - c++26
90153 */
91154 std::string standard{" c++20" };
92155
@@ -110,6 +173,40 @@ namespace vix::cli::app
110173 */
111174 std::vector<std::string> links;
112175
176+ /* *
177+ * @brief Raw compile options forwarded to the compiler.
178+ */
179+ std::vector<std::string> compileOptions;
180+
181+ /* *
182+ * @brief Raw link options forwarded to the linker.
183+ */
184+ std::vector<std::string> linkOptions;
185+
186+ /* *
187+ * @brief CMake `target_compile_features` entries (for example
188+ * `cxx_std_20`, `cxx_constexpr`).
189+ */
190+ std::vector<std::string> compileFeatures;
191+
192+ /* *
193+ * @brief External packages resolved with `find_package`.
194+ */
195+ std::vector<AppPackage> packages;
196+
197+ /* *
198+ * @brief Resources copied next to the built target.
199+ */
200+ std::vector<AppResource> resources;
201+
202+ /* *
203+ * @brief Optional output directory relative to the build tree.
204+ *
205+ * When set, the runtime, library and archive output directories
206+ * of the generated target are pointed at this location.
207+ */
208+ std::string outputDir;
209+
113210 /* *
114211 * @brief Returns true when the manifest has the minimum valid fields.
115212 *
0 commit comments