include ../../make.conf

BUILDDIR = ../../build/lib

TARGET = libccl

MAJOR = 0
MINOR = 1
VERSION = $(MAJOR).$(MINOR)

GEN_HEADERS = queue.h list.h util.h
CCL_HEADERS = ../include/ccl.h monitor.h protocol.h session.h settings.h

GEN_SOURCES = queue.c dictionary.c list.c util.c json.c
CCL_SOURCES = ccl.c session.c monitor.c protocol.c settings.c bidid.c

HEADERS = ${CCL_HEADERS} ${GEN_HEADERS} $(OUT_HEADERS)
SOURCES = ${CCL_SOURCES} ${GEN_SOURCES} $(OUT_SOURCES)
OBJECTS = $(patsubst %.c,$(BUILDDIR)/%.o,$(SOURCES))

CFLAGS += $(COMMON_CFLAGS)
CFLAGS += -I../include
CFLAGS += -fPIC

ifeq ($(UNAME), Linux)
LDFLAGS += -shared -Wl,-soname,$(TARGET).so.$(VERSION)
endif

ifeq ($(UNAME), Darwin)
LDFLAGS += -lcurl
LDFLAGS += -dynamiclib
LDFLAGS += -install_name @rpath/$(TARGET).so
endif

all: build

build: CFLAGS += $(BUILD_CFLAGS)
build: $(BUILDDIR)/$(TARGET).so $(BUILDDIR)/$(TARGET).a

debug: CFLAGS += $(DEBUG_CFLAGS)
debug: $(BUILDDIR)/$(TARGET).so $(BUILDDIR)/$(TARGET).a

$(BUILDDIR)/$(TARGET).so.$(VERSION): $(OBJECTS)
	${CC} $(LDFLAGS) $^ -o $@

$(BUILDDIR)/$(TARGET).so: $(BUILDDIR)/$(TARGET).so.$(VERSION)
	rm -f $(BUILDDIR)/$(TARGET).so
	ln -s $(BUILDDIR)/$(TARGET).so.$(VERSION) $(BUILDDIR)/$(TARGET).so

$(BUILDDIR)/$(TARGET).a.$(VERSION): $(OBJECTS)
	ar rcs $@ $^

$(BUILDDIR)/$(TARGET).a: $(BUILDDIR)/$(TARGET).a.$(VERSION)
	rm -f $(BUILDDIR)/$(TARGET).a
	ln -s $(BUILDDIR)/$(TARGET).a.$(VERSION) $(BUILDDIR)/$(TARGET).a

$(BUILDDIR)/%.o:%.c $(BUILDDIR)/.d
	${CC} ${CFLAGS} -c $< -o $@

%/.d:
	mkdir -p $(BUILDDIR)
	mkdir -p ../../build/include
	cp ../include/* ../../build/include

clean:
	rm -f $(OBJECTS) $(BUILDDIR)/$(TARGET).so.$(VERSION) $(BUILDDIR)/$(TARGET).so a.out
