#
#	Makefile for Ejscript
#
#	Copyright (c) Embedthis Software LLC, 2003-2009. All Rights Reserved.
#
#	This is an all-in-one build where all the Ejscript source files are catenated into as few files as possible. 
#	See http://hg.embedthis.com/ejs if you require the full source for the Ejscript.
#

include 		.makedep

ifeq ($(BLD_EJS_DIR),)
	EJS_OBJECTS		+= ejsLib

	ifeq ($(BLD_FEATURE_SQLITE),1)
		TARGETS	+= $(BLD_LIB_DIR)/libsqlite3$(BLD_LIB)
		TARGETS	+= $(BLD_BIN_DIR)/esql$(BLD_EXE)
	endif

	TARGETS		+= $(BLD_LIB_DIR)/libejs$(BLD_LIB)
	TARGETS		+= $(BLD_BIN_DIR)/ec$(BLD_EXE) $(BLD_BIN_DIR)/ejs$(BLD_EXE) $(BLD_BIN_DIR)/ejsmod$(BLD_EXE)
	ifeq ($(BLD_FEATURE_EJS_WEB),1)
	TARGETS		+= $(BLD_BIN_DIR)/egen
	endif
endif

DOC_DIR			:= $(BLD_TOP)/doc/api/ejscript

#
#	Suppress warnings for sqlite
#
_CFLAGS 		:= $(shell echo $(_CFLAGS) | sed 's/-W3/-W1/;s/-Wall/-w/')

compileFirst: buildCompiler gen

compileExtra: $(TARGETS)

buildCompiler:
	@if [ ! -x $(BLD_BIN_DIR)/ec$(BLD_EXE) ] ; then \
		echo -e "  # Pre-build to create ejs compiler" ; \
		make compileExtra ; \
		echo -e "  # Completed pre-build " ; \
		touch *.c *.es ; \
	fi
	
gen: .ejs.slots.h $(TARGETS)

#
#	Depend on imported ejs.slots.h incase a new import is done
#
.ejs.slots.h: $(BLD_INC_DIR)/ejs.slots.h *.es
	$(call setlibpath) ; ec $(_ESFLAGS) --bind --empty --out $(BLD_BIN_DIR)/ejs.mod ejs.es Config.es
	$(call setlibpath) ; ejsmod --showDebug --listing --empty --showBuiltin --cslots $(BLD_BIN_DIR)/ejs.mod
	cat ejs*.slots.h >.ejs.slots.h
	chmod +w $(BLD_INC_DIR)/ejs.slots.h
	cp .ejs.slots.h $(BLD_INC_DIR)/ejs.slots.h

#
#	Build the ejs library
#	
$(BLD_LIB_DIR)/libejs$(BLD_LIB): $(OBJECTS) $(BLD_LIB_DIR)/libmpr$(BLD_LIB)
	@bld --library $(BLD_LIB_DIR)/libejs --search "$(BLD_EJS_DEP_LIBPATHS)" --libs "$(BLD_EJS_DEP_LIBS)" $(EJS_OBJECTS)

$(BLD_LIB_DIR)/libsqlite3$(BLD_LIB): $(OBJECTS) $(BLD_LIB_DIR)/libmpr$(BLD_LIB)
	@bld --library $(BLD_LIB_DIR)/libsqlite3 --search "$(BLD_SQLITE_DEP_LIBS)" --libs "$(BLD_SQLITE_DEP_LIBS)" sqlite3

$(BLD_BIN_DIR)/esql$(BLD_EXE): $(OBJECTS) $(BLD_LIB_DIR)/libmpr$(BLD_LIB)
	@bld --exe $(BLD_BIN_DIR)/esql$(BLD_EXE) --search "$(BLD_SQLITE_LIBPATHS)" --libs "$(BLD_SQLITE_LIBS) \
		$(BLD_MPR_LIBS)" esql

$(BLD_BIN_DIR)/ec$(BLD_EXE): $(OBJECTS) $(BLD_LIB_DIR)/libejs$(BLD_LIB) $(BLD_LIB_DIR)/libmpr$(BLD_LIB)
	@bld --exe $(BLD_BIN_DIR)/ec$(BLD_EXE) --search "$(BLD_EJS_LIBPATHS)" --libs "$(BLD_EJS_LIBS)" ec

$(BLD_BIN_DIR)/ejs$(BLD_EXE): $(OBJECTS) $(BLD_LIB_DIR)/libejs$(BLD_LIB) $(BLD_LIB_DIR)/libmpr$(BLD_LIB)
	@bld --exe $(BLD_BIN_DIR)/ejs$(BLD_EXE) --search "$(BLD_EJS_LIBPATHS)" --libs "$(BLD_EJS_LIBS)" ejs

$(BLD_BIN_DIR)/ejsmod$(BLD_EXE): $(OBJECTS) $(BLD_LIB_DIR)/libejs$(BLD_LIB) $(BLD_LIB_DIR)/libmpr$(BLD_LIB)
	@bld --exe $(BLD_BIN_DIR)/ejsmod$(BLD_EXE) --search "$(BLD_EJS_LIBPATHS)" --libs "$(BLD_EJS_LIBS)" ejsmod

$(BLD_BIN_DIR)/egen: egen
	( echo "#!$(BLD_ABS_BIN_DIR)/ejs" ; tail -n +2 egen ) > $(BLD_BIN_DIR)/egen
	chmod 755 $(BLD_BIN_DIR)/egen

#
#	Generate documentation for all es files
#	
doc: $(BLD_TOP)/doc/api/ejscript/index.html

$(DOC_DIR)/index.html: Makefile Config.es ejs.es
	$(call setlibpath) ; ec --doc --out doc.mod --empty --bind Config.es ejs.es
	rm -rf $(DOC_DIR)/*.html $(DOC_DIR)/*.css $(DOC_DIR)/images/*
	$(call setlibpath) ; ejsmod --html $(DOC_DIR) --empty --showBuiltin doc.mod
	rm -f doc.mod

