# 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

KERNELDIR=../libafs
UKERNELDIR=../libuafs
SHELL=/bin/sh
COMPONENT=config
include Makefile.${SYS_NAME}

MKDIR_IF_NEEDED=[ -d $$1 ] || mkdir -p $$1

CFLAGS=-g -I${DESTDIR}include ${XCFLAGS}

noversion: install.noversion

KDIRS = ${KERNELDIR}/afs ${KERNELDIR}/rx ${KERNELDIR}/afsint \
	${DESTDIR}include/afs ${KERNELDIR}/config

UKDIRS = ${UKERNELDIR}/afs ${UKERNELDIR}/rx ${UKERNELDIR}/afsint \
	 ${UKERNELDIR}/config

noversionMakef: $(KDIRS)
	-if [ ! -f Makefile.version ] ; \
	then \
		$(CP) Makefile.version-NOCML Makefile.version; \
		$(MAKE) -f Makefile.version  AFS_component_version_number.c; \
	fi; 

version: ${DESTDIR}bin/mkvers Makefile.version
	$(MAKE) -f Makefile.version  AFS_component_version_number.c

${DESTDIR}bin/mkvers: mkvers.c
	set ${DESTDIR}bin; $(MKDIR_IF_NEEDED)
	$(CC) -o ${DESTDIR}bin/mkvers mkvers.c

Makefile.version: Makefile.version-CML Makefile.version-NOCML
	$(RM) -f Makefile.version
	set -x ; \
	if	[ -r SRC/../CML/state ] ; \
	then	$(CP) Makefile.version-CML Makefile.version ; \
	else	$(CP) Makefile.version-NOCML Makefile.version ; \
	fi

all: config

mc.o: mc.c

config.o: config.c AFS_component_version_number.c

config: config.o mc.o
	$(SPEW) $(CC) $(CFLAGS) -o config config.o mc.o

param.xxx:

$(KDIRS): 
	set $@; $(MKDIR_IF_NEEDED)

${KERNELDIR}/afs/AFS_component_version_number.c: AFS_component_version_number.c
	-$(RM) -f $@; $(CP) $? $@

${KERNELDIR}/afs/param.h ${DESTDIR}include/afs/param.h :: param.${SYS_NAME}.h
	-$(RM) -f $@; $(CP) $? $@

${KERNELDIR}/afs/afs_sysnames.h ${DESTDIR}include/afs/afs_sysnames.h :: afs_sysnames.h
	$(RM) -f $@; $(CP) $? $@

DESTINCLS = ${DESTDIR}include/afs/afs_args.h ${DESTDIR}include/afs/venus.h ${DESTDIR}include/afs/debug.h ${DESTDIR}include/afs/afs_sysnames.h  ${DESTDIR}include/afs/param.h  ${DESTDIR}include/afs/stds.h  ${DESTDIR}include/afs/icl.h 

${KERNELDIR}/afs/stds.h ${DESTDIR}include/afs/stds.h :: stds.h
	$(RM) -f $@; $(CP) $? $@

${KERNELDIR}/config/Makefile.${SYS_NAME} :: Makefile.${SYS_NAME}
	$(RM) -f $@; $(CP) $? $@

${KERNELDIR}/afs/icl.h ${DESTDIR}include/afs/icl.h :: icl.h 
	$(RM) -f $@; $(CP) $? $@

${KERNELDIR}/afs/afs_args.h ${DESTDIR}include/afs/afs_args.h :: afs_args.h 
	$(RM) -f $@; $(CP) $? $@

${DESTDIR}include/afs/venus.h :: venus.h 
	$(RM) -f $@; $(CP) $? $@

${DESTDIR}include/afs/debug.h :: debug.h 
	$(RM) -f $@; $(CP) $? $@

$(UKDIRS): 
	set $@; $(MKDIR_IF_NEEDED)

${UKERNELDIR}/afs/AFS_component_version_number.c: AFS_component_version_number.c
	-$(RM) -f $@; $(CP) $? $@

${UKERNELDIR}/afs/param.h :: param.${SYS_NAME}_usr.h
	-$(RM) -f $@; $(CP) $? $@

${UKERNELDIR}/afs/afs_sysnames.h :: afs_sysnames.h
	$(RM) -f $@; $(CP) $? $@

${UKERNELDIR}/afs/stds.h :: stds.h
	$(RM) -f $@; $(CP) $? $@

${UKERNELDIR}/config/Makefile.${SYS_NAME} :: Makefile.${SYS_NAME}
	$(RM) -f $@; $(CP) $? $@

${UKERNELDIR}/afs/icl.h :: icl.h 
	$(RM) -f $@; $(CP) $? $@

${UKERNELDIR}/afs/venus.h :: venus.h 
	$(RM) -f $@; $(CP) $? $@

${UKERNELDIR}/afs/afs_args.h :: afs_args.h 
	$(RM) -f $@; $(CP) $? $@

# lkversion is the target the Linux build uses to verify the build machine
# has headers in the right place for the requested kernel builds.
#
# To add AFS support to a new Linux kernel rev, see comments in the file
# ./linux-version.
#
lkversion:
	case ${SYS_NAME} in \
	*linux* ) \
		LINUX_SRCDIR="$(LINUX_SRCDIR)"; export LINUX_SRCDIR; \
		LINUX_VERS="$(LINUX_VERS)"; export LINUX_VERS; \
		sh ./linux-version ; \
	esac

install.noversion: $(KDIRS) noversionMakef all $(DESTINCLS) venus.h

system: install
install: version install.noversion kinstall ukinstall

# these are needed to compile the kernel.  Config is necessary to
# convert the MakefileProto in libafs and the kernel links provide the
# kernel include environment.  param.h is, well, param.h.  The afs_sysnames.h
# file is needed by param.h to create unique identifiers for each SYS_TYPE.

# lkversion
kinstall: config $(KDIRS) ${KERNELDIR}/afs/param.h \
	${KERNELDIR}/afs/stds.h \
	${KERNELDIR}/afs/afs_sysnames.h \
	${KERNELDIR}/config/Makefile.${SYS_NAME} \
	${KERNELDIR}/afs/afs_args.h \
	${KERNELDIR}/afs/icl.h \
	${KERNELDIR}/afs/AFS_component_version_number.c

ukinstall webinstall: $(DESTINCLS) config $(UKDIRS) ${UKERNELDIR}/afs/param.h ${UKERNELDIR}/afs/stds.h \
	${UKERNELDIR}/afs/afs_sysnames.h \
	${UKERNELDIR}/config/Makefile.${SYS_NAME} \
	${UKERNELDIR}/afs/afs_args.h \
	${UKERNELDIR}/afs/icl.h \
	${UKERNELDIR}/afs/venus.h \
	${UKERNELDIR}/afs/AFS_component_version_number.c

clean:
	$(RM) -f *.o config core xprt AFS_component_version_number.c
