# Copyright (C) 2011-2012  Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.

# $Id: 4496ab73fc7b81f015efba2a588dcaaf07bbab02 $

CC = gcc
CFLAGS = -O -g -Wall -Wextra
# fix me: can be /usr/lib64 too
LIBDIR = /usr/lib

all: announce announce6 map map6 peer peer6 rclisten rclisten6
shared: announce-shared announce6-shared map-shared map6-shared \
	peer-shared peer6-shared rclisten-shared rclisten6-shared

pcp.o: pcp.h pcp.c
	$(CC) $(CFLAGS) -fPIC -c pcp.c

announce: announce.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

announce6: announce6.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

map: map.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

map6: map6.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

peer: peer.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

peer6: peer6.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

rclisten: rclisten.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

rclisten6: rclisten6.c pcp.o
	$(CC) $(CFLAGS) -o $@ $^

python: libpcpmodule.c pcp.o
	python setup.py -v build

python3: libpcpmodule.c pcp.o
	python3 setup.py -v build

libpcp.so: pcp.o
	$(CC) -shared -Wl,-soname,libpcp.so.0 -o $@ $<

announce-shared: announce.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

announce6-shared: announce.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

map-shared: map.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

map6-shared: map.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

peer-shared: peer.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

peer6-shared: peer.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

rclisten-shared: rclisten.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

rclisten6-shared: rclisten.c libpcp.so
	$(CC) $(CFLAGS) -o $@ $^

installinc: pcp.h
	install -d $(PREFIX)/usr/include
	install -m 644 pcp.h $(PREFIX)/usr/include

installpython: libpcpmodule.c pcp.o
	python setup.py -v install

installpython3: libpcpmodule.c pcp.o
	python3 setup.py -v install

installlib: libpcp.so
	install -d $(PREFIX)$(LIBDIR)
	install -m 644 libpcp.so $(PREFIX)$(LIBDIR)/libpcp.so.0
	ln -s -f libpcp.so.0 $(PREFIX)$(LIBDIR)/libpcp.so

clean:
	rm -f *.o *.so *.pyc
	rm -f announce announce6 announce-shared announce6-shared
	rm -f map map6 map-shared map6-shared
	rm -f peer peer6 peer-shared peer6-shared
	rm -f rclisten rclisten6 rclisten-shared rclisten6-shared
	rm -rf build
