
.EXPORT_ALL_VARIABLES:

EXECS = librrd.a rrdcgi rrdcgi.static rrdtool rrdtool.static rrdupdate rrdupdate.static
ifdef LIBRRD_SHARED
EXECS += librrd.so
endif

COMMON_OBJS =  gdpng.o         \
        getopt.o        \
        getopt1.o       \
        gifsize.o       \
        parsetime.o     \
        pngsize.o       \
        rrd_create.o    \
        rrd_diff.o      \
        rrd_dump.o      \
        rrd_info.o      \
        rrd_error.o     \
        rrd_fetch.o     \
        rrd_format.o    \
        rrd_graph.o     \
        rrd_last.o      \
        rrd_open.o      \
        rrd_resize.o    \
        rrd_restore.o   \
        rrd_tune.o      \
        rrd_xport.o

OBJS = $(COMMON_OBJ) rrd_update.o rrd_cgi.o rrdupdate.o rrd_tool.o

ifndef CGIDIR
CGIDIR := cgilib-0.4
endif
ifndef GDDIR
GDDIR := gd1.3
endif
ifndef ZLIBDIR
ZLIBDIR := zlib-1.1.4
endif
ifndef PNGDIR
PNGDIR := libpng-1.0.9
endif

all: $(EXECS)

CFLAGS += -I.. -I../${CGIDIR} -I../${GDDIR} -I../${ZLIBDIR} -I../${PNGDIR}
CFLAGS += -DHAVE_CONFIG_H
# -DHAVE_STRFTIME

RRDLIBS = librrd.a
CGILIBS = ../${CGIDIR}/librrd_cgi.a
GDLIBS = ../${GDDIR}/librrd_gd.a
ZLIBLIBS = ../${ZLIBDIR}/librrd_z.a
PNGLIBS = ../${PNGDIR}/librrd_png.a

LDFLAGS =  $(CFLAGS) -L${UCLIBCDIR}lib
LDLIBS = -Wl,-L${UCLIBCDIR}lib -Wl,-rpath=/tmp/var/bin -Wl,-rpath-link=${UCLIBCDIR}lib/:.

EXTRALIBS =
EXTRALIBS2 =
EXTRALIBS_STATIC =
EXTRALIBS_STATIC2 =

ifdef LIBRRD_SHARED
LDFLAGS  += -L.
LDLIBS   += -Wl,-L.
EXTRALIBS += -lrrd
EXTRALIBS2 += -lrrd
EXTRALIBS_STATIC += $(RRDLIBS)
EXTRALIBS_STATIC2 += $(RRDLIBS)
else
LDFLAGS  += -L.
LDLIBS   += -Wl,-L.
EXTRALIBS += $(RRDLIBS)
EXTRALIBS2 += $(RRDLIBS)
#LDLIBS += ./librrd.o
EXTRALIBS_STATIC += $(RRDLIBS)
EXTRALIBS_STATIC2 += $(RRDLIBS)
endif

ifdef EXTRALIBS_SHARED
LDFLAGS  += -L../${CGIDIR} -L../${GDDIR} -L../${ZLIBDIR} -L../${PNGDIR}
LDLIBS   += -Wl,-L../${CGIDIR} -Wl,-L../${GDDIR} -Wl,-L../${ZLIBDIR} -Wl,-L../${PNGDIR}
EXTRALIBS += -lrrd_cgi -lrrd_gd -lrrd_z -lrrd_png
EXTRALIBS_STATIC += $(PNGLIBS) $(CGILIBS) $(GDLIBS) $(ZLIBLIBS)
else
LDFLAGS  += -L../${CGIDIR} -L../${GDDIR} -L../${ZLIBDIR} -L../${PNGDIR}
LDLIBS   += -Wl,-L../${CGIDIR} -Wl,-L../${GDDIR} -Wl,-L../${ZLIBDIR} -Wl,-L../${PNGDIR}
#LDLIBS += ../${CGIDIR}/librrd_cgi.o ../${GDDIR}/librrd_gd.o ../${ZLIBDIR}/librrd_z.o ../${PNGDIR}/librrd_png.o
EXTRALIBS += $(PNGLIBS) $(CGILIBS) $(GDLIBS) $(ZLIBLIBS)
EXTRALIBS_STATIC += $(PNGLIBS) $(CGILIBS) $(GDLIBS) $(ZLIBLIBS)
endif

$(CGILIBS):
	cd ../${CGIDIR} ; make

$(GDLIBS):
	cd ../${GDDIR} ; make

$(ZLIBLIBS):
	cd ../${ZLIBDIR} ; make

$(PNGLIBS):
	cd ../${PNGDIR} ; make

librrd.a: $(COMMON_OBJS)
	rm -f librrd.a
	$(AR) cr librrd.a $(COMMON_OBJS)
	$(RANLIB) librrd.a

librrd.so: librrd.a
	rm -f librrd.so librrd.so.0
	$(LD) -s -shared --warn-common --warn-once -z combreloc \
		-soname librrd.so.0 -o librrd.so \
		-rpath=/tmp/var/bin -rpath-link=$(UCLIBCDIR)lib \
		--whole-archive librrd.a --no-whole-archive \
		$(UCLIBCDIR)libc/misc/internals/interp.o \
		-L${UCLIBCDIR}lib \
		-lc -lm
	ln -s librrd.so librrd.so.0
#	ln -s librrd.so.0 librrd.so

rrdcgi: rrd_cgi.o rrd_update.o $(RRDLIBS) $(PNGLIBS) $(CGILIBS) $(GDLIBS) $(ZLIBLIBS)
	$(CC) $(LDFLAGS) -o $@ rrd_cgi.o rrd_update.o $(LDLIBS) -lc -lm $(EXTRALIBS)

rrdcgi.static: rrd_cgi.o rrd_update.o $(RRDLIBS) $(PNGLIBS) $(CGILIBS) $(GDLIBS) $(ZLIBLIBS)
	$(CC) $(LDFLAGS) -o $@ rrd_cgi.o rrd_update.o $(LDLIBS) -lc -lm $(EXTRALIBS_STATIC) -static

rrdtool: rrd_tool.o rrd_update.o $(RRDLIBS) $(PNGLIBS) $(CGILIBS) $(GDLIBS) $(ZLIBLIBS)
	$(CC) $(LDFLAGS) -o $@ rrd_tool.o rrd_update.o $(LDLIBS) -lc -lm $(EXTRALIBS)

rrdtool.static: rrd_tool.o rrd_update.o $(RRDLIBS) $(PNGLIBS) $(CGILIBS) $(GDLIBS) $(ZLIBLIBS)
	$(CC) $(LDFLAGS) -o $@ rrd_tool.o rrd_update.o $(LDLIBS) -lc -lm $(EXTRALIBS_STATIC) -static

rrdupdate.o: rrdupdate.c
	$(CC) $(CFLAGS) -DSTANDALONE -c -o $@ rrdupdate.c

rrdupdate: rrdupdate.o $(RRDLIBS)
	$(CC) $(LDFLAGS) -o $@ rrdupdate.o $(LDLIBS) -lc -lm $(EXTRALIBS2)

rrdupdate.static: rrdupdate.o $(RRDLIBS)
	$(CC) $(LDFLAGS) -o $@ rrdupdate.o $(LDLIBS) -lc -lm $(EXTRALIBS_STATIC2) -static

romfs:
	$(ROMFSINST) /usr/bin/rrdtool
	$(ROMFSINST) /usr/bin/rrdcgi
	$(ROMFSINST) /usr/bin/rrdupdate


BINARIES := $(shell find . -type f -name "*.so*" -print | file -f - | grep ELF | grep -v "statically linked" | cut -d':' -f1 | grep -v librrd.so )
#BINARIES += rrdcgi rrdtool rrdupdate
MAP = librrd.map

$(MAP): librrd.a
	$(NM) -o --defined-only --no-sort $< | cut -d' ' -f3 > $@

# Find all unresolved symbols that librrd could resolve
.symbols: $(MAP) $(BINARIES)
	rm -f $@
	for symbol in `$(NM) --dynamic -u --no-sort $(BINARIES) | sort -u` ; do \
	    grep -q "^$${symbol}$$" $(MAP) && echo "-u $${symbol}" >> $@ ; \
	    true ; \
	done

LDFLAGS2 = -s -shared --warn-common --warn-once -z combreloc \
		-soname librrd.so.0 \
		-rpath=/tmp/var/bin -rpath-link=$(UCLIBCDIR)lib \
		--whole-archive librrd.a --no-whole-archive \
		$(UCLIBCDIR)libc/misc/internals/interp.o \
		-L${UCLIBCDIR}lib \
		-lc -lm

# Re-link librrd
#librrd.so.0: .symbols $(COMMON_OBJS)
#	xargs -t $(LD) $(LDFLAGS2) -o $@ $(COMMON_OBJS) < .symbols


install:
	install -d $(INSTALLDIR)/usr/bin
	install rrdtool $(INSTALLDIR)/usr/bin/rrdtool
	install rrdtool.static $(INSTALLDIR)/usr/bin/rrdtool.static
	install rrdcgi $(INSTALLDIR)/usr/bin/rrdcgi
	install rrdcgi.static $(INSTALLDIR)/usr/bin/rrdcgi.static
	install rrdupdate $(INSTALLDIR)/usr/bin/rrdupdate
	install rrdupdate.static $(INSTALLDIR)/usr/bin/rrdupdate.static
ifdef LIBRRD_SHARED
	install -d $(INSTALLDIR)/lib
	install librrd.so.0 $(INSTALLDIR)/lib/librrd.so.0
endif

clean:
	rm -f $(EXECS) $(RRDLIBS) *.gdb *.elf *.o *.s *.i

