Skip to content

Latest commit

 

History

History

lib

NUT libraries complementary information

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: