# A makefile for the stuff now in libg++/etc

# ------ source locations

# source directory for libg++.a
SRCDIR = ../../src

# source include directory 
SRCIDIR= ../../g++-include

# ------ installation destinations
# ------ You will require write-permission on the destination directories
# ------ in order to `make install'


prefix =/usr/gnu

# libg++.a destination
LIBDIR = $(prefix)/lib

# executables directory: location to install the genclass class generator
BINDIR = $(prefix)/bin

# location to install include file directory
IDIR = $(prefix)/lib/g++-include


# ------- System-dependent defines
# ------- use the second form of each for SystemV (USG)

# g++ flags
OSFLAG=
#OSFLAG = -DUSG

# ld or ld++ flags
OSLDFLAG =
#OSLDFLAG= -lPW

# how to install
INSTALL=install -c
#INSTALL=cp

# ranlib if necessary
RANLIB=ranlib
#RANLIB=echo

# which make?
MAKE=make

# not used, but convenient for those who preprocess things while compiling
SHELL=/bin/sh


# ------ compiler names

# GNU C++ compiler name
GXX = g++
#GXX=gcc

# GNU CC compiler name (needed for some .c files in libg++.a)
CC = gcc

# GNU loader
LDXX = $(LIBDIR)/gcc-ld++

# crt0+.o location (for dynamic loading tests)
GXXCRT1=$(LIBDIR)/crt1+.o

# ------ Other compilation flags
# ------ modify as you like -- the ones here are sheer overkill

GXX_OPTIMIZATION_FLAGS= -O -fstrength-reduce  -felide-constructors -fschedule-insns -fdelayed-branch -fsave-memoized 

GCC_OPTIMIZATION_FLAGS= -O -fstrength-reduce -fdelayed-branch 

DEBUG_FLAGS= -g

#use this only if you like to look at lots of useless messages
VERBOSITY_FLAGS= -Wall -v

GXX_INCLUDE_DIRS= -I$(SRCIDIR)

GCC_INCLUDE_DIRS= -I$(prefix)/lib/gcc-include -I/usr/include -I$(SRCIDIR)

PIPE_AS= -pipe

# Flags for all C++ compiles
GXXFLAGS = $(OSFLAG) $(GXX_INCLUDE_DIRS) $(DEBUG_FLAGS) $(GXX_OPTIMIZATION_FLAGS) $(VERBOSITY_FLAGS) $(PIPE_AS)

# Flags for all C compiles
CFLAGS= $(OSFLAG) $(GCC_INCLUDE_DIRS) $(DEBUG_FLAGS) $(GCC_OPTIMIZATION_FLAGS) $(VERBOSITY_FLAGS) $(PIPE_AS)

# g++ load time flags 
GXXLDFLAGS = -L$(SRCDIR) -lg++ -lm $(OSLDFLAG)

# these flags tell test0 where ld++ and crt1+.o are
TFLAGS = -DLDXX=\"$(LDXX)\" -DCRT1X=\"$(GXXCRT1)\"


# g++ files should have extension .cc
.SUFFIXES: .cc
.cc.o:
	$(GXX) $(GXXFLAGS) -c  $<

RM = rm -f

test: graph test.dat test2.dat
	./graph -d -c 3 -g 2 -l "a diagonal line" -X "x axis" -Y "y axis" -m 1  <test2.dat >test2.pl
	./graph -d <test.dat >test.pl
	@echo use plot to look at the plot files test.pl and test2.pl

libgraph.a : point.Plex.o point.XPlex.o eGetOpt.o ePlotFile.o read_data.o tick_interval.o
	rm -f libgraph.a
	ar cr libgraph.a point.Plex.o point.XPlex.o eGetOpt.o ePlotFile.o read_data.o tick_interval.o
	$(RANLIB) libgraph.a

graph : graph.o libgraph.a
	$(GXX) $(GXXFLAGS) graph.o libgraph.a $(GXXLDFLAGS) -o graph

point.XPlex.h :
	genclass point val XPlex
point.Plex.h :
	genclass point val Plex

test.dat:
	-echo 0 0 1 1 2 0|spline |tail -r > test.dat

test2.dat:
	echo 0 0 >test2.dat
	echo 1 1 "label for 1 1" >>test2.dat
	echo 2 2 >>test2.dat
	echo 3 3 "label for 3 3" >>test2.dat
	echo 4 4 >>test2.dat

depend::
	mv Makefile Makefile.bak
	sed -e "/^# DO NOT DELETE/,$$ d" <Makefile.bak >Makefile
	echo "# DO NOT DELETE"  >>Makefile
	$(GXX) -MM *.cc >>Makefile

DIST = Makefile graph.tex ChangeLog \
eGetOpt.cc		read_data.cc \
eGetOpt.h		read_data.h \
ePlotFile.cc		tick_interval.cc \
ePlotFile.h		tick_interval.h \
graph.cc		point.defs.h

graph.tar.Z : $(DIST) CHECKSUMS
	tar cfz $@ $^ CHECKSUMS
CHECKSUMS : $(DIST)
	sum $(DIST) >CHECKSUMS

dist : graph-dist.tar.Z

graph-dist.tar.Z : $(DIST)
	-rm -rf graph-dist
	mkdir graph-dist
	ln $(DIST) graph-dist
	tar cfz graph-dist.tar.Z $(DIST)
	rm -rf graph-dist

graph.shar : point.defs.h graph.cc Makefile graph.texinfo
	shar $^ > $@

clean:
	rm -f *.o *~ \#* *.bak *.pl graph.shar libgraph.a *.bak \
		 point.XPlex* point.Plex*
realclean: clean
	rm -f graph

# DO NOT DELETE
eGetOpt.o : eGetOpt.cc eGetOpt.h 
ePlotFile.o : ePlotFile.cc ePlotFile.h 
graph.o : graph.cc read_data.h point.XPlex.h point.Plex.h point.defs.h \
  eGetOpt.h ePlotFile.h tick_interval.h 
point.Plex.o : point.Plex.cc point.Plex.h point.defs.h 
point.XPlex.o : point.XPlex.cc point.XPlex.h point.Plex.h point.defs.h 
read_data.o : read_data.cc read_data.h point.XPlex.h point.Plex.h \
  point.defs.h 
tick_interval.o : tick_interval.cc tick_interval.h

