CFLAGS  ?= -O2 -fPIC -fvisibility=hidden -Wall -Wextra
LDFLAGS ?= -shared -lpthread

INCDIR  := ../include
SRC     := libixcm.c
OBJ     := libixcm.o
LIB     := libixcm.so
LIBVER  := libixcm.so.1.0
ARCHIVE := libixcm.a

.PHONY: all clean install FORCE

# Without libixcm.c (customer release), the prebuilt $(LIBVER) is used
# as-is: all builds nothing and clean leaves it in place.
ifeq ($(wildcard $(SRC)),)
all:
clean:
else
# `make RELEASE=1` leaves out internal-only test overrides.
BUILD_DEFS := $(if $(RELEASE),-DIXCM_RELEASE)

all: $(LIB) $(ARCHIVE)

# Records BUILD_DEFS so switching RELEASE on or off rebuilds the library.
.build-defs: FORCE
	@echo '$(BUILD_DEFS)' | cmp -s - $@ || echo '$(BUILD_DEFS)' > $@

FORCE:

$(OBJ): $(SRC) $(INCDIR)/ixcm.h $(INCDIR)/ixcm_api_cm100.h $(INCDIR)/ixcm_api_cpm100.h $(INCDIR)/ixcm_api_dnm100.h $(INCDIR)/ixcm_export.h .build-defs
	$(CC) $(CFLAGS) $(BUILD_DEFS) -I$(INCDIR) -c -o $@ $<

$(LIB): $(OBJ)
	$(CC) $(LDFLAGS) -Wl,-soname,libixcm.so.1 -o $(LIBVER) $< -lpthread
	ln -sf $(LIBVER) $(LIB)
	ln -sf $(LIBVER) libixcm.so.1

$(ARCHIVE): $(OBJ)
	$(AR) rcs $@ $<

clean:
	rm -f $(OBJ) $(LIBVER) $(LIB) libixcm.so.1 $(ARCHIVE) .build-defs
endif

install: $(LIB)
	install -d $(DESTDIR)/usr/lib
	install -m 755 $(LIBVER) $(DESTDIR)/usr/lib/
	ln -sf $(LIBVER) $(DESTDIR)/usr/lib/$(LIB)
	ln -sf $(LIBVER) $(DESTDIR)/usr/lib/libixcm.so.1
	$(if $(wildcard $(ARCHIVE)),install -m 644 $(ARCHIVE) $(DESTDIR)/usr/lib/)
	install -d $(DESTDIR)/usr/include
	install -m 644 $(wildcard $(INCDIR)/ixcm_api_*.h) $(DESTDIR)/usr/include/
	$(if $(DESTDIR),,ldconfig)
