Subject: Re: [Boost-bugs] [Boost C++ Libraries] #1094: Finding the correct library to link (feature request for pkg-config support)h
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2010-12-04 23:46:51
#1094: Finding the correct library to link (feature request for pkg-config
support)h
--------------------------------+-------------------------------------------
Reporter: rleigh@⦠| Owner: vladimir_prus
Type: Feature Requests | Status: assigned
Milestone: Boost 1.42.0 | Component: build
Version: | Severity: Problem
Resolution: | Keywords: pkg-config linking library naming
--------------------------------+-------------------------------------------
Comment (by Roger Leigh <rleigh@â¦>):
With the above two attachments, you can do this:
{{{
% g++ -DTEST_LIBRARY='"boost_filesystem"'
-DTEST_HEADER='<boost/filesystem.hpp>' -o boost-pkg-config-gen boost-pkg-
config-gen.cc -lboost_filesystem
% ./boost-pkg-config-gen > boost_filesystem.pc
% cat boost_filesystem.pc
prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib
includedir=${prefix}/include
Name: boost_filesystem
Description: Boost C++ libraries (boost_filesystem)
Version: 1.42.0
Libs: -L${libdir} -lboost_filesystem -lboost_system
Cflags: -I${includedir}
}}}
Notice that it's correctly picked out the boost_filesystem and
boost_system dependencies.
The auto_link.hpp change causes any required libraries to be stored in a
boost::pkg_config::library_list class. This is only created if
BOOST_PKG_CONFIG_DUMP is defined, so has zero overhead for normal users.
Note, boost/random/detail/auto_link.hpp and
boost/iostreams/detail/config/auto_link.hpp may need adjusting as for
boost/config/auto_link.hpp so that it's not skipped for non-MSVC/Borland
compilers. All compilers should now process boost/config/auto_link.hpp.
The object created to trigger list updates could also be put into the
anonymous namespace.
The test program needs these macros defining:
* TEST_LIBRARY - library name
* TEST_HEADER - header to include
* PREFIX - install prefix (currently hardcoded)
* LIBDIR - library directory (currently hardcoded)
* include path and exec prefix may also require defining (again currently
hardcoded)
I don't know how to use the Boost build system to integrate this directly
(I'm a make person I'm afraid), or else I'd do that in the patch. If the
various path prefixes are known to the build system, they can be passed
directly during compilation (I didn't see them stored in any headers).
So, it's now possible to run the program for each boost module (name and
primary header) and get a .pc file generated for it. These need
installing in prefix/lib/pkgconfig. Note that this test program needs
linking with *every* boost shared object available, since we don't know in
advance which will be needed for a given combination of headers (this
being the point of the excercise in the first place).
This doesn't use more advanced features such as Requires (which would
allow for nested inclusion of .pc files), but this isn't really required.
Also, pkg-config files may be created for all Boost libraries irrespective
of whether they have a shared object or not. The include path etc. are
still useful.
One implication this scheme has is that the .pc files can't be generated
when cross-compiling unless run on the host post-build. However, it's
about the best we can do without direct compiler support for the auto-link
scheme used by MSVC/Borland.
I hope this useful for inspiration if it's not directly usable for you as
is.
Regards,
Roger Leigh
(Thanks are also due to a number of other Debian developers who spent some
time with me trying to find solutions utilising the C preprocessor only.
Unfortunately, we didn't find a clean way to do that.)
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/1094#comment:19> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:05 UTC