##############################################################################
#                                                                            #
#    Makefile,v
#    Makefile for directory pfsd
#                                                                            #
#    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/05/29 15:48:28
#  RCS Revision : 1.5
#  RCS Author   : lamberts
#  RCS State    : V2_0_B
#                                                                            #
#  Authors: Stefan Lamberts                                                  #
#                                                                            #
##############################################################################


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

SHELL		= /bin/sh

INCLUDEPATH	= ../include
ADDPATH		= ../add
IODPATH		= ../iod

IOD_EXEC_PATH	= $(IODPATH)/iod

RPCGEN		= rpcgen

CC		= gcc
ANSI_C		= -DANSI_C
CFLAGS		= -ansi -g
CPPFLAGS	= -DIOD_EXEC_PATH=\"$(IOD_EXEC_PATH)\" -I$(INCLUDEPATH) -I$(IODPATH) $(ANSI_C) -D$(ARCH) $(CPPDEFINES) $(ARCHCPPFLAGS)

LDFLAGS		=
LDLIBS		=
SVCLDLIBS	= -lrpcsvc

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

RM		= rm -f

INSTALLBINDIR	= .

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

.SUFFIXES: .ln $(SUFFIXES)

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

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

##############################################################################
# Files generated by rcpgen                                                  #
##############################################################################

RPCFILES	=\
	pfsd_svc.c\
	pfsd_xdr.c\
	pfsd_clnt.c\
	pfsd.h

##############################################################################
# pfsd server object files generated by rpcgen                               #
##############################################################################

RPCOBJ		= \
	pfsd_svc.o\
	pfsd_xdr.o

RPCLNOBJ	= $(RPCOBJ:.o=.ln)

##############################################################################
# pfsd client object files generated by rpcgen                               #
##############################################################################

CLTOBJ		= \
	pfsd_clnt.o\
	pfsd_xdr.o

CLTLNOBJ	= $(CLTOBJ:.o=.ln)

##############################################################################
# pfsd server files                                                          #
##############################################################################

SVCSRC		=\
	pfsd_avl.c\
	pfsd_chkfh.c\
	pfsd_close.c\
	pfsd_cltexit.c\
	pfsd_dist.c\
	pfsd_exit.c\
	pfsd_fattr.c\
	pfsd_frl.c\
	pfsd_getdist.c\
	pfsd_getioid.c\
	pfsd_getiom.c\
	pfsd_init.c\
	pfsd_iod.c\
	pfsd_iodone.c\
	pfsd_ioopdone.c\
	pfsd_iowait.c\
	pfsd_iseof.c\
	pfsd_lseek.c\
	pfsd_lsize.c\
	pfsd_numclnt.c\
	pfsd_numfile.c\
	pfsd_offs.c\
	pfsd_open.c\
	pfsd_print.c\
	pfsd_reset.c\
	pfsd_setiom.c\
	pfsd_timing.c\
	pfsd_unlink.c

SVCOBJ		= $(SVCSRC:.c=.o)

SVCLNOBJ	= $(SVCSRC:.c=.ln)

##############################################################################
# iod client object files generated by rpcgen                                #
##############################################################################

IODOBJ		=\
	$(IODPATH)/iod_xdr.o\
	$(IODPATH)/iod_clnt.o

##############################################################################
# Additional  object files                                                   #
##############################################################################

ADDOBJ		=\
	$(ADDPATH)/add_auth.o\
	$(ADDPATH)/add_error.o\
	$(ADDPATH)/add_xdr.o


##############################################################################
# all object files of pfsd server                                            #
##############################################################################

ALLSVCOBJ	= $(SVCOBJ) $(RPCOBJ) $(IODOBJ) $(ADDOBJ)

ALLSVCLNOBJ	= $(ALLSVCOBJ:.o=.ln)

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

all: pfsd_client pfsd_server

pfsd_client: pfsd.h $(CLTOBJ)

pfsd_server: pfsd

rpc: $(RPCFILES)

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

inst_files: $(INSTALLBINDIR)/pfsd

$(INSTALLBINDIR)/pfsd: pfsd
	cp pfsd			$(INSTALLBINDIR)/

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

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

pfsd: $(ALLSVCOBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(ALLSVCOBJ) $(SVCLDLIBS) $(LDLIBS)

##########################
# rpcgen generated files #
##########################

pfsd.h: pfsd.x $(INCLUDEPATH)/global_rpc.h
	@if { uname -sr | grep "SunOS 4.1" > /dev/null; };\
	then\
		echo "Making $@";\
		$(RPCGEN) -h -T -o $@ pfsd.x;\
	else\
		echo "Unable to make $@; rpcgen must be run on SunOS 4.1.x";\
		exit 1;\
	fi

pfsd_svc.c: pfsd.x $(INCLUDEPATH)/global_rpc.h
	@if { uname -sr | grep "SunOS 4.1" > /dev/null; };\
	then\
		echo "Making $@";\
		$(RPCGEN) -s udp -s tcp pfsd.x |\
		sed \
		-e '/!svc_sendreply/,/^	}$$/c\
		\
		/* BEGIN PATCH done by Makefile */\
		/* Send reply only if resul != NULL\
		 * otherwise reply has to be delayed and sent by _do_op()\
		 */\
		if (result != NULL) {\
		  if (!svc_sendreply(transp, xdr_result, result)) {\
		    svcerr_systemerr(transp); }}\
		/* END PATCH */\
		'\
		-e '/switch/i\
		\
		/* BEGIN PATCH done by Makefile */\
		if (!pfslib_auth_ok(rqstp,transp)) return;\
		/* END PATCH */\
		' > $@;\
	else\
		echo "Unable to make $@; rpcgen must be run on SunOS 4.1.x";\
		exit 1;\
	fi

pfsd_svc.ln \
pfsd_svc.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h

pfsd_clnt.c: pfsd.x $(INCLUDEPATH)/global_rpc.h
	@if { uname -sr | grep "SunOS 4.1" > /dev/null; };\
	then\
		echo "Making $@";\
		$(RPCGEN) -l pfsd.x |\
		sed -e '/PFSD_IOD_RESULT/s/xdr_void, &res, /NULL, NULL, Z/'\
		> $@;\
	else\
		echo "Unable to make $@; rpcgen must be run on SunOS 4.1.x";\
		exit 1;\
	fi

pfsd_clnt.ln \
pfsd_clnt.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h


pfsd_xdr.c: pfsd.x $(INCLUDEPATH)/global_rpc.h
	@if { uname -sr | grep "SunOS 4.1" > /dev/null; };\
	then\
		echo "Making $@";\
		$(RPCGEN) -c -o $@ pfsd.x;\
	else\
		echo "Unable to make $@; rpcgen must be run on SunOS 4.1.x";\
		exit 1;\
	fi

pfsd_xdr.ln \
pfsd_xdr.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h

########################
# Regular source files #
########################

pfsd_avl.ln \
pfsd_avl.o:\
	pfsd_avl.h\
	$(INCLUDEPATH)/global.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_chkfh.ln \
pfsd_chkfh.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_close.ln \
pfsd_close.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_cltexit.ln \
pfsd_cltexit.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h

pfsd_exit.ln \
pfsd_exit.o:\
	$(INCLUDEPATH)/global.h\
	pfsd_macros.h\
	pfsd_defines.h

pfsd_dist.ln \
pfsd_dist.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	pfsd_avl.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_fattr.ln \
pfsd_fattr.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_frl.ln \
pfsd_frl.o:\
	$(INCLUDEPATH)/global.h\
	pfsd_frl.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_getdist.ln \
pfsd_getdist.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_getioid.ln \
pfsd_getioid.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_getiom.ln \
pfsd_getiom.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_init.ln \
psfd_init.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h

pfsd_iod.ln \
pfsd_iod.o:\
	$(IODPATH)/iod.h\
	$(INCLUDEPATH)/global.h\
	$(INCLUDEPATH)/pfslib_errno.h\
	$(INCLUDEPATH)/rpc_defaults.h

pfsd_iodone.ln \
pfsd_iodone.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_ioopdone.ln \
pfsd_ioopdone.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_ioop.ln \
pfsd_ioop.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_iowait.ln \
pfsd_iowait.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_iseof.ln \
pfsd_ideof.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_lseek.ln \
pfsd_lseek.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_lsize.ln \
pfsd_lsize.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h


pfsd_numclnt.ln \
pfsd_numclnt.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h

pfsd_numfile.ln \
pfsd_numfile.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h

pfsd_offs.ln \
pfsd_offs.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_open.ln \
pfsd_open.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_print.ln \
pfsd_print.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h

pfsd_reset.ln \
pfsd_reset.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h

pfsd_setiom.ln \
pfsd_setiom.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

pfsd_unlink.ln \
pfsd_unlink.o:\
	pfsd.h\
	$(INCLUDEPATH)/global.h\
	pfsd_defines.h\
	pfsd_macros.h\
	$(INCLUDEPATH)/pfslib_errno.h

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

$(IODOBJ):
	@echo "Making $@ in directory $(IODPATH)"
	@(\
		cd $(IODPATH);\
		target=`echo $@ | sed -e 's%$(IODPATH)/%%'`;\
		$(MAKE) $(MFLAGS)\
			"ARCH=$(ARCH)"\
			"CFLAGS=$(CFLAGS)"\
			"ANSI_C=$(ANSI_C)"\
			"CPPDEFINES=$(CPPDEFINES)"\
			"ARCHCPPFLAGS=$(ARCHCPPFLAGS)"\
			"CC=$(CC)"\
			"LINT=$(LINT)"\
			"LINTFLAGS=$(LINTFLAGS)"\
			"LINT_ln=$(LINT_ln)"\
			$$target;\
	)

$(ADDOBJ):
	@echo "Making $@ in directory $(ADDPATH)"
	@(\
		cd $(ADDDPATH);\
		target=`echo $@ | sed -e 's%$(ADDPATH)/%%'`;\
		$(MAKE) $(MFLAGS)\
			"ARCH=$(ARCH)"\
			"CFLAGS=$(CFLAGS)"\
			"ANSI_C=$(ANSI_C)"\
			"CPPDEFINES=$(CPPDEFINES)"\
			"ARCHCPPFLAGS=$(ARCHCPPFLAGS)"\
			"CC=$(CC)"\
			"LINT=$(LINT)"\
			"LINTFLAGS=$(LINTFLAGS)"\
			"LINT_ln=$(LINT_ln)"\
			$$target;\
	)

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

rpcmod: $(RPCFILES)
	chmod a-w $(RPCFILES)

tags: TAGS

TAGS: $(RPCFILES) $(SVCSRC)
	etags -t $(RPCFILES) $(SVCSRC)


lint: $(ALLSVCLNOBJ) $(CLTLNOBJ)
	$(LINT) $(LINTFLAGS) $(ALLSVCLNOBJ)


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

rpcclean:
	$(RM)	$(RPCFILES)

realclean: clean
	$(RM)	TAGS *~

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