If you compile/install these 3rd party libraries yourself, and compile against them, then they are automatically recognized as non-system libraries. That's the approach I take instead of trying to overload the behavior to treat some system libraries as non-system ones.
Clint On Tuesday, May 22, 2012 10:48:33 AM David Cole 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/libclpa > > rser.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/libclpa > > rser.dylib> > > // print out by me > > > > resolving > > /System/Library/Frameworks/OpenCL.framework/Versions/A/Libraries/libclpa > > rser.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/Ve > > rsions/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/libclpa > > rser.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 -- Clinton Stimpson Elemental Technologies, Inc Computational Simulation Software, LLC www.csimsoft.com -- 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
