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?

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: sme...@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

Reply via email to