Git commit 642bdc2e326f8eae6cbc2a07bfe37fc1044952b9 by Andrew Shark.
Committed on 09/01/2024 at 08:52.
Pushed by ashark into branch 'master'.
Fix default value for "directory-layout" option
It was silently allowed to have unset "directory-layout" option value, that was
treated as "metadata" value.
Previously, it defaulted to "metadata". Then commit 7fe7c940 (BUG: 461279)
changed the default value in documentation to "flat", but not in the code.
This commit treats any incorrect value (not one of "flat", "invent",
"metadata"), including empty string, as a "flat" value with warning.
Add the forgotten default BuildContext value, and add it in FirstRun.
M +1-1data/kdesrc-buildrc.in
M +2-1doc/conf-options-table.docbook
M +1-0modules/ksb/BuildContext.pm
M +2-0modules/ksb/FirstRun.pm
M +11 -13 modules/ksb/Module.pm
https://invent.kde.org/sdk/kdesrc-build/-/commit/642bdc2e326f8eae6cbc2a07bfe37fc1044952b9
diff --git a/data/kdesrc-buildrc.in b/data/kdesrc-buildrc.in
index 72eef3af..62de3d1a 100644
--- a/data/kdesrc-buildrc.in
+++ b/data/kdesrc-buildrc.in
@@ -50,7 +50,7 @@ global
# Use a flat folder layout under ~/kde/src and ~/kde/build
# rather than nested directories
-directory-layout flat
+directory-layout %{directory-layout}
# Use Ninja as cmake generator instead of gmake
cmake-generator Kate - Ninja
diff --git a/doc/conf-options-table.docbook b/doc/conf-options-table.docbook
index 8c1a32e9..e74858b1 100644
--- a/doc/conf-options-table.docbook
+++ b/doc/conf-options-table.docbook
@@ -695,10 +695,11 @@ on also use that proxy server, if possible, by setting the
TypeString
Valid valuesflat,
invent, metadata
+Default valueflat
This option is used to configure the layout which should
use when
creating source and build directories.
-The flat layout is the default value, and will
group all modules
+The flat layout will group all modules
directly underneath the top level source and build directories. For example,
source/extragear/network/telepathy/ktp-text-ui in the
metadata
layout would be source/ktp-text-ui using the
flat layout
diff --git a/modules/ksb/BuildContext.pm b/modules/ksb/BuildContext.pm
index ce78ac60..808a89cf 100644
--- a/modules/ksb/BuildContext.pm
+++ b/modules/ksb/BuildContext.pm
@@ -154,6 +154,7 @@ our %defaultGlobalOptions = (
"configure-flags" => "",
"custom-build-command" => '',
"cxxflags" => "-pipe",
+"directory-layout" => "flat",
"dest-dir" => '${MODULE}', # single quotes used on purpose!
"do-not-compile" => "",
"http-proxy" => '', # Proxy server to use for HTTP.
diff --git a/modules/ksb/FirstRun.pm b/modules/ksb/FirstRun.pm
index ee668e7f..28bb9833 100644
--- a/modules/ksb/FirstRun.pm
+++ b/modules/ksb/FirstRun.pm
@@ -312,6 +312,7 @@ DONE
my $fill_placeholder = sub {
my $option_name = shift;
my $mode = shift;
+$mode //= "";
my $value = $gl->{$option_name};
if ($mode eq "bool_to_str") {
@@ -331,6 +332,7 @@ DONE
$fill_placeholder->("install-session-driver", "bool_to_str");
$fill_placeholder->("install-environment-driver", "bool_to_str");
$fill_placeholder->("stop-on-failure", "bool_to_str");
+$fill_placeholder->("directory-layout");
$fill_placeholder->("compile-commands-linking", "bool_to_str");
$fill_placeholder->("compile-commands-export", "bool_to_str");
$fill_placeholder->("generate-vscode-project-config", "bool_to_str");
diff --git a/modules/ksb/Module.pm b/modules/ksb/Module.pm
index 0dd11afc..e1665e8c 100644
--- a/modules/ksb/Module.pm
+++ b/modules/ksb/Module.pm
@@ -999,21 +999,19 @@ sub destDir ($self)
my $layout = $self->getOption('directory-layout');
if ($layout eq 'flat') {
$basePath = $self->name();
+} elsif ($layout eq 'invent') { # invent layout is the modern layout for
proper KDE projects
+$basePath = $self->getOption('#kde-repo-path', 'module');
+$basePath ||= $self->name(); # Default if not provided in repo-metadata
+} elsif ($layout eq 'metadata') {
+$basePath = $self->getOption('#kde-project-path', 'module');
+$basePath ||= $self->name(); # Default if not provided in repo-metadata
} else {
-# invent layout is the modern layout for proper KDE projects
-if ($layout eq 'invent') {
-$basePath = $self->getOption('#kde-repo-path', 'module');
-} else {
-if ($layout && $layout ne 'invent' && $layout ne 'metadata' &&
-!$self->hasOption('#warned-invalid-directory-layout')) # avoid
spamming
-{
-warning("Invalid b[directory-layout] value: $layout. Will use
b[metadata] instead for b[$self]");
-$self->setOption('#warned-invalid-directory-layout', 1);
-}
-$basePath = $self->getOption('#kde-project-path', 'module');
+if