On Sat, November 21, 2020 18:09, Stuart Henderson wrote:
> On 2020/11/21 16:48, Dimitri Karamazov wrote:
>
>> I'm trying to update blender to the latest version, but stumbled upon
>> some errors. C++17 doesn't support register storage class, but it is part of
>> XKBLIb headers,
>>
>>
>> I tried things like "-Wno-register" to MAKE_FLAGS, then
>> #pragma Clang diagnostic ignored "-Wregister" before the
>> header to no avail.
>>
>> FAILED:
>> intern/ghost/CMakeFiles/bf_intern_ghost.dir/intern/GHOST_ISystem.cpp.o
>> /usr/ports/pobj/blender-2.90.1/bin/c++ -DGLEW_NO_GLU -DNDEBUG
>> -DWITH_ASSERT_ABORT -DWITH_GHOST_X11
>> -DWITH_GL_PROFILE_CORE -DWITH_OPENGL -DWITH_X11_ALPHA -DWITH_X11_XF86VMODE
>> -DWITH_X11_XFIXES -DWITH_X11_XINPUT
>> -DWITH_XDND -DWITH_XF86KEYSYM -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
>> -D_LARGEFILE_SOURCE -D__LITTLE_ENDIAN__
>> -I/usr/ports/pobj/blender-2.90.1/blender-2.90.1/intern/ghost
>> -I/usr/ports/pobj/blender-2.90.1/blender-2.90.1/intern/glew-mx
>> -I/usr/ports/pobj/blender-2.90.1/blender-2.90.1/source/blender/imbuf
>> -I/usr/ports/pobj/blender-2.90.1/blender-2.90.1/source/blender/makesdna
>> -I/usr/ports/pobj/blender-2.90.1/blender-2.90.1/extern/xdnd -Wall
>> -Wno-tautological-compare -Wno-unknown-pragmas
>> -Wno-char-subscripts -Wno-overloaded-virtual -Wno-sign-compare
>> -Wno-invalid-offsetof -O2 -pipe -I/usr/local/include
>> -I/usr/X11R6/include -pthread -std=c++11 -std=c++17 -pipe -fPIC
>> -funsigned-char -fno-strict-aliasing -DNDEBUG -MD
>> -MT
>> intern/ghost/CMakeFiles/bf_intern_ghost.dir/intern/GHOST_ISystem.cpp.o -MF
>> intern/ghost/CMakeFiles/bf_intern_ghost.dir/intern/GHOST_ISystem.cpp.o.d -o
>> intern/ghost/CMakeFiles/bf_intern_ghost.dir/intern/GHOST_ISystem.cpp.o -c
>> /usr/ports/pobj/blender-2.90.1/blender-2.90.1/intern/ghost/intern/GHOST_ISystem.cpp
>> In file included from
>> /usr/ports/pobj/blender-2.90.1/blender-2.90.1/intern/ghost/intern/GHOST_ISystem.cpp:37:
>> In file included from
>> /usr/ports/pobj/blender-2.90.1/blender-2.90.1/intern/ghost/intern/GHOST_SystemX11.h:27:
>> /usr/X11R6/include/X11/XKBlib.h:399:5: error: ISO C++17 does not allow
>> 'register' storage class specifier
>> [-Wregister]
>> register KeySym * /* sym_return */, ^~~~~~~~~
>> 1 error generated.
>> ninja: build stopped: subcommand failed.
>> *** Error 1 in /usr/ports/graphics/blender
>> (/usr/ports/devel/cmake/cmake.port.mk:34 'do-build': @cd
>> /usr/ports/pobj/blender-2.90.1/build-amd...)
>> *** Error 2 in . (/usr/ports/infrastructure/mk/bsd.port.mk:2921
>> '/usr/ports/pobj/blender-2.90.1/build-amd64/.build_done': @cd
>> /usr/ports/gra...)
>> *** Error 2 in /usr/ports/graphics/blender
>> (/usr/ports/infrastructure/mk/bsd.port.mk:2584 'build':
>> @lock=blender-2.90.1; export _LOCKS_HELD...)
>>
>>
>> Is forcing -std=c++11 good enough? It goes past that error to
>>
>
>> /usr/ports/pobj/blender-2.90.1/blender-2.90.1/extern/ceres/include/ceres/internal/integer_sequence_algorithm.h:64:2
>> 1:
>> error: no template named 'integer_sequence' in namespace 'std'; did you mean
>> '__integer_sequence'?
>> struct SumImpl<std::integer_sequence<T, N, Ns...>> { ~~~~~^~~~~~~~~~~~~~~~
>> __integer_sequence
>> /usr/include/c++/v1/__tuple:93:8: note: '__integer_sequence' declared here
>>
>>
>
> If you look in the c++ headers in /usr/include you'll find
>
>
> --snip---------
> #if _LIBCPP_STD_VER > 11
>
>
> template<class _Tp, _Tp... _Ip> struct _LIBCPP_TEMPLATE_VIS integer_sequence {
> --snip---------
>
>
> suggesting it does need >11 for this. (this was added in c++14 I think).
>
> Try removing "register" in your local xkblib headers to see if things
> build with that.
>
>
I avoided that since I thought it was too invasive, but blender-2.90.1
builds and works fine with it.
register is unused and reserved in c++17, and deprecated since C++11,
is this diff okay?
Index: lib/libX11/include/X11/XKBlib.h
===================================================================
RCS file: /cvs/xenocara/lib/libX11/include/X11/XKBlib.h,v
retrieving revision 1.4
diff -u -p -r1.4 XKBlib.h
--- lib/libX11/include/X11/XKBlib.h 30 May 2011 19:19:30 -0000 1.4
+++ lib/libX11/include/X11/XKBlib.h 22 Nov 2020 07:44:40 -0000
@@ -396,7 +396,11 @@ extern Bool XkbTranslateKeyCode(
extern int XkbTranslateKeySym(
Display * /* dpy */,
+#if _LIBCPP_STD_VER > 11
+ KeySym * /* sym_return */,
+#else
register KeySym * /* sym_return */,
+#endif
unsigned int /* modifiers */,
char * /* buffer */,
int /* nbytes */,
Or should I just remove the keyword?
Index: lib/libX11/include/X11/XKBlib.h
===================================================================
RCS file: /cvs/xenocara/lib/libX11/include/X11/XKBlib.h,v
retrieving revision 1.4
diff -u -p -r1.4 XKBlib.h
--- lib/libX11/include/X11/XKBlib.h 30 May 2011 19:19:30 -0000 1.4
+++ lib/libX11/include/X11/XKBlib.h 22 Nov 2020 07:29:01 -0000
@@ -396,7 +396,7 @@ extern Bool XkbTranslateKeyCode(
extern int XkbTranslateKeySym(
Display * /* dpy */,
- register KeySym * /* sym_return */,
+ KeySym * /* sym_return */,
unsigned int /* modifiers */,
char * /* buffer */,
int /* nbytes */,