@@ -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,10 @@ struct PublicSettingsVisitor {
198199 else if (referenceDirKey == " mrdocs-root" ) {
199200 return dirs.mrdocsRoot ;
200201 }
202+ else if (referenceDirKey == " output" ) {
203+ MRDOCS_ASSERT (!settings.output .empty ());
204+ return settings.output ;
205+ }
201206 return Unexpected (formatError (" unknown relative-to value: \" {}\" " , referenceDirKey));
202207 }
203208
@@ -218,6 +223,7 @@ struct PublicSettingsVisitor {
218223 getBaseDir (
219224 std::string& value,
220225 ReferenceDirectories const & dirs,
226+ PublicSettings const & settings,
221227 bool useDefault,
222228 PublicSettings::OptionProperties const & opts)
223229 {
@@ -226,7 +232,7 @@ struct PublicSettingsVisitor {
226232 // as the base path
227233 std::string_view relativeTo = opts.relativeto ;
228234 relativeTo = trimBaseDirReference (relativeTo);
229- return getBaseDir (relativeTo, dirs);
235+ return getBaseDir (relativeTo, dirs, settings );
230236 }
231237
232238 // If we used the default value, the base dir comes from
@@ -237,7 +243,7 @@ struct PublicSettingsVisitor {
237243 referenceDirKey = referenceDirKey.substr (0 , pos);
238244 }
239245 referenceDirKey = trimBaseDirReference (referenceDirKey);
240- MRDOCS_TRY (std::string_view baseDir, getBaseDir (referenceDirKey, dirs));
246+ MRDOCS_TRY (std::string_view baseDir, getBaseDir (referenceDirKey, dirs, settings ));
241247 if (pos != std::string::npos) {
242248 value = value.substr (pos + 1 );
243249 }
0 commit comments