# Makefile for PGPLOT on LinuX
#
# This generates the PGPLOT binary files (libraries and demos) in the
# current default directory (which need not be the source directory).
#

.EXPORT_ALL_VARIABLES:
.PHONY: all clean realclean distrib

#	Directory containing source code
SRC=/usr/src/libs/pgplot

SRCDIR=$(SRC)/src
#	Directory containing demo programs
DEMODIR=$(SRC)/examples
#	Directory containing font stuff
FONTDIR=$(SRC)/fonts
#	Directory containing device driver code
DRIVDIR=$(SRC)/drivers
#	Directory containing system-dependent code
SYSDIR=$(SRC)/sys_linux_shared
#	Directory to put the libraries
LIBDIR=.

#	Directory to install the stub and static library
STATIC_INSTALL_DIR=/usr/lib
#	Directory to install the shared library
SHARED_INSTALL_DIR=/lib
#	Directory to install the font File
FONT_INSTALL_DIR=/usr/lib
#	Install Program
INSTALL= install -c

#	Fortran compiler is f2c on LinuX
FF= f2c 
FFLAGS= -ARw8 -Nn802

#	C compiler 
CC= gcc 
CCOPT=  -O2 -m486 
CFLAGS= $(CCOPT) -I$(SRCDIR)

SHARED=false

ifeq ($(SHARED),true)
CFLAGS+= -B/usr/dll/jump/

#	Directory for the JumpFiles
#	Don't play with these if you don't know what you're doing!
JUMP_DIR=$(SYSDIR)/jump
JUMP_LIB=libpgplot
LOADADDRESS=0x6a380000
VERSN=4.9.8
JUMPSIZE=0x8000
GOTSIZE=128
#	Extra LinuX libraries required for building the shared libs
SHLIBS= -lX11 -lf2c -lc `gcc --print` -lc -lm 
endif

#	Location of library
PGPLOT= -L`(cd $(LIBDIR) ; pwd)` -lpgplot

#LIBs for linking demo programs
LIBS= $(PGPLOT) -lX11 -lf2c -lm

#	Rules for compiling C 
%.o:: %.c
	$(CC) $(CFLAGS) -c $*.c
%.o:: $(SRCDIR)/%.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/$*.c
%.o:: $(SYSDIR)/%.c
	$(CC) $(CFLAGS) -c $(SYSDIR)/$*.c
%.o:: $(DRIVDIR)/%.c
	$(CC) $(CFLAGS) -c $(DRIVDIR)/$*.c 

#	Rules for compiling Fortran
%.o:: %.f
	$(FF) -c $(FFLAGS) $*.f
	$(CC) $(CFLAGS) -c $*.c
	rm $*.c
%.o:: $(SRCDIR)/%.f
	$(FF) -c $(FFLAGS) $(SRCDIR)/$*.f
	$(CC) $(CFLAGS) -c $*.c
	rm $*.c
%.o:: $(SYSDIR)/%.f
	$(FF) -c $(FFLAGS) $(SYSDIR)/$*.f
	$(CC) $(CFLAGS) -c $*.c
	rm $*.c
%.o:: $(DRIVDIR)/%.f
	$(FF) -c $(FFLAGS) $(DRIVDIR)/$*.f
	$(CC) $(CFLAGS) -c $*.c
	rm $*.c

#	Rules for building Demo-Programs
%:: $(DEMODIR)/%.f
	$(FF) -c $(FFLAGS) $(DEMODIR)/$*.f
	$(CC) $(CFLAGS) -c $*.c
	rm $*.c
	$(CC) $(CCOPT) -o $* $*.o $(LIBS)

#-----------------------------------------------------------------------
# Routine lists:
#   PG_ROUTINES: basic PGPLOT routines (Fortran-77)
#   PG_NON_STANDARD: non-Fortran-77 aliases for basic routines
#   GR_ROUTINES: support routines, not called directly by applications
#	(Fortran-77)
#   SYSTEM_ROUTINES: potentially non-portable routines, usually
#	operating-system dependent
#-----------------------------------------------------------------------
PG_ROUTINES=\
 pgdraw.o     pgldev.o     pgptext.o    pgrect.o     pgswin.o \
 pgarro.o     pgebuf.o     pglen.o      pgptxt.o     pgrnd.o \
 pgask.o      pgend.o      pgline.o     pgqah.o      pgrnge.o \
 pgbbuf.o     pgenv.o      pgmove.o     pgqcf.o      pgsah.o \
 pgbeg.o      pgerrb.o     pgqch.o      pgsave.o     pgvect.o \
 pgerrx.o     pgmtxt.o     pgqci.o      pgscf.o      pgtbox.o \
 pgbin.o      pgerry.o     pgncur.o     pgqcol.o     pgsch.o \
 pgbox.o      pgetxt.o     pgqcr.o      pgsci.o      pgtext.o \
 pgbox1.o     pgfunt.o     pgnpl.o      pgqcs.o      pgscr.o \
 pgcirc.o     pgfunx.o     pgnumb.o     pgqfs.o      pgscrn.o \
 pgcn01.o     pgfuny.o     pgolin.o     pgqinf.o     pgsetc.o \
 pgcnsc.o     pggray.o     pgpage.o     pgqls.o      pgsfs.o \
 pgconb.o     pghi2d.o     pgpap.o      pgqlw.o      pgshls.o\
 pgcons.o     pghis1.o     pgqpos.o     pgsize.o     pgwnad.o\
 pgcont.o     pghist.o     pgpixl.o     pgqtbg.o     pgsls.o\
 pgconx.o     pgiden.o     pgpnts.o     pgqtxt.o     pgslw.o\
 pgcp.o       pglab.o      pgqvp.o      pgstbg.o     pgupdt.o\
 pgcurs.o     pgpoly.o     pgqvsz.o     pgsubp.o     pgvsiz.o\
 pglcur.o     pgpt.o       pgqwin.o     pgsvp.o      pgvstd.o\
 pgvw.o       pgwedg.o     
PG_NON_STANDARD=\
   pgadvance.o pgbegin.o  pgcurse.o  pglabel.o\
   pgmtext.o   pgncurse.o pgpaper.o  pgpoint.o\
   pgvport.o  pgvsize.o	 pgvstand.o\
   pgwindow.o
GR_ROUTINES=\
 grarea.o     grfa.o	   grlin3.o	grqcap.o     grscr.o	  grsyxd.o\
 grbpic.o     grfao.o	   grlina.o	grqci.o	     grsetc.o	  grterm.o\
 grchar.o     grgray.o	   grlinr.o	grqcol.o     grsetfont.o  grtext.o\
 grchr0.o     grgrgr.o	   grmark.o	grqcr.o	     grsetli.o	  grtoup.o\
 grchsz.o     grgrps.o	   grmcur.o	grqdev.o     grsetpen.o	  grtran.o\
 grclip.o     grgtc0.o	   grmker.o	grqdt.o	     grsets.o	  grtrim.o\
 grclos.o     grinqfont.o  grmova.o	grqfnt.o     grsfnt.o	  grtrn0.o\
 grclpl.o     grinqli.o	   grmovr.o	grqls.o	     grsfs.o	  grtxy0.o\
 grctoi.o     grinqpen.o   gropen.o	grqlw.o	     grsize.o	  grvct0.o\
 grcurs.o     gritoc.o	   grpage.o	grqpos.o     grskpb.o	  grvect.o\
 grdat2.o     grldev.o	   grpars.o	grqtxt.o     grslct.o	  grxhls.o\
 grdot0.o     grlen.o	   grpixl.o	grqtyp.o     grsls.o	  grxrgb.o\
 grdtyp.o     grlin0.o	   grpxpo.o	grrec0.o     grslw.o\
 gresc.o      grlin1.o	   grpxpx.o	grrect.o     grsyds.o\
 gretxt.o     grlin2.o	   grpxre.o	grsci.o	     grsymk.o
SYSTEM_ROUTINES=\
 grwarn.o     grgenv.o     grprom.o     isatty.o     grgcom.o     grglun.o\
 grflun.o     groptx.o     grdate.o     gruser.o     grtter.o     grtrml.o\
 iand.o       grsy00.o     grlgtr.o     grgmsg.o     fdate.o      

#-----------------------------------------------------------------------
# Device drivers
#-----------------------------------------------------------------------
HIDRIVER=hidriver.o
IMDRIVER=imdriver.o grim00.o grim02.o grim03.o lib_get_vm.o
IVDRIVER=ivdriver.o griv00.o grivas.o
LJDRIVER=ljdriver.o grlj00.o
LLDRIVER=lldriver.o grlj00.o
NUDRIVER=nudriver.o
PSDRIVER=psdriver.o 
PXDRIVER=pxdriver.o grpx01.o grpx02.o lib_get_vm.o gribf1.o
QMDRIVER=qmdriver.o grqm00.o
QPDRIVER=qpdriver.o grqm00.o
SVDRIVER=svdriver.o svblock.o
TTDRIVER=ttdriver.o
GLDRIVER=gldriver.o
TKDRIVER=tkdriver.o grtk00.o
TVDRIVER=tvdriver.o grtv00.o
TXDRIVER=txdriver.o grtx00.o grtx01.o grtx02.o grtx03.o grtx04.o\
  grtx05.o grtx06.o grtx07.o grtx08.o grtx09.o grtx10.o\
  grtx11.0 grtx12.o grtx13.o
VEDRIVER=vedriver.o grve01.o grve02.o lib_get_vm.o gribf1.o
VTDRIVER=vtdriver.o grvt02.o grvt03.o
VVDRIVER=vvdriver.o grve01.o grve02.o lib_get_vm.o gribf1.o
XWDRIVER=xwdriv.o xwblock.o
X2DRIVER=x2driv.o figdisp_comm.o
#
# Drivers for LinuX version
DRIVERS=\
    $(NUDRIVER) $(PSDRIVER) \
    $(XWDRIVER) $(X2DRIVER)\
    $(GLDRIVER)

# In der DISPATCH_ROUTINE mssen die Treiber eingetragen werden,
# sont knnen sie nicht aufgerufen werden!
DISPATCH_ROUTINE=grexec.o


#
#
OBSOLETE_ROUTINES=\
    grchar.o grchr0.o grdat2.o grgtc0.o grmark.o grinqli.o grinqpen.o\
    grsetli.o grsetpen.o grlinr.o grmovr.o grtran.o grvect.o\
    pgsetc.o pgsize.o grinqfont.o grsetfont.o

#-----------------------------------------------------------------------
# Target "all" is used to built the PGPLOT subroutiune library.
# libpgplot.a is the static PGPLOT library.
# libpgplot.so.4.x and libpgplot.sa.4.x form the shared library.
#-----------------------------------------------------------------------
ifeq ($(SHARED),true)
all: shared grfont.dat
else
all: static grfont.dat
endif


# Shared library version number
shared : $(LIBDIR)/libpgplot.so.$(VERSN) \
	$(LIBDIR)/libpgplot.sa

static: $(LIBDIR)/libpgplot.a

$(LIBDIR)/libpgplot.a : $(PG_ROUTINES) $(PG_NON_STANDARD) $(GR_ROUTINES) \
	   $(DISPATCH_ROUTINE) $(DRIVERS) $(SYSTEM_ROUTINES) 
	ar ru $(LIBDIR)/libpgplot.a $(PG_ROUTINES) \
		$(PG_NON_STANDARD) $(GR_ROUTINES) $(DISPATCH_ROUTINE) \
		$(DRIVERS) $(SYSTEM_ROUTINES) 
	ranlib $(LIBDIR)/libpgplot.a

$(LIBDIR)/libpgplot.so.$(VERSN): $(PG_ROUTINES) $(PG_NON_STANDARD) \
	   $(GR_ROUTINES) $(DISPATCH_ROUTINE) $(DRIVERS) $(SYSTEM_ROUTINES)
	/usr/dll/bin/mkimage -l libpgplot -v $(VERSN) -a $(LOADADDRESS) -j $(JUMPSIZE) \
	-g$(GOTSIZE) -- $(PG_ROUTINES) $(PG_NON_STANDARD) $(GR_ROUTINES) \
	$(DISPATCH_ROUTINE) $(DRIVERS) $(SYSTEM_ROUTINES) $(SHLIBS)

$(LIBDIR)/libpgplot.sa: $(LIBDIR)/libpgplot.so.$(VERSN)
	/usr/dll/bin/mkstubs -l libpgplot -v $(VERSN) -a $(LOADADDRESS) -j $(JUMPSIZE) \
	-g$(GOTSIZE) -- libpgplot
#-----------------------------------------------------------------------
# libpgobs.a contains obsolete routines used by some programs
#-----------------------------------------------------------------------
libpgobs.a : $(OBSOLETE_ROUTINES)
	ar ru libpgobs.a $(OBSOLETE_ROUTINES)
	ranlib libpgobs.a

#-----------------------------------------------------------------------
# Target "prog" is used to make the demo programs. They can also be made
# individually.
#-----------------------------------------------------------------------
# List of demo programs
DEMOS = pgdemo1 pgdemo2 pgdemo3 pgdemo4 pgdemo5 \
      pgdemo6 pgdemo7 pgdemo8 pgdemo9

prog: $(DEMOS)

pgdemo1: $(DEMODIR)/pgdemo1.f
pgdemo2: $(DEMODIR)/pgdemo2.f
pgdemo3: $(DEMODIR)/pgdemo3.f
pgdemo4: $(DEMODIR)/pgdemo4.f
pgdemo5: $(DEMODIR)/pgdemo5.f
pgdemo6: $(DEMODIR)/pgdemo6.f
pgdemo7: $(DEMODIR)/pgdemo7.f
pgdemo8: $(DEMODIR)/pgdemo8.f
pgdemo9: $(DEMODIR)/pgdemo9.f

#-----------------------------------------------------------------------
# Target "grfont.dat" is the binary font file.
# This is created from grfont.txt with the "pgpack" program.
#    (a) compile the `pgpack' program; then
#    (b) run `pgpack' to convert the ASCII version of the font file
#    (grfont.txt) into the binary version (grfont.dat). When executed,
#    `pgpack' should report:
#	Characters defined:   996
#	Array cells used:   26732
#-----------------------------------------------------------------------
pgpack: $(FONTDIR)/pgpack.f
	$(FF) -c $(FFLAGS) $(FONTDIR)/pgpack.f
	$(CC) $(CFLAGS) pgpack.c -o pgpack -lf2c -lm
	rm pgpack.c

grfont.dat: $(FONTDIR)/grfont.txt pgpack
	rm -f grfont.dat
	./pgpack <$(FONTDIR)/grfont.txt

#-----------------------------------------------------------------------
# Target "install" 
#-----------------------------------------------------------------------

ifeq ($(SHARED),true)
install: shared
	$(INSTALL) $(LIBDIR)/libpgplot.sa $(STATIC_INSTALL_DIR)
	$(INSTALL) $(LIBDIR)/libpgplot.so.$(VERSN) $(SHARED_INSTALL_DIR)
	$(INSTALL) grfont.dat $(FONT_INSTALL_DIR)
	ldconfig -v
else
install: static
	$(INSTALL) $(LIBDIR)/libpgplot.a $(STATIC_INSTALL_DIR)
	$(INSTALL) grfont.dat $(FONT_INSTALL_DIR)
endif

#-----------------------------------------------------------------------
# Target "clean" is used to remove all the intermediate files.
#-----------------------------------------------------------------------
clean :
	rm -f $(PG_ROUTINES) $(PG_NON_STANDARD) $(GR_ROUTINES)\
		$(DISPATCH_ROUTINE) $(DRIVERS) $(SYSTEM_ROUTINES)\
		$(OBSOLETE_ROUTINES) pgpack

#-----------------------------------------------------------------------
# Target "realclean" removes the libraries and the font-file as well
#-----------------------------------------------------------------------
realclean :clean;
	rm -f libpgplot.* grfont.dat pgdemo*

#-----------------------------------------------------------------------
# Target "distrib" is used to automate generation of distribution file
#-----------------------------------------------------------------------
distrib:
	cd ../..; tar -czvf pgplot49h_linux_X11R6.tgz pgplot/README.linux \
	pgplot/sys_linux_shared/*.c pgplot/sys_linux_shared/Makefile \
	pgplot/sys_linux_shared/grfont.dat pgplot/sys_linux_shared/*.f \
	pgplot/sys_linux_shared/aaaread.me pgplot/sys_linux_shared/jump/ \
	pgplot/sys_linux_shared/libpgplot.* pgplot/pgplot.doc \
	pgplot/pgplot.hlp pgplot/aaaread.me pgplot/copyright.notice

#-----------------------------------------------------------------------
# Include file dependencies:
# The following PG routines reference `pgplot.inc'

grgray.o grgrgr.o grgrps.o \
pgask.o	 pgbbuf.o pgbeg.o  pgbin.o  pgbox.o  pgcont.o pgcp.o \
pgcurs.o pgebuf.o pgend.o  pgerrb.o pgerrx.o pgerry.o pggray.o pghi2d.o \
pghist.o pgiden.o pglcur.o pglen.o  pgmtxt.o pgncur.o pgolin.o \
pgpage.o pgpap.o  pgpixl.o pgpoly.o pgpt.o   pgptxt.o pgqch.o pgqcs.o pgqfs.o \
pgqinf.o pgqvp.o  pgqvsz.o pgqwin.o pgrect.o pgsch.o  pgsfs.o  pgsvp.o \
pgswin.o pgupdt.o pgvsiz.o pgvstd.o pgvw.o   pgwedg.o pgwnad.o: \
$(SRCDIR)/pgplot.inc

# The following GR routines reference `grpckg.inc'

grarea.o grbpic.o grchr0.o grchsz.o grclos.o grclpl.o grcurs.o \
grdot0.o grdtyp.o gresc.o  gretxt.o grfa.o   grgray.o grgrgr.o \
grldev.o grlen.o  grlin0.o grlin1.o grlin2.o grlin3.o \
grlina.o grlinr.o grmker.o grmova.o grmovr.o gropen.o grpage.o \
grpixl.o grpxpo.o grpxpx.o \
grqci.o	 grqcol.o grqdev.o grqdt.o  grqfnt.o grqls.o  \
grqlw.o	 grqpos.o grqtyp.o grrec0.o grrect.o \
grsci.o	 grscr.o  grsetc.o grsetli.o grsets.o grsfnt.o grsfs.o grsize.o \
grslct.o grsls.o  grslw.o  grterm.o grtext.o grtrn0.o grtxy0.o \
grvct0.o: $(SRCDIR)/grpckg1.inc

griv00.o : $(DRIVDIR)/gadef.h $(DRIVDIR)/gmdef.h $(DRIVDIR)/gphdef.h
grtv00.o : $(DRIVDIR)/imdef.h

x2driv.o figdisp_comm.o : $(DRIVDIR)/commands.h
