##############################################################################
#                                                                            #
#    Makefile,v
#    Makefile for directory cmds
#                                                                            #
#    Copyright (C) 1995 A. Bode, S. Lamberts, T. Ludwig, C. R"oder           #
#                                                                            #
#    PFSLib (Parallel I/O on workstations)                                   #
#                                                                            #
#    PFSLib offers parallel access to files for a parallel application       #
#    running on a cluster of workstations.                                   #
#    It is intended but not restricted to be used in message passing         #
#    applications based on PVM, NXLib, MPI, and other.                       #
#                                                                            #
#    PFSLib consists of a LIBRARY, deamon PROGRAMS, and utility PROGRAMS.    #
#                                                                            #
#    PFSLib is free software; you can redistribute the LIBRARY 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.        #
#    You can redistribute the daemon PROGRAMS and utility PROGRAMS           #
#    and/or modify them under the terms of the GNU General Public            #
#    License as published by the Free Software Foundation; either            #
#    version 2 of the License, or (at your option) any later version.        #
#                                                                            #
#    PFSLib 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 and GNU General Public License           #
#    for more details.                                                       #
#                                                                            #
#    You should have received a copy of the GNU Library General Public       #
#    License and the GNU General Public License along with this              #
#    library; if not, write to the Free                                      #
#    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.      #
#                                                                            #
#    Contact to the authors:                                                 #
#                                                                            #
#    electronic mail: pfslib@informatik.tu-muenchen.de                       #
#                                                                            #
#    paper mail:      Prof. Dr. A. Bode                                      #
#                     Lehrstuhl f"ur Rechnertechnik und                      #
#                     Rechnerorganisation                                    #
#                     Institut f"ur Informatik                               #
#                     Technische Universit"at M"unchen                       #
#                     80290 M"unchen                                         #
#                     Germany                                                #
#                                                                            #
#    This project was partially funded by a research grant form Intel        #
#    Corporation.                                                            #
#                                                                            #
##############################################################################


##############################################################################
#                                                                            #
#  RCS Filename : Makefile,v
#  RCS Date     : 1996/10/18 14:40:39
#  RCS Revision : 1.5
#  RCS Author   : lamberts
#  RCS State    : V2_0_B
#                                                                            #
#  Authors: Stefan Lamberts                                                  #
#                                                                            #
##############################################################################


##############################################################################
# Macros                                                                     #
##############################################################################

SHELL = /bin/sh

INCLUDEPATH	= ../include
PFSDPATH	= ../pfsd
ADDPATH		= ../add
CLNTPATH	= ../clnt

ARCH		= SUN4
CC		= gcc
ANSI_C		= -DANSI_C
CFLAGS		= -ansi -g
CPPFLAGS	= -I$(INCLUDEPATH) -I$(PFSDPATH) $(ANSI_C) -D$(ARCH) $(CPPDEFINES) $(ARCHCPPFLAGS)

LIBPFS		= $(CLNTPATH)/libpfs.a
LDFLAGS		=
LDLIBS		=

LINT		= lint
LINTFLAGS	= -a -b -c -h
# lint option to create .ln files
LINT_ln		= -i

RM		= rm -f

INSTALLBINDIR	= .

##############################################################################
# Suffixes                                                                   #
##############################################################################

.SUFFIXES: .ln $(SUFFIXES)

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

.c.ln:
	$(LINT) $(LINTFLAGS) $(CPPFLAGS) $(LINT_ln) $<

##############################################################################
# pfscat files                                                               #
##############################################################################

CATSRC		= pfscat.c

CATOBJ		= pfscat.o

CATLNOBJ	= pfscat.ln

CATEXE		= pfscat

##############################################################################
# pfscp files                                                                #
##############################################################################

CPSRC		= pfscp.c

CPOBJ		= pfscp.o

CPLNOBJ		= pfscp.ln

CPEXE		= pfscp

##############################################################################
# pfsdexit files                                                             #
##############################################################################

EXITSRC		= pfsdexit.c

EXITOBJ		=\
	pfsdexit.o\
	$(ADDPATH)/add_xdr.o\
	$(PFSDPATH)/pfsd_xdr.o\
	$(PFSDPATH)/pfsd_clnt.o

EXITLNOBJ	= pfsdexit.ln

EXITEXE		= pfsdexit

##############################################################################
# pfsdreset files                                                            #
##############################################################################

RESETSRC	= pfsdreset.c

RESETOBJ	=\
	pfsdreset.o\
	$(ADDPATH)/add_xdr.o\
	$(PFSDPATH)/pfsd_xdr.o\
	$(PFSDPATH)/pfsd_clnt.o

RESETLNOBJ	= pfsdreset.ln

RESETEXE	= pfsdreset

##############################################################################
# pfsrm files                                                                #
##############################################################################

RMSRC		= pfsrm.c

RMOBJ		=\
	pfsrm.o\
	$(ADDPATH)/add_xdr.o\
	$(PFSDPATH)/pfsd_xdr.o\
	$(PFSDPATH)/pfsd_clnt.o

RMLNOBJ		= pfsrm.ln

RMEXE		= pfsrm

##############################################################################
# pfsdstat files                                                             #
##############################################################################

STATSRC		= pfsdstat.c

STATOBJ		=\
	pfsdstat.o\
	$(ADDPATH)/add_xdr.o\
	$(PFSDPATH)/pfsd_xdr.o\
	$(PFSDPATH)/pfsd_clnt.o

STATLNOBJ	= pfsdstat.ln

STATEXE		= pfsdstat

##############################################################################
# All                                                                        #
##############################################################################

EXE		=\
	$(CATEXE)\
	$(CPEXE)\
	$(EXITEXE)\
	$(RESETEXE)\
	$(RMEXE)\
	$(STATEXE)

SRC		=\
	$(CATSRC)\
	$(CPSRC)\
	$(EXITSRC)\
	$(RESETSRC)\
	$(RMSRC)\
	$(STATSRC)

LNOBJ		=\
	$(CATLNOBJ)\
	$(CPLNOBJ)\
	$(EXITLNOBJ)\
	$(RESETLNOBJ)\
	$(RMLNOBJ)\
	$(STATLNOBJ)

INSTEXE		=\
	$(INSTALLBINDIR)/$(CATEXE)\
	$(INSTALLBINDIR)/$(CPEXE)\
	$(INSTALLBINDIR)/$(EXITEXE)\
	$(INSTALLBINDIR)/$(RESETEXE)\
	$(INSTALLBINDIR)/$(RMEXE)\
	$(INSTALLBINDIR)/$(STATEXE)


##############################################################################
# Main targets                                                               #
##############################################################################

all: $(EXE)

##############################################################################
# Installation                                                               #
##############################################################################

inst_files: $(INSTEXE)

$(INSTALLBINDIR)/$(CATEXE): $(CATEXE)
	cp $?		$(INSTALLBINDIR)/

$(INSTALLBINDIR)/$(CPEXE): $(CPEXE)
	cp $?		$(INSTALLBINDIR)/

$(INSTALLBINDIR)/$(EXITEXE): $(EXITEXE)
	cp $?		$(INSTALLBINDIR)/

$(INSTALLBINDIR)/$(RESETEXE): $(RESETEXE)
	cp $?		$(INSTALLBINDIR)/

$(INSTALLBINDIR)/$(RMEXE): $(RMEXE)
	cp $?		$(INSTALLBINDIR)/

$(INSTALLBINDIR)/$(STATEXE): $(STATEXE)
	cp $?		$(INSTALLBINDIR)/

unist_files:
	@if [ "$(INSTALLBINDIR)" != "." ]
	then
		echo "rm -f			$(INSTEXE)"
		rm -f			$(INSTEXE)
	fi

##############################################################################
# Dependencies and rules                                                     #
##############################################################################

##########
# pfscat #
##########
$(CATEXE): $(CATOBJ) $(LIBPFS)
	$(CC) $(CFLAGS) $(LDFLAGS) -L$(CLNTPATH) -o $@ $(CATOBJ) -lpfs $(LDLIBS)

pfscat.ln \
pfscat.o:\
	$(INCLUDEPATH)/global.h\
	$(INCLUDEPATH)/pfslib.h

#########
# pfscp #
#########
$(CPEXE): $(CPOBJ) $(LIBPFS)
	$(CC) $(CFLAGS) $(LDFLAGS) -L$(CLNTPATH) -o $@ $(CPOBJ) -lpfs $(LDLIBS)

pfscp.ln \
pfscp.o:\
	$(INCLUDEPATH)/global.h\
	$(INCLUDEPATH)/pfslib.h

#############
# pfsdexit  #
#############

$(EXITEXE): $(EXITOBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(EXITOBJ) $(LDLIBS)

pfsdexit.ln \
pfsdexit.o:\
	$(PFSDPATH)/pfsd.h

#############
# pfsdreset #
#############

$(RESETEXE): $(RESETOBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(RESETOBJ) $(LDLIBS)

pfsdreset.ln \
pfsdreset.o:\
	$(PFSDPATH)/pfsd.h

#############
# pfsrm     #
#############

$(RMEXE): $(RMOBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(RMOBJ) $(LDLIBS)

pfsrm.ln \
pfsrm.o:\
	$(PFSDPATH)/pfsd.h\
	$(INCLUDEPATH)/global.h\
	$(INCLUDEPATH)/rpc_defaults.h

#############
# pfsdstat  #
#############

$(STATEXE): $(STATOBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(STATOBJ) $(LDLIBS)

pfsdstat.ln \
pfsdstat.o:\
	$(PFSDPATH)/pfsd.h

##############################################################################
# targets in other directories                                               #
##############################################################################

$(PFSDPATH)/pfsd_xdr.o \
$(PFSDPATH)/pfsd_clnt.o:
	@echo "Making $@ in directory $(PFSDPATH)"
	@(\
		cd $(PFSDPATH);\
		target=`echo $@ | sed -e 's%$(PFSDPATH)/%%'`;\
		$(MAKE) $(MFLAGS)\
			"ARCH=$(ARCH)"\
			"CFLAGS=$(CFLAGS)"\
			"ANSI_C=$(ANSI_C)"\
			"CPPDEFINES=$(CPPDEFINES)"\
			"ARCHCPPFLAGS=$(ARCHCPPFLAGS)"\
			$$target;\
	)

$(ADDPATH)/add_xdr.o:
	@echo "Making $@ in directory $(ADDPATH)"
	@(\
		cd $(ADDPATH);\
		target=`echo $@ | sed -e 's%$(ADDPATH)/%%'`;\
		$(MAKE) $(MFLAGS)\
			"ARCH=$(ARCH)"\
			"CFLAGS=$(CFLAGS)"\
			"ANSI_C=$(ANSI_C)"\
			"CPPDEFINES=$(CPPDEFINES)"\
			"ARCHCPPFLAGS=$(ARCHCPPFLAGS)"\
			$$target;\
	)

##############################################################################
# Additional targets                                                         #
##############################################################################

tags: TAGS

TAGS: $(SRC)
	etags -t $(SRC)

lint: $(LNOBJ)

clean:
	$(RM) *.o *.ln $(EXE)

realclean: clean
	$(RM) *~

##############################################################################
# End of Makefile                                                            #
##############################################################################
