
= Use installed libusual with autoconf and antimake. =


Install libusual and link against it.


== Build libusual ==

---------------------------------
$ git clone git://github.com/libusual/libusual.git libusual
Cloning into 'libusual'...
$ cd libusual
$ ./autogen.sh
[...]
$ ./configure --disable-shared --prefix=`pwd`/../inst
[...]
$ make
[...]
$ make install
[...]
$ cd ..
---------------------------------

== Build our own code ==


Now we prepare our own code.


First, this is the source file:

.File: prog.c
[source,c]
-----------------------------------
#include <stdio.h>
#include <string.h>
#include <usual/hashing/crc32.h>

int main(void)
{
	const char *data = "CECSFXX";
	uint32_t crc;

	crc = calc_crc32(data, strlen(data), 0);
	printf("crc: %08x\n", crc);
	return 0;
}
-----------------------------------

Autoconf setup

.File: autogen.sh
[source,shell]
-----------------------------------
# use prepared autgen logic
../../std-autogen.sh ../../..

# fetch Antimake template from libusual
cp ../../antimake.mk antimake.mk.in
-----------------------------------
.File: extra.mk.in
-----------------------------------
USUAL_ANTIMAKE = @USUAL_ANTIMAKE@
USUAL_CFLAGS = @USUAL_CFLAGS@
USUAL_LIBS = @USUAL_LIBS@
-----------------------------------
.File: configure.ac
[source,autoconf]
-----------------------------------
AC_INIT([achello], [0.1], [https://libusual.github.com])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_SRCDIR([prog.c])
AC_PREREQ([2.59])

AC_USUAL_INIT
AC_USUAL_PROGRAM_CHECK

PKG_CHECK_MODULES(USUAL, libusual)
_PKG_CONFIG([USUAL_ANTIMAKE], [variable=antimake], [libusual])
AC_SUBST([USUAL_ANTIMAKE])

AC_OUTPUT([antimake.mk extra.mk])
-----------------------------------

Here is the source that needs to be linked with libusual:

.File: prog.c
[source,c]
-----------------------------------
#include <usual/hashing/crc32.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
	const char *data = "CECSFXX";
	uint32_t crc;

	crc = calc_crc32(data, strlen(data), 0);
	printf("crc: %08x\n", crc);
	return 0;
}
-----------------------------------

Antimake based Makefile

.File: Makefile
[source,makefile]
-----------------------------------
# the automake-style build description for 'prog'
noinst_PROGRAMS = prog
prog_SOURCES = prog.c
prog_CPPFLAGS = $(USUAL_CFLAGS)
prog_LDADD = $(USUAL_LIBS)

# clean configured files
DISTCLEANFILES = config.status config.log extra.mk antimake.mk config.h

# clean generated files
MAINTAINERCLEANFILES = configure config.guess config.sub install-sh \
		antimake.mk.in extra.mk.in config.h.in
EXTRA_DIST = Makefile $(MAINTAINERCLEANFILES)

# launch Antimake
include extra.mk
include antimake.mk
-----------------------------------

Build the project

---------------------------------
$ sh ./autogen.sh
[...]
$ PKG_CONFIG_PATH=`pwd`/inst/lib/pkgconfig ./configure
[...]
$ make
     CC       prog.c
     CCLD     prog
$ ls
Makefile	config.guess  config.status  extra.mk	  libusual
antimake.mk	config.h      config.sub     extra.mk.in  prog
antimake.mk.in	config.h.in   configure      inst	  prog.c
autogen.sh	config.log    configure.ac   install-sh
$ ./prog
crc: 12345678
$ make am-show-distfiles
Makefile
antimake.mk.in
config.guess
config.h.in
config.sub
configure
extra.mk.in
install-sh
prog.c
$ make maintainer-clean
     CLEAN    prog
     MAINTAINERCLEAN maintainer-clean
$ ls
Makefile  autogen.sh  configure.ac  inst  libusual  prog.c
---------------------------------

Done!

