# libxenstat: statistics-collection library for Xen
# Copyright (C) International Business Machines Corp., 2005
# Author: Josh Triplett <josht@us.ibm.com>
# 
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
# 
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.

INSTALL         = install
INSTALL_PROG    = $(INSTALL) -m0755 -D
INSTALL_DATA    = $(INSTALL) -m0644 -D

prefix=/usr/local
includedir=$(prefix)/include
libdir=$(prefix)/lib

LDCONFIG=ldconfig
MAKE_LINK=ln -sf

MAJOR=0
MINOR=0

LIB=src/libxenstat.so.$(MAJOR).$(MINOR)
LINKS=src/libxenstat.so.$(MAJOR) src/libxenstat.so
OBJECTS=src/xenstat.o src/xen-interface.o
SONAME_FLAGS=-Wl,-soname -Wl,libxenstat.so.$(MAJOR)

WARN_FLAGS=-Wall -Werror

# Note that the bindings are not built by default, because they require a
# number of external dependencies.
all: $(LIB) $(LINKS)

$(LIB): $(OBJECTS)
	$(CC) $(CFLAGS) $(SONAME_FLAGS) -shared -o $@ $(OBJECTS)

src/xenstat.o: src/xenstat.c src/xenstat.h src/xen-interface.h
	$(CC) $(CFLAGS) $(WARN_FLAGS) -Isrc -c -o $@ $<

src/xen-interface.o: src/xen-interface.c src/xen-interface.h
	$(CC) $(CFLAGS) $(WARN_FLAGS) -c -o $@ $<

src/libxenstat.so.$(MAJOR): $(LIB)
	$(MAKE_LINK) $(<F) $@

src/libxenstat.so: src/libxenstat.so.$(MAJOR)
	$(MAKE_LINK) $(<F) $@

install: all
	$(INSTALL_DATA) src/xenstat.h $(DESTDIR)$(includedir)/xenstat.h
	$(INSTALL_PROG) $(LIB) \
	                $(DESTDIR)$(libdir)/libxenstat.so.$(MAJOR).$(MINOR)
	$(MAKE_LINK) libxenstat.so.$(MAJOR).$(MINOR) \
	             $(DESTDIR)$(libdir)/libxenstat.so.$(MAJOR)
	$(MAKE_LINK) libxenstat.so.$(MAJOR) \
	             $(DESTDIR)$(libdir)/libxenstat.so
	-$(LDCONFIG)

BINDINGS=bindings/swig/python/_xenstat.so bindings/swig/python/xenstat.py \
         bindings/swig/perl/xenstat.so bindings/swig/perl/xenstat.pm
OUTPUTS=bindings/swig/python/_xenstat.c bindings/swig/perl/xenstat.c
# The all-bindings target builds all the language bindings
all-bindings: $(BINDINGS)

$(BINDINGS): $(LIB) $(LINKS) src/xenstat.h

SWIG_FLAGS=-module xenstat -Isrc

PYTHON_VERSION=2.3
PYTHON_FLAGS=-I/usr/include/python$(PYTHON_VERSION) -lpython$(PYTHON_VERSION)
bindings/swig/python/_xenstat.c bindings/swig/python/xenstat.py: bindings/swig/xenstat.i
	swig -python $(SWIG_FLAGS) -outdir $(@D) -o $@ $<

bindings/swig/python/_xenstat.so: bindings/swig/python/_xenstat.c
	$(CC) $(CFLAGS) $(PYTHON_FLAGS) -shared -Isrc -Lsrc -lxenstat -o $@ $<

PERL_FLAGS=`perl -MConfig -e 'print "$$Config{ccflags} -I$$Config{archlib}/CORE";'`
bindings/swig/perl/xenstat.c bindings/swig/perl/xenstat.pm: bindings/swig/xenstat.i
	swig -perl $(SWIG_FLAGS) -outdir $(@D) -o $@ $<

bindings/swig/perl/xenstat.so: bindings/swig/perl/xenstat.c
	$(CC) $(CFLAGS) $(PERL_FLAGS) -shared -Isrc -Lsrc -lxenstat -o $@ $<

clean:
	rm -f $(LIB) $(OBJECTS) $(LINKS) $(BINDINGS) $(OUTPUTS)
