You have a bad install of Lion (OS X 10.7.x). I just checked 3 different Lion machines and ALL have OpenCL.framework installed. So I would suspect your Lion Machine. Lion uses OpenCL for lots of system level calls so a Lion Install without OpenCL is just plain Broken.
___________________________________________________________ Mike Jackson Principal Software Engineer BlueQuartz Software Dayton, Ohio [email protected] www.bluequartz.net On May 22, 2012, at 11:18 AM, Joe Ping-Lin Hsiao wrote: > Sorry I forgot to mention what the framework is. I believe the OpenCL > framework is from MacOS since I checked two Snow Leopard machines and > both have the framework. > > I am building my program in Snow Leopard. The program uses a library > called 'ImageMagick', which uses the OpenCL framework. In Snow > Leopard, I don't have to do anything special to OpenCL. It is just > like any other system library, and my bundle and installer work fine > in Snow Leopard. > > The problem is the OpenCL framework is not included in Lion (MacOS > 10.7). I don't know why Apple changed that. So my program would crash > if running in Lion. > My work around was to copy 'libclparser.dylib' into my bundle and > manually change it's install_name, and also the one used by > ImageMagick. Luckily it works. Now I am trying to make CMake to do it. > > > On Tue, May 22, 2012 at 10:48 AM, David Cole <[email protected]> wrote: >> My previous email was your first hint that this might not be a good idea. >> >> This error message is the second hint that this might not be a good idea. >> >> You can try setting "BU_COPY_FULL_FRAMEWORK_CONTENTS" to ON before calling >> fixup_bundle. That will recursively copy the framework into the bundle >> rather than selectively copying just the framework library and its >> "Resources" folder. >> >> I am very hesitant to recommend copying a "/System" framework into a bundle >> without knowing more details about where that framework came from. >> >> >> On Tue, May 22, 2012 at 10:33 AM, Joe Ping-Lin Hsiao <[email protected]> >> wrote: >>> >>> After setting the framework type to 'other', the framework structure >>> is copied into my bundle, including the file OpenCL, but missing >>> libclparser.dylib. >>> >>> And I got the following errors: >>> >>> CPack: Create package using DragNDrop >>> CPack: Install projects >>> CPack: - Run preinstall target for: CISMM_VIDEO >>> CPack: - Install project: CISMM_VIDEO >>> resolving >>> /System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries/libclparser.dylib >>> // print out by me >>> resolving /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL >>> // print out by me >>> resolving >>> /System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries/libclparser.dylib >>> // print out by me >>> resolving >>> /System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries/libclparser.dylib >>> // print out by me >>> resolving /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL >>> // print out by me >>> exe_dotapp_dir/='/Users/phsiao/dev/video/video_spot_tracker.app/' >>> item_substring='/System/Library/Frameworks/OpenCL.framework/Ver' >>> >>> >>> resolved_embedded_item='/System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries/libclparser.dylib' >>> >>> Install or copy the item into the bundle before calling fixup_bundle. >>> Or maybe there's a typo or incorrect path in one of the args to >>> fixup_bundle? >>> >>> CMake Error at /Applications/CMake >>> 2.8-7.app/Contents/share/cmake-2.8/Modules/BundleUtilities.cmake:568 >>> (message): >>> cannot fixup an item that is not in the bundle... >>> Call Stack (most recent call first): >>> /Applications/CMake >>> 2.8-7.app/Contents/share/cmake-2.8/Modules/BundleUtilities.cmake:656 >>> (fixup_bundle_item) >>> /Users/phsiao/dev/video/video_spot_tracker_install.cmake:17 >>> (fixup_bundle) >>> /Users/phsiao/dev/video/cmake_install.cmake:127 (INCLUDE) >>> >>> >>> CPack Error: Error when generating package: CISMM_VIDEO >>> make: *** [package] Error 1 >>> >>> >>> >>> On Tue, May 22, 2012 at 6:53 AM, David Cole <[email protected]> >>> wrote: >>>> Yes, it's possible. But I would only advise it if you do it on a >>>> per-framework basis, you built & installed it yourself, and you know for >>>> certain that the framework in question works fine when moved from its >>>> "/System/Library" location. >>>> >>>> Is this an OpenCL that you built yourself, or did it come from some >>>> package >>>> manager? >>>> >>>> The set of "type" values that GetPrerequisites assigns to files are: >>>> set(type "system") >>>> set(type "embedded") >>>> set(type "local") >>>> set(type "other") >>>> >>>> "system" means never copy, never fixup >>>> "embedded" means it will be inside the app bundle, and may be addressed >>>> relative to @executable_path after fixup_bundle is done >>>> "local" means it is in exactly the same directory as the executable >>>> "other" is everything else >>>> >>>> So, in your case, you'd want to match on the file path beginning and set >>>> the >>>> type to "other". Just add another chunk inside your override function >>>> that >>>> looks like this: >>>> >>>> if(resolved_file MATCHES >>>> "^/System/Library/Frameworks/OpenCL.framework") >>>> message("resolving ${resolved_file} as other") >>>> set(${type_var} other PARENT_SCOPE) >>>> endif() >>>> >>>> >>>> HTH, >>>> David >>>> >>>> >>>> On Mon, May 21, 2012 at 4:01 PM, Joe Ping-Lin Hsiao <[email protected]> >>>> wrote: >>>>> >>>>> Thanks, David. It works! >>>>> >>>>> Is it possible to do the other way around? >>>>> I want fixup_bundle() to treat >>>>> >>>>> >>>>> /System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries/libclparser.dylib >>>>> as an external library instead of a system lib. I looked at functions >>>>> in BundleUtilities.cmake and GetPrerequisites.cmake but didn't get any >>>>> clue how to do that. >>>>> >>>>> Thanks, >>>>> Joe >>>>> >>>>> On Mon, May 14, 2012 at 8:47 PM, David Cole <[email protected]> >>>>> wrote: >>>>>> Rather than just doing a "fixup_bundle" as an INSTALL(CODE snippet, >>>>>> put >>>>>> it >>>>>> in a separate CMake script, and use install(SCRIPT to execute it. You >>>>>> can >>>>>> configure the script with configure_file if you need to put stuff in >>>>>> it >>>>>> that >>>>>> depends on CMake variables. >>>>>> >>>>>> Then, in your script: >>>>>> >>>>>> # Define the function before including BundleUtilities: >>>>>> function(gp_resolved_file_type_override resolved_file type_var) >>>>>> if(resolved_file MATCHES "^/usr/X11/lib") >>>>>> message("resolving ${resolved_file} as system") >>>>>> set(${type_var} system PARENT_SCOPE) >>>>>> endif() >>>>>> endfunction() >>>>>> >>>>>> include(BundleUtilities) >>>>>> >>>>>> fixup_bundle( ... ) >>>>>> >>>>>> ParaView's install rules on the Mac do something like this, if you >>>>>> want >>>>>> to >>>>>> look at some example code. >>>>>> >>>>>> >>>>>> HTH, >>>>>> David >>>>>> >>>>>> >>>>>> On Mon, May 14, 2012 at 5:27 PM, Joe Ping-Lin Hsiao >>>>>> <[email protected]> >>>>>> wrote: >>>>>>> >>>>>>> Thanks, this is exactly what I need. >>>>>>> >>>>>>> Just one question. Why the function >>>>>>> gp_resolved_file_type_override() >>>>>>> cannot be seen if it is implemented in my project's CMakeLists.txt? >>>>>>> I >>>>>>> have to add it in GetPrerequisite.cmake module, but that's not good. >>>>>>> >>>>>>> Thanks, >>>>>>> Joe >>>>>>> >>>>>>> On Mon, May 7, 2012 at 11:04 AM, David Cole <[email protected]> >>>>>>> wrote: >>>>>>>> /usr/X11/lib/libglut.dylib should probably be considered a "system >>>>>>>> library" that is not included in your final bundle. >>>>>>>> >>>>>>>> Therefore, all users of your application will have to have the Mac >>>>>>>> OS >>>>>>>> X version of X installed and available in order to run your >>>>>>>> program. >>>>>>>> (Is that all Macs nowadays anyway...?) >>>>>>>> >>>>>>>> In order to classify it as a system library, you can provide a >>>>>>>> CMake >>>>>>>> function named gp_resolved_file_type_override to look for that >>>>>>>> library >>>>>>>> (probably anything starting with "/usr/X11/lib") and set its type >>>>>>>> to >>>>>>>> "system" -- that will cause fixup_bundle to ignore it for copying >>>>>>>> and >>>>>>>> fixup purposes. >>>>>>>> >>>>>>>> >>>>>>>> HTH, >>>>>>>> David >>>>>>>> >>>>>>>> >>>>>>>> On Mon, May 7, 2012 at 10:57 AM, Joe Ping-Lin Hsiao >>>>>>>> <[email protected]> >>>>>>>> wrote: >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I use CMake to create an installer for a Mac program which uses >>>>>>>>> GLUT. >>>>>>>>> The GLUT library that the program links against with is >>>>>>>>> /usr/X11/lib/libglut.dylib. >>>>>>>>> >>>>>>>>> When I use fixup_bundle() to create an installer, I get the >>>>>>>>> following >>>>>>>>> error message: >>>>>>>>> >>>>>>>>> install_name_tool: changing install names or rpaths can't be >>>>>>>>> redone >>>>>>>>> for: >>>>>>>>> >>>>>>>>> >>>>>>>>> /Users/phsiao/dev/video/video_spot_tracker.app/Contents/MacOS/libglut.3.dylib >>>>>>>>> (for architecture ppc7400) because larger updated load commands >>>>>>>>> do >>>>>>>>> not >>>>>>>>> fit (the program must be relinked, and you may need to use >>>>>>>>> -headerpad >>>>>>>>> or -headerpad_max_install_names) >>>>>>>>> >>>>>>>>> The first thing I tried was to add -headerpad_max_install_names >>>>>>>>> and >>>>>>>>> -headerpad to the linker flags, but no success. (Actually >>>>>>>>> -headerpad_max_install_names already exists in CMakeFies/link.txt >>>>>>>>> before I put it in.) >>>>>>>>> >>>>>>>>> The next thing I tried was to add '-arch x86_64' to both >>>>>>>>> CXX_FLAGS >>>>>>>>> and >>>>>>>>> LINKER_FLAGS to avoid fixup_bundle() to fix dependencies for >>>>>>>>> architecture ppc7400, but the error remains. >>>>>>>>> >>>>>>>>> Any idea how to get around this? >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Joe >>>>>>>>> -- >>>>>>>>> >>>>>>>>> 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 >>>>>> >>>>>> >>>> >>>> >> >> > -- > > 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 -- 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
