Imported Upstream version 2.6.3

This commit is contained in:
Arnaud Quette 2012-01-24 11:22:33 +01:00
parent 45043b58d0
commit fad6ced6f6
255 changed files with 11081 additions and 4629 deletions

View file

@ -1,116 +1,143 @@
Desc: NUT libraries complementary information
File: README
Date: 23 Aug 2003
Auth: Arnaud Quette <arnaud.quette@free.fr>
ifndef::external_title[]
NUT libraries complementary information
=======================================
endif::external_title[]
This file provides some complementary information
about the creation process of NUT libraries, and
the use of it.
This chapter provides some complementary information about the creation process
of NUT libraries, and using these in your program.
1) Introduction
---------------
Introduction
------------
This represents an evolution toward a fully standard NUT
library usage for external programs, such as clients.
NUT provides several libraries, to ease interfacing with 3rd party programs:
The aim is to provide facilities to incorporate NUT functions
into external programs such as asapm-ups, wmnut, and others.
But it is also used internally (upsc, ...)
- *libupsclient*, to interact with NUT server (upsd),
- *libnutscan*, to discover NUT supported devices.
NUT (install-lib or legacy install-misc) currently provides:
- a library (static and/or dynamic, depending on what your platform supports),
called libupsclient.a, libupsclient.so, etc.
- and header files (upsclient.h).
- an helper script called libupsclient-config,
- and a pkgconfig file, called libupsclient.pc, if it is supported
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.
2) pkgconfig support
--------------------
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.
pkgconfig enables a high level of integration with minimal effort.
No more needs to manage hosts of possible NUT installation path in
your configure script !
libupsclient-config
-------------------
It is as simple to use as calling:
In case pkgconfig is not available on the system, an alternate helper script is
provided: 'libupsclient-config'.
$> `pkg-config --exists libupsclient --silence-errors` to see if NUT is usable
$> `pkg-config --cflags libupsclient` to get CFLAGS
$> `pkg-config --libs libupsclient` to get LD_FLAGS
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.
A file called "libupsclient.pc" is provided in the present directory,
and installed in the according directory to enable the above
feature. The default installation directory ("/usr/lib/pkgconfig/")
may be changed with "./configure --with-pkgconfig-dir=PATH".
The usage is about the same as pkg-config and similar tools.
To get CFLAGS, use:
3) libupsclient-config:
-----------------------
$ libupsclient-config --cflags
Even if pkgconfig is supported/installed, an alternate
helper script will be installed in the same directory
as NUT client programs (BINDIR).
To get LD_FLAGS, use:
The usage is about the same as pkg-config:
$ libupsclient-config --libs
$> `libupsclient-config --cflags` to get CFLAGS
$> `libupsclient-config --libs` to get LD_FLAGS
References: linkman:libupsclient-config[1] manual page,
NOTE: this feature may evolve (name change), or even disapear in the future.
4) Example of configure.in:
---------------------------
For using libupsclient in your program, simply copy/paste
the below into your configure.in file. It will test for
pkgconfig support for NUT, and fall back to
libupsclient-config if not available. It will issue an
error if none is found!
...
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
...
You can also use this if you are sure that pkg-config
is installed:
...
PKG_CHECK_MODULES(LIBUPSCLI, libupsclient >= 1.5.2)
...
5) Future things:
pkgconfig support
-----------------
- next libs to come may be libupsconfig, libupscmd, libupsrw, ...
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
6) Libtool information:
-----------------------
You can also use this if you are sure that pkg-config is installed:
NUT libraries are currently 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.
PKG_CHECK_MODULES(LIBUPSCLI, libupsclient >= 2.4.0)
PKG_CHECK_MODULES(LIBNUTSCAN, libnutscan >= 2.6.2)
7) References:
--------------
- libtool: http://www.gnu.org/software/libtool/
- David MacKenzie's Autobook (RedHat):
http://sources.redhat.com/autobook/autobook/autobook.html
- DebianLinux.Net: The GNU Build System
http://debianlinux.net/~jama/howto/gnu_build_steps.html
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]