# Authors: Travis Fischer and Tim O'Donnell
#
# make clean all:
#    Completely regenerates project extension (.xpi) and installs it into 
#    a firefox test account

PROJECT_BASE_DIR	= .
PROJECT_BASE_LIB	= $(PROJECT_BASE_DIR)/.make
include $(PROJECT_BASE_LIB)/functions.mk

PROJECT		 		= $(shell basename `pwd`)
PROJECT_JAR 		= chrome/$(PROJECT).jar
PROJECT_XPI			= $(PROJECT).xpi
#PROJECT_COMP		= MarronServer MarronClient
#PROJECT_COMP_XPT	= $(foreach COMP,$(PROJECT_COMP),components/nsI$(COMP).xpt)

PROJECT_BASE		= ..
GECKO_SDK			= $(PROJECT_BASE)/libraries/gecko_sdk

TEST_ACCOUNT		= test
BROWSER				= firefox
BROWSER_FLAGS		= 
ZIP 					= zip

define DEFINE_TARGET
	@echo
	@echo $1
	@set -e
endef

# Targets
# -------
all: $(if $(or $(call NOT,$(call CONTAINS,clean,$(MAKECMDGOALS))),$(call NOT,$(MAKECMDGOALS))),run,install)

# Just run browser with test account, without installing new xpi
run: $(PROJECT_XPI)
	$(call DEFINE_TARGET,"Running:")
	$(BROWSER) $(BROWSER_FLAGS) -CreateProfile $(TEST_ACCOUNT)
	$(BROWSER) $(BROWSER_FLAGS) -P $(TEST_ACCOUNT) &

test%: $(PROJECT_XPI)
	$(call DEFINE_TARGET,"Testing $*:")
	$(BROWSER) $(BROWSER_FLAGS) -CreateProfile $(TEST_ACCOUNT)
	$(BROWSER) $(BROWSER_FLAGS) -P $(TEST_ACCOUNT) test/$@.html &

# Run the browser in a test account and install the new xpi
install: $(PROJECT_XPI)
	$(call DEFINE_TARGET,"Installing:")
	$(BROWSER) $(BROWSER_FLAGS) -CreateProfile $(TEST_ACCOUNT)
	$(BROWSER) $(BROWSER_FLAGS) -P $(TEST_ACCOUNT) $< &

#$(PROJECT_COMP_XPT)
# Generate the project extension's .xpi
$(PROJECT_XPI): $(PROJECT_JAR)
	$(call DEFINE_TARGET,"Generating $@:")
	$(ZIP) -r $@ $< install.rdf
# components must be added to zip

# Generate a .xpt typelib from an idl specification
#$(PROJECT_COMP_XPT): $(wildcard components/*.idl)
#	$(call DEFINE_TARGET,"Generating $@:")
#	$(GECKO_SDK)/bin/xpidl -m typelib -w -v -I $(GECKO_SDK)/idl -e $@ $(dir $@)$(subst .xpt,.idl,$(notdir $@))

# Generate a .jar containing all of chrome/content and chrome/skin, 
# disregarding subversion directories
$(PROJECT_JAR):
	$(call DEFINE_TARGET,"Generating $@:")
	cd $(dir $@) && \
	jar cvf $(notdir $@) $(shell find $(dir $@)/content * | grep -v 'svn' | grep '\.' | grep 'chrome' | grep -v '$@' | sed -e 's|//|/|g' -e 's|chrome/||g')

#$(wildcard components/*.idl): ;

.PHONY: all clean run install testClient testServer

clean:
	rm -f $(PROJECT_JAR) $(PROJECT_XPI)
#$(PROJECT_COMP_XPT)

