# 
# Linux Makefile for a preparation of shared and static
# VG libraries.
# GNU make capabilities are assumed
# 
# Michal Jagermann, 1996-12-29
#         updates:  1997-08-28, 1997-10-14
#
# michal@ellpspace.math.ualberta.ca

# Principal targets:

#   all       = make both static and shared libraries
#   install   = install everything
#   libvg     = the vg library 
#   libvgx11  = graphics interface library for X11R4
#   libvgtek  = graphics interface for Tektronix
#   check     = simple tests to check libraries integrity
#               (run 'make install' before trying 'make check'
#               with shared libraries); this target assumes that
#               required libraries are already present
#   junk        = a very simple-minded example
#   example_x11 = sample application for X-window output
#   example_tek = same sample application for tektool output

FC = fort77
CFLAGS = -O2 -fomit-frame-pointer -Wall
#CFLAGS = -O2 -g -Wall
CFLAGS=-g
FFLAGS = $(CFLAGS)

LIBS = -lm
LIBS_TEK = -lm
LIBS_X11 = -lX11 -lm
# where to install new libraries
LIBDIR = /usr/local/lib
TLIBDIR = $(LIBDIR)
# TLIBDIR = .
LIBXDIR = /usr/X11/lib
MANDIR = /usr/local/man/man1

FILES=	README.VG vg.man a2.f adraw.f agraf_tek.f agraffa.c \
	batch.f contor.f cursor.f dcurv.f errbar.f example.dat1 example.dat2 \
	example.f finit.f hist.f inter.f legnd.f letter.f makefile \
	misc.f modify.f plot.f scurv.f tmov.f version.f vgcore.f \
	vgload.f xdraw.f zoom.f CHANGES agraffa.c.3.X agraf_x11.c vg_icon \
        agraf.for agraffa.for

CFILES= $(wildcard *.c)
#-------------------------------------------------------------------------
LN = /bin/ln -sf
STRIP = strip --strip-debug --discard-locals
# while debugging use this
# STRIP = echo

ELF_VERSION = 1.0
ELF_SO_VERSION = 1
VGLIBS = libvg libvgtek libvgx11
STATIC_VGLIBS = libvg.a libvgtek.a libvgx11.a
ELF_VGLIBS = libvg.so libvgtek.so libvgx11.so

all: $(STATIC_VGLIBS) $(ELF_VGLIBS)
# all:  $(ELF_VGLIBS)

elfshared.d:
	( mkdir elfshared ; cd elfshared ; ln -s ../*.[ch] . ; \
	ln -s ../vg_icon . )

VGOBJS =  a2.o adraw.o batch.o \
	contor.o dcurv.o errbar.o \
	hist.o inter.o legnd.o letter.o \
	misc.o modify.o vgcore.o \
	scurv.o tmov.o version.o \
	cursor.o  xdraw.o zoom.o \
	plot.o

SHARED_VGOBJS =  elfshared/a2.o elfshared/adraw.o elfshared/batch.o \
	elfshared/contor.o elfshared/dcurv.o elfshared/errbar.o \
	elfshared/hist.o elfshared/inter.o elfshared/legnd.o \
	elfshared/letter.o \
	elfshared/misc.o elfshared/modify.o elfshared/vgcore.o \
	elfshared/scurv.o elfshared/tmov.o elfshared/version.o \
	elfshared/cursor.o  elfshared/xdraw.o elfshared/zoom.o \
	elfshared/plot.o

libvg: libvg.a libvg.so

libvg.a: $(VGOBJS)
	ar r $@ $?
	ranlib $@

libvg.so: elfshared.d $(SHARED_VGOBJS)
	( cd elfshared; $(CC) --shared -o $@.$(ELF_VERSION) \
	-Wl,-soname,$@.$(ELF_SO_VERSION) $(VGOBJS); \
	mv $@.$(ELF_VERSION) .. )
	$(LN)  $@.$(ELF_VERSION) $@ 
	$(LN)  $@.$(ELF_VERSION) $@.$(ELF_SO_VERSION)
#	cp -a $@* /usr/local/lib/

TEKOBJS = agraf_tek.o agraffa.o sleep.o
SHARED_TEKOBJS = elfshared/agraf_tek.o elfshared/agraffa.o elfshared/sleep.o

libvgtek: libvgtek.a libvgtek.so

libvgtek.a:  $(TEKOBJS)
	ar r $@ $?
	ranlib $@
	$(LN) $@ libvgbat.a

libvgtek.so:  elfshared.d $(SHARED_TEKOBJS)
	( cd elfshared; $(CC) --shared -o $@.$(ELF_VERSION) \
	-Wl,-soname,$@.$(ELF_SO_VERSION) $(TEKOBJS); \
	mv $@.$(ELF_VERSION) .. )
	$(LN)  $@.$(ELF_VERSION) $@ 
	$(LN)  $@.$(ELF_VERSION) $@.$(ELF_SO_VERSION)
	$(LN) $@ libvgbat.so

libvgx11: libvgx11.a libvgx11.so

X11OBJS = agraf_x11.o xsleep.o
SHARED_X11OBJS = elfshared/agraf_x11.o elfshared/xsleep.o

libvgx11.a: $(X11OBJS)
	ar r $@ $?
	ranlib $@

libvgx11.so:  elfshared.d $(SHARED_X11OBJS)
	( cd elfshared; $(CC) --shared -o $@.$(ELF_VERSION) \
	-Wl,-soname,$@.$(ELF_SO_VERSION) $(X11OBJS); \
	mv $@.$(ELF_VERSION) .. )
	$(LN)  $@.$(ELF_VERSION) $@ 
	$(LN)  $@.$(ELF_VERSION) $@.$(ELF_SO_VERSION)

#install : install_static install_shared install_man
install : install_static install_shared

install_static: $(STATIC_VGLIBS)
	for lib in $^ ; do \
	   $(STRIP) $$lib ; \
	   cp $$lib $(LIBDIR)/$$lib ; \
	   ranlib $(LIBDIR)/$$lib ; \
        done
	$(LN) $(LIBDIR)/libvgtek.a $(LIBDIR)/libvgbat.a

install_shared: $(ELF_VGLIBS)
	for lib in $^ ; do \
	   $(STRIP) $$lib.$(ELF_SO_VERSION) ; \
	   cp -a $$lib* $(LIBDIR)/ ; \
        done
	$(LN) $(LIBDIR)/libvgtek.so $(LIBDIR)/libvgbat.so
	if grep -s $(LIBDIR) /etc/ld.so.conf ; then : ; else \
	   cp -a /etc/ld.so.conf /etc/ld.so.conf.bak ; \
           ( cat /etc/ld.so.conf.bak ; echo $(LIBDIR) ) > /etc/ld.so.conf ; \
	fi
	ldconfig

install_man:
	cp vg.man $(MANDIR)/vg.1
	gzip -vf9 $(MANDIR)/vg.1

# comment out the next line to link shared libraries (do 'make install' first)
LNSTATIC = -Wl,-static
check: junk example_x11 example_tek

example_tek : example.o
	$(FC) -o $@ $(FFLAGS) $(LNSTATIC) -L. -L$(TLIBDIR) example.o \
	  -lvg -lvgtek $(LIBS_TEK)

example_x11 : example.o
	$(FC) -o $@ $(FFLAGS)  $(LNSTATIC) -L. -L$(TLIBDIR) -L$(LIBXDIR) \
	  example.o -lvg -lvgx11 $(LIBS_X11)

junk : junk.o
	$(FC) -o $@ $(FFLAGS)  $(LNSTATIC) -L. -L$(TLIBDIR) -L$(LIBXDIR) \
	  junk.o -lvg -lvgx11 $(LIBS_X11)

clean:
	rm -rf core example example_tek example_x11 junk *.o *.a elfshared

clobber: clean
	rm -f $(STATIC_VGLIBS) *.so.* *~

shar:
	shar $(FILES) > vg.shar

.f.o:
	$(FC) $(FFLAGS) -c $<

.c.o:
	$(CC) $(CFLAGS) -c $<

$(SHARED_VGOBJS) $(SHARED_TEKOBJS) $(SHARED_X11OBJS): $(CFILES)
	$(CC) $(CFLAGS) -fPIC -o $*.o -c $(patsubst %.o,%.c,$@)


.PRECIOUS: $(STATIC_LIBS) $(ELF_LIBS)
