Skip to content

[OS X/MacPorts] OpenGL build/link confusion when X11 and GLX are present

As mentioned in an earlier trac ticket, I'm working on a MacPorts port of VLC 2.2.0 rc2, to upgrade the current 2.1.5 port. That 2.1.5 port builds and works fine with a few changes to the code, but VLC 2.2.0 fails to initialise OpenGL as I already mentioned.

I think I found the reason: the presence of X11 and GLX in the MacPorts tree, which is a given. The configure output shows that the X11 headers are found despite giving all configure options to deactivate an X11 build (--without-x, --disable-xcb --disable-glx etc). Now I noticed additional artefacts shown below, when comparing plugin dependencies between the most recent nightly build and my MacPorts build. I think those point to an error in the configure/build system. I'm unfamiliar with the way autoconf and automake work so I'd really appreciate some guidance in tracing and resolving this error.

%> otool -L Downloads/vlc-2.2.0-rc2-20150204/VLC.app/Contents/MacOS/plugins/libvout_macosx_plugin.dylib
/Users/bertin/Desktop/Downloads/vlc-2.2.0-rc2-20150204/VLC.app/Contents/MacOS/plugins/libvout_macosx_plugin.dylib:
        @loader_path/../lib/libvlccore.8.dylib (compatibility version 9.0.0, current version 9.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
        /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
        /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
        /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
        /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1187.37.0)
        /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 45.0.0)
        /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.16.0)

%> otool -L /Users/bertin/Desktop/Downloads/vlc-2.2.0-rc2-20150204/VLC.app/Contents/MacOS/plugins/libcaopengllayer_plugin.dylib 
/Users/bertin/Desktop/Downloads/vlc-2.2.0-rc2-20150204/VLC.app/Contents/MacOS/plugins/libcaopengllayer_plugin.dylib:
        @loader_path/../lib/libvlccore.8.dylib (compatibility version 9.0.0, current version 9.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
        /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
        /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
        /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0)
        /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore (compatibility version 1.2.0, current version 1.8.0)
        /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0)
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1187.37.0)
        /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.16.0)
     9 10:44   ldd /Users/bertin/Desktop/Downloads/vlc-2.2.0-rc2-20150204/VLC.app/Contents/MacOS/plugins/libcaopengllayer_plugin.dylib

%> otool -L /opt/local/lib/vlc/plugins/video_output/libvout_macosx_plugin.dylib 
/opt/local/lib/vlc/plugins/video_output/libvout_macosx_plugin.dylib:
        /opt/local/lib/libvlccore.8.dylib (compatibility version 9.0.0, current version 9.0.0)
        /opt/local/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.3.0)
        /opt/local/lib/libidn.11.dylib (compatibility version 18.0.0, current version 18.12.0)
        /opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
        /opt/local/lib/libdbus-1.3.dylib (compatibility version 12.0.0, current version 12.9.0)
        /opt/local/lib/libGL.1.dylib (compatibility version 1.2.0, current version 1.2.0)
        /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
        /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 20.0.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1265.21.0)
        /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 855.17.0)
        /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics (compatibility version 64.0.0, current version 600.0.0)
        /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1056.16.0)
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

%> otool -L /opt/local/lib/vlc/plugins/video_output/libcaopengllayer_plugin.dylib 
/opt/local/lib/vlc/plugins/video_output/libcaopengllayer_plugin.dylib:
        /opt/local/lib/libvlccore.8.dylib (compatibility version 9.0.0, current version 9.0.0)
        /opt/local/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.3.0)
        /opt/local/lib/libidn.11.dylib (compatibility version 18.0.0, current version 18.12.0)
        /opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
        /opt/local/lib/libdbus-1.3.dylib (compatibility version 12.0.0, current version 12.9.0)
        /opt/local/lib/libGL.1.dylib (compatibility version 1.2.0, current version 1.2.0)
        /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
        /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 20.0.0)
        /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore (compatibility version 1.2.0, current version 1.8.0)
        /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1265.21.0)
        /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 855.17.0)
        /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1056.16.0)
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

In other words, those plugins link both the /opt/local/lib/libGL.dylib GLX library, and the OpenGL framework. I fail to understand why this doesn't lead to linker or loader warnings about multiply defined symbols though.

In addition, the MacPorts build ends up with

%> otool -L /opt/local/lib/vlc/plugins/video_output/libgl_plugin.dylib 
/opt/local/lib/vlc/plugins/video_output/libgl_plugin.dylib:
        /opt/local/lib/libvlccore.8.dylib (compatibility version 9.0.0, current version 9.0.0)
        /opt/local/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.3.0)
        /opt/local/lib/libidn.11.dylib (compatibility version 18.0.0, current version 18.12.0)
        /opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
        /opt/local/lib/libdbus-1.3.dylib (compatibility version 12.0.0, current version 12.9.0)
        /opt/local/lib/libGL.1.dylib (compatibility version 1.2.0, current version 1.2.0)

which is probably the GLX counterpart to the libcaopengllayer plugin, and which is missing from the downloaded nightly build.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information