mirror of https://github.com/openssl/openssl
Configure: To allow file names with spaces, tokenize with respect for quotes
For parsing build.info files. RT#4492 Reviewed-by: Tim Hudson <tjh@openssl.org>
This commit is contained in:
parent
b202bf675b
commit
ce9598124e
64
Configure
64
Configure
|
@ -1418,47 +1418,47 @@ if ($builder eq "unified") {
|
||||||
=> sub { die "ENDIF out of scope" if ! @skip;
|
=> sub { die "ENDIF out of scope" if ! @skip;
|
||||||
pop @skip; },
|
pop @skip; },
|
||||||
qr/^\s*PROGRAMS\s*=\s*(.*)\s*$/
|
qr/^\s*PROGRAMS\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @programs, split(/\s+/, $1)
|
=> sub { push @programs, tokenize($1)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*LIBS\s*=\s*(.*)\s*$/
|
qr/^\s*LIBS\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @libraries, split(/\s+/, $1)
|
=> sub { push @libraries, tokenize($1)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*ENGINES\s*=\s*(.*)\s*$/
|
qr/^\s*ENGINES\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @engines, split(/\s+/, $1)
|
=> sub { push @engines, tokenize($1)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*SCRIPTS\s*=\s*(.*)\s*$/
|
qr/^\s*SCRIPTS\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @scripts, split(/\s+/, $1)
|
=> sub { push @scripts, tokenize($1)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*EXTRA\s*=\s*(.*)\s*$/
|
qr/^\s*EXTRA\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @extra, split(/\s+/, $1)
|
=> sub { push @extra, tokenize($1)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*OVERRIDES\s*=\s*(.*)\s*$/
|
qr/^\s*OVERRIDES\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @overrides, split(/\s+/, $1)
|
=> sub { push @overrides, tokenize($1)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
|
|
||||||
qr/^\s*ORDINALS\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/,
|
qr/^\s*ORDINALS\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/,
|
||||||
=> sub { push @{$ordinals{$1}}, split(/\s+/, $2)
|
=> sub { push @{$ordinals{$1}}, tokenize($2)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*SOURCE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s*SOURCE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @{$sources{$1}}, split(/\s+/, $2)
|
=> sub { push @{$sources{$1}}, tokenize($2)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*SHARED_SOURCE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s*SHARED_SOURCE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @{$shared_sources{$1}}, split(/\s+/, $2)
|
=> sub { push @{$shared_sources{$1}}, tokenize($2)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*INCLUDE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s*INCLUDE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @{$includes{$1}}, split(/\s+/, $2)
|
=> sub { push @{$includes{$1}}, tokenize($2)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*DEPEND\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s*DEPEND\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @{$depends{$1}}, split(/\s+/, $2)
|
=> sub { push @{$depends{$1}}, tokenize($2)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*GENERATE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s*GENERATE\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @{$generate{$1}}, $2
|
=> sub { push @{$generate{$1}}, $2
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*RENAME\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s*RENAME\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @{$renames{$1}}, split(/\s+/, $2)
|
=> sub { push @{$renames{$1}}, tokenize($2)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*SHARED_NAME\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
qr/^\s*SHARED_NAME\[((?:\\.|[^\\\]])+)\]\s*=\s*(.*)\s*$/
|
||||||
=> sub { push @{$sharednames{$1}}, split(/\s+/, $2)
|
=> sub { push @{$sharednames{$1}}, tokenize($2)
|
||||||
if !@skip || $skip[$#skip] > 0 },
|
if !@skip || $skip[$#skip] > 0 },
|
||||||
qr/^\s*BEGINRAW\[((?:\\.|[^\\\]])+)\]\s*$/
|
qr/^\s*BEGINRAW\[((?:\\.|[^\\\]])+)\]\s*$/
|
||||||
=> sub {
|
=> sub {
|
||||||
|
@ -2576,3 +2576,41 @@ sub collect_information {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# tokenize($line)
|
||||||
|
# $line is a line of text to split up into tokens
|
||||||
|
# returns a list of tokens
|
||||||
|
#
|
||||||
|
# Tokens are divided by spaces. If the tokens include spaces, they
|
||||||
|
# have to be quoted with single or double quotes. Double quotes
|
||||||
|
# inside a double quoted token must be escaped. Escaping is done
|
||||||
|
# with backslash.
|
||||||
|
# Basically, the same quoting rules apply for " and ' as in any
|
||||||
|
# Unix shell.
|
||||||
|
sub tokenize {
|
||||||
|
my $line = my $debug_line = shift;
|
||||||
|
my @result = ();
|
||||||
|
|
||||||
|
while ($line =~ s|^\s+||, $line ne "") {
|
||||||
|
my $token = "";
|
||||||
|
while ($line ne "" && $line !~ m|^\s|) {
|
||||||
|
if ($line =~ m/^"((?:[^"\\]+|\\.)*)"/) {
|
||||||
|
$token .= $1;
|
||||||
|
$line = $';
|
||||||
|
} elsif ($line =~ m/^'([^']*)'/) {
|
||||||
|
$token .= $1;
|
||||||
|
$line = $';
|
||||||
|
} elsif ($line =~ m/^(\S+)/) {
|
||||||
|
$token .= $1;
|
||||||
|
$line = $';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
push @result, $token;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ENV{CONFIGURE_DEBUG_TOKENIZE}) {
|
||||||
|
print STDERR "DEBUG[tokenize]: Parsed '$debug_line' into:\n";
|
||||||
|
print STDERR "DEBUG[tokenize]: ('", join("', '", @result), "')\n";
|
||||||
|
}
|
||||||
|
return @result;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue