###############################################################################
#
# Makefile for CIS*4750 Course Project source directory (src)
#
# Author: Daniel F. Dickinson <danielfdickinson@yahoo.ca>
#
# 'make all' compiles the Java source (putting the .class files in $(OBJDIR),
#	and creates the binary directory $(BINDIR) and all required symbolic 
# 	links to create the desired executables.  
#
# 'make bin' creates the binary directory $(BINDIR) and all required symbolic
#	links to create the desired executables.
#
# 'make obj' just compiles the Java source code (putting the .class files in
#	$(OBJDIR)
#
# 'make clean' removes $(BINDIR) $(OBJDIR) and all backup files in the current
#	directory.
#
###############################################################################

# The flags to use when compiling Java source code
JFLAGS = -d ../obj -classpath ../obj:. -g

# The java compiler
JAVAC = javac

# The object (.class) file directory
OBJDIR = ../obj

# The binary (executable) file directory
BINDIR = ../bin

# Modules required by all the constraint satisfaction problem solvers in this
# directory
SOLVER_BASE = $(OBJDIR)/Main.class \
              $(OBJDIR)/Problem.class \
              $(OBJDIR)/Debug.class

# The pattern rule that tell make how to make .class files in the absence of a
# specific rule
$(OBJDIR)/%.class : %.java
	install -d $(OBJDIR)
	$(JAVAC) $(JFLAGS) $<

SCRIPTS = \
          create-s-k-cases \
          create-z-k-cases \
          create-z-tr-cases \
          create-s-tr-cases \
          do_time.sh \
          run-generate.sh \
          run-solver.sh \
          solve-cases \
          solve-special-cases \
          test-gen.sh \
          README

SOLVER_EXES = Arc \
       BM_CBJ2 \
       BM_CBJ2_NoArc \
       DoubleX \
       Mutate \
       Xover 

CREATE_EXES = \
       GenStrongKProblem \
       GenTotalRand

OBJ_FILES = \
      $(OBJDIR)/Arc.class \
      $(OBJDIR)/BM_CBJ2.class \
      $(OBJDIR)/GenStrongKProblem.class \
      $(OBJDIR)/BM_CBJ2_NoArc.class \
      $(OBJDIR)/Mutate.class \
      $(OBJDIR)/Xover.class \
      $(OBJDIR)/DoubleX.class \
      $(OBJDIR)/GenTotalRand.class 

all : $(SCRIPTS) $(OBJ_FILES)
	make bin

obj : $(OBJ_FILES)

bin : $(SCRIPTS) $(OBJ_FILES)
	install -d $(BINDIR)
	install $(SCRIPTS) $(BINDIR)
	chmod a-x $(BINDIR)/README
	$(foreach solver_exe,$(SOLVER_EXES),rm -f $(BINDIR)/$(solver_exe);)
	$(foreach create_exe,$(CREATE_EXES),rm -f $(BINDIR)/$(create_exe);)
	cd $(BINDIR) && $(foreach solver_exe,$(SOLVER_EXES),ln -s run-solver.sh $(solver_exe);)
	cd $(BINDIR) && $(foreach create_exe,$(CREATE_EXES),ln -s run-generate.sh $(create_exe);)

$(OBJDIR)/Mutate.class : $(SOLVER_BASE) $(OBJDIR)/MutateOnly.class $(OBJDIR)/SimpleChromosone.class

$(OBJDIR)/DoubleX.class : $(SOLVER_BASE) $(OBJDIR)/DoubleXMutate.class $(OBJDIR)/DoubleChromosone.class

$(OBJDIR)/DoubleXMutate.class : $(OBJDIR)/DoubleChromosone.class $(OBJDIR)/Debug.class $(OBJDIR)/Problem.class

$(OBJDIR)/DoubleChromosone.class : $(OBJDIR)/Debug.class $(OBJDIR)/Problem.class

$(OBJDIR)/Xover.class : $(SOLVER_BASE) $(OBJDIR)/MutateXover.class $(OBJDIR)/XoverChromosone.class

$(OBJDIR)/MutateXover.class : $(OBJDIR)/Problem.class $(OBJDIR)/XoverChromosone.class $(OBJDIR)/Debug.class

$(OBJDIR)/XoverChromosone.class : $(OBJDIR)/Problem.class $(OBJDIR)/Debug.class

$(OBJDIR)/MutateOnly.class : $(OBJDIR)/Problem.class $(OBJDIR)/SimpleChromosone.class $(OBJDIR)/Debug.class

$(OBJDIR)/SimpleChromosone.class : $(OBJDIR)/Problem.class $(OBJDIR)/Debug.class

$(OBJDIR)/Arc.class : $(SOLVER_BASE)

$(OBJDIR)/Main.class : $(OBJDIR)/Problem.class $(OBJDIR)/Debug.class

$(OBJDIR)/Problem.class : $(OBJDIR)/Debug.class

$(OBJDIR)/GenStrongKProblem.class : $(OBJDIR)/NewKProb.class $(OBJDIR)/Problem.class $(OBJDIR)/Debug.class $(OBJDIR)/ArcObj.class

$(OBJDIR)/GenTotalRand.class : $(OBJDIR)/NewTotalRand.class $(OBJDIR)/Problem.class $(OBJDIR)/Debug.class $(OBJDIR)/ClueObject.class

$(OBJDIR)/NewTotalRand.class : $(OBJDIR)/Problem.class $(OBJDIR)/Debug.class $(OBJDIR)/ClueObject.class

$(OBJDIR)/NewKProb.class : $(OBJDIR)/Problem.class $(OBJDIR)/Debug.class $(OBJDIR)/ArcObj.class

$(OBJDIR)/BM_CBJ2_NoArc.class : $(SOLVER_BASE)

$(OBJDIR)/BM_CBJ2.class : $(SOLVER_BASE)

clean : 
	rm -f *.*~
	rm -rf $(OBJDIR)
	rm -rf $(BINDIR)
# Copyright 2002-2003 University of Guelph, All Rights Reserved
# Copyright 2002-2003 University of Guelph, All Rights Reserved
