mirror of
https://github.com/openssl/openssl.git
synced 2025-01-21 09:23:33 +08:00
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
|
||||
# taken for a variable name prefix.
|
||||
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 $value = '';
|
||||
my $value_rest = shift;
|
||||
|
||||
if ($ENV{CONFIGURE_DEBUG_VARIABLE_EXPAND}) {
|
||||
print STDERR
|
||||
"DEBUG[\$expand_variables] Parsed '$value_rest' into:\n"
|
||||
"DEBUG[\$expand_variables] Parsed '$value_rest' ...\n"
|
||||
}
|
||||
while ($value_rest =~ /(?<!\\)${variable_re}/) {
|
||||
$value .= $`;
|
||||
$value .= $variables{$+{VARIABLE}};
|
||||
$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}) {
|
||||
print STDERR
|
||||
"DEBUG[\$expand_variables] ... '$value$value_rest'\n";
|
||||
"DEBUG[\$expand_variables] ... into: '$value$value_rest'\n";
|
||||
}
|
||||
return $value . $value_rest;
|
||||
};
|
||||
|
@ -270,6 +270,22 @@ part of is 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
|
||||
|
||||
Most of the statement values are accumulated globally from all the
|
||||
|
Loading…
Reference in New Issue
Block a user