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
 | |
| 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]
 |