Virtually every software development project has some need to
integrate with third-party software libraries. In a traditional
build system, you might list the include paths, libraries, and
library directories right in your Makefile
,
build.xml
, or configuration file for
whatever build system you are using. With abuild, the best way
to integrate with a third-party library is to use a build item
whose sole purpose is to export that library's information using
an Abuild.interface
file. In the simplest
cases, a third-party library build item might be an interface
only build item (described above) that just includes the
appropriate library directives in a static
Abuild.interface
file. For example, a build
item that provides access to the PCRE (Perl-compatible regular
expression) libraries on a Linux distribution that has them
installed in the system's standard include path might just
include an Abuild.interface
with the
following contents:
LIBS = pcrecpp pcre
For Java build items, a third-party JAR build item would
typically append the path to the JAR file to the
abuild.classpath.external
interface variable.
(For a discussion of the various classpath variables, see Section 17.5.3, “Interface Variables for Java Items”.)
Sometimes, the process may be more involved. For example, on a
UNIX system, it is often desirable to use
autoconf to determine what interface
is required for a particular library. We present an example of
using autoconf with abuild in Section 18.3, “Autoconf Example”. Still other libraries may use
pkg-config. For those libraries, it
may make sense to create a simple set of build rules that
automatically generate an Abuild.interface
after-build
file (also discussed in Section 18.3, “Autoconf Example”) by running the
pkg-config command. An example
pkg-config build item may be found in
the abuild-contrib
package available at
abuild's web site.
Whichever way you do it for a given package, the idea is that you should always create a build item whose job it is to provide the glue between abuild and the third-party library. Other build items that need to use the third-party library can then just declare a dependency on the build item that provides the third-party library's interface. This simplifies the process of using third-party libraries and makes it possible to create a uniform standard for doing so within any specific abuild build tree. It also alleviates the need to duplicate information about the third-party library throughout your source tree. Whenever you are duplicating knowledge about the path of some entity, you would probably be better off creating a separate build item to encapsulate that knowledge.