# Copyright 2010 Google Inc.
# 
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

include ../config.mk

ifeq ($(OS),mac)
RUN_PATH_FLAG = -executable_path
DLL_SUFFIX = .dylib
DLLFLAGS = -bundle $(ARCHCFLAGS)
CFLAGS += -DXP_MACOSX $(ARCHCFLAGS)
CXXFLAGS += -DXP_MACOSX $(ARCHCFLAGS)
# Mac puts multiple architectures into the same files
TARGET_PLATFORM = Darwin-gcc3
CHROME_PATH ?= /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
PLATFORM_DIR_SUFFIX = gwtDev.plugin/Contents/MacOS/
else
ifeq ($(OS),linux)
RUN_PATH_FLAG = -rpath-link
DLL_SUFFIX = .so
DLLFLAGS = -shared -m$(FLAG32BIT)
TARGET_PLATFORM = Linux_$(ARCH)-gcc3
CHROME_PATH ?= /opt/google/chrome/chrome
else
endif
endif


export FLAG32BIT

CFLAGS += -DBROWSER_NPAPI -DXP_UNIX -fshort-wchar
CXXFLAGS = $(CXXONLYFLAGS) $(CFLAGS)
DIR = $(shell pwd)

DEPEND = g++ -MM -MT'$$(OBJ_OUTDIR)/$(patsubst %.cpp,%.o,$(src))' \
  -I. -I../common $(src)

COMMON            = ../common/libcommon$(FLAG32BIT).a

OBJ_OUTDIR        = build/$(TARGET_PLATFORM)
EXTENSION_OUTDIR  = prebuilt/gwt-dev-plugin
PLATFORM_DIR      = $(EXTENSION_OUTDIR)/$(TARGET_PLATFORM)
PLATFORM_DIR_SUFFIX ?= ""

INSTALLER_CRX     = prebuilt/gwt-dev-plugin.crx
DLL               = $(OBJ_OUTDIR)/libGwtDevPlugin$(DLL_SUFFIX)
GWTDEV_CRX_PEM   ?= $(CURDIR)/gwt-dev-plugin.pem
CHROME_COMMAND    = $(CHROME_PATH) --pack-extension=$(CURDIR)/$(EXTENSION_OUTDIR) --no-message-box --user-data-dir=$(CURDIR)/$(OBJ_OUTDIR)/user-data --pack-extension-key=$(GWTDEV_CRX_PEM)

#DLLFLAGS += 

VERSION ?= 1.0.$(shell ./getversion)
ifeq ($(VERSION), 1.0.)
$(error You must specify the version if you are not in an svn checkout)
endif

.PHONY: default all crx lib common clean depend install install-platform \
	versioned-files devmodeoptions

default:: lib versioned-files devmodeoptions

all:: common lib install-platform crx

lib:: $(OBJ_OUTDIR) $(EXTENSION_OUTDIR) $(DLL)
crx:: $(EXTENSION_OUTDIR) $(INSTALLER_CRX)

linuxplatforms:
	$(MAKE) lib ARCH=x86
	$(MAKE) lib ARCH=x86_64

macplatforms:
	$(MAKE) lib

HDRS =	\
	LocalObjectTable.h \
	NPVariantWrapper.h \
	Plugin.h \
	ScriptableInstance.h \
	mozincludes.h \
	JavaObject.h

SRCS =	\
	main.cpp \
	Plugin.cpp \
	LocalObjectTable.cpp \
	JavaObject.cpp \
	npn_bindings.cpp \
	ScriptableInstance.cpp

OBJS = $(patsubst %.cpp,$(OBJ_OUTDIR)/%.o,$(SRCS))

$(OBJS): $(OBJ_OUTDIR)

$(OBJ_OUTDIR)::
	@mkdir -p $@

$(INSTALLER_CRX): $(GWTDEV_CRX_PEM) $(EXTENSION_OUTDIR) versioned-files
	$(shell $(CHROME_COMMAND))

versioned-files::
	sed -e s/GWT_DEV_PLUGIN_VERSION/$(VERSION)/ manifest-template.json >prebuilt/gwt-dev-plugin/manifest.json
	#sed -e s/GWT_DEV_PLUGIN_VERSION/$(VERSION)/ updates-template.xml >prebuilt/updates.xml

$(DLL): $(OBJS) $(COMMON)
	$(CXX) -m$(FLAG32BIT) -o $@ $(OBJS) $(COMMON) $(DLLFLAGS) 
	@mkdir -p $(PLATFORM_DIR)
	cp $(DLL) $(PLATFORM_DIR)/$(PLATFORM_DIR_SUFFIX)

$(OBJ_OUTDIR)/%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c -o $@ -I. -I../common $<

common $(COMMON):
	(cd ../common && $(MAKE))

clean:
	rm -rf build

devmodeoptions:
	(ant -f DevModeOptions/build.xml prebuilt)

depend: $(OBJ_OUTDIR)
	($(foreach src,$(SRCS),$(DEPEND)) true) >>Makefile
#	makedepend -- $(CFLAGS) -- $(SRCS)

# DO NOT DELETE
$(OBJ_OUTDIR)/main.o $(OBJ_OUTDIR)/Plugin.o \
 $(OBJ_OUTDIR)/LocalObjectTable.o $(OBJ_OUTDIR)/JavaObject.o \
 $(OBJ_OUTDIR)/npn_bindings.cpp $(OBJ_OUTDIR)/ScriptableInstance.o: \
 main.cpp ../common/Debug.h ../common/Platform.h ../common/DebugLevel.h \
 mozincludes.h npapi/npapi.h npapi/nphostapi.h npapi/npapi.h \
 npapi/npruntime.h npapi/npruntime.h NPObjectWrapper.h Plugin.h \
 ../common/HostChannel.h ../common/Debug.h ../common/ByteOrder.h \
 ../common/Socket.h ../common/Message.h ../common/ReturnMessage.h \
 ../common/BrowserChannel.h ../common/Value.h ../common/SessionHandler.h \
 ../common/LoadModuleMessage.h ../common/HostChannel.h LocalObjectTable.h \
 ../common/SessionHandler.h ../common/HashMap.h ScriptableInstance.h \
 ../common/scoped_ptr/scoped_ptr.h
$(OBJ_OUTDIR)/main.o $(OBJ_OUTDIR)/Plugin.o \
 $(OBJ_OUTDIR)/LocalObjectTable.o $(OBJ_OUTDIR)/JavaObject.o \
 $(OBJ_OUTDIR)/npn_bindings.cpp $(OBJ_OUTDIR)/ScriptableInstance.o: \
 Plugin.cpp Plugin.h ../common/Debug.h ../common/Platform.h \
 ../common/DebugLevel.h mozincludes.h npapi/npapi.h npapi/nphostapi.h \
 npapi/npapi.h npapi/npruntime.h npapi/npruntime.h NPObjectWrapper.h \
 ../common/HostChannel.h ../common/Debug.h ../common/ByteOrder.h \
 ../common/Socket.h ../common/Message.h ../common/ReturnMessage.h \
 ../common/BrowserChannel.h ../common/Value.h ../common/SessionHandler.h \
 ../common/LoadModuleMessage.h ../common/HostChannel.h LocalObjectTable.h \
 ../common/SessionHandler.h ../common/HashMap.h ScriptableInstance.h \
 ../common/InvokeMessage.h ../common/ReturnMessage.h \
 ../common/ServerMethods.h ../common/scoped_ptr/scoped_ptr.h \
 NPVariantWrapper.h ../common/Platform.h ../common/Value.h JavaObject.h
$(OBJ_OUTDIR)/main.o $(OBJ_OUTDIR)/Plugin.o \
 $(OBJ_OUTDIR)/LocalObjectTable.o $(OBJ_OUTDIR)/JavaObject.o \
 $(OBJ_OUTDIR)/npn_bindings.cpp $(OBJ_OUTDIR)/ScriptableInstance.o: \
 LocalObjectTable.cpp mozincludes.h npapi/npapi.h npapi/nphostapi.h \
 npapi/npapi.h npapi/npruntime.h npapi/npruntime.h NPObjectWrapper.h \
 LocalObjectTable.h ../common/Debug.h ../common/Platform.h \
 ../common/DebugLevel.h
$(OBJ_OUTDIR)/main.o $(OBJ_OUTDIR)/Plugin.o \
 $(OBJ_OUTDIR)/LocalObjectTable.o $(OBJ_OUTDIR)/JavaObject.o \
 $(OBJ_OUTDIR)/npn_bindings.cpp $(OBJ_OUTDIR)/ScriptableInstance.o: \
 JavaObject.cpp ../common/Debug.h ../common/Platform.h \
 ../common/DebugLevel.h JavaObject.h mozincludes.h npapi/npapi.h \
 npapi/nphostapi.h npapi/npapi.h npapi/npruntime.h npapi/npruntime.h \
 NPObjectWrapper.h Plugin.h ../common/HostChannel.h ../common/Debug.h \
 ../common/ByteOrder.h ../common/Socket.h ../common/Message.h \
 ../common/ReturnMessage.h ../common/BrowserChannel.h ../common/Value.h \
 ../common/SessionHandler.h ../common/LoadModuleMessage.h \
 ../common/HostChannel.h LocalObjectTable.h ../common/SessionHandler.h \
 ../common/HashMap.h ScriptableInstance.h NPVariantWrapper.h \
 ../common/Platform.h ../common/Value.h
$(OBJ_OUTDIR)/main.o $(OBJ_OUTDIR)/Plugin.o \
 $(OBJ_OUTDIR)/LocalObjectTable.o $(OBJ_OUTDIR)/JavaObject.o \
 $(OBJ_OUTDIR)/npn_bindings.cpp $(OBJ_OUTDIR)/ScriptableInstance.o: \
 npn_bindings.cpp ../common/Debug.h ../common/Platform.h \
 ../common/DebugLevel.h mozincludes.h npapi/npapi.h npapi/nphostapi.h \
 npapi/npapi.h npapi/npruntime.h npapi/npruntime.h NPObjectWrapper.h
$(OBJ_OUTDIR)/main.o $(OBJ_OUTDIR)/Plugin.o \
 $(OBJ_OUTDIR)/LocalObjectTable.o $(OBJ_OUTDIR)/JavaObject.o \
 $(OBJ_OUTDIR)/npn_bindings.cpp $(OBJ_OUTDIR)/ScriptableInstance.o: \
 ScriptableInstance.cpp ScriptableInstance.h ../common/Debug.h \
 ../common/Platform.h ../common/DebugLevel.h mozincludes.h npapi/npapi.h \
 npapi/nphostapi.h npapi/npapi.h npapi/npruntime.h npapi/npruntime.h \
 NPObjectWrapper.h ../common/HostChannel.h ../common/Debug.h \
 ../common/ByteOrder.h ../common/Socket.h ../common/Message.h \
 ../common/ReturnMessage.h ../common/BrowserChannel.h ../common/Value.h \
 ../common/SessionHandler.h ../common/LoadModuleMessage.h \
 ../common/HostChannel.h LocalObjectTable.h ../common/SessionHandler.h \
 ../common/HashMap.h ../common/InvokeMessage.h ../common/ReturnMessage.h \
 ../common/ServerMethods.h ../common/AllowedConnections.h \
 ../common/scoped_ptr/scoped_ptr.h NPVariantWrapper.h \
 ../common/Platform.h ../common/Value.h Plugin.h JavaObject.h
