#
# Pablo System: Pablo/FuzzyLibrary/FuzzyLibFRC/Build/Makefile
#
#   Here all the source files are in C.
#
TOP := ../..
  
.PHONY : Makefile $(TOP)/Makefile.defines   # explicity mark phony to save time
include $(TOP)/Makefile.defines 	    # common configuration parms

#
# Some definitions for this particular Makefile
#	LOCAL_FLAGS : flags added to CFLAGS
#       CFLAGS      : c compile flags
#       SRCDIR      : source directory
#

LOCAL_FLAGS     := -DASSERT
CFLAGS          := $(LOCAL_FLAGS) $(CNFG_CFLAGS) 
SRCDIR	        := $(DISTDIR)/FuzzyLibFRC/FuzzyLibFRC

# #################
# C SOURCES
#
cSOURCES_FULLPATH := $(foreach DIR, $(SRCDIR), $(wildcard $(DIR)/*.c))
cSOURCES    := $(notdir $(cSOURCES_FULLPATH))
cOBJECTS    := $(cSOURCES:.c=.o)

# ###################
# INCLUDE DIRECTORIES
#
INCLUDES    := $(addprefix -I, . $(SRCDIR))

# ###################
# Target executable for build

EXEC		:= FuzzyLibFRC
EXEC_OBJS	:= $(cOBJECTS) fuzzyparse.o fuzzylex.o
EXEC_DEPS	:= $(EXEC_OBJS:.o=.cdep)


# ######################################################
# Define Directories search paths for various files
#
vpath %.c	$(shell echo $(SRCDIR) | sed 's/ /:/g')
vpath %.h	$(shell echo $(SRCDIR) | sed 's/ /:/g')
vpath %.y	$(shell echo $(SRCDIR) | sed 's/ /:/g')
vpath %.l	$(shell echo $(SRCDIR) | sed 's/ /:/g')


# #######################################
# Default target: all 
#
.PHONY : all install

all: $(EXEC)

$(EXEC): $(EXEC_OBJS) $(EXECS_DEPS) 
	$(REGULAR_C) -o $@ $(CFLAGS) $(EXEC_OBJS) $(INCLUDES) $(XTRA_LIBS)

fuzzylex.c:	fuzzylex.l fuzzyparse.h
	$(LEX) $(SRCDIR)/fuzzylex.l
	mv lex.yy.c fuzzylex.c

fuzzyparse.c fuzzyparse.h:	fuzzyparse.y fuzzysubs.h
	$(YACC) -d $(SRCDIR)/fuzzyparse.y
	mv y.tab.c fuzzyparse.c
	mv y.tab.h fuzzyparse.h


# #############################################################
# Automatically generate dependencies makefiles *.dep from C
# source files.   During the very first run, Ignore messages about
# Missing .cdep files, caused by the 'include $(EXEC_DEPS)' statement.
# 

%.cdep: %.c
	$(MAKE_DEP_REGULAR_C) $(INCLUDES) $< > $@ 

include $(EXEC_DEPS)
 

# ############################################
# Generate Objects files from C source files
#
%.o: %.c
	$(REGULAR_C) $(CFLAGS) $(INCLUDES) -c $<
 

# #############################################
# Copy created files into the Install directory
# Change access permissions 
#
install: all $(INST_BINDIR)
	( cd $(INST_BINDIR); rm -f $(EXEC) )
	cp $(EXEC) $(INST_BINDIR)/.
	chmod $(EXECMODE) $(INST_BINDIR)/$(EXEC)


# ################################
#  Rules to create the directory 
#  where files are to be installed 
#  if it doesn't already exist.
#
ifneq ($(strip $(INST_BINDIR)),)
$(INST_BINDIR): 
	mkdir -m $(DIRMODE) -p $(INST_BINDIR)
endif
