Hello, everyone,
Fot ICU4C build using ICC on Windows got error:
sh-4.4$ (INSTALLDIR="$PWD/../../ICC64RH"&& (CC="icl" CFLAGS="-MD" CXX="icl" CXXFLAGS="-MD" LD="xilink" ./configure --prefix="$INSTALLDIR" --disable-debug --enable-release --enable-shared --disable-static >_configure.log && make >_make.log) 2>_stderr.log) [snip] sh-4.4$ make tests [snip] icl -DHAVE_DLOPEN=0 -DU_HAVE_ATOMIC=1 -DU_HAVE_MMAP=0 -DU_HAVE_DIRENT_H=0 -DU_HAVE_POPEN=0 -DU_HAVE_STRTOD_L=0 -DU_RELEASE=1 -D_CRT_SECURE_NO_DEPRECATE -I. -I../../common -I../../i18n -I../../tools/toolutil -I../../tools/ctestfw -DUNISTR_FROM_CHAR_EXPLICIT= -DUNISTR_FROM_STRING_EXPLICIT= -DUCHAR_TYPE=char16_t -DU_ATTRIBUTE_DEPRECATED= -DWIN32 -DCYGWINMSVC -D'U_TOPSRCDIR="../../"' -D'U_TOPBUILDDIR="/c/libICU4C-59.1/build/source/"' -MD -GF -nologo -EHsc -Zc:wchar_t -c -Forbbitst.o rbbitst.cpp rbbitst.cpp rbbitst.cpp(1282): error: too many characters in character constant if (c == u'???') { ^ compilation aborted for rbbitst.cpp (code 2) make[2]: *** [../../config/mh-msys-msvc:142: rbbitst.o] Error 2 make[2]: *** Waiting for unfinished jobs.... make[2]: Leaving directory '/c/libICU4C-59.1/build/source/test/intltest' make[1]: *** [Makefile:68: all-recursive] Error 2 make[1]: Leaving directory '/c/libICU4C-59.1/build/source/test' make: *** [Makefile:213: tests] Error 2
which relate to code:
if (c == u'•') {
in the specified file and compiler option '-utf-8', appeared in ICU4C 59.1 MSVC toolchain.
ICC doesn't support this option and throw warnings:
icl: command line warning #10006: ignoring unknown option '/utf-8'
Similar error could be reproduced using MSVC, if ICU was built without '-utf-8' option:
sh-4.4$ (INSTALLDIR="$PWD/../../MSVC64RH"&& (CC="cl" CFLAGS="-MD" CXX="cl" CXXFLAGS="-MD" LD="link" ./configure --prefix="$INSTALLDIR" --disable-debug --enable-release --enable-shared --disable-static >_configure.log && make >_make.log) 2>_stderr.log) [snip] sh-4.4$ make tests [snip] make[2]: Entering directory '/c/libICU4C-59.1/build/source/test/intltest' cl -DHAVE_DLOPEN=0 -DU_HAVE_ATOMIC=1 -DU_HAVE_MMAP=0 -DU_HAVE_DIRENT_H=0 -DU_HAVE_POPEN=0 -DU_HAVE_TZNAME=0 -DU_HAVE_STRTOD_L=0 -DU_RELEASE=1 -D_CRT_SECURE_NO_DEPRECATE -I. -I../../common -I../../i18n -I../../tools/toolutil -I../../tools/ctestfw -DUNISTR_FROM_CHAR_EXPLICIT= -DUNISTR_FROM_STRING_EXPLICIT= -DUCHAR_TYPE=char16_t -DU_ATTRIBUTE_DEPRECATED= -DWIN32 -DCYGWINMSVC -D'U_TOPSRCDIR="../../"' -D'U_TOPBUILDDIR="/c/libICU4C-59.1/build/source/"' -MD -GF -nologo -EHsc -Zc:wchar_t -c -Forbbitst.o rbbitst.cpp rbbitst.cpp rbbitst.cpp(1282): error C2015: too many characters in constant make[2]: *** [../../config/mh-msys-msvc:142: rbbitst.o] Error 2 make[2]: Leaving directory '/c/libICU4C-59.1/build/source/test/intltest' make[1]: *** [Makefile:68: all-recursive] Error 2 make[1]: Leaving directory '/c/libICU4C-59.1/build/source/test' make: *** [Makefile:213: tests] Error 2
As for mingw-w64, it doesn't reproduce this error even without '-fexec-charset= and -finput-charset=' options.
Using undocumented ICC option '-Qoption,cpp,"--uliterals"' (see threads ICC v13 Beta Questions, C++11, Intel Parallel Studio 13 XE & Unicode String Literals, etc.) doesn't solve the issue.
Since ICC on Windows imitates MSVC, is it possible to add '-utf-8' option support? It would make behavior of ICC on Windows regarding UTF-8 characters identical to MSVC.
Environment:
- Windows 10 x64,
- IPSXE 2017 Update 2,
- VS 2015 Update 3,
- Windows SDK 10.0.14393.33,
- MSYS2 20161025,
- ICU4C 59.1.
Alexander