#
#
#

top_srcdir = ..
top_builddir = ..
this_srcdir = ${top_srcdir}/lib

include ${top_builddir}/Make.rules

vpath %.c ${this_srcdir}

LIBS := 
REENTRANT_CFLAGS := -D_REENTRANT
VERSIONED_LINK := yes

SHARED_NCPLIB := libncp.so
SHARED_NCPLIB_BIN := $(SHARED_NCPLIB).$(VERSION_SOLIB)
SHARED_NCPLIB_SONAME := $(SHARED_NCPLIB).$(VERSION_SONAME)
STATIC_NCPLIB := libncp.a
STATIC_NCPLIB_BIN := $(STATIC_NCPLIB)

CCFLAGS += -I.
PIC_FLAGS := -fPIC
NWCOMPAT := 1

SHARED_VLINK :=
SHARED_VLINK_CFLAGS :=
ifeq ($(VERSIONED_LINK),yes)
SHARED_VLINK := -Wl,-version-script=${this_srcdir}/libncp.vers
SHARED_VLINK_CFLAGS := -DMULTIVERSION
endif

STATIC_BASE_OBJ := ncplib.o filemgmt.o queue.o nwcalls.o nwtime.o cfgfile.o \
		strops.o ncpext.o nwclient.o resolve.o stats.o
ifdef NDS_SUPPORT
STATIC_NDS_OBJ := ndslib.o mpilib.o
STATIC_BASE_OBJ += ndscrypt.o nwnet.o wcs.o \
		rdn.o ds/filter.o ds/search.o ds/request.o ds/setkeys.o \
		ds/dsgetstat.o ds/partops.o ds/iterhandle.o ds/effright.o \
		ds/dsread.o ds/dslist.o ds/bindctx.o ds/classes.o \
		ds/syntaxes.o ds/dsstream.o \
		o_ndslib.o
endif
ifdef SIGNATURES
STATIC_BASE_OBJ += ncpsign.o
endif

SHARED_BASE_OBJ := $(STATIC_BASE_OBJ:.o=.do)
SHARED_NDS_OBJ := $(STATIC_NDS_OBJ:.o=.do)

STATIC_O_OBJ := $(STATIC_BASE_OBJ) $(STATIC_NDS_OBJ)
SHARED_O_OBJ := $(SHARED_BASE_OBJ) $(SHARED_NDS_OBJ)

BASE_CFLAGS := -DHAVE_CONFIG_H -DMAKE_NCPLIB -D_GNU_SOURCE 
NDS_CFLAGS := $(BASE_CFLAGS) -DPORTABLE -DUPTON
CFLAGS_ncplib.o   := -DNWSFIND=\"$(bindir)/nwsfind\"
CFLAGS_cfgfile.o  := -DGLOBALCFGFILE=\"$(sysconfdir)/ncpfs.conf\"

STATIC_CFLAGS    := $(CFLAGS) $(CCFLAGS) $(REENTRANT_CFLAGS) -ffunction-sections -fdata-sections 
SHARED_CFLAGS    := $(CFLAGS) $(CCFLAGS) $(REENTRANT_CFLAGS) $(PIC_FLAGS) $(SHARED_VLINK_CFLAGS)

.PHONY : all dep install install-dev clean mrproper distclean
.PHONY : install_shared install_static install_static_su 

all: $(STATIC_NCPLIB) $(SHARED_NCPLIB)

install: install_shared

%.d: %.c
	set -e; $(CC) -M $(STATIC_CFLAGS) $(CFLAGS_$(@:.d=.o)) $(BASE_CFLAGS) $< \
		| sed 's,\($*\)\.o[ :]*,\1.o \1.do \1.to $@ : ,g' > $@; \
		[ -s $@ ] || rm -f $@

$(STATIC_NDS_OBJ): %.o: %.c
	$(CC) $(STATIC_CFLAGS) $(CFLAGS_$@) $(NDS_CFLAGS) -o $@ -c $<

$(STATIC_BASE_OBJ): %.o: %.c
	$(CC) $(STATIC_CFLAGS) $(CFLAGS_$@) $(BASE_CFLAGS) -o $@ -c $<

$(SHARED_NDS_OBJ): %.do: %.c
	$(CC) $(SHARED_CFLAGS) $(CFLAGS_$(@:.do=.o)) $(NDS_CFLAGS) -o $@ -c $<

$(SHARED_BASE_OBJ): %.do: %.c
	$(CC) $(SHARED_CFLAGS) $(CFLAGS_$(@:.do=.o)) $(BASE_CFLAGS) -o $@ -c $<

dep:

clean:
	rm -f *.o *.do *.to *~ ds/*.o ds/*.do ds/*.to ds/*~ fs/*.o fs/*.do fs/*.to fs/*~
	rm -f libncp.a libncp.so* libncpsu.*

mrproper: clean
	rm -f $(UTILS) $(DISTFILE) *.d fs/*.d ds/*.d

distclean: mrproper

install_shared: $(SHARED_NCPLIB_BIN)
	$(INSTALL) -d $(DESTDIR)$(libsodir)
	$(INSTALL) $(SHARED_NCPLIB_BIN) $(DESTDIR)$(libsodir)
	-ldconfig

install-dev: install_shared install_static
	ln -sf $(SHARED_NCPLIB_SONAME) $(DESTDIR)$(libsodir)/$(SHARED_NCPLIB)
	$(INSTALL) -d $(DESTDIR)$(includedir)/ncp
	$(INSTALL) -d $(DESTDIR)$(includedir)/ncp/ext
	$(INSTALL) -d $(DESTDIR)$(includedir)/ncp/kernel
	$(INSTALL) -d $(DESTDIR)$(includedir)/ncp/obsolete
	$(INSTALL_DATA) ${top_builddir}/include/ncp/*.h $(DESTDIR)$(includedir)/ncp
	$(INSTALL_DATA) ${top_builddir}/include/ncp/ext/*.h $(DESTDIR)$(includedir)/ncp/ext
	$(INSTALL_DATA) ${top_builddir}/include/ncp/kernel/*.h $(DESTDIR)$(includedir)/ncp/kernel
	$(INSTALL_DATA) ${top_builddir}/include/ncp/obsolete/*.h $(DESTDIR)$(includedir)/ncp/obsolete
ifneq (${top_srcdir},${top_builddir})
	$(INSTALL_DATA) ${top_srcdir}/include/ncp/*.h $(DESTDIR)$(includedir)/ncp
	$(INSTALL_DATA) ${top_srcdir}/include/ncp/ext/*.h $(DESTDIR)$(includedir)/ncp/ext
	$(INSTALL_DATA) ${top_srcdir}/include/ncp/kernel/*.h $(DESTDIR)$(includedir)/ncp/kernel
	$(INSTALL_DATA) ${top_srcdir}/include/ncp/obsolete/*.h $(DESTDIR)$(includedir)/ncp/obsolete
endif

$(SHARED_NCPLIB): $(SHARED_NCPLIB_BIN)
	rm -f $@
	ln -sf $< $@

$(SHARED_NCPLIB_BIN): $(SHARED_O_OBJ) ${this_srcdir}/libncp.vers
	$(CC) -shared -o $@ -Wl,-soname=$(SHARED_NCPLIB_SONAME) $(SHARED_VLINK) $(SHARED_O_OBJ) ${LIBS} -lc

install_static: $(STATIC_NCPLIB_BIN)
	$(INSTALL) -d $(DESTDIR)$(libadir)
	$(INSTALL_DATA) $(STATIC_NCPLIB_BIN) $(DESTDIR)$(libadir)

$(STATIC_NCPLIB): $(STATIC_O_OBJ)
	$(AR) r $@ $(STATIC_O_OBJ) 

ifeq ($(NEED_DEP),yes)
include $(STATIC_O_OBJ:.o=.d)
endif

