[sdk/kdesrc-build] /: RecursiveFH: Support variables in include lines
Andrew Shark
null at kde.org
Fri Feb 2 08:07:38 GMT 2024
Git commit 399806c1efd4514b75c9f1254bb4b408f02a7221 by Andrew Shark.
Committed on 02/02/2024 at 08:07.
Pushed by ashark into branch 'master'.
RecursiveFH: Support variables in include lines
M +12 -0 doc/kdesrc-buildrc.docbook
M +1 -1 modules/ksb/Application.pm
M +22 -1 modules/ksb/RecursiveFH.pm
https://invent.kde.org/sdk/kdesrc-build/-/commit/399806c1efd4514b75c9f1254bb4b408f02a7221
diff --git a/doc/kdesrc-buildrc.docbook b/doc/kdesrc-buildrc.docbook
index 1ad21432..dd038296 100644
--- a/doc/kdesrc-buildrc.docbook
+++ b/doc/kdesrc-buildrc.docbook
@@ -222,6 +222,18 @@ end global
the file will be searched for starting from the directory containing the source
file. This works recursively as well.</para></note>
+<para>You can use variables in the value of include instruction:</para>
+<programlisting>
+global
+ <replaceable>_ver</replaceable> <replaceable>6</replaceable>
+ source-dir ~/kde<replaceable>${_ver}</replaceable>/src
+ ...
+ persistent-data-file ~/kde<replaceable>${_ver}</replaceable>/persistent-options.json
+end global
+
+include ~/kde6/src/kdesrc-build/data/build-include/kf<replaceable>${_ver}</replaceable>-qt<replaceable>${_ver}</replaceable>.ksb
+
+</programlisting>
</sect2>
<sect2 id="kdesrc-buildrc-common">
diff --git a/modules/ksb/Application.pm b/modules/ksb/Application.pm
index 3d33a988..3aaa41e7 100644
--- a/modules/ksb/Application.pm
+++ b/modules/ksb/Application.pm
@@ -1097,7 +1097,7 @@ sub _readConfigurationOptions ($ctx, $fh, $cmdlineGlobalOptions, $deferredOption
my $rcfile = $ctx->rcFile();
my ($option, %readModules);
- my $fileReader = ksb::RecursiveFH->new($rcfile);
+ my $fileReader = ksb::RecursiveFH->new($rcfile, $ctx);
$fileReader->addFile($fh, $rcfile);
# Read in global settings
diff --git a/modules/ksb/RecursiveFH.pm b/modules/ksb/RecursiveFH.pm
index 86d752b3..c5fcdb42 100644
--- a/modules/ksb/RecursiveFH.pm
+++ b/modules/ksb/RecursiveFH.pm
@@ -12,13 +12,14 @@ use File::Basename; # dirname
# TODO: Replace make_exception with appropriate croak_* function.
sub new
{
- my ($class, $rcfile) = @_;
+ my ($class, $rcfile, $ctx) = @_;
my $data = {
'filehandles' => [], # Stack of filehandles to read
'filenames' => [], # Corresponding tack of filenames (full paths)
'base_path' => [], # Base directory path for relative includes
'current' => undef, # Current filehandle to read
'current_fn' => undef, # Current filename
+ 'ctx' => $ctx,
};
my $self = bless($data, $class);
@@ -158,6 +159,26 @@ sub readLine
EOM
}
+ my $optionRE = qr/\$\{([a-zA-Z0-9-_]+)\}/; # Example of matched string is "${option-name}" or "${_option-name}".
+ my $ctx = $self->{ctx};
+
+ # Replace reference to global option with their value.
+ my ($sub_var_name) = ($filename =~ $optionRE);
+ while ($sub_var_name)
+ {
+ my $sub_var_value = $ctx->getOption($sub_var_name) || "";
+ if(!$ctx->hasOption($sub_var_name)) {
+ warning (" *\n * WARNING: y[$sub_var_name] used in $self->{current_fn}:$. is not set in global context.\n *");
+ }
+
+ debug ("Substituting \${$sub_var_name} with $sub_var_value");
+
+ $filename =~ s/\$\{$sub_var_name\}/$sub_var_value/g;
+
+ # Replace other references as well.
+ ($sub_var_name) = ($filename =~ $optionRE);
+ }
+
open ($newFh, '<', $filename) or
die make_exception('Config', "Unable to open file '$filename' which was included from $self->{current_fn}:$.");
More information about the kde-doc-english
mailing list