#49391 closed defect (fixed)
gtk3 3.18 +quartz variant does not build on Mac OS X 10.6.8, Snow Leopard, "error: expected ‘)’ before ‘instancetype’"
Reported by: | ballapete (Peter "Pete" Dyballa) | Owned by: | dbevans (David B. Evans) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.3.4 |
Keywords: | Cc: | dbevans (David B. Evans), su-v, elelay (Eric Le Lay) | |
Port: | gtk3 |
Description
/bin/sh ../../libtool --tag=CC --mode=compile /usr/bin/llvm-gcc-4.2 -arch x86_64 -DHAVE_CONFIG_H -I. -I../.. -DG_LOG_DOMAIN=\"Gdk\" -DGDK_COMPILATION -I../.. -I../../gdk -I../../gdk -DG_ENABLE_DEBUG -DG_DISABLE_CAST_CHECKS -DGLIB_MIN_REQUIRED_VERSION=GLIB_VERSION_2_44 -DGLIB_MAX_ALLOWED_VERSION=GLIB_VERSION_2_46 -D_REENTRANT -DMESA_EGL_NO_X11_HEADERS -I/opt/local/include/pango-1.0 -I/opt/local/include/harfbuzz -I/opt/local/include -I/opt/local/include/pango-1.0 -I/opt/local/include/gdk-pixbuf-2.0 -I/opt/local/include/libpng16 -I/opt/local/include/cairo -I/opt/local/include/gio-unix-2.0/ -I/opt/local/include/cairo -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include/pixman-1 -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/include -I/opt/local/include/libpng16 -I/opt/local/include "-xobjective-c" -I/opt/local/include -DX_LOCALE -pipe -Os -fstrict-aliasing -arch x86_64 -Wall -MT gdkevents-quartz.lo -MD -MP -MF .deps/gdkevents-quartz.Tpo -c -o gdkevents-quartz.lo gdkevents-quartz.c libtool: compile: /usr/bin/llvm-gcc-4.2 -arch x86_64 -DHAVE_CONFIG_H -I. -I../.. -DG_LOG_DOMAIN=\"Gdk\" -DGDK_COMPILATION -I../.. -I../../gdk -I../../gdk -DG_ENABLE_DEBUG -DG_DISABLE_CAST_CHECKS -DGLIB_MIN_REQUIRED_VERSION=GLIB_VERSION_2_44 -DGLIB_MAX_ALLOWED_VERSION=GLIB_VERSION_2_46 -D_REENTRANT -DMESA_EGL_NO_X11_HEADERS -I/opt/local/include/pango-1.0 -I/opt/local/include/harfbuzz -I/opt/local/include -I/opt/local/include/pango-1.0 -I/opt/local/include/gdk-pixbuf-2.0 -I/opt/local/include/libpng16 -I/opt/local/include/cairo -I/opt/local/include/gio-unix-2.0/ -I/opt/local/include/cairo -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include/pixman-1 -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/include -I/opt/local/include/libpng16 -I/opt/local/include -xobjective-c -I/opt/local/include -DX_LOCALE -pipe -Os -fstrict-aliasing -arch x86_64 -Wall -MT gdkevents-quartz.lo -MD -MP -MF .deps/gdkevents-quartz.Tpo -c gdkevents-quartz.c -fno-common -DPIC -o .libs/gdkevents-quartz.o gdkdevice-core-quartz.c: In function ‘gdk_quartz_device_core_get_state’: gdkdevice-core-quartz.c:133: warning: ‘gdk_window_get_pointer’ is deprecated (declared at ../../gdk/gdkwindow.h:851) gdkdisplaymanager-quartz.c: In function ‘gdk_quartz_display_manager_class_init’: gdkdisplaymanager-quartz.c:58: warning: unused variable ‘manager_class’ gdkcursor-quartz.c: In function ‘-[gdkCoreCursor _coreCursorType]’: gdkcursor-quartz.c:299: warning: ‘NSCursor’ may not respond to ‘-_coreCursorType’ gdkcursor-quartz.c:299: warning: (Messages without a matching method signature gdkcursor-quartz.c:299: warning: will be assumed to return ‘id’ and accept gdkcursor-quartz.c:299: warning: ‘...’ as arguments.) gdkcursor-quartz.c:299: warning: return makes integer from pointer without a cast gdkcursor-quartz.c: At top level: gdkcursor-quartz.c:313: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:314: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:320: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:321: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:322: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:325: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:326: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:327: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:328: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:329: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:330: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:331: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:332: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:333: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:334: error: expected ‘)’ before ‘instancetype’ gdkcursor-quartz.c:335: error: expected ‘)’ before ‘instancetype’ … make[4]: *** [gdkcursor-quartz.lo] Error 1
The build without +quartz succeeds.
Attachments (3)
Change History (18)
Changed 9 years ago by ballapete (Peter "Pete" Dyballa)
comment:1 Changed 9 years ago by mf2k (Frank Schima)
Cc: | cal@… removed |
---|---|
Owner: | changed from macports-tickets@… to cal@… |
Changed 9 years ago by elelay (Eric Le Lay)
Attachment: | gdk_quartz_gdkcursor-quartz-10_6-compat.diff added |
---|
patch expanding macro, replacing instancetype with id, checking if cursor is supported
comment:2 Changed 9 years ago by elelay (Eric Le Lay)
Here is a patch for gdkcursor-quartz.c:
- the compiler on 10.6 doesn't support instancetype so I replaced it with id;
- it also doesn't support this macro definition so I expanded it manually
- some cursors are not available on 10.6, so I added a check for
respondsToSelector
before callingperformSelector
With 1. and 2. gtk3 +quartz compiles on 10.6
With 3. it doesn't crash when one runs the gtk3-demo Cursors demo.
It only makes sense to apply the patch on 10.6.
comment:3 follow-up: 10 Changed 9 years ago by p.ohanlon@…
This problem also affects OSX Lion 10.7.5 but elelay's patch fixes it.
comment:4 Changed 9 years ago by dbevans (David B. Evans)
Thanks to all for their input on this issue to date.
Since this is an Objective C compiler issue, I'm thinking that it would be best to categorize the issue by Xcode/compiler version rather than OS version. I'm trying to track down just when instancetype was introduced to Objective C. The earliest that I can find is Xcode 5 and/or clang 3.3. This is consistent with the reported failures on 10.7 and previous and implies that 10.8 using Xcode 4.6.3 and earlier might fail as well.
Since there is benefit in using instancetype, I'm wondering if it might be better to blacklist compilers that do not support it rather than doing the instancetype parts of the patch. The gtk3-demo issue is something different.
I'd propose using
PortGroup compiler_blacklist_versions 1.0 compiler.blacklist *gcc* {clang < 500}
I'm not in a position to test this but would appreciate it if those who are seeing this problem (both on 10.6 and 10.7) would try using this instead of all but the last hunk of the patch and report their findings.
Thanks again for your help.
comment:5 follow-ups: 7 8 Changed 9 years ago by su-v
AFAICT blacklisting clang from Lion's Xcode is not necessary (gtk3 3.18.5 +quartz compiled here ok (OS X 10.7.5, Xcode 4.6.3, without the patch for 10.6.8 provided by elelay), and the gtk3-demo does not crash either) [*].
[*] Oddly (at least unexpectedly to me), the cursors seem to work even better with the Quartz backend compared to the X11-backend which supports fewer than the Quartz backend (in gtk3-demo), and only if patched with the latest commits from the git branch (committed right after the 3.18.5 tag).
comment:7 Changed 9 years ago by su-v
Replying to suv-sf@…:
[*] Oddly (at least unexpectedly to me), the cursors seem to work even better with the Quartz backend compared to the X11-backend which supports fewer than the Quartz backend (in gtk3-demo), and only if patched with the latest commits from the git branch (committed right after the 3.18.5 tag).
Clarification: this was tested (with either backend) on a MBP 13-inch, Late 2011 with just the built-in trackpad and no external mouse attached - gtk3 3.18.5 as is apparently fails to properly detect an input source (core pointer) on such a system.
comment:8 follow-up: 9 Changed 9 years ago by dbevans (David B. Evans)
Replying to suv-sf@…:
AFAICT blacklisting clang from Lion's Xcode is not necessary (gtk3 3.18.5 +quartz compiled here ok (OS X 10.7.5, Xcode 4.6.3, without the patch for 10.6.8 provided by elelay), and the gtk3-demo does not crash either) [*].
Which compiler is selected when you do this?
comment:9 Changed 9 years ago by su-v
Replying to devans@…:
Replying to suv-sf@…:
AFAICT blacklisting clang from Lion's Xcode is not necessary (gtk3 3.18.5 +quartz compiled here ok (OS X 10.7.5, Xcode 4.6.3, without the patch for 10.6.8 provided by elelay), and the gtk3-demo does not crash either) [*].
Which compiler is selected when you do this?
$ clang --version Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
comment:10 Changed 9 years ago by dbevans (David B. Evans)
Replying to p.ohanlon@…:
This problem also affects OSX Lion 10.7.5 but elelay's patch fixes it.
Can you let us know which compiler is selected for your build? See comment:9 .
comment:11 follow-up: 12 Changed 9 years ago by dbevans (David B. Evans)
Cc: | elelay@… added |
---|---|
Owner: | changed from cal@… to devans@… |
Status: | new → assigned |
Based on results to date (suv-sf) I'm proposing to revise my suggested blacklisting to
PortGroup compiler_blacklist_versions 1.0 compiler.blacklist *gcc* {clang < 425}
This assumes that Xcode 4.6 or later will build correctly but nothing earlier. elelay, p.ohanlon, please test to see if this is a suitable replacement for the attached patch on your platforms. Thanks.
comment:12 Changed 9 years ago by elelay (Eric Le Lay)
Replying to devans@…:
This assumes that Xcode 4.6 or later will build correctly but nothing earlier. elelay, p.ohanlon, please test to see if this is a suitable replacement for the attached patch on your platforms. Thanks.
building with
$ /opt/local/bin/clang-mp-3.4 --version clang version 3.4.2 (tags/RELEASE_34/dot2-final) Target: x86_64-apple-darwin10.8.0 Thread model: posix
works fine. The cursors crash in gtk3-demo is still there, as expected. Corrected by attached patch.
Changed 9 years ago by elelay (Eric Le Lay)
Attachment: | 03_gdk_quarz_gdkcursor-quartz-10_6_compat.diff added |
---|
part 3. of original patch: don't set an unsupported cursor
comment:13 follow-up: 14 Changed 9 years ago by dbevans (David B. Evans)
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Tentative fix committed in r142846. Applies compiler blacklisting for +quartz builds only (per sl buildbot, gtk3 +x11 builds without it on 10.6) and applies elelay's cursor patch for +quartz build on 10.6 or earlier.
This should fix the problems reported here but please test and reopen if issues remain, particularly as previously reported on 10.7.
Thanks to all involved for their help in identifying and fixing this issue.
comment:14 Changed 9 years ago by elelay (Eric Le Lay)
Replying to devans@…:
This should fix the problems reported here but please test and reopen if issues remain, particularly as previously reported on 10.7.
Builds and runs fine here on 10.6.
Thanks!
comment:15 Changed 9 years ago by dbevans (David B. Evans)
And thanks for the feedback. Glad it's working for you.
main.log