Git commit d78948069ac534e936969f25bacdfed5ccffa194 by Andrew Shark. Committed on 09/01/2024 at 22:08. Pushed by ashark into branch 'underscore_names'.
Check that all option names read from config are recognised For every option name read from the config, we will check if it is in `@all_possible_options` array. And if not, raise an exception. To differentiate between normal config options and non-standard config options (options with custom name defined by user), we will prepend non-standard options with underscore. So users can still use this convenience feature. Other changes of this commit: - Allow substituting references to global options when they have underscore in their name. - Add ability to _use_ custom variable immediately after defining in global section - Fix end word typo in `t/data/kde-projects/kdesrc-buildrc-with-deps`. - Temporary show a help message for the recently renamed option "kdedir". M +19 -1 doc/kdesrc-buildrc.docbook M +18 -6 modules/ksb/Application.pm M +2 -2 t/data/branch-time-based/kdesrc-buildrc M +1 -1 t/data/kde-projects/kdesrc-buildrc-with-deps https://invent.kde.org/sdk/kdesrc-build/-/commit/d78948069ac534e936969f25bacdfed5ccffa194 diff --git a/doc/kdesrc-buildrc.docbook b/doc/kdesrc-buildrc.docbook index 53396e46..68cd4d7e 100644 --- a/doc/kdesrc-buildrc.docbook +++ b/doc/kdesrc-buildrc.docbook @@ -95,7 +95,7 @@ linkend="conf-use-modules">use-modules</link> for more information. <replaceable>option-value</replaceable>.</para> <para>One modification that &kdesrc-build; performs is that a sequence -<userinput>${<replaceable>name-of-option</replaceable>}</userinput> is replaced +"<userinput>${<replaceable>name-of-option</replaceable>}</userinput>" is replaced with the value of that option from the global configuration. This allows you to reference the value of existing options, including options already set by &kdesrc-build;.</para> @@ -104,6 +104,24 @@ to reference the value of existing options, including options already set by To see an example of this in use, see <xref linkend="make-options-example"/>.</para> +<para>You can also introduce your own non-standard global variables for referencing them further in the config. +To do this, your option name should be prepended with underscore symbol. Example: +<example id="custom-global-option-example"> +<title>Introducing your own global option for referencing later in config</title> +<programlisting> +global + _ver 6 # ← your custom variable (starting with underscore) + _kde ~/kde${_ver} # ← custom variable can contain another defined variable + source-dir ${_kde}/src # ← note that nested variable (_kde → _ver) is also resolved +end global + +options kdepim + log-dir /custom/path/logs${_ver} # ← you can use custom variable just like a standard +end options +</programlisting> +</example> +</para> + </sect3> <sect3 id="kdesrc-buildrc-options-groups"> diff --git a/modules/ksb/Application.pm b/modules/ksb/Application.pm index 26cf9ec2..2a99c248 100644 --- a/modules/ksb/Application.pm +++ b/modules/ksb/Application.pm @@ -805,18 +805,18 @@ sub _readNextLogicalLine # Takes an input line, and extracts it into an option name, and simplified # value. The value has "false" converted to 0, white space simplified (like in -# Qt), and tildes (~) in what appear to be path-like entries are converted to -# the home directory path. +# Qt), tildes (~) in what appear to be path-like entries are converted to +# the home directory path, and reference to global option is substituted with its value. # # First parameter is the build context (used for translating option values). # Second parameter is the line to split. # Return value is (option-name, option-value) -sub _splitOptionAndValue +sub _splitOptionAndValue_and_substitute_value { my $ctx = assert_isa(shift, 'ksb::BuildContext'); my $input = shift; my $fileName = shift->currentFilename(); - my $optionRE = qr/\$\{([a-zA-Z0-9-]+)\}/; + my $optionRE = qr/\$\{([a-zA-Z0-9-_]+)\}/; # Example of matched string is "${option-name}" or "${_option-name}". # The option is the first word, followed by the # flags on the rest of the line. The interpretation @@ -836,7 +836,6 @@ sub _splitOptionAndValue $value = 0 if lc($value) eq 'false'; # Replace reference to global option with their value. - # The regex basically just matches ${option-name}. my ($sub_var_name) = ($value =~ $optionRE); while ($sub_var_name) { @@ -936,6 +935,8 @@ sub _parseModuleOptions ($ctx, $fileReader, $module, $endRE=undef) _markModuleSource($module, $fileReader->currentFilename() . ":$."); $module->setOption('#entry_num', $moduleID++); + my @all_possible_options = sort keys %{$ctx->{build_options}->{global}}; + # Read in each option while (($_ = _readNextLogicalLine($fileReader)) && ($_ !~ $endRE)) { @@ -949,7 +950,18 @@ sub _parseModuleOptions ($ctx, $fileReader, $module, $endRE=undef) die make_exception('Config', "Invalid file $current_file"); } - my ($option, $value) = _splitOptionAndValue($ctx, $_, $fileReader); + my ($option, $value) = _splitOptionAndValue_and_substitute_value($ctx, $_, $fileReader); + + + if (substr($option, 0, 1) eq "_") { # option names starting with underscore are treated as user custom variables + $ctx->setOption($option, $value); # merge the option to the build context right now, so we could already (while parsing global section) use this variable in other global options values. + } + elsif (!grep {$_ eq $option} @all_possible_options) { + if ($option eq "kdedir") { # todo This message is temporary. Remove it after 09.04.2024. + error "r[Please edit your config. Replace \"b[kdedir]r[\" with \"b[install-dir]r[\"."; + } + die ksb::BuildException::Config->new($option, "Unrecognized option \"$option\" found at $current_file:$."); + } eval { $module->setOption($option, $value); }; if (my $err = $@) { diff --git a/t/data/branch-time-based/kdesrc-buildrc b/t/data/branch-time-based/kdesrc-buildrc index deb945f9..e0324af7 100644 --- a/t/data/branch-time-based/kdesrc-buildrc +++ b/t/data/branch-time-based/kdesrc-buildrc @@ -1,11 +1,11 @@ global source-dir /tmp git-repository-base kde kde: - bisect-tag master@{3 weeks ago} + _bisect-tag master@{3 weeks ago} end global module-set pim repository kde use-modules kdepim kdepim-runtime akonadi - revision ${bisect-tag} + revision ${_bisect-tag} end module-set diff --git a/t/data/kde-projects/kdesrc-buildrc-with-deps b/t/data/kde-projects/kdesrc-buildrc-with-deps index dd190939..c014c4de 100644 --- a/t/data/kde-projects/kdesrc-buildrc-with-deps +++ b/t/data/kde-projects/kdesrc-buildrc-with-deps @@ -41,4 +41,4 @@ module-set workspace-stuff repository kde-projects use-modules kdesrc-build cmake-options -DSET_FOO:BOOL=ON -end-module-set +end module-set