#
# Makefile for GNU Shogi
#
# Copyright (c) 1993, 1994 Matthias Mutz
# Copyright (c) 1998, 1999 Michael Vanier and the Free Software Foundation
# Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation
#
# GNU Shogi is based on GNU Chess
# Copyright (c) 1992 Free Software Foundation
#
# This file is part of GNU Shogi.
#
# GNU Shogi 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 3 of the License, or (at your option)
# any later version.
#
# GNU Shogi 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 Shogi; see the file COPYING.
# If not, see <http://www.gnu.org/licenses/>.
#

#
# gnushogi   is GNU shogi, for raw text, curses, or x output.
# gnuminishogi is GNU minishogi, for raw text, curses, or x output.
# pat2inc    converts pattern textfile to "pattern.inc" include file.
# sizetest   shows the memory usage of the main data structures.
#

SHELL           = /bin/sh
INSTALL         = /usr/bin/install -c
INSTALL_DATA    = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
ROOT            = ..
SRCDIR		= ../gnushogi

VPATH=$(SRCDIR)

PROGNAME=gnushogi

# Installation directory.
prefix  =   /usr/local

# Where the binaries live.
BINDIR  =   $(prefix)/bin

# Where the language description, the book, and the 
# persistent hashtable live.
LIBDIR  =   $(prefix)/lib/$(PROGNAME)

# Where the man page goes.
MANDIR  = $(prefix)/man/man6

# Where the info file goes.
INFODIR = $(prefix)/info

# For _pow external 
#LIBS    = -lm

# Display routines.
LCURSES = 


#
# C compiler and compiler options.
#

CC          = gcc
CWARNINGS   = -Wall -Wno-implicit-int -Wstrict-prototypes -ansi -pedantic
CEXTRAFLAGS = 
CFLAGS      = -g -O2 -mno-cygwin -fsigned-char -funroll-loops $(HASH) $(CEXTRAFLAGS) $(CWARNINGS) -I. -I. -I$(ROOT)
LDFLAGS     = 

# The hashfile is a record of positions seen. It is used by
# GNU Shogi to avoid making the same mistakes, a form of learning.

HASH       = -DHASHFILE=\"$(LIBDIR)/$(PROGNAME).hsh\"


# The "book" is a record of the first few moves, for playing good
# moves easily and quickly, saving time, and irritating the human
# opponent.

TEXTBOOK   = -DBOOK=\"$(LIBDIR)/$(PROGNAME).tbk\"
BINBOOK    = -DBINBOOK=\"$(LIBDIR)/$(PROGNAME).bbk\"


# The pattern file contains various opening patterns. The program tries to
# obtain such a pattern in the opening stage. Sequences of opening
# patterns may be described in order to support the correct order of moves.

PATTERNFILE=$(ROOT)/misc/$(PROGNAME).pat
PATTERN    = -DPATTERNFILE=\"$(PATTERNFILE)\"


all:
	@echo No target specified.


#
# Source files.
#

COMMONFILES = \
                globals.o      \
                init-common.o    \
                pattern-common.o

NOTCOMMONFILES = \
                attacks.o      \
                book.o         \
                commondsp.o    \
                    \
                dspwrappers.o  \
                eval.o         \
                genmove.o      \
                init.o         \
                pattern.o      \
                rawdsp.o       \
                search.o       \
                tcontrl.o      \
                util.o

GNUSHOGI_FILES  = $(COMMONFILES) $(NOTCOMMONFILES) main.o


PAT2INCFILES    = $(COMMONFILES) makepattern.o pat2inc.o


#
# Primary targets.
#

$(PROGNAME):
	$(CC) $(CFLAGS) -o $(PROGNAME) $(GNUSHOGI_FILES) $(LDFLAGS) $(LCURSES) $(LIBS)

pat2inc:
	$(CC) $(CFLAGS) -o pat2inc $(PAT2INCFILES) $(LDFLAGS) $(LCURSES) $(LIBS)

sizetest:
	$(CC) $(CFLAGS) -o sizetest sizetest.o $(LDFLAGS) $(LIBS)

profile:
	$(MAKE) -f Makefile.profile gnushogi

#
# Object files.
#

# Common files.

attacks.o: attacks.c
	$(CC) $(CFLAGS) -c $<

book.o: book.c
	$(CC) $(CFLAGS) $(TEXTBOOK) $(BINBOOK) -c $<

commondsp.o: commondsp.c
	$(CC) $(CFLAGS) -c $<

cursesdsp.o: cursesdsp.c
	$(CC) $(CFLAGS) -c $<

dspwrappers.o: dspwrappers.c
	$(CC) $(CFLAGS) -c $<

genmove.o: genmove.c
	$(CC) $(CFLAGS) -c $<

globals.o: globals.c
	$(CC) $(CFLAGS) -c $<

eval.o: eval.c
	$(CC) $(CFLAGS) -c $<

init.o: init.c
	$(CC)  $(CFLAGS) -c $<

init-common.o: init-common.c
	$(CC)  $(CFLAGS) $(LANGF) -c $<

main.o: main.c
	$(CC) $(CFLAGS) $(BINBOOK) -c $<

# To create "pattern.inc" with "pat2inc", the external
# pattern textfile must be used.

makepattern.o: makepattern.c
	$(CC) $(CFLAGS) $(PATTERN) -c $<

pattern.o: pattern.c
	$(CC)  $(CFLAGS) -c $<

pattern-common.o: pattern-common.c
	$(CC)  $(CFLAGS) -c $<

rawdsp.o: rawdsp.c
	$(CC) $(CFLAGS) -c $<

search.o: search.c
	$(CC) $(CFLAGS) -c $<

tcontrl.o: tcontrl.c
	$(CC) $(CFLAGS) -c $<

util.o: util.c
	$(CC) $(CFLAGS) -c $<


# Files specific to particular targets.

pat2inc.o: pat2inc.c
	$(CC) $(CFLAGS) -c $<

sizetest.o: sizetest.c
	$(CC) $(CFLAGS) -c $<

pattern.inc: $(PATTERNFILE) pat2inc
	./pat2inc

#
# Other targets.
#

$(PROGNAME).bbk:
	@if [ -f ./$(PROGNAME).bbk ]; then rm ./$(PROGNAME).bbk; fi
	echo quit > test
	cat $(ROOT)/misc/$(PROGNAME).tbk > _tmp_t
	cat test | ./$(PROGNAME) -R -b _tmp_t -B ./$(PROGNAME).bbk -S 8000 -P 40 3 0
	rm test _tmp_t
	@echo


#
# Installation.
#

install: $(PROGNAME)
	strip $(PROGNAME)
	$(INSTALL_PROGRAM) -d $(BINDIR)
	$(INSTALL_PROGRAM) -d $(LIBDIR)
	$(INSTALL_PROGRAM) -d $(MANDIR)
	$(INSTALL_PROGRAM) -d $(INFODIR)
	$(INSTALL_PROGRAM) $(PROGNAME) $(BINDIR)
	$(INSTALL_DATA)    $(ROOT)/doc/gnushogi.6     $(MANDIR)
	$(INSTALL_DATA)    $(ROOT)/doc/gnushogi.info* $(INFODIR)
	$(INSTALL_DATA)    $(PROGNAME).bbk $(LIBDIR)/$(PROGNAME).bbk


#
# Cleanup.
#

CLEANFILES = *.o gnushogi gnuminishogi sizetest pat2inc CLp* *.bbk

clean: 
	@for file in $(CLEANFILES); do \
	if [ -f $$file ]; then rm $$file; fi; \
	done


#
# Dependencies.
#

$(PROGNAME):   $(GNUSHOGI_FILES)
pat2inc:       $(PAT2INCFILES)
sizetest:      sizetest.o 
attacks.o:     attacks.c gnushogi.h
book.o:        book.c gnushogi.h
commondsp.o:   commondsp.c gnushogi.h
cursesdsp.o:   cursesdsp.c gnushogi.h
dspwrappers.o: dspwrappers.c gnushogi.h
genmove.o:     genmove.c gnushogi.h
globals.o:     globals.c gnushogi.h
eval.o:        eval.c eval.h gnushogi.h $(SRCDIR)/pattern.h
init.o:        init.c gnushogi.h $(SRCDIR)/pattern.h
main.o:        main.c gnushogi.h
makepattern.o: pattern.c gnushogi.h $(SRCDIR)/pattern.h
pattern.o:     pattern.c gnushogi.h $(SRCDIR)/pattern.h pattern.inc
rawdsp.o:      rawdsp.c gnushogi.h
search.o:      search.c gnushogi.h
tcontrl.o:     tcontrl.c gnushogi.h
util.o:        util.c gnushogi.h
pat2inc.o:     pat2inc.c $(SRCDIR)/pattern.h $(SRCDIR)/gnushogi.h
sizetest.o:    sizetest.c $(SRCDIR)/gnushogi.h $(SRCDIR)/eval.h
$(PROGNAME).bbk:  $(PROGNAME)

