Spice-GTK on Mac

Friday, March 10, 2017

Yesterday, had:

In file included from vncdisplaykeymap.c:95:
In file included from /usr/local/Cellar/gtk+3/3.22.7/include/gtk-3.0/gdk/gdkquartz.h:23:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h:10:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:8:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:492:1: error: 
      expected identifier or '('
@class NSString, Protocol;
^

Fix:

CFLAGS=-ObjC CPPFLAGS="-I/usr/local/opt/jpeg-turbo/include -I/usr/local/include -I/usr/local/Cellar/openssl/1.0.2j/include" LDFLAGS="-L/usr/local/opt/jpeg-turbo/lib -L/usr/local/lib -L/usr/local/Cellar/openssl/1.0.2j/lib"  ./configure --enable-vala

spice-widget-egl.c:28:10: fatal error: 'libdrm/drm_fourcc.h' file not found #include <libdrm/drm_fourcc.h> ^

PATCH: Add HAS_EGL to configure.ac, make compilation of spice-widget-egl.c conditional

  "_spice_egl_cursor_set", referenced from:
      _cursor_set in spice-widget.o
  "_spice_egl_resize_display", referenced from:
      _size_allocate in spice-widget.o
  "_spice_egl_unrealize_display", referenced from:
      _unrealize in spice-widget.o
  "_spice_egl_update_display", referenced from:
      _draw_event in spice-widget.o

PATCH: Add more EGL tests, change HAS_EGL -> HAVE_EGL for consistency with other macros.

Now, it runs. Does not show a window, though Wonder if it's related to the following message:

(spicy:63854): Gdk-WARNING **: GdkQuartzDisplay does not implement the monitor vfuncs

** GSpice:ERROR:spice-channel.c:1352:spice_channel_send_link: assertion failed: (((intptr_t) p & (sizeof(uint32_t)-1)) == 0 && "Pointer must be aligned to a 32-bit boundary")

So pointer alignment is strict, then.