diff options
author | Dr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com> | 2019-09-21 00:14:16 +0200 |
---|---|---|
committer | Dr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com> | 2019-10-13 17:23:37 +0200 |
commit | f246f54f18d380791cc60be4aea0fbc7253a9a20 (patch) | |
tree | a4b3db5b448030c6b584d59d4b38bcf3176a3d8c | |
parent | e78253f2d0c1a9fe6b023d867ee02342b4560150 (diff) |
Configure: accept Windows style compiler options
Currently the Configure command only supports passing UNIX style
options (`-opt`) to the compiler. Passing Windows style options
(`/opt`) yields an error. Fortunately, the compiler accepts both
types of options, nevertheless this commit fixes that discrimination
of Windows users.
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9961)
-rwxr-xr-x | Configure | 28 | ||||
-rw-r--r-- | INSTALL | 15 |
2 files changed, 36 insertions, 7 deletions
@@ -73,7 +73,15 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [-Dxxx] [-lx # no-sse2 disables IA-32 SSE2 code in assembly modules, the above # mentioned '386' option implies this one # no-<cipher> build without specified algorithm (rsa, idea, rc5, ...) -# -<xxx> +<xxx> compiler options are passed through +# -<xxx> +<xxx> All options which are unknown to the 'Configure' script are +# /<xxx> passed through to the compiler. Unix-style options beginning +# with a '-' or '+' are recognized, as well as Windows-style +# options beginning with a '/'. If the option contains arguments +# separated by spaces, then the URL-style notation %20 can be +# used for the space character in order to avoid having to quote +# the option. For example, -opt%20arg gets expanded to -opt arg. +# In fact, any ASCII character can be encoded as %xx using its +# hexadecimal encoding. # -static while -static is also a pass-through compiler option (and # as such is limited to environments where it's actually # meaningful), it triggers a number configuration options, @@ -821,7 +829,7 @@ while (@argvcopy) { die "FIPS mode not supported\n"; } - elsif (/^[-+]/) + elsif (m|^[-+/]|) { if (/^--prefix=(.*)$/) { @@ -898,11 +906,11 @@ while (@argvcopy) { push @{$useradd{LDFLAGS}}, $_; } - elsif (/^-D(.*)$/) + elsif (m|^[-/]D(.*)$|) { push @{$useradd{CPPDEFINES}}, $1; } - elsif (/^-I(.*)$/) + elsif (m|^[-/]I(.*)$|) { push @{$useradd{CPPINCLUDES}}, $1; } @@ -912,11 +920,23 @@ while (@argvcopy) } else # common if (/^[-+]/), just pass down... { + # Treat %xx as an ASCII code (e.g. replace %20 by a space character). + # This provides a simple way to pass options with arguments separated + # by spaces without quoting (e.g. -opt%20arg translates to -opt arg). $_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei; push @{$useradd{CFLAGS}}, $_; push @{$useradd{CXXFLAGS}}, $_; } } + elsif (m|^/|) + { + # Treat %xx as an ASCII code (e.g. replace %20 by a space character). + # This provides a simple way to pass options with arguments separated + # by spaces without quoting (e.g. /opt%20arg translates to /opt arg). + $_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei; + push @{$useradd{CFLAGS}}, $_; + push @{$useradd{CXXFLAGS}}, $_; + } else { die "target already defined - $target (offending arg: $_)\n" if ($target ne ""); @@ -641,10 +641,19 @@ Take note of the VAR=value documentation below and how these flags interact with those variables. - -xxx, +xxx + -xxx, +xxx, /xxx Additional options that are not otherwise recognised are - passed through as they are to the compiler as well. Again, - consult your compiler documentation. + passed through as they are to the compiler as well. + Unix-style options beginning with a '-' or '+' and + Windows-style options beginning with a '/' are recognized. + Again, consult your compiler documentation. + + If the option contains arguments separated by spaces, + then the URL-style notation %20 can be used for the space + character in order to avoid having to quote the option. + For example, -opt%20arg gets expanded to -opt arg. + In fact, any ASCII character can be encoded as %xx using its + hexadecimal encoding. Take note of the VAR=value documentation below and how these flags interact with those variables. |