mirror of https://github.com/openssl/openssl
build.info: Implement simply substitutions in variable values
Use case: having a variable with multiple source files in its value, and wanting to refer to the corresponding object file. $SRCS=foo.c bar.c SOURCE[program]=$SRCS DEPEND[${SRCS/.c/.o}]=prog.h GENERATE[prog.h]=... Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/11185)
This commit is contained in:
parent
ad5be194c6
commit
e429217902
49
Configure
49
Configure
|
@ -1807,23 +1807,62 @@ if ($builder eq "unified") {
|
||||||
# contains a dollar sign, it had better be escaped, or it will be
|
# contains a dollar sign, it had better be escaped, or it will be
|
||||||
# taken for a variable name prefix.
|
# taken for a variable name prefix.
|
||||||
my %variables = ();
|
my %variables = ();
|
||||||
my $variable_re = qr/\$(?P<VARIABLE>[[:alpha:]][[:alnum:]_]*)/;
|
# Variable name syntax
|
||||||
|
my $variable_name_re = qr/(?P<VARIABLE>[[:alpha:]][[:alnum:]_]*)/;
|
||||||
|
# Value modifier syntaxes
|
||||||
|
my $variable_subst_re = qr/\/(?P<RE>(?:\\\/|.)*?)\/(?P<SUBST>.*?)/;
|
||||||
|
# Put it all together
|
||||||
|
my $variable_re = qr/\$
|
||||||
|
(?|
|
||||||
|
# Simple case, just the name
|
||||||
|
${variable_name_re}
|
||||||
|
|
|
||||||
|
# Expressive case, with braces and possible
|
||||||
|
# modifier expressions
|
||||||
|
\{
|
||||||
|
${variable_name_re}
|
||||||
|
(?:
|
||||||
|
# Pile on modifier expressions,
|
||||||
|
# separated by |
|
||||||
|
${variable_subst_re}
|
||||||
|
)
|
||||||
|
\}
|
||||||
|
)/x;
|
||||||
my $expand_variables = sub {
|
my $expand_variables = sub {
|
||||||
my $value = '';
|
my $value = '';
|
||||||
my $value_rest = shift;
|
my $value_rest = shift;
|
||||||
|
|
||||||
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
||||||
print STDERR
|
print STDERR
|
||||||
"DEBUG[\$expand_variables] Parsed '$value_rest' into:\n"
|
"DEBUG[\$expand_variables] Parsed '$value_rest' ...\n"
|
||||||
}
|
}
|
||||||
while ($value_rest =~ /(?<!\\)${variable_re}/) {
|
while ($value_rest =~ /(?<!\\)${variable_re}/) {
|
||||||
$value .= $`;
|
|
||||||
$value .= $variables{$+{VARIABLE}};
|
|
||||||
$value_rest = $';
|
$value_rest = $';
|
||||||
|
$value .= $`;
|
||||||
|
|
||||||
|
my $variable_value = $variables{$+{VARIABLE}};
|
||||||
|
|
||||||
|
# Process modifier expressions, if present
|
||||||
|
if (defined $+{RE}) {
|
||||||
|
# We must save important %+ values, because the s///
|
||||||
|
# below clears them
|
||||||
|
my $re = $+{RE};
|
||||||
|
my $subst = $+{SUBST};
|
||||||
|
|
||||||
|
$variable_value =~ s/\Q$re\E/$subst/g;
|
||||||
|
|
||||||
|
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
||||||
|
print STDERR
|
||||||
|
"DEBUG[\$expand_variables] ... and substituted ",
|
||||||
|
"'$re' with '$subst'\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$value .= $variable_value;
|
||||||
}
|
}
|
||||||
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
||||||
print STDERR
|
print STDERR
|
||||||
"DEBUG[\$expand_variables] ... '$value$value_rest'\n";
|
"DEBUG[\$expand_variables] ... into: '$value$value_rest'\n";
|
||||||
}
|
}
|
||||||
return $value . $value_rest;
|
return $value . $value_rest;
|
||||||
};
|
};
|
||||||
|
|
|
@ -270,6 +270,22 @@ part of is tokenized>.
|
||||||
|
|
||||||
I<Variable assignment values are not tokenized.>
|
I<Variable assignment values are not tokenized.>
|
||||||
|
|
||||||
|
Variable references can be one of:
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item B<$>I<NAME> or B<${>I<NAME>B<}>
|
||||||
|
|
||||||
|
Simple reference; the variable reference is replaced with its value,
|
||||||
|
verbatim.
|
||||||
|
|
||||||
|
=item B<${>I<NAME>B</>I<str>B</>I<subst>B<}>
|
||||||
|
|
||||||
|
Substitution reference; the variable reference is replaced with its
|
||||||
|
value, modified by replacing all occurences of I<str> with I<subst>.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Scope
|
=head2 Scope
|
||||||
|
|
||||||
Most of the statement values are accumulated globally from all the
|
Most of the statement values are accumulated globally from all the
|
||||||
|
|
Loading…
Reference in New Issue