# Copyright 2000, International Business Machines Corporation and others.
# All Rights Reserved.
# 
# This software has been released under the terms of the IBM Public
# License.  For details, see the LICENSE file in the top-level source
# directory or online at http://www.openafs.org/dl/license10.html

srcdir=@srcdir@
include @TOP_OBJDIR@/src/config/Makefile.config
include @TOP_OBJDIR@/src/config/Makefile.pthread

HELPER_SPLINT=@HELPER_SPLINT@
ENABLE_PTHREADED_UBIK=@ENABLE_PTHREADED_UBIK@

UBIK=$(srcdir)/../ubik
RX=$(srcdir)/../rx
UTIL=$(srcdir)/../util

LIBOBJS=disk.o  remote.o beacon.o recovery.o ubik.o  vote.o lock.o phys.o \
	ubik_int.cs.o ubik_int.ss.o ubik_int.xdr.o ubikcmd.o \
	ubikclient.o uerrors.o uinit.o

INCLS=${TOP_INCDIR}/lwp.h ${TOP_INCDIR}/lock.h \
	${TOP_INCDIR}/rx/rx.h ${TOP_INCDIR}/rx/xdr.h \
	${TOP_INCDIR}/lock.h ubik.h ubik_int.h utst_int.h

RXOBJS = rx_pthread.o

UTILOBJS=uuid.o serverLog.o fileutil.o netutils.o dirpath.o \
       volparse.o flipbase64.o softsig.o hostparse.o pthread_glock.o \
       pthread_threadname.o

LIBS=${RXOBJS} ${UTILOBJS} ${TOP_LIBDIR}/libafsauthent.a ${TOP_LIBDIR}/libafsrpc.a \
     ${TOP_LIBDIR}/libafscom_err.a ${TOP_LIBDIR}/libcmd.a \
     ${TOP_LIBDIR}/libsys.a \
     $(TOP_LIBDIR)/libopr.a \
     ${XLIBS} ${MT_LIBS}

all: depinstall ${TOP_LIBDIR}/libubik_pthread.a udebug utst_server utst_client

depinstall: \
	ubik_int.cs.c ubik_int.xdr.c \
	${TOP_INCDIR}/ubik.h \
	${TOP_INCDIR}/ubik_int.h

#
# get the pthreaded rx stuff compiled here
#

CFLAGS_rx_pthread.o = -DDPF_FSLOG
rx_pthread.o: ${RX}/rx_pthread.c
	$(AFS_CCRULE) $(RX)/rx_pthread.c

#
# get the pthreaded util stuff compiled here.  we do this instead of
# using the non-pthreaded libutil.a.  There probably should be a
# pthreaded version of this library, as we are doing with ubik itself, but...
#

uuid.o: ${UTIL}/uuid.c
	$(AFS_CCRULE) $(UTIL)/uuid.c

serverLog.o: ${UTIL}/serverLog.c
	$(AFS_CCRULE) $(UTIL)/serverLog.c

fileutil.o: ${UTIL}/fileutil.c
	$(AFS_CCRULE) $(UTIL)/fileutil.c

volparse.o: ${UTIL}/volparse.c
	$(AFS_CCRULE) $(UTIL)/volparse.c

flipbase64.o: ${UTIL}/flipbase64.c
	$(AFS_CCRULE) $(UTIL)/flipbase64.c

netutils.o: ${UTIL}/netutils.c
	$(AFS_CCRULE) $(UTIL)/netutils.c

dirpath.o: ${UTIL}/dirpath.c
	$(AFS_CCRULE) $(UTIL)/dirpath.c

softsig.o: ${UTIL}/softsig.c
	$(AFS_CCRULE) $(UTIL)/softsig.c

hostparse.o: ${UTIL}/hostparse.c
	$(AFS_CCRULE) $(UTIL)/hostparse.c

pthread_glock.o: ${UTIL}/pthread_glock.c
	$(AFS_CCRULE) $(UTIL)/pthread_glock.c

pthread_threadname.o: ${UTIL}/pthread_threadname.c
	$(AFS_CCRULE) $(UTIL)/pthread_threadname.c

#
# insert comments here
#

utst_server: utst_server.o utst_int.ss.o utst_int.xdr.o libubik_pthread.a ${RXOBJS} ${UTILOBJS}
	$(AFS_LDRULE) utst_server.o utst_int.ss.o utst_int.xdr.o \
		libubik_pthread.a $(LIBS) $(LIB_hcrypto) $(LIB_roken)

utst_client: utst_client.o utst_int.cs.o utst_int.xdr.o libubik_pthread.a ${RXOBJS} ${UTILOBJS}
	$(AFS_LDRULE) utst_client.o utst_int.cs.o utst_int.xdr.o \
		libubik_pthread.a $(LIBS) $(LIB_hcrypto) $(LIB_roken)

udebug: udebug.o libubik_pthread.a ${RXOBJS} ${UTILOBJS}
	$(AFS_LDRULE) udebug.o libubik_pthread.a \
		$(LIBS) $(LIB_hcrypto) $(LIB_roken)

ubik_int.cs.c: ${UBIK}/ubik_int.xg
	${RXGEN} -A -x -C -o $@ ${UBIK}/ubik_int.xg

ubik_int.ss.c: ${UBIK}/ubik_int.xg
	${RXGEN} -A -x -S -o $@ ${UBIK}/ubik_int.xg

ubik_int.xdr.c: ${UBIK}/ubik_int.xg
	${RXGEN} -A -x -c -o $@ ${UBIK}/ubik_int.xg

ubik_int.h: ${UBIK}/ubik_int.xg
	${RXGEN} -A -x -h -o $@ ${UBIK}/ubik_int.xg

ubik_int.cs.c: ubik_int.h
ubik_int.ss.c: ubik_int.h
ubik_int.xdr.c: ubik_int.h

Kubik_int.cs.c: ${UBIK}/ubik_int.xg Kubik_int.h
	${RXGEN} -A -x -k -C -o Kubik_int.cs.c ${UBIK}/ubik_int.xg
 
Kubik_int.xdr.c: ${UBIK}/ubik_int.xg
	${RXGEN} -A -x -k -c -o Kubik_int.xdr.c ${UBIK}/ubik_int.xg
 
Kubik_int.h: ${UBIK}/ubik_int.xg
	${RXGEN} -A -x -k -h -o Kubik_int.h ${UBIK}/ubik_int.xg

utst_int.ss.o: utst_int.ss.c
utst_int.cs.o: utst_int.cs.c
utst_int.xdr.o: utst_int.xdr.c

utst_int.cs.c: ${UBIK}/utst_int.xg
	${RXGEN} -A -C -u -o $@ ${UBIK}/utst_int.xg

utst_int.ss.c: ${UBIK}/utst_int.xg
	${RXGEN} -A -S -o $@ ${UBIK}/utst_int.xg

utst_int.xdr.c: ${UBIK}/utst_int.xg
	${RXGEN} -A -c -o $@ ${UBIK}/utst_int.xg

utst_int.h: ${UBIK}/utst_int.xg
	${RXGEN} -A -h -u -o $@ ${UBIK}/utst_int.xg

utst_int.cs.c: utst_int.h
utst_int.ss.c: utst_int.h
utst_int.xdr.c: utst_int.h

utst_server.o: ${UBIK}/utst_server.c
	${AFS_CCRULE} ${UBIK}/utst_server.c

utst_client.o: ${UBIK}/utst_client.c
	${AFS_CCRULE} ${UBIK}/utst_client.c

udebug.o: ${UBIK}/udebug.c
	${AFS_CCRULE} ${UBIK}/udebug.c

uerrors.c ubik.h: ${UBIK}/uerrors.et ${UBIK}/ubik.p.h
	$(RM) -f ubik.h uerrors.c
	${COMPILE_ET} -p ${UBIK} uerrors -h ubik

libubik_pthread.a: ${INCLS} ${LIBOBJS} AFS_component_version_number.o
	-$(RM) -f $@
	$(AR) crc $@ ${LIBOBJS} AFS_component_version_number.o
	$(RANLIB) $@

disk.o: ${UBIK}/disk.c
	$(AFS_CCRULE) $(UBIK)/disk.c

uinit.o: ${UBIK}/uinit.c
	$(AFS_CCRULE) $(UBIK)/uinit.c

remote.o: ${UBIK}/remote.c
	$(AFS_CCRULE) $(UBIK)/remote.c

beacon.o: ${UBIK}/beacon.c
	$(AFS_CCRULE) $(UBIK)/beacon.c

lock.o: ${UBIK}/lock.c
	$(AFS_CCRULE) $(UBIK)/lock.c

recovery.o: ${UBIK}/recovery.c
	$(AFS_CCRULE) $(UBIK)/recovery.c

ubik.o: ${UBIK}/ubik.c
	$(AFS_CCRULE) $(UBIK)/ubik.c

phys.o: ${UBIK}/phys.c
	$(AFS_CCRULE) $(UBIK)/phys.c

vote.o: ${UBIK}/vote.c
	$(AFS_CCRULE) $(UBIK)/vote.c

ubikcmd.o: ${UBIK}/ubikcmd.c
	$(AFS_CCRULE) $(UBIK)/ubikcmd.c

ubikclient.o: ${UBIK}/ubikclient.c
	$(AFS_CCRULE) $(UBIK)/ubikclient.c
ubik_int.xdr.o: ubik_int.xdr.c

#
# Installation targets
#
test: all

install: libubik_pthread.a ubik.h ubik_int.h udebug
	${INSTALL} -d ${DESTDIR}${libdir}
	${INSTALL} -d ${DESTDIR}${includedir}
	${INSTALL} -d ${DESTDIR}${bindir}
	${INSTALL} -d ${DESTDIR}${afssrvbindir}
	${INSTALL_DATA} libubik_pthread.a ${DESTDIR}${libdir}/libubik_pthread.a
	if [ "x$(ENABLE_PTHREADED_UBIK)" = "xyes" ] ; then                 \
	    ${INSTALL_PROGRAM} udebug ${DESTDIR}${bindir}/udebug;          \
	    ${INSTALL_PROGRAM} udebug ${DESTDIR}${afssrvbindir}/udebug;    \
	    ${INSTALL_DATA} ubik.h ${DESTDIR}${includedir}/ubik.h;         \
	    ${INSTALL_DATA} ubik_int.h ${DESTDIR}${includedir}/ubik_int.h; \
	fi

dest: libubik_pthread.a ubik.h ubik_int.h udebug
	${INSTALL} -d ${DEST}/lib
	${INSTALL} -d ${DEST}/include
	${INSTALL} -d ${DEST}/root.server/usr/afs/bin
	${INSTALL_DATA} libubik_pthread.a ${DEST}/lib/libubik_pthread.a
	if [ "x$(ENABLE_PTHREADED_UBIK)" = "xyes" ] ; then                    \
	    ${INSTALL_PROGRAM} udebug ${DEST}/bin/udebug;		      \
	    ${INSTALL_PROGRAM} udebug ${DEST}/root.server/usr/afs/bin/udebug; \
	    ${INSTALL_DATA} ubik.h ${DEST}/include/ubik.h;		      \
	    ${INSTALL_DATA} ubik_int.h ${DEST}/include/ubik_int.h;	      \
	fi
#
# Misc. targets
#
clean:
	$(RM) -f *.o utst_server utst_client udebug *.a *.cs.c *.ss.c *.xdr.c
	$(RM) -f utst_int.h ubik_int.h uerrors.c ubik.h core AFS_component_version_number.c Kubik_int.h

include ../config/Makefile.version

${TOP_LIBDIR}/libubik_pthread.a: libubik_pthread.a
	${INSTALL} $? $@

${TOP_INCDIR}/ubik.h: ubik.h
	${INSTALL} $? $@

${TOP_INCDIR}/ubik_int.h: ubik_int.h
	${INSTALL} $? $@


