#
# Makefile.in for GNU Chess
# Run ./configure to generate a Makefile from Makefile.in
# See INSTALL for more information
#
# Copyright (c) 1992, 1995 Free Software Foundation
#
# This file is part of GNU CHESS.
#
# GNU Chess is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Chess 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Chess; see the file COPYING.  If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#

PRODUCT = gnuchess
VERSION = 4.0
PATCHLEVEL = 75

SHELL = /bin/sh
srcdir = @srcdir@
VPATH = @srcdir@

#############  Some definitions for Gnuchess  ###############
#  In general, you should leave all these things alone.

LIBDIR = .

BOOK=../book/gnuchess.bk3.gz

# The language file describes capabilities of the program. Perhaps
# it is useful for non-English speaking countries and customizing
# for their convenience and chess happiness.
LANGF= -DLANGFILE=\"$(LIBDIR)/gnuchess.lang\"

# The hashfile is a record of positions seen. It is used by
# GNU Chess to avoid making the same mistakes, a form of learning.
HASH=	-DHASHFILE=\"$(LIBDIR)/gnuchess.hash\"

# The "book" is a record of the first few moves, for playing good
# moves easily and quickly, saving time, and irritating the human
# opponent.
BINBOOK = -DBINBOOK=\"$(LIBDIR)/gnuchess.data\"
BINECO = -DBINECO=\"$(LIBDIR)/gnuchess.eco\"
PGNECO = -D\PGNECO=\"$(LIBDIR)/eco.pgn\"

#BOOKOPTS = -S 188000 -P 26     # huge 1450K
#BOOKOPTS = -S 45000 -P 16      # big 540K
#BOOKOPTS = -S 20000 -P 12      # medium 240K
BOOKOPTS = -S 12000 -P 10       # small 144K
#BOOKOPTS = -S 9000 -P 8        # tiny 78K

#compile options for gnuchess
#    Search options
# -DHISTORY use history heuristic 
# -DKILLT use killt killer heuristic 
# -DNULLMOVE include null move heuristic
# -DDEEPNULL include deepnull move heuristic
# -DUNLIMITEDCAPS allow unlimited depth captures
# -DPRUNE enable marginal forward pruning
# -DNOMATERIAL don't call it a draw when no pawns and both sides < rook
# -DNODYNALPHA don't dynamically adjust alpha
# -DOLDTIME use old ply time estimating function
# -DCACHE  Cache static evaluations 
# -DNODITHER no random element to evaluations
#
#    Verbosity options
# -DBAREBONES compile for max speed no statistics etc kept
# -DQUIETBACKGROUND don't print post information in background ( easy OFF)
# -DHASHSTATS keep hash table statistics
# -DMORESTATS print more hash table stats
# -DQUIETBOOKGEN Don't print errors while loading a book or generating a binbook
# -DSEMIQUIETBOOKGEN Print less verbose errors while reading book or generating binbook
#
#    Miscellaneous options
# -DECO if you want support for eco database
# -DCLIENT create client version for use with ICS
# -DLONG64 if you have 64bit longs
# -DSYSV   if you are using SYSV
#
#    Some debug options
# -DDEBUG8 dump board,movelist,input move to /tmp/DEBUG if illegal move
# -DDEBUG9 dump move list from test command
# -DDEBUG10 dump board and move after search before !easy begins
# -DDEBUG11 dump board when the move is output
# -DDEBUG12 dump boards between moves
# -DDEBUG13 dump search control information for each move to /tmp/DEBUG
# -DDEBUG33 dump book moves as read from book
# -DDEBUG40 include extra values of variables for debugging  in game list
# -DDEBUG41 dump post output to /tmp/DEBUG
# the rest of the debug options are tied to the debuglevel command
# -DDEBUG sets up code for debuglevel command
#          debuglevel
#               1 always force evaluation in evaluate
#               4 print move list after search
#               8 print move list after book before search
#              16 print move list after each ply of search
#              32 print adds to transposition table
#              64 print returns from transposition table lookups
#	      128 print evals
#	      256 print search tree as it is generated
#	      512 debug trace of search tree
#	     1024 interactive tree print
#

###############  End of Gnuchess definitions ######################

CC = @CC@
DEFINES = @DEFS@ -DUSEINT -DCACHE -DGDX -DNULLMOVE -DWAY4PL64 -DHISTORY \
	-DAGING -DKILLT -DUNLIMITEDCAPS -DPRUNE -DOLDTIME -DECO -DHASHSTATS
CFLAGS = -O2 -Wall $(DEFINES)
ALL_CFLAGS = -I$(srcdir) $(CFLAGS)
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
LDFLAGS = @LDFLAGS@
ALL_LDFLAGS = $(LDFLAGS)
LIBS = @LIBS@ -lm

prefix = @prefix@
exec_prefix = @exec_prefix@
BINDIR = $(exec_prefix)/bin
MANDIR = $(prefix)/man/man6
MANEXT = .6

DISTSOURCE = Makefile.ddj Makefile.dos Makefile.in Makefile.nt README ataks.c ataks.h \
	binsort.c binsort.h book.c configure configure.in debug10.h \
	debug13.h debug16.h debug256.h debug4.h debug40.h debug41.h \
	debug64.h debug8.h dspcom.c eco.c ecocvt.c eval.c game.c \
	genmoves.c gnuan.c gnuchess.h init.c main.c nondsp.c nuxdsp.c \
	postprint.c search.c ttable.c ttable.h util.c uxdsp.c version.h \
	INSTALL install-sh debug512.h ecosort.c


DISTDIR = $(PRODUCT)-$(VERSION).pl$(PATCHLEVEL)

### Targets required by GNU standards #######################################

all: gnuchess gnuchessr gnuchessn gnuchessx gnuchessc postprint gnuan game gnuchess.eco gnuchess.data

install: 
	$(INSTALL) gnuchess $(BINDIR)/gnuchess	
	$(INSTALL) gnuchessr $(BINDIR)/gnuchessr
	$(INSTALL) gnuchessn $(BINDIR)/gnuchessn
	$(INSTALL) gnuchessx $(BINDIR)/gnuchessx
	$(INSTALL) gnuchessc $(BINDIR)/gnuchessc
	$(INSTALL) postprint $(BINDIR)/postprint
	$(INSTALL) gnuan $(BINDIR)/gnuan
	$(INSTALL) game $(BINDIR)/game
	$(INSTALL) ../misc/gnuchess.lang $(LIBDIR)/gnuchess.lang
	$(INSTALL) ../book/eco.pgn $(LIBDIR)/eco.pgn
	$(INSTALL) gnuchess.data $(LIBDIR)/gnuchess.data
	$(INSTALL) gnuchess.eco $(LIBDIR)/gnuchess.eco
	$(INSTALL_DATA) ../doc/game.6 $(MANDIR)/game.6
	$(INSTALL_DATA) ../doc/gnuan.6 $(MANDIR)/gnuan.6
	$(INSTALL_DATA) ../doc/gnuchess.6 $(MANDIR)/gnuchess.6
	$(INSTALL_DATA) ../doc/postprint.6 $(MANDIR)/postprint.6

uninstall:
	rm -f $(BINDIR)/gnuchess
	rm -f $(BINDIR)/gnuchessr
	rm -f $(BINDIR)/gnuchessn
	rm -f $(BINDIR)/gnuchessx
	rm -f $(BINDIR)/gnuchessc
	rm -f $(BINDIR)/postprint
	rm -f $(BINDIR)/gnuan
	rm -f $(BINDIR)/game
	rm -f $(LIBDIR)/gnuchess.lang
	rm -f $(LIBDIR)/eco.pgn
	rm -f $(LIBDIR)/gnuchess.data
	rm -f $(LIBDIR)/gnuchess.eco
	rm -f $(MANDIR)/game.6
	rm -f $(MANDIR)/gnuan.6
	rm -f $(MANDIR)/gnuchess.6
	rm -f $(MANDIR)/postprint.6

clean:
	rm -f gnuchess gnuchess? postprint gnuan game ecor ecocvt ecosort
	rm *.o #*# *~ CL* PATCH* %*% *orig

distclean: clean tidy
	rm -f config.cache config.log config.status Makefile

mostlyclean: clean

realclean: distclean

TAGS:
	etags *.c *.h

info:
	@echo Sorry, gnuchess is documented by a man page, not a texinfo file.

dvi:
	@echo Sorry, gnuchess is documented by a man page, not a texinfo file.

dist:	
	mkdir $(DISTDIR)
	mkdir $(DISTDIR)/src
	cp -r ../misc $(DISTDIR)
	cp -r ../book $(DISTDIR)
	cp -r ../test $(DISTDIR)
	cp -r ../doc $(DISTDIR)
	cp $(DISTSOURCE) $(DISTDIR)/src
	-rm -f $(DISTDIR).tar.gz
	tar cvf $(DISTDIR).tar $(DISTDIR)
	gzip $(DISTDIR).tar
	rm -rf $(DISTDIR)

check: all

### End targets required by GNU standards ###################################

Makefile: Makefile.in config.status
	./config.status
     
config.status: configure
	./config.status --recheck
gnuchess: mainN.o bookN.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomN.o uxdsp.o
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -o gnuchess mainN.o bookN.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomN.o uxdsp.o $(LCURSES) $(LIBS)

gnuan: mainN.o bookG.o genmovesN.o ataks.o utilN.o evalN.o init.o searchG.o gnuan.o
	$(CC) $(CFLAGS) $(HASH) $(LANGF) -DIGNUAN  -o gnuan mainN.o bookG.o genmovesN.o ataks.o utilN.o evalN.o init.o searchG.o gnuan.o $(LIBS)

gnuchessc: mainC.o bookC.o genmovesC.o ataks.o utilC.o evalC.o init.o searchC.o dspcomC.o nondspC.o
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -o gnuchessc mainC.o bookC.o genmovesC.o ataks.o utilC.o evalC.o init.o searchC.o dspcomC.o nondspC.o $(LIBS)

Dgnuchessr: mainDR.o bookN.o genmovesN.o ataks.o utilDR.o evalDR.o init.o searchDR.o dspcomDR.o nondspDR.o
	$(CC)  -DDEBUG  -DDEBUG4 $(CFLAGS) $(HASH) $(LANGF)  -o gnuchessr mainDR.o bookN.o genmovesN.o ataks.o utilDR.o evalDR.o init.o searchDR.o dspcomDR.o nondspDR.o $(LIBS) $(LIBS)

gnuchessx: mainX.o bookX.o genmovesX.o ataks.o utilX.o evalX.o init.o searchX.o dspcomX.o nondspX.o
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -o gnuchessx mainX.o bookX.o genmovesX.o ataks.o utilX.o evalX.o init.o searchX.o dspcomX.o nondspX.o $(LIBS)

ecor: mainN.o eco.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomR.o nondspR.o
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -o ecor mainN.o eco.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomR.o nondspR.o $(LIBS)

gnuchessr: mainN.o bookN.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomR.o nondspR.o
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -o gnuchessr mainN.o bookN.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomR.o nondspR.o $(LIBS)

gnuchessn: mainN.o bookN.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomN.o nuxdsp.o
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -o gnuchessn mainN.o bookN.o genmovesN.o ataks.o utilN.o evalN.o init.o searchN.o dspcomN.o nuxdsp.o $(LCURSES) $(LIBS)

game: game.c gnuchess.h
	$(CC) $(CFLAGS) -o game game.c
	
postprint: postprint.o
	$(CC) $(CFLAGS) $(HASH) -o postprint postprint.o
	
gnuan.o: gnuan.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF) -DIGNUAN $(BINBOOK) -c gnuan.c

mainN.o: main.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  $(BINBOOK) -c main.c
	mv main.o mainN.o
mainC.o: main.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  $(BINBOOK) -DNONDSP -DCHESSTOOL \
		-c main.c
	mv main.o mainC.o
mainX.o: main.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  $(BINBOOK) -DXBOARD  -c main.c
	mv main.o mainX.o
mainDR.o: main.c gnuchess.h version.h ttable.h
	$(CC)  -DDEBUG -DDEBUG4 $(CFLAGS) $(HASH) $(LANGF)  $(BINBOOK) \
		-c main.c
	mv main.o mainDR.o

genmovesN.o: genmoves.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c genmoves.c
	mv genmoves.o genmovesN.o
genmovesC.o: genmoves.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP -DCHESSTOOL \
		-c genmoves.c 
	mv genmoves.o genmovesC.o
genmovesX.o: genmoves.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DXBOARD \
		-c genmoves.c
	mv genmoves.o  genmovesX.o

eco.o: eco.c gnuchess.h version.h ataks.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  $(BINBOOK) $(BINECO)  $(PGNECO) -c eco.c 

bookN.o: book.c gnuchess.h version.h ataks.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  $(BINBOOK) $(PGNECO) $(BINECO) -c book.c 
	mv book.o bookN.o
bookG.o: book.c gnuchess.h version.h ataks.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  $(BINBOOK) $(PGNECO) $(BINECO) -DIGNUAN  -c book.c 
	mv book.o bookG.o
bookC.o: book.c gnuchess.h version.h ataks.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP -DCHESSTOOL \
	      $(BINBOOK) \
		$(PGNECO) $(BINECO) -c book.c 
	mv book.o bookC.o
bookX.o: book.c gnuchess.h version.h ataks.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DXBOARD  $(BINBOOK) \
		$(PGNECO) $(BINECO) -c book.c
	mv book.o  bookX.o

ataks.o: ataks.h ataks.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c ataks.c

utilN.o: util.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c util.c
	mv util.o utilN.o

utilX.o: util.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)   \
		 -c util.c
	mv util.o  utilX.o

utilC.o: util.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)   \
		 -c util.c
	mv util.o  utilC.o

evalC.o: eval.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)   -c eval.c
	mv eval.o evalC.o

evalX.o: eval.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)   -c eval.c
	mv eval.o evalX.o

evalN.o: eval.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c eval.c
	mv eval.o evalN.o

evalDR.o: eval.c gnuchess.h version.h ttable.h
	$(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANGF)  \
		-c eval.c 
	mv eval.o evalDR.o
utilDR.o: util.c gnuchess.h version.h
	$(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANGF)  \
		-c util.c 
	mv util.o utilDR.o

init.o: init.c gnuchess.h version.h ttable.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c init.c

searchN.o: search.c gnuchess.h version.h debug512.h debug10.h debug13.h debug16.h debug256.h debug4.h debug40.h debug41.h debug64.h debug8.h ttable.h ttable.c
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c search.c
	mv search.o searchN.o
searchG.o: search.c gnuchess.h version.h debug512.h debug10.h debug13.h debug16.h debug256.h debug4.h debug40.h debug41.h debug64.h debug8.h ttable.h ttable.c
	$(CC) $(CFLAGS) $(HASH) $(LANGF) -DIGNUAN  -c search.c
	mv search.o searchG.o
searchC.o: search.c gnuchess.h version.h debug512.h debug10.h debug13.h debug16.h debug256.h debug4.h debug40.h debug41.h debug64.h debug8.h ttable.h ttable.c
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP -DCHESSTOOL \
		-c search.c 
	mv search.o searchC.o
searchX.o: search.c gnuchess.h version.h debug512.h debug10.h debug13.h debug16.h debug256.h debug4.h debug40.h debug41.h debug64.h debug8.h ttable.h ttable.c
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DXBOARD \
		-c search.c 
	mv search.o searchX.o
searchDR.o: search.c gnuchess.h version.h debug512.h debug10.h debug13.h debug16.h debug256.h debug4.h debug40.h debug41.h debug64.h debug8.h ttable.h ttable.c
	$(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANGF)  \
		-c search.c 
	mv search.o searchDR.o

uxdsp.o: uxdsp.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c uxdsp.c

nuxdsp.o: nuxdsp.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c nuxdsp.c

nondspC.o: nondsp.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP -DCHESSTOOL \
		-c nondsp.c 
	mv nondsp.o nondspC.o
nondspX.o: nondsp.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP -DXBOARD \
		-c nondsp.c 
	mv nondsp.o nondspX.o
nondspR.o: nondsp.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP \
		-c nondsp.c 
	mv nondsp.o nondspR.o
nondspDR.o: nondsp.c gnuchess.h version.h
	$(CC)  -DDEBUG4 -DDEBUG $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP \
		 -c nondsp.c 
	mv nondsp.o nondspDR.o

dspcomN.o: dspcom.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -c dspcom.c
	mv dspcom.o dspcomN.o
dspcomC.o: dspcom.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP -DCHESSTOOL \
		-c dspcom.c 
	mv dspcom.o dspcomC.o
dspcomX.o: dspcom.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP -DXBOARD \
		-c dspcom.c 
	mv dspcom.o dspcomX.o
dspcomR.o: dspcom.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP \
		-c dspcom.c 
	mv dspcom.o dspcomR.o
dspcomDR.o: dspcom.c gnuchess.h version.h
	$(CC)  -DDEBUG -DDEBUG4 $(CFLAGS) $(HASH) $(LANGF)  -DNONDSP \
		-c dspcom.c 
	mv dspcom.o dspcomDR.o

postprint.o: postprint.c gnuchess.h version.h
	$(CC) $(CFLAGS) $(HASH) -c postprint.c

binsort: binsort.c binsort.h
	$(CC) $(CFLAGS) -o binsort binsort.c

ecosort: ecosort.c gnuchess.h
	$(CC) $(CFLAGS) -o ecosort ecosort.c

ecocvt:	ecocvt.c
	$(CC) $(CFLAGS) -o ecocvt ecocvt.c

gnuchess.data: $(BOOK)
	-rm gnuchess.data
	echo 3 0 >test;echo quit >>test
	gzip -d -c  $(BOOK) > ./t
	cat test| ./gnuchessr -b ./t  -B gnuchess.data $(BOOKOPTS)
	rm test ./t

gnuchess.eco:	ecor binsort ecocvt ecosort
	-rm -f gnuchess.eco step1.eco step2.eco
	-echo 0 0 > step0.eco
	-./ecor -b ../book/eco.pgn -B step1.eco < step0.eco
	./ecosort 
	-./ecocvt step2.eco gnuchess.eco
	-rm -f step0.eco step1.eco step2.eco
	
check: gnuchessr ../test/testall
	cat ../test/testall | gnuchessr > test.out 2>&1

../test/testall:
	(cd ../test; zcat test.tar.gz | tar -xvf -)

bigcheck: gnuchessr ../test/testall
	cat ../test/gnutest.run | gnuchessr > gnutest.out 2>&1
