I think I'm on the right track now.  I was definitely missing the
add_library(PCAP IMPORTED) section.

Could you elaborate on the last part?  I thought target_link_libraries() is
the reason I'm getting absolute paths.  Should I be using the
FindDependency macro instead of target_link_libraries()?

On Mon, Oct 19, 2015 at 9:54 PM, Guillaume Dumont <
dumont.guilla...@gmail.com> wrote:

> Hi Zac,
>
> Sorry I read your post very quickly the first time... If your library uses
> its own FindPCAP.cmake then you can define an imported target for the PCAP
> libraries like so:
>
> # FindPCAP.cmake
>
> find_path(PCAP_INCLUDE_DIR pcap.h ... )
> find_library(PCAP_LIBRARY pcap ... )
>
> include(FindPackageHandleStandardArgs)
> find_package_handle_standard_args(PCAP  DEFAULT_MSG PCAP_LIBRARY
> PCAP_INCLUDE_DIR)
>
> if(PCAP_FOUND AND NOT TARGET PCAP)
>   add_library(PCAP IMPORTED) # you can(or should) also specify if it's a
> shared or static library
>   set_target_properties(PCAP PROPERTIES IMPORTED_LOCATION ${PCAP_LIBRARY})
>   # also add the interface include directories here via
> set_target_properties
>   set(PCAP_LIBRARIES PCAP)
> endif()
>
> then in your CMakeLists.txt:
>
> find_package(PCAP)
>
> target_link_libraries(mylib ${PCAP_LIBRARIES})
>
> Install your FindPCAP.cmake with your exported targets so that you can use
> the FindDependencyMacro to resolve the dependency when a consuming project
> finds your  library.
>
> Would that work for you?
>
> HTH
>
> Guillaume
>
>
>
> On Mon, Oct 19, 2015 at 7:06 PM, Pau Garcia i Quiles <pgqui...@elpauer.org
> > wrote:
>
>> Hello,
>>
>> In your case, what you need to do is to modify the config file generation
>> in the library (i. e. you will need to patch the third-party library) so
>> that the generated config file is relative.
>>
>> As an alternative, if you do not want to patch the third-party library,
>> try modifying the generated config file by replacing absolute prefixes with
>> a variable (to the cross-compilation sysroot) or relative paths.
>>
>> On Tue, Oct 20, 2015 at 1:02 AM, Zac Bergquist <zbergquis...@gmail.com>
>> wrote:
>>
>>> Yes, Pau, this is exactly my problem. Or more specifically, as the
>>> author of a library that uses CMake and depends on libpcap, how can I best
>>> structure and distribute the library to make it easy to use (and cross
>>> compile)?  I would say using the system libpcap is strongly preferred over
>>> distributing a copy of it.
>>>
>>> That tutorial is very interesting.  I'll have to take a closer look at
>>> it because the solution isn't jumping out at me.  The tutorial shows a
>>> project that contains both a library and a program that links to that
>>> library in the same list file.  In my case that would not be possible.
>>> Also, the library in the example has no dependencies so it wouldn't suffer
>>> from the absolute path issue I'm encountering.
>>> On Oct 19, 2015 5:36 PM, "Pau Garcia i Quiles" <pgqui...@elpauer.org>
>>> wrote:
>>>
>>>> Hi Dan,
>>>>
>>>> On a second read, it seems Zac's problem was actually finding the
>>>> dependency (libpcap) of a dependency. Or rather, making if findable,
>>>> because the second depenency contains an absolute path which is broken due
>>>> to cross-compilation.
>>>>
>>>> I have never used it but this page contains information on how to fix
>>>> the paths in the config file to be relative instead of absolute. That
>>>> should fix the problem:
>>>>
>>>>
>>>> https://cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file
>>>>
>>>>
>>>>
>>>> On Mon, Oct 19, 2015 at 11:15 PM, Dan Kegel <d...@kegel.com> wrote:
>>>>
>>>>> 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 <
>>>>> pgqui...@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 <
>>>>>> zbergquis...@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.guilla...@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 <
>>>>>>>> zbergquis...@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 <
>>>>>>>>> zbergquis...@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.guilla...@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
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Pau Garcia i Quiles
>>>> http://www.elpauer.org
>>>> (Due to my workload, I may need 10 days to answer)
>>>>
>>>
>>
>>
>> --
>> 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
>>
>
>
>
> --
> Guillaume Dumont
> =========================
> dumont.guilla...@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

Reply via email to