# ---------------------------------------------------------------------
# 									
# 	Name:			UnixChess V2.7				
# 				Schachprogramm				
# 									
# 	Programmteil:		Makefile				
# 									
# 	Autor:			Marc Laukien				
# 									
# ---------------------------------------------------------------------

# ----------------- Ab hier Eintragungen vornehmen --------------------
# ----------------- Make the necessary changes     --------------------

# Name des Schachprogramms:
# Name of the chessprogram:
NAME 	= chess

# Standardsprache, falls '-d sprache' weggelassen wird:
# Default language, if invoked without '-d language':
LANG	= english
#LANG	= german

# Aus welchem def.* die Menues ins Manual uebernommen werden:
# Defines from what def.* file the menunames will be included in the manual:
MANLANG	= english
#MANLANG	= german

# Anzahl der Tage fuer expire:
# Number of days for the expire:
EXPIRE	= 14
# Anzahl der Halbzuege, bei denen expire noch nicht in
# die Highscoreliste eintraegt:
# Number of moves, with which the expire won't create an entry in
# the highscoretable:
MOVES	= 4

# ----------------- Pfade ----------------------------------------------
# ----------------- Paths ----------------------------------------------

# Directorys, in denen installiert wird:
# Installation directorys:
LIBDIR 	= /usr/games/lib/Chess
BINDIR 	= /usr/games

# Kapitel/Directory in dem das Manual installiert wird:
# Chapter/Directory in which the manual will be installed:
MANUAL 	= LOCAL
MANDIR 	= /usr/man/man.LOCAL
CATDIR 	= /usr/man/cat.LOCAL

# Mailer fuer den expire
# Mailer for expire
MAIL	= /bin/mail

# ----------------- Angaben zum System  --------------------------------
# ----------------- System informations --------------------------------

# Shared Library:
LIBSH	=
#LIBSH	= -lc_s

# Curses library
FLAGS 	= -f -O
LIB	= -lcurses -lfl

# Filemode, falls unter SUID installiert werden soll:
# Filemode, if you like to install with SUID:
MODE1	= 4711
MODE2	= 600
MODE3	= 700

# Filemode, falls unter SGID installiert werden soll:
# Filemode, if you like to install with SGID:
#MODE1	= 2771
#MODE2	= 660
#MODE3	= 770

# Shar:
SHAR	= shar -n UnixChess -o $(NAME) -L 50 -a -c -s ml@brumuc.muc.sub.org

# ----------------- Keine Aenderung ab hier !!! ------------------------
# ----------------- Don't touch the rest !!!    ------------------------

CFLAGS	 = 	$(FLAGS) -DMAIL=\"$(MAIL)\"				\
		-DEXPIRE=$(EXPIRE) -DMOVES=$(MOVES) -DLANG=\"$(LANG)\"

ALLSRCS1 = 	ch/value.c ch/main.c ch/move.c ch/comp.c		\
		ch/utility.c ch/threat.c ch/init.c ch/list.c		\
		ch/archiv.c ch/open.c ch/stat.c

ALLSRCS2 = 	ad/main.c ad/init.c ad/utility.c ad/monitor.c		\
		ad/window.c ad/move.c ad/interrupt.c ad/load.c 		\
		ad/menu.c ad/lock.c ad/admin.c ad/screen.c ad/id.c	\
		ad/score.c ad/training.c ad/tour_user.c			\
		ad/tour_comp.c ad/expire.c ad/setup.c

ALLSRCS3 = 	br/break.c

ALLSRCS  =	$(ALLSRCS1) $(ALLSRCS2) $(ALLSRCS3) 

ALLHDRS	 =	ad/ad.h ch/ch.h ch/ph.h	ad/patchlevel.h

# don't delete the next line !
# op start
ALLOP =	 op/op.albinsgegam op/op.aljechin op/op.b2b4 op/op.benoni  \
	 op/op.bird op/op.budapestgam op/op.caro-kann op/op.damenbaspie  \
	 op/op.damengam op/op.damenind op/op.dreispring op/op.englisch  \
	 op/op.evansgam op/op.franz op/op.gruenfeld op/op.holland  \
	 op/op.indisch op/op.italienisch op/op.katalanisch op/op.koenigsgam  \
	 op/op.koenigsind op/op.laeufer op/op.nimzowitsch op/op.nordgam  \
	 op/op.philidor op/op.ponziani op/op.reti op/op.russisch  \
	 op/op.schottisch op/op.sizilian op/op.skandinav op/op.spanisch  \
	 op/op.ufimzew op/op.ungarische op/op.unregel op/op.vierspring  \
	 op/op.wiener op/op.zweispring  
# op end
# don't delete the previous line !

ALLDEF	=	def.english def.german

ALLARCH =	README.eng README.ger $(ALLSRCS) $(ALLHDRS) ad/lex.l	\
		ad/patchlevel.h $(ALLOP) $(ALLDEF) man Makefile

ALLOBJ1 = 	ch/value.o ch/main.o ch/move.o ch/comp.o		\
		ch/utility.o ch/threat.o ch/init.o ch/list.o		\
		ch/archiv.o ch/open.o ch/stat.o

ALLOBJ2 = 	ad/init.o ad/utility.o ad/monitor.o ad/window.o		\
		ad/move.o ad/interrupt.o ad/load.o ad/menu.o ad/lock.o	\
		ad/admin.o ad/screen.o ad/id.o ad/score.o		\
		ad/training.o ad/tour_user.o ad/tour_comp.o		\
		ad/expire.o ad/lex.o ad/setup.o

ALLOBJ3 =	br/break.o

all:		$(NAME) chbrk chess.op

$(NAME):	$(ALLOBJ1) $(ALLOBJ2) ad/main.o
		-mkdir save
		-mkdir training
		touch  score.list

		$(CC) $(CFLAGS) -o $(NAME) 			\
		$(ALLOBJ1) $(ALLOBJ2) ad/main.o $(LIB) -ll -lm $(LIBSH)
		chmod $(MODE1) $(NAME)

chbrk:		$(ALLOBJ3)
		$(CC) $(CFLAGS) -o chbrk  $(LIBSH)	 	\
		$(ALLOBJ3)
		chmod $(MODE1) chbrk

chess.op:	$(ALLOP) Makefile
		cat $(ALLOP) | grep -v "^#" > chess.op
		chmod $(MODE2) chess.op

lint.out:	$(ALLSRCS1) $(ALLSRCS2)
		lint $(ALLSRCS1) >  lint.out
		lint $(ALLSRCS2) >> lint.out

man.$(MANUAL):	man Makefile def.$(MANLANG)
		egrep '^amenu\[|^smenu\[|^menu\[' def.$(MANLANG)	|\
		sed							 \
		-e 's/\//\\\//g'					 \
		-e 's/^/s\//g'						 \
		-e 's/\"[^"]*$$/\/g/g'					 \
		-e 's/[ 	]*\"./\//g'				 \
		-e 's/\[/\\[/g'						 \
		-e 's/\]/\\]/g'						 \
		> man.tmp

		egrep '^info\[' def.$(MANLANG)				|\
		sed							 \
		-e 's/\//\\\//g'					 \
		-e 's/^/s\//g'						 \
		-e 's/\"[^"]*$$/\/g/g'					 \
		-e 's/[ 	]*\"/\//g'				 \
		-e 's/\[/\\[/g'						 \
		-e 's/\]/\\]/g'						 \
		>> man.tmp

		echo "s/xxxNAME/$(NAME)/g" >> man.tmp
		echo "s/xxxMANUAL/$(MANUAL)/g" >> man.tmp
		echo "s/xxxEXPIRE/$(EXPIRE)/g" >> man.tmp
		echo "s/xxxMOVES/$(MOVES)/g" >> man.tmp

		sed -f man.tmp man > man.$(MANUAL)
		rm -f man.tmp

cat.$(MANUAL):	man.$(MANUAL)
		nroff -man man.$(MANUAL) > cat.$(MANUAL)

install_man:	man.$(MANUAL)
		cp man.$(MANUAL) $(MANDIR)/$(NAME).$(MANUAL)
		chmod 644 $(MANDIR)/$(NAME).$(MANUAL)

install_cat:	cat.$(MANUAL)
		cp cat.$(MANUAL) $(CATDIR)/$(NAME).$(MANUAL)
		chmod 644 $(CATDIR)/$(NAME).$(MANUAL)

install: 	all ad/main2.o
		-mkdir $(BINDIR)
		-mkdir $(LIBDIR)
		chmod $(MODE3) $(LIBDIR)
		-mkdir $(LIBDIR)/save
		chmod $(MODE3) $(LIBDIR)/save
		-mkdir $(LIBDIR)/training
		chmod $(MODE3) $(LIBDIR)/training
	
		$(CC) $(CFLAGS) -o $(BINDIR)/$(NAME) 	 		\
		$(ALLOBJ1) $(ALLOBJ2) ad/main2.o $(LIB) -ll -lm $(LIBSH)
		chmod $(MODE1) $(BINDIR)/$(NAME)

		cp chbrk 	$(LIBDIR)
		chmod $(MODE1) $(LIBDIR)/chbrk

		cp def.*   	$(LIBDIR)
		cp chess.op 	$(LIBDIR)
		chmod $(MODE2) $(LIBDIR)/def.* $(LIBDIR)/chess.op

		touch	$(LIBDIR)/score.list
		chmod $(MODE2) $(LIBDIR)/score.list

		@echo "\n	>>> Welcome to UNIX-Chess ! <<<"

remove:
		-rm -rf $(LIBDIR)/save
		-rm -rf $(LIBDIR)/training
		-rm -f  $(BINDIR)/$(NAME)
		-rm -f  $(LIBDIR)/chbrk
		-rm -f  $(LIBDIR)/def.*
		-rm -f  $(LIBDIR)/chess.op
		-rm -f  $(LIBDIR)/error.op
		-rm -f  $(LIBDIR)/score.list
		-rm -f  $(MANDIR)/$(NAME).$(MANUAL)
		-rm -f  $(CATDIR)/$(NAME).$(MANUAL)

dist:		$(ALLARCH)
		$(SHAR) $(ALLARCH)

chess.arc:	$(ALLARCH)
		-rm -f chess.arc
		arc -a chess.arc $(ALLARCH)
		
chess.zoo:	$(ALLARCH)
		-rm -f chess.zoo
		zoo -add chess.zoo $(ALLARCH)
		
chess.tar:	$(ALLARCH)
		tar cvf chess.tar $(ALLARCH)
		
chess.tar.Z:	chess.tar
		@if test -r chess.tar.Z 				;\
		then 							 \
			rm -f chess.tar.Z				;\
		fi
		compress chess.tar

listing:	$(ALLSRCS) $(ALLHDRS)
		cpr -Xp9w83 $(ALLSRCS) $(ALLHDRS) > listing

clean:
		-rm -f ad/*.o
		-rm -f ch/*.o
		-rm -f br/*.o

clobber:	clean
		-rm -f $(NAME)
		-rm -f $(NAME).??
		-rm -f chbrk
		-rm -f ad/main2.c
		-rm -f chess.op
		-rm -f error.op
		-rm -f lint.out
		-rm -f man.$(MANUAL)
		-rm -f cat.$(MANUAL)
		-rm -f core
		-rm -f mon.out
		-rm -f lint.out
		-rm -f listing
		-rm -f *.bak
		-rm -f *.shar
		-rm -f score.list
		-rm -r -f training
		-rm -r -f save

ad/main2.c:	ad/main.c
		ln ad/main.c ad/main2.c

ad/main2.o:	ad/main2.c
		$(CC) $(CFLAGS) -DWORKDIR=\"$(LIBDIR)\" -c ad/main2.c
		mv main2.o ad

#	Build a list of all op.* files
oplist: Makefile op
	@echo 'make oplist is running on the following files: '
	@echo op/op.*
	@-rm -f op.tmp

	@for i in op/op.* ; do						 \
		echo $$i >> op.tmp ;					 \
	done

	@cp Makefile Makefile.bak
	@echo 'ed - Makefile <<\ EOF' > oplist
	@echo '/op start/a' >> oplist

	@awk			 					 \
	'BEGIN { ORS=" " ; i= -1 ; j=1 ; print "ALLOP =	" }		 \
	 i++ >= 3 { i=0 ; ORS="\n" ; print " \\" ; ORS=" " ;		 \
	 j++ ; print "	" }						 \
	 { print $$1 }							 \
	 END { print "" }' op.tmp >> oplist

	@echo '' >> oplist
	@echo '.' >> oplist
	@echo '.+1,/op end/-1d' >> oplist
	@echo 'w' >> oplist
	@echo 'q' >> oplist
	@echo 'EOF' >> oplist

	@sh oplist

	-rm -f op.tmp oplist

#	Build a list of .h file dependencies.
depend:
	@echo 'make depend is running on the following files: '
	@echo $(ALLSRCS)
	@rm -f makedep eddep
	@for i in $(ALLSRCS);					       do\
		$(CC) -E $(CFLAGS) $$i					|\
		grep '^#'						|\
		awk '{ print $$3 }'					|\
		grep '^"'						|\
		grep -v "/usr/include"					|\
		sed -e 's|/[^/]*/\.\.||g' -e 's|"||g'			|\
		sort -u							|\
		awk "BEGIN { of = \"`basename $$i .c`\" \".o: \"; rec = of } \
		  { rec = rec \" \" \$$0 }				     \
		  END { print \"`dirname $$i`/\" rec ; 			     \
	  	  print \"	$$(CC) $$(CFLAGS) -c $$i\" ;		     \
	  	  print \"	mv `basename $$i .c`.o `dirname $$i`\" }"    \
		  >> makedep ;						     \
	done
	@echo '$$r makedep' >>eddep
	@echo '/^# DO NOT DELETE THIS LINE/+1,$$d' >>eddep
	@echo '$$r makedep' >>eddep
	@echo 'w' >>eddep
	@cp Makefile Makefile.bak
	@ed - Makefile < eddep
	@rm -f eddep makedep

# DO NOT DELETE THIS LINE -- make depend uses it
ch/value.o:  ch/ch.h ch/ph.h ch/value.c
	$(CC) $(CFLAGS) -c ch/value.c
	mv value.o ch
ch/main.o:  ch/ch.h ch/main.c
	$(CC) $(CFLAGS) -c ch/main.c
	mv main.o ch
ch/move.o:  ch/ch.h ch/move.c
	$(CC) $(CFLAGS) -c ch/move.c
	mv move.o ch
ch/comp.o:  ch/ch.h ch/comp.c
	$(CC) $(CFLAGS) -c ch/comp.c
	mv comp.o ch
ch/utility.o:  ch/ch.h ch/utility.c
	$(CC) $(CFLAGS) -c ch/utility.c
	mv utility.o ch
ch/threat.o:  ch/ch.h ch/threat.c
	$(CC) $(CFLAGS) -c ch/threat.c
	mv threat.o ch
ch/init.o:  ch/ch.h ch/init.c
	$(CC) $(CFLAGS) -c ch/init.c
	mv init.o ch
ch/list.o:  ch/ch.h ch/list.c
	$(CC) $(CFLAGS) -c ch/list.c
	mv list.o ch
ch/archiv.o:  ch/archiv.c ch/ch.h
	$(CC) $(CFLAGS) -c ch/archiv.c
	mv archiv.o ch
ch/open.o:  ch/ch.h ch/open.c ch/ph.h
	$(CC) $(CFLAGS) -c ch/open.c
	mv open.o ch
ch/stat.o:  ch/ch.h ch/ph.h ch/stat.c
	$(CC) $(CFLAGS) -c ch/stat.c
	mv stat.o ch
ad/main.o:  ad/ad.h ad/main.c
	$(CC) $(CFLAGS) -c ad/main.c
	mv main.o ad
ad/init.o:  ad/ad.h ad/init.c
	$(CC) $(CFLAGS) -c ad/init.c
	mv init.o ad
ad/utility.o:  ad/ad.h ad/utility.c
	$(CC) $(CFLAGS) -c ad/utility.c
	mv utility.o ad
ad/monitor.o:  ad/ad.h ad/monitor.c
	$(CC) $(CFLAGS) -c ad/monitor.c
	mv monitor.o ad
ad/window.o:  ad/ad.h ad/window.c
	$(CC) $(CFLAGS) -c ad/window.c
	mv window.o ad
ad/move.o:  ad/ad.h ad/move.c
	$(CC) $(CFLAGS) -c ad/move.c
	mv move.o ad
ad/interrupt.o:  ad/ad.h ad/interrupt.c
	$(CC) $(CFLAGS) -c ad/interrupt.c
	mv interrupt.o ad
ad/load.o:  ad/ad.h ad/load.c
	$(CC) $(CFLAGS) -c ad/load.c
	mv load.o ad
ad/menu.o:  ad/ad.h ad/menu.c
	$(CC) $(CFLAGS) -c ad/menu.c
	mv menu.o ad
ad/lock.o:  ad/ad.h ad/lock.c
	$(CC) $(CFLAGS) -c ad/lock.c
	mv lock.o ad
ad/admin.o:  ad/ad.h ad/admin.c
	$(CC) $(CFLAGS) -c ad/admin.c
	mv admin.o ad
ad/screen.o:  ad/ad.h ad/patchlevel.h ad/screen.c
	$(CC) $(CFLAGS) -c ad/screen.c
	mv screen.o ad
ad/id.o:  ad/ad.h ad/id.c
	$(CC) $(CFLAGS) -c ad/id.c
	mv id.o ad
ad/score.o:  ad/ad.h ad/score.c
	$(CC) $(CFLAGS) -c ad/score.c
	mv score.o ad
ad/training.o:  ad/ad.h ad/training.c
	$(CC) $(CFLAGS) -c ad/training.c
	mv training.o ad
ad/tour_user.o:  ad/ad.h ad/tour_user.c
	$(CC) $(CFLAGS) -c ad/tour_user.c
	mv tour_user.o ad
ad/tour_comp.o:  ad/ad.h ad/tour_comp.c
	$(CC) $(CFLAGS) -c ad/tour_comp.c
	mv tour_comp.o ad
ad/expire.o:  ad/ad.h ad/expire.c
	$(CC) $(CFLAGS) -c ad/expire.c
	mv expire.o ad
ad/setup.o:  ad/ad.h ad/setup.c
	$(CC) $(CFLAGS) -c ad/setup.c
	mv setup.o ad
br/break.o:  br/break.c
	$(CC) $(CFLAGS) -c br/break.c
	mv break.o br
