ifndef::external_title[] NUT libraries complementary information ======================================= endif::external_title[] This chapter provides some complementary information about the creation process of NUT libraries, and using these in your program. Introduction ------------ NUT provides several libraries, to ease interfacing with 3rd party programs: - *libupsclient*, to interact with NUT server (upsd), - *libnutclient*, to interact with NUT server at high level, - *libnutscan*, to discover NUT supported devices. External applications, such as asapm-ups, wmnut, and others, currently use it. But it is also used internally (by upsc, upsrw, upscmd, upsmon and dummy-ups) to reduce storage footprint and memory consumption. The runtime libraries are installed by default. However, to install other development files (header, additional static and shared libraries, and compilation helpers below), you will have to provide the '--with-dev' flag to the 'configure' script. libupsclient-config ------------------- In case pkgconfig is not available on the system, an alternate helper script is provided: 'libupsclient-config'. It will be installed in the same directory as NUT client programs (BINDIR), providing that you have enabled the '--with-dev' flag to the 'configure' script. The usage is about the same as pkg-config and similar tools. To get CFLAGS, use: $ libupsclient-config --cflags To get LD_FLAGS, use: $ libupsclient-config --libs References: linkman:libupsclient-config[1] manual page, NOTE: this feature may evolve (name change), or even disappear in the future. pkgconfig support ----------------- pkgconfig enables a high level of integration with minimal effort. There is no more needs to handle hosts of possible NUT installation path in your configure script ! To check if NUT is available, use: $ pkg-config --exists libupsclient --silence-errors To get CFLAGS, use: $ pkg-config --cflags libupsclient To get LD_FLAGS, use: $ pkg-config --libs libupsclient pkgconfig support ('.pc') files are provided in the present directory of the source distribution ('nut-X.Y.Z/lib/'), and installed in the suitable system directory if you have enabled '--with-dev'. The default installation directory ("/usr/lib/pkgconfig/") can be changed with the following command: ./configure --with-pkgconfig-dir=PATH You can also use this if you are sure that pkg-config is installed: PKG_CHECK_MODULES(LIBUPSCLI, libupsclient >= 2.4.0) PKG_CHECK_MODULES(LIBNUTSCAN, libnutscan >= 2.6.2) Example configure script ------------------------ To use NUT libraries in your program, use the following code in your configure (.in or .ac) script: AC_MSG_CHECKING(for NUT client library (libupsclient)) pkg-config --exists libupsclient --silence-errors if test $? -eq 0 then AC_MSG_RESULT(found (using pkg-config)) LDFLAGS="$LDFLAGS `pkg-config --libs libupsclient`" NUT_HEADER="`pkg-config --cflags libupsclient`" else libupsclient-config --version if test $? -eq 0 then AC_MSG_RESULT(found (using libupsclient-config)) LDFLAGS="$LDFLAGS `libupsclient-config --libs`" NUT_HEADER="`libupsclient-config --cflags`" else AC_MSG_ERROR("libupsclient not found") fi fi This code will test for pkgconfig support for NUT client library, and fall back to libupsclient-config if not available. It will issue an error if none is found! The same is also valid for other NUT libraries, such as libnutscan. Simply replace 'libupsclient' occurrences in the above example, by the name of the desired library (for example, 'libnutscan'). NOTE: this is an alternate method. Use of PKG_CHECK_MODULES macro should be preferred. Future consideration -------------------- We are considering the following items: - provide libupsclient-config support for libnutscan, and libnutconfig when available. This requires to rename and rewrite the script in a more generic way (libnut-config), with options to address specific libraries. - provide pkgconfig support for libnutconfig, when available. Libtool information ------------------- NUT libraries are built using Libtool. This tool is integrated with automake, and can create static and dynamic libraries for a variety of platforms in a transparent way. References: - link:http://www.gnu.org/software/libtool/[libtool] - link:http://sources.redhat.com/autobook/autobook/autobook.html[David MacKenzie's Autobook (RedHat)] - link:http://debianlinux.net/~jama/howto/gnu_build_steps.html[DebianLinux.Net, The GNU Build System]