[CMake] SDL troubles on Mac OS X

Clinton Stimpson clinton at elemtech.com
Tue Dec 15 10:03:23 EST 2009


On Dec 15, 2009, at 2:31 AM, Werner Smekal wrote:

> Hi Michael,
>
>
> On 12/15/09 9:58 AM, Michael Wild wrote:
>> Hi
>>
>> What is the install-name of SDL.framewor/SDL? What does
>>
>> otool -L ~/Library/Frameworks/SDL.framework/SDL
>>
>> tell you? I suspect it is something like
>>
>> /Users/smekal/Library/Frameworks/SDL.framework/SDL:
>> 	@executable_path/../Frameworks/SDL.framework/Versions/A/SDL  
>> (compatibility version 1.0.0, current version 1.0.0)
>>          ....
>>
>> right? The second line is the one the linker uses to embed as a  
>> reference into your executable. The linker doesn't use it's actual  
>> location, but the library's install name.
>
> Yes that's right. It was actually 5 minutes after I wrote my email,  
> that I remembered somewhere back in my head, that the library  
> itself has this reference, so this explains, why the executable  
> also has this reference.
>
>>
>> Not sure what's going wrong in the CMake part, though...
>
> I assume BundleUtilties uses this reference to copy the libraries  
> into the app - if the library itself has a "wrong" reference it's  
> not able to find the library, or?

BundleUtilities/GetPrerequisites will print a warning message if the  
framework's id isn't where its really at.
But a few lines down after printing that warning message, it checks  
to see if it can find it in ~/Library/Frameworks.
So I suspect its working, but the messages are misleading.
Perhaps the SDL installation shouldn't be setting framework ids like  
that.

Clint

>>
>> IMHO FindSDL.cmake is buggy. The variable SDL_LIBRARY (and all its  
>> siblings) should only contain the framework, not Cocoa. Another  
>> variable, SDL_LIBRARIES (which should be uncached) should then  
>> contain the value of SDL_LIBRARY and all other required supporting  
>> libraries, such as Cocoa on OS X.
>>
>> For now, what you can do is manually install the SDL framework  
>> using install(DIRECTORY ...) and the first list element of  
>> SDL_LIBRARY.
>
> Thanks, that is what I'm doing right now and this works perfectly.  
> Also the default XCode project provided by the SDL people does the  
> same - copying the framework directly into the bundle (without  
> otooling and install_name_tooling around).
>
>>
>> HTH
>
> Definitely!
>
> Thanks,
> Werner
>
>>
>> Michael
>>
>> On 15. Dec, 2009, at 8:51 , Werner Smekal wrote:
>>
>>> Hi,
>>>
>>> I'm building an application on Mac OS X and link the SDL  
>>> libraries into the app. Basically it all works fine (app runs,  
>>> etc.), but if I want to use the BundleUtilities to fix/include  
>>> the SDL framework into the app bundle I encounter errors. Problem  
>>> is, that the references to the SDL libraries in the executable  
>>> already point to "@executable_path/../Frameworks/...." although  
>>> the SDL Frameworks are not there (see below). BundleUtilities is  
>>> then not able to find the SDL Frameworks. In my opinion the  
>>> references should point to ~/Library/Frameworks. I wonder why  
>>> this app runs, but maybe Mac OS X looks for other standard  
>>> locations if it doesn't find the library. I googled around but  
>>> could only find one other post:
>>>
>>> http://avidemux.org/admForum/viewtopic.php?id=5802
>>>
>>> where it is mentioned that: "However, cmake "thinks" that the  
>>> SDL.framework is already inside the bundle (and therefore doesn't  
>>> copy it), but cmake can't find it in the next step."
>>>
>>> Is this a cmake bug, a FindSDL.cmake bug or is it just me :)
>>>
>>> Thanks for any help,
>>> Werner
>>>
>>>
>>> More information. Here is what I do:
>>>
>>> 1) Download the SDL and SDL-Mixer Frameworks and copy them to ~/ 
>>> Library/Frameworks
>>>
>>> 2) Try to find them with
>>>
>>> find_package(SDL REQUIRED)
>>> include_directories(${SDL_INCLUDE_DIR})
>>>
>>> find_package(SDL_mixer REQUIRED)
>>> include_directories(${SDLMIXER_INCLUDE_DIR})
>>>
>>> which also works ok:
>>>
>>> SDL_INCLUDE_DIR = /Users/smekal/Library/Frameworks/SDL.framework/ 
>>> Headers
>>>   SDL_LIBRARY = /Users/smekal/Library/Frameworks/SDL.framework;- 
>>> framework Cocoa
>>>   SDLMIXER_INCLUDE_DIR = /Users/smekal/Library/Frameworks/ 
>>> SDL_mixer.framework/Headers
>>>   SDLMIXER_LIBRARY = /Users/smekal/Library/Frameworks/ 
>>> SDL_mixer.framework
>>>
>>> 3) Link them to my target:
>>>
>>> target_link_libraries(
>>> 	zct
>>> 		${SDL_LIBRARY}
>>> 		${SDLMIXER_LIBRARY}
>>> 		${OPENGL_LIBRARIES}
>>> )
>>>
>>> 4) Verbose compile (example):
>>>
>>> [  7%] Building CXX object CMakeFiles/zct.dir/src/game/app.cpp.o
>>> /usr/bin/c++    -mmacosx-version-min=10.5 -I/Users/smekal/Library/ 
>>> Frameworks/SDL.framework/Headers -I/Users/smekal/Library/ 
>>> Frameworks/SDL_mixer.framework/Headers   -Wall -F/Users/smekal/ 
>>> Library/Frameworks  -o CMakeFiles/zct.dir/src/game/app.cpp.o -c / 
>>> Users/smekal/Development/zct/src/game/app.cpp
>>> "/Users/smekal/Applications/CMake 2.8-0.app/Contents/bin/cmake" - 
>>> E cmake_progress_report /Users/smekal/Development/zct/build/ 
>>> CMakeFiles 2
>>>
>>> 5) Verbose Link:
>>>
>>> Linking CXX executable zct.app/Contents/MacOS/zct
>>> "/Users/smekal/Applications/CMake 2.8-0.app/Contents/bin/cmake" - 
>>> E cmake_link_script CMakeFiles/zct.dir/link.txt --verbose=1
>>> /usr/bin/c++    -mmacosx-version-min=10.5 -Wl,-search_paths_first  
>>> -headerpad_max_install_names  CMakeFiles/zct.dir/src/game/ 
>>> app.cpp.o CMakeFiles/zct.dir/src/game/being.cpp.o CMakeFiles/ 
>>> zct.dir/src/game/controller.cpp.o CMakeFiles/zct.dir/src/game/ 
>>> display.cpp.o CMakeFiles/zct.dir/src/game/main.cpp.o CMakeFiles/ 
>>> zct.dir/src/game/map.cpp.o CMakeFiles/zct.dir/src/game/ 
>>> organizer.cpp.o CMakeFiles/zct.dir/src/game/error.cpp.o  
>>> CMakeFiles/zct.dir/src/game/location.cpp.o CMakeFiles/zct.dir/src/ 
>>> game/pathnode.cpp.o CMakeFiles/zct.dir/src/game/point.cpp.o  
>>> CMakeFiles/zct.dir/src/game/tile.cpp.o CMakeFiles/zct.dir/src/ 
>>> game/SDLMain.m.o  -o zct.app/Contents/MacOS/zct -F/Users/smekal/ 
>>> Library/Frameworks -framework SDL -framework Cocoa -framework  
>>> SDL_mixer -framework AGL -framework OpenGL
>>>
>>> 6) and if I look at the references with otool:
>>>
>>> pico:build smekal$ otool -L zct.app/Contents/MacOS/zct
>>> zct.app/Contents/MacOS/zct:
>>>         @executable_path/../Frameworks/SDL.framework/Versions/A/ 
>>> SDL (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 12.0.0)
>>> @executable_path/../Frameworks/SDL_mixer.framework/Versions/A/ 
>>> SDL_mixer (compatibility version 1.0.0, current version 1.0.0)
>>>         /System/Library/Frameworks/AGL.framework/Versions/A/AGL  
>>> (compatibility version 1.0.0, current version 1.0.0)
>>>         /System/Library/Frameworks/OpenGL.framework/Versions/A/ 
>>> OpenGL (compatibility version 1.0.0, current version 1.0.0)
>>>         /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0,  
>>> current version 7.4.0)
>>>         /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0,  
>>> current version 1.0.0)
>>>         /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,  
>>> current version 111.1.4)
>>> /System/Library/Frameworks/CoreServices.framework/Versions/A/ 
>>> CoreServices (compatibility version 1.0.0, current version 32.0.0)
>>>         /usr/lib/libobjc.A.dylib (compatibility version 1.0.0,  
>>> current version 227.0.0)
>>> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/ 
>>> CoreFoundation (compatibility version 150.0.0, current version  
>>> 476.19.0)
>>>         /System/Library/Frameworks/AppKit.framework/Versions/C/ 
>>> AppKit (compatibility version 45.0.0, current version 949.54.0)
>>> /System/Library/Frameworks/ApplicationServices.framework/Versions/ 
>>> A/ApplicationServices (compatibility version 1.0.0, current  
>>> version 34.0.0)
>>> /System/Library/Frameworks/Foundation.framework/Versions/C/ 
>>> Foundation (compatibility version 300.0.0, current version 677.26.0)
>>>
>>>
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at http:// 
>>> www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the CMake FAQ at: http:// 
>>> www.cmake.org/Wiki/CMake_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.cmake.org/mailman/listinfo/cmake
>>
>
> -- 
> Dr. Werner Smekal
> Institut fuer Angewandte Physik
> Technische Universitaet Wien
> Wiedner Hauptstr 8-10
> A-1040 Wien
> Austria
> DVR-Nr: 0005886
>
> email: smekal at iap.tuwien.ac.at
> web:   http://www.iap.tuwien.ac.at/~smekal
> phone: +43-(0)1-58801-13463 (office)
>        +43-(0)1-58801-13469 (laboratory)
> fax:   +43-(0)1-58801-13499
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/ 
> opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at: http:// 
> www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake



More information about the CMake mailing list