[CMake] CPack install 3rd party shared libraries
Roman Wüger
roman.wueger at gmx.at
Wed Jul 19 14:56:35 EDT 2017
Sorry for the MailingList thing, it was a reply mistake.
So, here is the complete output:
CPack: Enable Verbose
CPack Verbose: Read CPack config file:
CPack Verbose: Read CPack configuration file: /home/rowu/MyPackage/CPackConfig.cmake
CPack Verbose: Specified generator: DEB
CPack Verbose: Use generator: cmCPackDebGenerator
CPack Verbose: For project: MyPackage
CPack: Create package using DEB
CPack Verbose: Read description file: /opt/cmake-3.8.2-Linux-x86_64/share/cmake-3.8/Templates/CPack.GenericDescription.txt
CPack Verbose: [DEB] requested component grouping = ONE_PER_GROUP
CPack Verbose: Remove toplevel directory: /home/rowu/MyPackage/_CPack_Packages/Linux/DEB
CPack: Install projects
CPack: - Run preinstall target for: MyPackage
CPack: - Install project: MyPackage
CPack Verbose: Install configuration: "Release"
CPack Verbose: Installing: /home/rowu/MyPackage/_CPack_Packages/Linux/DEB/MyPackage-0.0.0.1499458629/opt/MyPackage-0.0.0.1499458629/./testprog
CPack Verbose: Set runtime path of "/home/rowu/MyPackage/_CPack_Packages/Linux/DEB/MyPackage-0.0.0.1499458629/opt/MyPackage-0.0.0.1499458629/bin/testprog" to ""
CPack Verbose: Installing: /home/rowu/MyPackage/_CPack_Packages/Linux/DEB/MyPackage-0.0.0.1499458629/opt/MyPackage-0.0.0.1499458629/./file1.dat
CPack Verbose: Installing: /home/rowu/MyPackage/_CPack_Packages/Linux/DEB/MyPackage-0.0.0.1499458629/opt/MyPackage-0.0.0.1499458629/./file2.dat
CPack Verbose: fixup_bundle
CPack Verbose: app='/opt/MyPackage-0.0.0.1499458629/bin/testprog'
CPack Verbose: libs=''
CPack Verbose: dirs='/usr/local/lib'
CPack Verbose: ignoreItems=''
CPack Verbose: warning: *NOT* handled - directory/file does not exist...
CMake Error at /opt/cmake-3.8.2-Linux-x86_64/share/cmake-3.8/Modules/BundleUtilities.cmake:956 (message):
error: fixup_bundle: not a valid bundle
Call Stack (most recent call first):
/home/rowu/MyPackage/app/testprog/cmake_install.cmake:68 (fixup_bundle)
/home/rowu/MyPackage/app/cmake_install.cmake:37 (include)
/home/rowu/MyPackage/cmake_install.cmake:37 (include)
CPack Verbose: fixup_bundle: done
CPack Error: Error when generating package: MyPackage
Regards
Roman
-----Ursprüngliche Nachricht-----
Von: Elvis Stansvik [mailto:elvis.stansvik at orexplore.com]
Gesendet: Mittwoch, 19. Juli 2017 20:07
An: Roman Wüger <roman.wueger at gmx.at>; CMake MailingList <cmake at cmake.org>
Betreff: Re: [CMake] CPack install 3rd party shared libraries
(Adding the mailing list back to the list of recepients - It's always good to keep the discussion on the list)
2017-07-19 19:30 GMT+02:00 Roman Wüger < <mailto:roman.wueger at gmx.at> roman.wueger at gmx.at>:
> Hello Elvis,
>
> I tried you solution, but I get always the message:
>
> CMake Error at /opt/cmake-3.8.2-Linux-x86_64/share/cmake-3.8/Modules/BundleUtilities.cmake:956 (message):
> error: fixup_bundle: not a valid bundle
It would help to see your full CMake code.
Was there no warning printed before this error? Something like
"warning: *NOT* handled - " followed by an explanation?
Elvis
>
> Regards
> Roman
>
> -----Ursprüngliche Nachricht-----
> Von: CMake [ <mailto:cmake-bounces at cmake.org> mailto:cmake-bounces at cmake.org] Im Auftrag von Roman Wüger
> Gesendet: Mittwoch, 19. Juli 2017 19:14
> An: 'Elvis Stansvik' < <mailto:elvis.stansvik at orexplore.com> elvis.stansvik at orexplore.com>
> Cc: 'CMake MailingList' < <mailto:cmake at cmake.org> cmake at cmake.org>
> Betreff: Re: [CMake] CPack install 3rd party shared libraries
>
> Thank you Elvis for the awesome example.
>
> Best Regards
> Roman
>
> -----Ursprüngliche Nachricht-----
> Von: Elvis Stansvik [ <mailto:elvis.stansvik at orexplore.com> mailto:elvis.stansvik at orexplore.com]
> Gesendet: Mittwoch, 19. Juli 2017 16:51
> An: David Cole < <mailto:DLRdave at aol.com> DLRdave at aol.com>
> Cc: Roman Wüger < <mailto:roman.wueger at gmx.at> roman.wueger at gmx.at>; CMake MailingList
> < <mailto:cmake at cmake.org> cmake at cmake.org>
> Betreff: Re: [CMake] CPack install 3rd party shared libraries
>
> 2017-07-19 16:42 GMT+02:00 David Cole < <mailto:DLRdave at aol.com> DLRdave at aol.com>:
>> Very nice example. Does CMake have a place to put examples like VTK
>> does...? If so, where is it? And if not, it would be super useful to
>> start one somewhere "official."
>
> I guess the wiki is for that? Though I think my example should be cleaned up before being put up anywhere.
>
>>
>> However, one word of caution on the example. I know it was targeted
>> at Linux, and perhaps for a very simple case it's proper, but using
>> an unconditional "local" for everything in a
>> gp_resolved_file_type_override would not be something you'd want to
>> do in general, especially on Windows. You would end up with probably
>> on the order of a hundred (or maybe nowadays even a few hundred) DLLs
>> from the Windows system directories inside your bundle. Almost
>> certainly not what you intended.
>
> Yes, good point and I should have said something about that. My example was quick and dirty.
>
> In my real projects, I've so far always ended up with separate calls to fixup_bundle for the different platforms anyway (though never used fixup_bundle on Linux before), so I guess my mind was thinking "oh well, this is just for Linux" when I wrote it.
>
> Elvis
>
>>
>>
>> Cheers,
>> David C.
>>
>>
>>
>> On Wed, Jul 19, 2017 at 9:57 AM, Elvis Stansvik
>> < <mailto:elvis.stansvik at orexplore.com> elvis.stansvik at orexplore.com> wrote:
>>> 2017-07-19 13:42 GMT+02:00 Roman Wüger < <mailto:roman.wueger at gmx.at> roman.wueger at gmx.at>:
>>>> The problem with BundleUtilities which Inder is that it doesn't support generator expressions.
>>>>
>>>> Maybe I do something wrong?
>>>> But I need to specify the path to the executable (generator expression) and the paths where to look for dependencies. Right?
>>>
>>> You don't need to use a generator to fetch the executable path. You
>>> will know the path, since you installed the executable with
>>> install(..) :) I think most people essentially hardcode the
>>> executable path in their call to fixup_bundle(..).
>>>
>>> If you really want to, I think there is a way to use generator
>>> expressions, and that is to put the fixup_bundle(..) call in a
>>> separate file (say InstallStuff.cmake.in), and then process that
>>> file with file(GENERATE OUTPUT ...) [1] to produce
>>> InstallStuff.cmake with generator expressions evaluated and then use
>>> install(SCRIPT InstallStuff.cmake). But that's much too complicated
>>> IMHO, and I would avoid it.
>>>
>>> I made a minimal example that links against zlib and also the Boost
>>> library you mentioned:
>>>
>>> cmake_minimum_required(VERSION 2.8)
>>>
>>> project(bundletest)
>>>
>>> find_package(ZLIB REQUIRED)
>>> find_package(Boost REQUIRED COMPONENTS filesystem)
>>>
>>> add_executable(bundletest main.cpp)
>>>
>>> target_include_directories(bundletest PRIVATE ${ZLIB_INCLUDE_DIRS}
>>> ${Boost_INCLUDE_DIRS})
>>>
>>> target_link_libraries(bundletest ${ZLIB_LIBRARIES}
>>> ${Boost_LIBRARIES})
>>>
>>> install(TARGETS bundletest
>>> RUNTIME DESTINATION "bin"
>>> )
>>>
>>> install(CODE "
>>> function(gp_resolved_file_type_override resolved_file type_var)
>>> set(\${type_var} local PARENT_SCOPE)
>>> endfunction()
>>> include(BundleUtilities)
>>> fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/bin/bundletest\" \"\"
>>> \"\") " COMPONENT Runtime)
>>>
>>> main.cpp:
>>>
>>> #include <iostream>
>>> #include <zlib.h>
>>> #include <boost/filesystem.hpp>
>>>
>>> using namespace boost::filesystem;
>>>
>>> int main (int argc, char *argv[]) {
>>> // Pretend we're using zlib and Boost
>>> deflateInit(0, 0);
>>> std::cout << file_size(argv[1]) << std::endl;
>>> return 0;
>>> }
>>>
>>> The overriding of the gp_resolved_file_type_override was necessary,
>>> to make it treat all libraries as local (otherwise it skips "system"
>>> libraries). See the docs for GetPrerequisites.
>>>
>>> Building/installing this with
>>>
>>> mkdir build
>>> cd build
>>> cmake -DCMAKE_INSTALL_PREFIX=~/bundletest_install ..
>>> make install
>>>
>>> produces:
>>>
>>> /home/estan/bundletest_install
>>> /home/estan/bundletest_install/bin
>>> /home/estan/bundletest_install/bin/bundletest
>>> /home/estan/bundletest_install/bin/libm.so.6
>>> /home/estan/bundletest_install/bin/libstdc++.so.6
>>> /home/estan/bundletest_install/bin/libc.so.6
>>> /home/estan/bundletest_install/bin/libz.so.1
>>> /home/estan/bundletest_install/bin/libpthread.so.0
>>> /home/estan/bundletest_install/bin/libboost_system.so.1.58.0
>>> /home/estan/bundletest_install/bin/libgcc_s.so.1
>>> /home/estan/bundletest_install/bin/libboost_filesystem.so.1.58.0
>>>
>>> I did the build on Ubuntu, and tested that it also runs in a clean
>>> Fedora 24 Docker container.
>>>
>>> Hope that helps some.
>>>
>>> Elvis
>>>
>>> [1] <https://cmake.org/cmake/help/v3.9/command/file.html> https://cmake.org/cmake/help/v3.9/command/file.html
>>>
>>>>
>>>> Please, could you give me a hint?
>>>>
>>>> Regards
>>>> Roman
>>>>
>>>>> Am 19.07.2017 um 12:40 schrieb Elvis Stansvik < <mailto:elvis.stansvik at orexplore.com> elvis.stansvik at orexplore.com>:
>>>>>
>>>>> 2017-07-19 10:24 GMT+02:00 Roman Wüger < <mailto:roman.wueger at gmx.at> roman.wueger at gmx.at>:
>>>>>> Hello,
>>>>>>
>>>>>> I have a project which depends on a self compiled 3rd party
>>>>>> project (boost) Boost is here only an example, there are other 3rd party libraries too.
>>>>>>
>>>>>> If I call the "install" command on the target, then it would be packaged.
>>>>>> But how could I add the shared libraries and especially the links for the shared libraries?
>>>>>>
>>>>>> E.g.:
>>>>>> libboost_filesystem.so -> libboost_filesystem.so.1.48.0
>>>>>> libboost_filesystem.so.1.48.0
>>>>>>
>>>>>> Thanks in advance
>>>>>
>>>>> I think fixup_bundle() from BundleUtilities is what you want [1].
>>>>>
>>>>> We're using it to make our Windows and macOS installs standalone,
>>>>> but (I think) it should work on Linux as well.
>>>>>
>>>>> [1] <https://cmake.org/cmake/help/v3.8/module/BundleUtilities.html> https://cmake.org/cmake/help/v3.8/module/BundleUtilities.html
>>>>>
>>>>>>
>>>>>> Best Regards
>>>>>> Roman
>>>>>> --
>>>>>>
>>>>>> Powered by <http://www.kitware.com> www.kitware.com
>>>>>>
>>>>>> Please keep messages on-topic and check the CMake FAQ at:
>>>>>> <http://www.cmake.org/Wiki/CMake_FAQ> http://www.cmake.org/Wiki/CMake_FAQ
>>>>>>
>>>>>> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>>>>>>
>>>>>> CMake Support: <http://cmake.org/cmake/help/support.html> http://cmake.org/cmake/help/support.html
>>>>>> CMake Consulting: <http://cmake.org/cmake/help/consulting.html> http://cmake.org/cmake/help/consulting.html
>>>>>> CMake Training Courses: <http://cmake.org/cmake/help/training.html> http://cmake.org/cmake/help/training.html
>>>>>>
>>>>>> Visit other Kitware open-source projects at
>>>>>> <http://www.kitware.com/opensource/opensource.html> http://www.kitware.com/opensource/opensource.html
>>>>>>
>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>> <http://public.kitware.com/mailman/listinfo/cmake> http://public.kitware.com/mailman/listinfo/cmake
>>>>
>>> --
>>>
>>> Powered by <http://www.kitware.com> www.kitware.com
>>>
>>> Please keep messages on-topic and check the CMake FAQ at:
>>> <http://www.cmake.org/Wiki/CMake_FAQ> http://www.cmake.org/Wiki/CMake_FAQ
>>>
>>> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>>>
>>> CMake Support: <http://cmake.org/cmake/help/support.html> http://cmake.org/cmake/help/support.html
>>> CMake Consulting: <http://cmake.org/cmake/help/consulting.html> http://cmake.org/cmake/help/consulting.html
>>> CMake Training Courses: <http://cmake.org/cmake/help/training.html> http://cmake.org/cmake/help/training.html
>>>
>>> Visit other Kitware open-source projects at
>>> <http://www.kitware.com/opensource/opensource.html> http://www.kitware.com/opensource/opensource.html
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> <http://public.kitware.com/mailman/listinfo/cmake> http://public.kitware.com/mailman/listinfo/cmake
>
> --
>
> Powered by <http://www.kitware.com> www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> <http://www.cmake.org/Wiki/CMake_FAQ> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>
> CMake Support: <http://cmake.org/cmake/help/support.html> http://cmake.org/cmake/help/support.html
> CMake Consulting: <http://cmake.org/cmake/help/consulting.html> http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: <http://cmake.org/cmake/help/training.html> http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> <http://www.kitware.com/opensource/opensource.html> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> <http://public.kitware.com/mailman/listinfo/cmake> http://public.kitware.com/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20170719/c4000fb2/attachment-0001.html>
More information about the CMake
mailing list