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 -1 data/kdesrc-buildrc.in M +2 -1 doc/conf-options-table.docbook M +1 -0 modules/ksb/BuildContext.pm M +2 -0 modules/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 <member>Type</member><member>String</member> <member>Valid values</member><member><userinput>flat</userinput>, <userinput>invent</userinput>, <userinput>metadata</userinput></member> +<member>Default value</member><member>flat</member> </simplelist> <para>This option is used to configure the layout which &kdesrc-build; should use when creating source and build directories.</para> -<para>The <userinput>flat</userinput> layout is the default value, and will group all modules +<para>The <userinput>flat</userinput> layout will group all modules directly underneath the top level source and build directories. For example, <literal>source/extragear/network/telepathy/ktp-text-ui</literal> in the <userinput>metadata</userinput> layout would be <literal>source/ktp-text-ui</literal> using the <userinput>flat</userinput> 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 (!$self->hasOption('#warned-invalid-directory-layout')) # avoid spamming + { + warning ("y[ * Invalid b[directory-layout]y[ value: \"$layout\". Will use b[flat]y[ instead for b[$self]"); + $self->setOption('#warned-invalid-directory-layout', 1); } - - $basePath ||= $self->name(); # Default if not provided in repo-metadata + $basePath = $self->name(); } # Note the default dest-dir option is '${MODULE}' so this normally is used