From: Jeremie Courreges-Anglas Subject: devel/boost vs textproc/icu4c on sparc64 To: Brad Smith , Rafael Sadowski Cc: ports@openbsd.org, kmos@openbsd.org, ajacoutot@openbsd.org Date: Sun, 4 Aug 2024 20:59:06 +0200 devel/boost currently fails to package on sparc64: http://build-failures.rhaalovely.net/sparc64/2024-07-24/devel/boost.log checksumming|*********************************************************** | 97% Error: /usr/obj/ports/boost-1.84.0/fake-sparc64/usr/local/lib/libboost_locale-mt.a does not exist Error: /usr/obj/ports/boost-1.84.0/fake-sparc64/usr/local/lib/libboost_locale-mt.so.23.0 does not exist pkg_create: can't continue Earlier in the build one can see that icu detection is broken. /usr/ports/pobj/boost-1.84.0/boost_1_84_0/bin.v2/config.log says: --8<-- gcc.compile.c++ bin.v2/libs/regex/build/gcc-8/release/link-static/pch-off/threading-multi/visibility-hidden/has_icu_test.o "c++" -fvisibility-inlines-hidden -m64 -pthread -finline-functions -Wno-inline -Wall -fvisibility=hidden -O2 -pipe -O2 -pipe -DBOOST_ALL_NO_LIB=1 -DBOOST_COBALT_USE_STD_PMR=1 -DBOOST_HAS_ICU=1 -DNDEBUG -I"." -I"/usr/local/include" -c -o "bin.v2/libs/regex/build/gcc-8/release/link-static/pch-off/threading-multi/visibility-hidden/has_icu_test.o" "libs/regex/build/has_icu_test.cpp" In file included from /usr/local/include/unicode/uset.h:36, from /usr/local/include/unicode/unorm2.h:35, from /usr/local/include/unicode/unorm.h:25, from /usr/local/include/unicode/ucol.h:17, from /usr/local/include/unicode/coll.h:62, from libs/regex/build/has_icu_test.cpp:15: /usr/local/include/unicode/localpointer.h:561:31: error: 'auto' parameter not permitted in this context template ^~~~~~~~~~~~~ /usr/local/include/unicode/localpointer.h:573:76: error: template argument 2 is invalid explicit LocalOpenPointer(std::unique_ptr &&p) ^ /usr/local/include/unicode/localpointer.h:583:78: error: template argument 2 is invalid LocalOpenPointer &operator=(std::unique_ptr &&p) { ^ /usr/local/include/unicode/localpointer.h:599:59: error: template argument 2 is invalid operator std::unique_ptr () && { ^ /usr/local/include/unicode/localpointer.h:551:81: note: invalid template non-type parameter using LocalPointerClassName = internal::LocalOpenPointer ^ /usr/local/include/unicode/uset.h:358:1: note: in expansion of macro 'U_DEFINE_LOCAL_OPEN_POINTER' U_DEFINE_LOCAL_OPEN_POINTER(LocalUSetPointer, USet, uset_close); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/local/include/unicode/localpointer.h:551:81: note: invalid template non-type parameter using LocalPointerClassName = internal::LocalOpenPointer ^ /usr/local/include/unicode/unorm2.h:286:1: note: in expansion of macro 'U_DEFINE_LOCAL_OPEN_POINTER' U_DEFINE_LOCAL_OPEN_POINTER(LocalUNormalizer2Pointer, UNormalizer2, unorm2_close); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/local/include/unicode/localpointer.h:551:81: note: invalid template non-type parameter using LocalPointerClassName = internal::LocalOpenPointer ^ /usr/local/include/unicode/uenum.h:69:1: note: in expansion of macro 'U_DEFINE_LOCAL_OPEN_POINTER' U_DEFINE_LOCAL_OPEN_POINTER(LocalUEnumerationPointer, UEnumeration, uenum_close); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/local/include/unicode/localpointer.h:551:81: note: invalid template non-type parameter using LocalPointerClassName = internal::LocalOpenPointer ^ /usr/local/include/unicode/ucol.h:553:1: note: in expansion of macro 'U_DEFINE_LOCAL_OPEN_POINTER' U_DEFINE_LOCAL_OPEN_POINTER(LocalUCollatorPointer, UCollator, ucol_close); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/local/include/unicode/unistr.h:39, from /usr/local/include/unicode/strenum.h:20, from /usr/local/include/unicode/locid.h:40, from /usr/local/include/unicode/coll.h:64, from libs/regex/build/has_icu_test.cpp:15: /usr/local/include/unicode/stringpiece.h:134:23: error: 'is_same_v' is not a member of 'std' (std::is_same_v ^~~~~~~~~ /usr/local/include/unicode/stringpiece.h:134:23: note: suggested alternative: 'is_same' (std::is_same_v ^~~~~~~~~ is_same /usr/local/include/unicode/stringpiece.h:134:66: error: template argument 1 is invalid (std::is_same_v ^ /usr/local/include/unicode/stringpiece.h:138:17: error: expected '>' before ')' token ) && ^ /usr/local/include/unicode/stringpiece.h:138:17: error: expected unqualified-id before ')' token ...skipped has_icu for lack of has_icu_test.o... ...failed updating 1 target... -->8-- (full config.log available at https://wxcvbn.org/~jca/tmp/boost-config.log.gz) lang/gcc/8 doesn't seem able to use some icu4c headers by default. No idea how to fix it. One hackish workaround would be to just pretend we don't care about boost_locale on architectures that use ports-gcc, and put the two missing files files in a new PFRAG.locale. Posting this here in the hope that someone has a better idea. The has_icu_test.cpp failure can be reproduced on amd64 using COMPILER=ports-gcc and TOOLSET=gcc. -- jca