[CMake] fixup_bundle() doesn't like libglut.3.dylib

Joe Ping-Lin Hsiao phsiao at cs.unc.edu
Mon May 21 16:01:21 EDT 2012


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 <david.cole at kitware.com> 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 <phsiao at cs.unc.edu>
> 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 <david.cole at kitware.com>
>> 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 <phsiao at cs.unc.edu>
>> > 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
>
>


More information about the CMake mailing list