[PATCH] Win32: PCRE2 Unicode support with MSVC
Sergey Kandaurov
pluknet at nginx.com
Tue Mar 21 09:50:58 UTC 2023
> On 21 Mar 2023, at 03:55, Maxim Dounin <mdounin at mdounin.ru> wrote:
>
> Hello!
>
> On Mon, Mar 20, 2023 at 06:58:32PM +0400, Sergey Kandaurov wrote:
>
>> # HG changeset patch
>> # User Sergey Kandaurov <pluknet at nginx.com>
>> # Date 1679324252 -14400
>> # Mon Mar 20 18:57:32 2023 +0400
>> # Node ID d0b013a7050e00613804b399ae2ca74551b2a071
>> # Parent 8771d35d55d0a2b1cefaab04401d6f837f5a05a2
>> Win32: PCRE2 Unicode support with MSVC.
>>
>> Unicode support in PCRE2 is enabled by default on configure/cmake side
>> by defining SUPPORT_UNICODE. Previously, this macro was not defined
>> when compiling directly PCRE2 sources for Windows with MSVC.
>>
>> In particular, this change allows to specify Unicode properties, such as
>> \P, \p, or \X, as caught by http_server_name.t adjusted to run on Windows:
>>
>> nginx: [emerg] pcre2_compile() failed: this version of PCRE2 does not have
>> support for \P, \p, or \X
>>
>> diff --git a/auto/lib/pcre/make b/auto/lib/pcre/make
>> --- a/auto/lib/pcre/make
>> +++ b/auto/lib/pcre/make
>> @@ -61,7 +61,7 @@ if [ $PCRE_LIBRARY = PCRE2 ]; then
>>
>> PCRE_CFLAGS = -O2 -Ob1 -Oi -Gs $LIBC $CPU_OPT
>> PCRE_FLAGS = -DHAVE_CONFIG_H -DPCRE2_STATIC -DPCRE2_CODE_UNIT_WIDTH=8 \\
>> - -DHAVE_MEMMOVE
>> + -DHAVE_MEMMOVE -DSUPPORT_UNICODE
>>
>> PCRE_SRCS = $ngx_pcre_srcs
>> PCRE_OBJS = $ngx_pcre_objs
>
> The PCRE2 compilation in auto/lib/pcre/make mostly matches PCRE
> compilation in auto/lib/pcre/makefile.msvc, and it never tried to
> enable Unicode / UTF-8 support. This in turn matches PCRE
> configure behaviour: UTF-8 support is disabled by default and
> needs to be explicitly enabled.
This looks unrelated, because PCRE(1) is a different library.
>
> While we might consider enabling Unicode support for PCRE2, since
> it is now enabled by default in PCRE2 (or for both PCRE and PCRE2,
> since it is something usually expected to work nowadays), for
> tests a better solution might be to don't rely on this. Unicode /
> UTF-8 support might not be available on various other platforms as
> well, so it's generally might be a good idea to adjust tests to
> tolerate PCRE/PCRE2 compiled without Unicode / UTF-8 support.
>
As explained in the commit log, PCRE2 has Unicode support by default,
as configured by configure or cmake, which makes it depend on how
nginx for Windows was built:
- PCRE2 Unicode support is present if built with GCC MinGW
- it is not if built manually (missing configuration) with MSVC
Such inconsistency doesn't look related to "various other platforms".
--
Sergey Kandaurov
More information about the nginx-devel
mailing list