#***********************************************************************
#    Module:  Makefile.linux
# 
#    Copyright (C) 1996 Harold Youngren, Mark Drela 
# 
#    This library is free software; you can redistribute it and/or
#    modify it under the terms of the GNU Library General Public
#    License as published by the Free Software Foundation; either
#    version 2 of the License, or (at your option) any later version.
#
#    This library is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#    Library General Public License for more details.
#
#    You should have received a copy of the GNU Library General Public
#    License along with this library; if not, write to the Free
#    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# 
#    Report problems to:    guppy@maine.com 
#                        or drela@mit.edu  
#***********************************************************************

#=======================================================================
# This Makefile was used to make a shared library version of the plotlib
# on Linux.  This has not been updated or supported.
#=======================================================================



#================================#
# Makefile for Xplot11 library   #
#================================#

#point to your install directory
INSTALLDIR= $(HOME)/lib
#INSTALLDIR= /usr/local/lib
#INSTALLDIR= .

### Use these to set library name 
### (add DP to keep double precision version separate)
PLTLIB = libPlt
#PLTLIB = libPltDP

###========================================================
###  Basic plot library object files
OBJ     = plt_base.o plt_font.o plt_util.o plt_color.o \
          set_subs.o gw_subs.o ps_subs.o Xwin.o
OBJMISC =
OBJ3D   =
OBJOLD  =
###
###--------------------------------------------------------
###  Uncomment to add the old plot compatibility routines
OBJOLD  = plt_old.o
###
###--------------------------------------------------------
###  Uncomment to add the 3D-view routines
OBJ3D  = plt_3D.o
###
###--------------------------------------------------------
###  Uncomment for f77 compiler w/o AND() and RSHIFT/LSHIFT functions.
###   This adds some functions to duplicate these using IAND and ISHFT
###   which often appear in these offending fortran's libraries.
###   The compilers that this has affected include:
###      HPUX f77
###      Absoft f77 on Linux
###
#OBJMISC = util-ops.o



###================================================
###  Default compilers and flags, install commands
F77 = f77
CC  = cc

# Uncomment DP to make double-precision version
#DP = -r8

# Some fortrans need trailing underscores in C interface symbols (see Xwin.c)
DEFINE = -DUNDERSCORE

FFLAGS  = -O $(DP)
CFLAGS  = -O $(DEFINE)
AR = ar r 
RANLIB = ranlib
LINKLIB =  -lX11 


###-------------------------------------------------------------------------
###  Uncomment for Linux, using the script f77 (unusable in Slackware 3.0) 
###  Note compiler options for Linux:
###   f77    script (calls f2c/gcc) note bug in Slackware 3.0 f77 script
###   fort77 script (calls f2c/gcc) perl script from RH or from yaf77
###   g77    the GNU F77 compiler 
F77 = g77
#F77 = fort77
#F77 = f77-f2c 
CC  = gcc
# Uncomment DP to make double-precision version
# (note -r8 does not work in g77, use f2c instead)
#DP = -r8
FFLAGS  = -O2 $(DP)
CFLAGS  = -O2 $(DEFINE)
#AR = ar r
#RANLIB = ranlib 
LINKLIB = -L/usr/X11R6/lib -lX11 




###-------------------------------------------------------------------------
### Basic make targets - build library, test programs

$(PLTLIB):  $(OBJ) $(OBJOLD) $(OBJ3D) $(OBJMISC)
	$(AR)     $(PLTLIB).a $(OBJ) $(OBJOLD) $(OBJ3D) $(OBJMISC)
	$(RANLIB) $(PLTLIB).a

test:  $(PLTLIB)
	(cd examples; make test)


###-------------------------------------------------------------------------
### Utility functions - install the library, clean the directory

install:  $(PLTLIB).a
	mv $(PLTLIB).a $(INSTALLDIR)
	$(RANLIB)   $(INSTALLDIR)/$(PLTLIB).a

clean:
	-/bin/rm *.o
#	-/bin/rm -r PIC
	-/bin/rm *.a *.so.*
	-/bin/rm plot*.ps
	(cd examples; make clean)


###-------------------------------------------------------------------------
### This set of targets makes the libPlt Linux ELF shared library
### As far as I know this only works with g77 as it is the only Linux
### compiler that makes shared libraries.
###
### You will need to install the library in some place that ldconfig knows 
### about to get this to work as a shared library.  
###  1) Before making the shared library you may need to change the -lf2c
###     library reference in the $(PLTLIB).so target below to the shared 
###     fortran library that you are using (most Linuxes use libf2c, hence
###     the -lf2c).
###  2) Install the shared library in some place (like /usr/local/lib).
###  3) Make the following links in that directory
###     ln -s libPlt.so.0.21 libPlt.so.0
###     ln -s libPlt.so.0    libPlt.so
###  4) Look in /etc/ld.so.conf and check that the library directory is 
###     in the list of directories and add it if it isn't.  
###  5) Then run ldconfig -v (as root) to get the loader to recognize the 
###     shared library.
 
$(PLTLIB).so:
	mkdir -p PIC
	make -f Makefile.linux.shared shared 
	gcc -shared -Wl,-soname,$(PLTLIB).so.0 -o $(PLTLIB).so.0.21 \
             PIC/*.o -lf2c -lm -lc

SHAREDOBJ = $(patsubst %.o,PIC/%.o,$(OBJ) $(OBJOLD) $(OBJ3D) $(OBJMISC))

shared: $(SHAREDOBJ)
###-------------------------------------------------------------------------



###-------------------------------------------------------------------------
### compile plot package routines

plt_base.o: plt_base.f pltlib.inc
	$(F77) -c $(FFLAGS)  plt_base.f

plt_color.o: plt_color.f  pltlib.inc
	$(F77) -c $(FFLAGS)  plt_color.f

plt_font.o: plt_font.f CHAR.INC SLAN.INC MATH.INC SYMB.INC
	$(F77) -c $(FFLAGS)  plt_font.f

plt_util.o: plt_util.f
	$(F77) -c $(FFLAGS)  plt_util.f

plt_3D.o: plt_3D.f
	$(F77) -c $(FFLAGS)  plt_3D.f

plt_old.o: plt_old.f pltlib.inc
	$(F77) -c $(FFLAGS)  plt_old.f

set_subs.o: set_subs.f  pltlib.inc
	$(F77) -c $(FFLAGS)  set_subs.f

gw_subs.o: gw_subs.f  pltlib.inc
	$(F77) -c $(FFLAGS)  gw_subs.f

ps_subs.o: ps_subs.f  pltlib.inc
	$(F77) -c $(FFLAGS)  ps_subs.f

util-ops.o: util-ops.f 
	$(F77) -c $(FFLAGS)  util-ops.f

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


### May need to specify these on a brain-dead make system
#.f.o:	$(F77) -c $(FFLAGS) $<
#.c.o:	$(CC)  -c $(CFLAGS) $<


### Handles the shared library objects

PIC/%.o : %.f
	$(F77) -c $(FFLAGS) -fPIC -o $@ $<
PIC/%.o : %.c
	$(CC) -c $(CFLAGS) $(CPPFLAGS) -fPIC -o $@ $<



