@@ -92,7 +92,7 @@ struct PublicSettingsVisitor {
9292 {
9393 // If the path is not absolute, we need to expand it
9494 if (!files::isAbsolute (value)) {
95- auto exp = getBaseDir (value, dirs, useDefault, opts);
95+ auto exp = getBaseDir (value, dirs, self, useDefault, opts);
9696 if (!exp)
9797 {
9898 MRDOCS_TRY (value, files::makeAbsolute (value));
@@ -124,7 +124,7 @@ struct PublicSettingsVisitor {
124124 for (auto & v : value) {
125125 if (!files::isAbsolute (v))
126126 {
127- auto exp = getBaseDir (v, dirs, useDefault, opts);
127+ auto exp = getBaseDir (v, dirs, self, useDefault, opts);
128128 if (!exp)
129129 {
130130 MRDOCS_TRY (v, files::makeAbsolute (v));
@@ -187,7 +187,8 @@ struct PublicSettingsVisitor {
187187 Expected<std::string_view>
188188 getBaseDir (
189189 std::string_view referenceDirKey,
190- ReferenceDirectories const & dirs)
190+ ReferenceDirectories const & dirs,
191+ PublicSettings const & settings)
191192 {
192193 if (referenceDirKey == " config-dir" ) {
193194 return dirs.configDir ;
@@ -198,6 +199,12 @@ struct PublicSettingsVisitor {
198199 else if (referenceDirKey == " mrdocs-root" ) {
199200 return dirs.mrdocsRoot ;
200201 }
202+ else if (referenceDirKey == " output" ) {
203+ if (settings.output .empty ()) {
204+ return Unexpected (formatError (" output is not yet resolved" ));
205+ }
206+ return settings.output ;
207+ }
201208 return Unexpected (formatError (" unknown relative-to value: \" {}\" " , referenceDirKey));
202209 }
203210
@@ -218,6 +225,7 @@ struct PublicSettingsVisitor {
218225 getBaseDir (
219226 std::string& value,
220227 ReferenceDirectories const & dirs,
228+ PublicSettings const & settings,
221229 bool useDefault,
222230 PublicSettings::OptionProperties const & opts)
223231 {
@@ -226,7 +234,7 @@ struct PublicSettingsVisitor {
226234 // as the base path
227235 std::string_view relativeTo = opts.relativeto ;
228236 relativeTo = trimBaseDirReference (relativeTo);
229- return getBaseDir (relativeTo, dirs);
237+ return getBaseDir (relativeTo, dirs, settings );
230238 }
231239
232240 // If we used the default value, the base dir comes from
@@ -237,7 +245,7 @@ struct PublicSettingsVisitor {
237245 referenceDirKey = referenceDirKey.substr (0 , pos);
238246 }
239247 referenceDirKey = trimBaseDirReference (referenceDirKey);
240- MRDOCS_TRY (std::string_view baseDir, getBaseDir (referenceDirKey, dirs));
248+ MRDOCS_TRY (std::string_view baseDir, getBaseDir (referenceDirKey, dirs, settings ));
241249 if (pos != std::string::npos) {
242250 value = value.substr (pos + 1 );
243251 }
0 commit comments