CFLAGS = $(CCOPTS) $(DEFS)

SRCS =  
HDRS = 

DISTFILES = $(SRCS) $(HDRS) COPYING COPYING.LIB ChangeLog Makefile.in

all:: all-$(WHAT)

all-unix::

all-mac::

all-: all-windows

LIBCMD = lib
all-windows:: makefile-windows
	@echo Making in include
	cd include
	-$(MAKE) -$(MAKEFLAGS) LIBCMD=$(LIBCMD)
	@echo Making in util\et
	cd ..\util\et
	-$(MAKE) -$(MAKEFLAGS) LIBCMD=$(LIBCMD)
	@echo Making in util\profile
	cd ..\profile
	-$(MAKE) -$(MAKEFLAGS) LIBCMD=$(LIBCMD)
	@echo Making in lib
	cd ..\..\lib
	-$(MAKE) -$(MAKEFLAGS) LIBCMD=$(LIBCMD)
	@echo Making in windows
	cd ..\windows
	-$(MAKE) -$(MAKEFLAGS) LIBCMD=$(LIBCMD)
	cd ..

world::
	date
	make $(MFLAGS) all
	date

INSTALLMKDIRS = $(KRB5ROOT) $(KRB5MANROOT) $(KRB5OTHERMKDIRS) \
		$(ADMIN_BINDIR) $(SERVER_BINDIR) $(CLIENT_BINDIR) \
		$(ADMIN_MANDIR) $(SERVER_MANDIR) $(CLIENT_MANDIR) \
		$(FILE_MANDIR) $(KRB5_LIBDIR) $(KRB5_INCDIR) \
		$(KRB5_INCSUBDIRS)

install:: install-mkdirs

install-mkdirs:
	@for i in $(INSTALLMKDIRS); do \
		if test -d $(DESTDIR)$$i; then :; else (set -x; mkdir -p $(DESTDIR)$$i); fi \
	done

# install::
#	$(MAKE) $(MFLAGS) install.man

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

TAGS: $(SRCS)
	etags $(SRCS)

clean:: clean-$(WHAT)

clean-:: clean-windows
clean-mac:: clean-unix
clean-unix::
	$(RM) *.o core

mostlyclean: clean

distclean: clean
	rm -f Makefile config.status

realclean: distclean
	rm -f TAGS

dist: $(DISTFILES)
	echo cpio-`sed -e '/version_string/!d' \
	-e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname
	rm -rf `cat .fname`
	mkdir `cat .fname`
	-ln $(DISTFILES) `cat .fname`
	for file in $(DISTFILES); do \
	  test -r `cat .fname`/$$file || cp -p $$file `cat .fname`; \
	done
	tar chzf `cat .fname`.tar.gz `cat .fname`
	rm -rf `cat .fname` .fname

# Macintosh build process...

# Build all things for the Mac build, which need to be built on
# Unix first.
unixmac:
	(cd lib/krb5/error_tables; make -f Makefile.in unixmac)
	(cd lib/gssapi/generic; make -f Makefile.in unixmac)


# Microsoft Windows build process...
#

config-windows:: makefile-windows
	@echo Making in include
	cd include
	-$(MAKE) -$(MAKEFLAGS)
	cd ..

makefile-windows:: wconfig.exe config\pre.in config\post.in \
		include\makefile.in include\krb5\makefile.in \
		lib\makefile.in lib\crypto\makefile.in \
		lib\crypto\crc32\makefile.in lib\crypto\des\makefile.in \
		lib\crypto\md4\makefile.in lib\crypto\md5\makefile.in \
		lib\crypto\os\makefile.in lib\des425\makefile.in \
		lib\gssapi\makefile.in lib\gssapi\generic\makefile.in \
		lib\gssapi\krb5\makefile.in lib\krb5\makefile.in \
		lib\krb5\asn.1\makefile.in lib\krb5\ccache\makefile.in \
		lib\krb5\ccache\file\makefile.in \
		lib\krb5\ccache\stdio\makefile.in \
		lib\krb5\error_ta\makefile.in \
		lib\krb5\free\makefile.in lib\krb5\keytab\makefile.in \
		lib\krb5\keytab\file\makefile.in lib\krb5\krb\makefile.in \
		lib\krb5\os\makefile.in lib\krb5\posix\makefile.in \
		lib\krb5\rcache\makefile.in \
		util\et\makefile.in util\profile\makefile.in
	type makefile.in >makefile
	.\wconfig config <include\makefile.in >include\makefile
	.\wconfig config <include\krb5\makefile.in >include\krb5\makefile
	.\wconfig config <lib\makefile.in >lib\makefile
	.\wconfig config <lib\crypto\makefile.in >lib\crypto\makefile
	.\wconfig config <lib\crypto\crc32\makefile.in >lib\crypto\crc32\makefile
	.\wconfig config <lib\crypto\des\makefile.in >lib\crypto\des\makefile
	.\wconfig config <lib\crypto\md4\makefile.in >lib\crypto\md4\makefile
	.\wconfig config <lib\crypto\md5\makefile.in >lib\crypto\md5\makefile
	.\wconfig config <lib\crypto\os\makefile.in >lib\crypto\os\makefile
	.\wconfig config <lib\des425\makefile.in >lib\des425\makefile
	.\wconfig config <lib\gssapi\makefile.in >lib\gssapi\makefile
	.\wconfig config <lib\gssapi\generic\makefile.in >lib\gssapi\generic\makefile
	.\wconfig config <lib\gssapi\krb5\makefile.in >lib\gssapi\krb5\makefile
	.\wconfig config <lib\kadm\makefile.in >lib\kadm\makefile
	.\wconfig config <lib\krb5\makefile.in >lib\krb5\makefile
	.\wconfig config <lib\krb5\asn.1\makefile.in >lib\krb5\asn.1\makefile
	.\wconfig config <lib\krb5\ccache\makefile.in >lib\krb5\ccache\makefile
	.\wconfig config <lib\krb5\ccache\file\makefile.in >lib\krb5\ccache\file\makefile
	.\wconfig config <lib\krb5\ccache\stdio\makefile.in >lib\krb5\ccache\stdio\makefile
	.\wconfig config <lib\krb5\error_ta\makefile.in >lib\krb5\error_ta\makefile
	.\wconfig config <lib\krb5\free\makefile.in >lib\krb5\free\makefile
	.\wconfig config <lib\krb5\keytab\makefile.in >lib\krb5\keytab\makefile
	.\wconfig config <lib\krb5\keytab\file\makefile.in >lib\krb5\keytab\file\makefile
	.\wconfig config <lib\krb5\krb\makefile.in >lib\krb5\krb\makefile
	.\wconfig config <lib\krb5\os\makefile.in >lib\krb5\os\makefile
	.\wconfig config <lib\krb5\posix\makefile.in >lib\krb5\posix\makefile
	.\wconfig config <lib\krb5\rcache\makefile.in >lib\krb5\rcache\makefile
	.\wconfig config <util\et\makefile.in >util\et\makefile
	.\wconfig config <util\profile\makefile.in >util\profile\makefile
	config\rm.bat wconfig.obj msvc.pdb

wconfig.exe: wconfig.c
	SET CL=/nologo
	$(CC) /AL wconfig.c

clean-windows::
	@echo Making clean in include
	cd include
	-$(MAKE) -$(MAKEFLAGS) clean
	@echo Making clean in util\et
	cd ..\util\et
	-$(MAKE) -$(MAKEFLAGS) clean
	@echo Making clean in util\profile
	cd ..\profile
	-$(MAKE) -$(MAKEFLAGS) clean
	@echo Making clean in lib
	cd ..\..\lib
	-$(MAKE) -$(MAKEFLAGS) clean
	@echo Making clean in windows
	cd ..\windows
	-$(MAKE) -$(MAKEFLAGS) clean
	cd ..
	@echo Making clean in root
	config\rm.bat *.obj msvc.pdb *.err wconfig.obj wconfig.exe

#
# Renames DOS 8.3 filenames back to their proper, longer names.
#
ren2long:
	-sh config/ren2long

#
# Builds the file that distributes Kerberos sources for DOS and 
# Macintosh sites from the source tree on Unix.
#
ZIP=zip
FILES= ./* \
	config/* include/* include/krb5/* include/krb5/asn.1/* \
	include/krb5/stock/* include/sys/* lib/* lib/crypto/* \
	lib/crypto/crc32/* lib/crypto/des/* lib/crypto/md4/* \
	lib/crypto/md5/* lib/crypto/os/* lib/des425/* lib/gssapi/* \
	lib/gssapi/generic/* lib/gssapi/krb5/* lib/kadm/* lib/krb425/* \
	lib/krb5/* lib/krb5/asn.1/* lib/krb5/krb/* \
	lib/krb5/ccache/* lib/krb5/ccache/file/* \
	lib/krb5/ccache/stdio/* lib/krb5/error_tables/* \
	lib/krb5/free/* lib/krb5/keytab/* lib/krb5/keytab/file/* \
	lib/krb5/os/* lib/krb5/posix/* lib/krb5/rcache/* util/et/* \
	util/profile/*

WINFILES= windows/* windows/cns/* windows/wintel/* windows/gss/*

MACFILES= mac/build/* mac/kconfig/* mac/libraries/* mac/telnet/*

WINBINARYFILES=windows/cns/*.ico windows/wintel/*.ico windows/gss/*.ico

WINEXCLUDE= LIB/KRB5.SAB \
	INCLUDE/KRB5/AUTOCONF.H \
	LIB/CRYPTO/MD4/T_MDDRIV LIB/CRYPTO/MD5/T_MDDRIV \
	UTIL/PROFILE/TEST_PAR UTIL/PROFILE/TEST_PRO \
	WINDOWS/CNS/*.ICO WINDOWS/WINTEL/*.ICO WINDOWS/GSS/*.ICO \
	*.O *.A *.ZIP *.TAR

MACEXCLUDE= windows 

CLEANUP= util/profile/profile.h util/profile/prof_err.[ch] \
	lib/krb5/error_tables/asn1_err.c lib/krb5/error_tables/kdb5_err.c \
	lib/krb5/error_tables/krb5_err.c lib/krb5/error_tables/kv5m_err.c \
	lib/krb5/error_tables/adm_err.c \
	include/krb5/asn1_err.h include/krb5/kdb5_err.h \
	include/krb5/krb5_err.h include/krb5/kv5m_err.h \
	include/krb5/adm_err.h include/profile.h \
	lib/gssapi/generic/gssapi_err_generic.[ch] \
	lib/gssapi/krb5/gssapi_err_krb5.[ch]

kerbsrc.win: kerbsrc.zip

kerbsrc.zip: awk-windows-mac
	rm -f Makefile.bak
	mv Makefile Makefile.bak
	cp Makefile.in Makefile
	rm -f kerbsrc.zip
	$(ZIP) -Dlk kerbsrc.zip $(FILES) $(WINFILES) -x $(EXCLUDE) $(WINEXCLUDE)
	$(ZIP) -Dk kerbsrc.zip $(WINBINARYFILES)
	cp Makefile.bak Makefile
	rm -f $(CLEANUP)

kerbsrc-nt.zip: awk-windows-mac
	rm -f Makefile.bak
	mv Makefile Makefile.bak
	cp Makefile.in Makefile
	rm -f kerbsrc-nt.zip
	$(ZIP) -Dl kerbsrc-nt.zip $(FILES) $(WINFILES) -x $(EXCLUDE) $(WINEXCLUDE)
	$(ZIP) -D kerbsrc-nt.zip $(WINBINARYFILES)
	cp Makefile.bak Makefile
	rm -f $(CLEANUP)

kerbsrc.mac: awk-windows-mac
	rm -f excludefiles 
	/bin/ls $(MACEXCLUDE) >excludefiles
	tar cvfX kerbsrc.tar excludefiles `find $(FILES) $(MACFILES) -prune -type f -print`
	rm -f excludefiles
	rm -f $(CLEANUP)

#
# Part of building the PC release has to be done on Unix. This includes
# anything the requires awk.
#
AH  = util/et/et_h.awk
AC  = util/et/et_c.awk
INC = include/krb5/
ET  = lib/krb5/error_tables/
GG  = lib/gssapi/generic/
GK  = lib/gssapi/krb5/
PR  = util/profile/

awk-windows-mac:
	gawk -f $(AH) outfile=$(INC)asn1_err.h $(ET)asn1_err.et
	gawk -f $(AH) outfile=$(INC)kdb5_err.h $(ET)kdb5_err.et
	gawk -f $(AH) outfile=$(INC)krb5_err.h $(ET)krb5_err.et
	gawk -f $(AH) outfile=$(INC)kv5m_err.h $(ET)kv5m_err.et
	gawk -f $(AH) outfile=$(INC)adm_err.h $(ET)adm_err.et
	gawk -f $(AC) outfile=$(ET)asn1_err.c $(ET)asn1_err.et
	gawk -f $(AC) outfile=$(ET)kdb5_err.c $(ET)kdb5_err.et
	gawk -f $(AC) outfile=$(ET)krb5_err.c $(ET)krb5_err.et
	gawk -f $(AC) outfile=$(ET)kv5m_err.c $(ET)kv5m_err.et
	gawk -f $(AC) outfile=$(ET)adm_err.c $(ET)adm_err.et
	gawk -f $(AH) outfile=$(GG)gssapi_err_generic.h $(GG)gssapi_err_generic.et
	gawk -f $(AC) outfile=$(GG)gssapi_err_generic.c $(GG)gssapi_err_generic.et
	gawk -f $(AH) outfile=$(GK)gssapi_err_krb5.h $(GK)gssapi_err_krb5.et
	gawk -f $(AC) outfile=$(GK)gssapi_err_krb5.c $(GK)gssapi_err_krb5.et
	gawk -f $(AH) outfile=$(PR)prof_err.h $(PR)prof_err.et
	gawk -f $(AC) outfile=$(PR)prof_err.c $(PR)prof_err.et
	cat $(PR)/profile.hin $(PR)prof_err.h > $(PR)profile.h
	cp $(PR)profile.h include/profile.h
