CC?=gcc

# Linux flavour
# PREFIX?=/usr

# BSD flavour
# PREFIX?=/usr/local

# Debug flavour
PREFIX?=..

BINDIR?=$(PREFIX)/bin

OPTS_debug=-D_DEBUG -g -ggdb # -pg -fprofile-arcs -ftest-coverage
OPTS_production=-O3 -pipe

CFLAGS+=-std=c99 -D__BSD_VISIBLE -Wall -pipe -Wextra -I. -pthread #-ansi -pedantic
LDFLAGS+=-lc -pthread

BINARY =liner
HEADERS=util.h socket.h
SOURCES=main.c

MSGPACKLIB=msgpack/msgpack.a
MSGPACKLIB_debug=msgpack/msgpack.debug.a


OBJECTS = $(SOURCES:%.c=%.o)
OBJECTS_debug = $(SOURCES:%.c=%.debug.o)

.SUFFIXES: .debug.o .o .c

all: $(BINARY) $(BINARY).debug

CFLAGS_production = $(CFLAGS) $(OPTS_production) $(FEATURES)
CFLAGS_debug = $(CFLAGS) $(OPTS_debug) $(FEATURES)

$(BINARY): $(OBJECTS) $(MSGPACKLIB)
	$(CC) -o $@ $(LDFLAGS) $^
	strip $@

$(BINARY).debug: $(OBJECTS_debug) $(MSGPACKLIB_debug)
	$(CC) -o $@ -g $(LDFLAGS) $^

$(MSGPACKLIB):
	$(MAKE) -C msgpack `basename $@`

$(MSGPACKLIB_debug):
	$(MAKE) -C msgpack `basename $@`

%.debug.o: %.c $(HEADERS)
	$(CC) -c -o $@ $(CFLAGS_debug) $(<:.debug.o=.c)

%.o: %.c $(HEADERS)
	$(CC) -c -o $@ $(CFLAGS_production) $(<:.o=.c)

clean:
	$(MAKE) -C msgpack $@
	rm -rf $(BINARY) $(BINARY).debug *.o *~

install:
	install -m 755 $(BINARY) $(BINDIR)
