[CMake] Creating relocatable packages

Dan Kegel dank at kegel.com
Mon Oct 19 17:15:39 EDT 2015


Well, that's one answer.  But if you want to use system libpcap, it's not a
very satisfying one.

It's odd that pcap doesn't ship with a .pc file.
I guess the pcap folks are hostile to pkgconfig because it's LGPL; see
https://github.com/the-tcpdump-group/libpcap/issues/374
- Dan



On Mon, Oct 19, 2015 at 2:04 PM, Pau Garcia i Quiles <pgquiles at elpauer.org>
wrote:

> Hello,
>
> Use ExternalProject to build libpcap as part of your project. Make sure
> you use $ORIGIN in rpath everywhere. Install your application (and your
> bundled libpcap) to /opt to avoid polluting the system.
>
> On Mon, Oct 19, 2015 at 10:37 PM, Zac Bergquist <zbergquist99 at gmail.com>
> wrote:
>
>> Thank you for your reply, Guillaume.
>>
>> I understand that this is the expected behavior.  I even linked to the
>> documentation that says this is the expected behavior.  What I don't
>> understand is how to resolve it.  Are you saying it is not possible to
>> create a relocatable package unless all dependencies are also using CMake?
>> That doesn't seem right.
>>
>> Should I be trying to write a package config file for libpcap, or is
>> there a better way to approach this?
>>
>> On Sat, Oct 17, 2015 at 8:19 AM, Guillaume Dumont <
>> dumont.guillaume at gmail.com> wrote:
>>
>>> What you are seeing is the expected behavior. You can get a relocatable
>>> package if all your dependencies (in your case libcap) have themselves
>>> relocatable package config files with exported targets. Then you package
>>> should make use of find_dependency macro.
>>>
>>> On Fri, Oct 16, 2015 at 4:56 PM, Zac Bergquist <zbergquist99 at gmail.com>
>>> wrote:
>>>
>>>> I've created a sample project to replicate my issue in hopes that it
>>>> would make it easier to troubleshoot.
>>>>
>>>> Thanks for any help,
>>>> Zac
>>>>
>>>> https://github.com/zmb3/cmaketest
>>>>
>>>> On Mon, Oct 12, 2015 at 8:53 AM, Zac Bergquist <zbergquist99 at gmail.com>
>>>> wrote:
>>>>
>>>>> Hello,
>>>>>
>>>>> I'm trying to fix a project so that its output is relocatable.  The
>>>>> project is a library that itself depends on libpcap.  My goal is to be able
>>>>> to import the library into my CMake application and have CMake
>>>>> automatically link libpcap with it.
>>>>>
>>>>> I'm using a toolchain file that invokes an ARM cross compiler, sets
>>>>> CMAKE_INSTALL_PREFIX and appends it to CMAKE_FIND_ROOT_PATH.  This all
>>>>> seems to work well.
>>>>>
>>>>> What I'm seeing is that the exported files that get installed to
>>>>> CMAKE_INSTALL_PREFIX contain absolute paths to libpcap on my machine, which
>>>>> make them useless to other team members.
>>>>>
>>>>> The first thing I changed was to use CONFIGURE_PACKAGE_CONFIG_FILE
>>>>> instead of CONFIGURE_FILE.  This got rid of absolute paths in the generated
>>>>> CMake config file.
>>>>>
>>>>> However, I still have absolute paths in the CMake target import file
>>>>> that gets generated.  The IMPORTED_LINK_INTERFACE_LIBRARIES target property
>>>>> has an absolute path instead of one relative to CMAKE_INSTALL_PREFIX.
>>>>>
>>>>> I've read the "Creating Relocatable Packages" [1] section of the CMake
>>>>> packages documentation. I'm pretty sure this is what I'm running into, but
>>>>> I don't quite understand how to solve it.  The documentation says that I
>>>>> should be using imported targets, but I'm not sure how to do so.  The
>>>>> library is just using its own FindPCAP.cmake file to locate libpcap.
>>>>>
>>>>> Does anyone know of an example of a CMake package that imports other
>>>>> libraries?  I could also try to create a minimal example project with this
>>>>> setup if it would be helpful.
>>>>>
>>>>> Thanks,
>>>>> Zac
>>>>>
>>>>> [1]:
>>>>> https://cmake.org/cmake/help/v3.3/manual/cmake-packages.7.html#creating-relocatable-packages
>>>>>
>>>>>
>>>>
>>>> --
>>>>
>>>> Powered by www.kitware.com
>>>>
>>>> Please keep messages on-topic and check the CMake FAQ at:
>>>> 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
>>>> CMake Consulting: http://cmake.org/cmake/help/consulting.html
>>>> CMake Training Courses: http://cmake.org/cmake/help/training.html
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://public.kitware.com/mailman/listinfo/cmake
>>>>
>>>
>>>
>>>
>>> --
>>> Guillaume Dumont
>>> =========================
>>> dumont.guillaume at gmail.com
>>>
>>
>>
>> --
>>
>> Powered by www.kitware.com
>>
>> Please keep messages on-topic and check the CMake FAQ at:
>> 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
>> CMake Consulting: http://cmake.org/cmake/help/consulting.html
>> CMake Training Courses: http://cmake.org/cmake/help/training.html
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/cmake
>>
>
>
>
> --
> Pau Garcia i Quiles
> http://www.elpauer.org
> (Due to my workload, I may need 10 days to answer)
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> 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
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20151019/f7c32516/attachment.html>


More information about the CMake mailing list