#
# Pablo System: Pablo/FuzzyLibrary/Library/Build/Makefile
#
#	 NOTE:  use 'gnumake' instead of 'make
# 
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 C++FLAGS
# 	SRCDIRS	    : full pathnames of source file directories.  If you 
#		      have created a NEW FILE DIRECTORY, be sure to add 
#		      its name to this rule 
#	SOURCES	    : C source file names 
#	DEPS	    : dependency Makefiles generated by the compiler 
#		      for all object files
#	INCDIRS     : extracted include directories.  
#  	INCLUDES    : -I format for include directories
#

LOCAL_FLAGS := -DASSERT
C++FLAGS    := $(LOCAL_FLAGS) $(CNFG_C++FLAGS) $(CNFG_C++LDFLAGS) 
SRCDIRS	    := $(LIBRARY_SRCDIRS)

# ###########
# C++ SOURCES
#
SOURCES_FULLPATH := $(foreach DIR, $(SRCDIRS), $(wildcard $(DIR)/*.C))
HEADERS_FULLPATH := $(foreach DIR, $(SRCDIRS), $(wildcard $(DIR)/*.h))
SOURCES	    := $(notdir $(SOURCES_FULLPATH))
HDRFILES    := $(notdir $(HEADERS_FULLPATH))
OBJECTS	    := $(SOURCES:.C=.o)
DEPS	    := $(SOURCES:.C=.dep)


# #################
# REGULAR c SOURCES
#
cSOURCES_FULLPATH := $(foreach DIR, $(SRCDIRS), $(wildcard $(DIR)/*.c))
cSOURCES    := $(notdir $(cSOURCES_FULLPATH))
cOBJECTS    := $(cSOURCES:.c=.o)
cDEPS	    := $(cSOURCES:.c=.cdep)


# ###################
# INCLUDE DIRECTORIES
# 
INCDIRS     := $(addprefix -I, $(SRCDIRS))
INCLUDES    := $(INCDIRS) 
FL_LIB    := libfuzzylib.a


# ######################################################
# Define Directories search paths for C++ source files
#
vpath %.C 	$(shell echo $(SRCDIRS) | sed 's/ /:/g')
vpath %.c       $(shell echo $(SRCDIRS) | sed 's/ /:/g')


# #######################################
# Default target: all - build $(FL_LIB)
#
.PHONY : all install 

all: $(FL_LIB)

$(FL_LIB): $(OBJECTS) $(cOBJECTS)
	$(AR) $@ $?

# #############################################################
# Automatically generate dependencies makefiles *.dep from C++
# source files.   During the very first run, IGNORE MESSAGES:  
# MISSING .dep files, caused by the 'include $(DEPS)' statement.
# 
# $(DEPS): $(SOURCES) $(cSOURCES)
%.dep: %.C
	$(MAKE_DEP_C++) $(C++FLAGS) $(INCLUDES) $< > $@ 
include $(DEPS)
 

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


# ############################################
# Generate Objects files from C++ source files
#
# $(OBJECTS): $(SOURCES)
%.o: %.C
	$(C++) $(C++FLAGS) -c  $(INCLUDES) $<
 

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

# #############################################
# Copy created files into the Install directory
# Change access permissions 
#
install: $(FL_LIB) $(INST_LIBDIR) $(INST_INCDIR)
	rm -f $(INST_LIBDIR)/$(FL_LIB)
	cp $(FL_LIB) $(INST_LIBDIR)/
	chmod $(FILEMODE) $(INST_LIBDIR)/$(FL_LIB)
	cd $(INST_INCDIR); rm -f $(HDRFILES)
	cp $(HEADERS_FULLPATH) $(INST_INCDIR)/
	cd $(INST_INCDIR); chmod $(FILEMODE) $(HDRFILES)


# ################################
#  Rules to create the directories 
#  where files are to be installed 
#  if they don't already exist.
#
ifneq ($(strip $(INST_INCDIR)),)
$(INST_INCDIR): 
	mkdir -m $(DIRMODE) -p $(INST_INCDIR)
endif

ifneq ($(strip $(INST_LIBDIR)),)
$(INST_LIBDIR): 
	mkdir -m $(DIRMODE) -p $(INST_LIBDIR)
endif

