144 lines
4.4 KiB
Text
144 lines
4.4 KiB
Text
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 disapear 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' occurences 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
|
|
prefered.
|
|
|
|
|
|
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]
|