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