NAME=libkarma
VERSION=0.1.0
TARGET=$(NAME)
SRCS= errors.c fdb.c hash.c karma.c karmaLan.c karmaUsb.c md5.c mountSearch.c \
	mp3.c playlist.c properties.c rio_rw.c ssdp.c status.c utf8.c \
	util.c wav.c
INST_HEADERS=lkarma.h utf8.h

LIBDIR=../lib

CC?=gcc
AR?=ar
RANLIB?=ranlib
LN_S?=ln -s

CFLAGS+=-fPIC -D_REENTRANT -Wall -pedantic
CFLAGS+=-ggdb -W -Wchar-subscripts -Wmissing-prototypes 
CFLAGS+=-Wmissing-declarations -Wno-switch -Wredundant-decls -Wno-unused

MAJOR?=$(shell VERSION=${VERSION} echo $${VERSION%%\.*})

PLATFORM=$(shell uname)
ifeq ($(PLATFORM),Darwin)
LIBS=-ltag_c -lz -liconv
LDFLAGS+=-dynamiclib -single_module
OUT_BASE=$(TARGET).dynlib
OUT_MAJOR=$(TARGET).$(MAJOR).dynlib
OUT_VERSION=$(TARGET).$(VERSION).dynlib
else 
OUT_BASE=$(TARGET).so
OUT_MAJOR=$(TARGET).so.$(MAJOR)
OUT_VERSION=$(TARGET).so.$(VERSION)
LDFLAGS+=-shared -Wl,-soname,$(OUT_MAJOR)
LIBS=-ltag_c
endif

default: all

install: shared-lib-stamp static-lib-stamp
	../install-sh -m 0755 -d $(DEST)/lib
	../install-sh -m 0755 -d $(DEST)/include
	../install-sh -m 0755 -d $(DEST)/include/libkarma
	../install-sh -m 0644 -t $(DEST)/lib/ $(LIBDIR)/$(TARGET).a
	../install-sh -m 0755 -t $(PREFIX)/lib/ $(LIBDIR)/$(OUT_VERSION)
	$(RM) $(PREFIX)/lib/$(OUT_MAJOR)
	$(RM) $(PREFIX)/lib/$(OUT_BASE)
	$(LN_S) $(OUT_VERSION) $(PREFIX)/lib/$(OUT_MAJOR)
	$(LN_S) $(OUT_VERSION) $(PREFIX)/lib/$(OUT_BASE)
	../install-sh -m 0644 -t $(DEST)/include/libkarma/ $(INST_HEADERS)

uninstall:
	$(RM) $(PREFIX)/lib/$(TARGET).a $(PREFIX)/lib/$(OUT_MAJOR) $(PREFIX)/lib/$(OUT_BASE) $(PREFIX)/lib/$(OUT_VERSION)
	$(RM) -r $(DEST)/include/libkarma

OBJS = $(SRCS:.c=.o)

$(LIBDIR):
	@[ -d $(LIBDIR) ] || mkdir -p $(LIBDIR) > /dev/null 2>&1

$(LIBDIR)/$(TARGET).a: $(OBJS) $(LIBDIR)
	$(AR) r $(LIBDIR)/$(TARGET).a $(OBJS)
	$(RANLIB) $(LIBDIR)/$(TARGET).a

$(LIBDIR)/$(OUT_VERSION): $(OBJS) $(LIBDIR)
	$(CC) $(LDFLAGS) $(OBJS) $(CFLAGS) -o $(LIBDIR)/$(OUT_VERSION) $(LIBS)

$(LIBDIR)/$(OUT_MAJOR): $(LIBDIR)/$(OUT_VERSION) $(LIBDIR)
	$(LN_S) $(OUT_VERSION) $(LIBDIR)/$(OUT_MAJOR)

$(LIBDIR)/$(OUT_BASE): $(LIBDIR)/$(OUT_VERSION) $(LIBDIR)
	$(LN_S) $(OUT_VERSION) $(LIBDIR)/$(OUT_BASE)

shared-lib-stamp: $(LIBDIR)/$(OUT_VERSION) $(LIBDIR)/$(OUT_MAJOR) $(LIBDIR)/$(OUT_BASE)
	touch $@

static-lib-stamp: $(LIBDIR)/$(TARGET).a
	touch $@

all: static-lib-stamp shared-lib-stamp

.PHONY: clean

clean:
	rm -rf $(OBJS) $(LIBDIR)/ static-lib-stamp shared-lib-stamp
