Initial checkin of OOPHM plugins into trunk.  Testing of non-XPCOM plugins
is still required, and more platforms need to be built.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5868 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/plugins/xpcom/Makefile b/plugins/xpcom/Makefile
new file mode 100644
index 0000000..5c1f343
--- /dev/null
+++ b/plugins/xpcom/Makefile
@@ -0,0 +1,257 @@
+# Copyright 2009 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
+
+# Make variables intended to be settable fromthe command line:
+#   DEFAULT_FIREFOX_LIBS	points to /usr/lib/firefox or equivalent
+#   PLUGIN_SDKS			points to GWT /plugin-sdks directory
+#   GECKO_PLATFORM		XPCOM ABI (ie, Linux_x86_64-gcc3)
+#
+
+ifeq ($(OS),mac)
+DEFAULT_FIREFOX_LIBS ?= /Applications/Firefox.app/Contents/MacOS
+RUN_PATH_FLAG = -executable_path
+DLL_SUFFIX = .dylib
+DLLFLAGS = -bundle -arch i386 -arch ppc
+TARGET_PLATFORM = Darwin_x86-gcc3
+# Mac puts multiple architectures into the same files
+GECKO_PLATFORM = Darwin-gcc3
+else ifeq ($(OS),linux)
+DEFAULT_FIREFOX_LIBS ?= /usr/lib/firefox
+RUN_PATH_FLAG = -rpath-link
+DLL_SUFFIX = .so
+DLLFLAGS = -shared -m$(FLAG32BIT)
+TARGET_PLATFORM = Linux_$(ARCH)-gcc3
+else ifeq ($(OS),sun)
+TARGET_PLATFORM = SunOS_$(ARCH)-sunc
+RUN_PATH_FLAG = -rpath-link
+DLLFLAGS=
+endif
+
+export FLAG32BIT
+
+ifeq ($(BROWSER),)
+$(warning Defaulting to FF3 build)
+BROWSER=ff3
+endif
+
+GECKO_MINOR_VERSION=
+ifeq ($(BROWSER),ff2)
+BROWSER_VERSION   = 1.8
+CFLAGS += -DBROWSER_FF2
+else ifeq ($(BROWSER),ff3)
+BROWSER_VERSION   = 1.9.0
+CFLAGS += -DBROWSER_FF3
+else ifeq ($(BROWSER),ff3+)
+BROWSER_VERSION   = 1.9.0
+CFLAGS += -DBROWSER_FF3
+GECKO_MINOR_VERSION=.10
+else ifeq ($(BROWSER),ff35)
+BROWSER_VERSION   = 1.9.1
+CFLAGS += -DBROWSER_FF3
+else
+$(error Unrecognized BROWSER of $(BROWSER) - options are ff2, ff3, ff3+, ff35)
+endif
+
+CFLAGS += -fshort-wchar
+CXXFLAGS = $(CXXONLYFLAGS) $(CFLAGS)
+DIR = $(shell pwd)
+
+# Set $PLUGIN_SDKS if it isn't in the default location
+PLUGIN_SDKS ?= ../../../plugin-sdks
+GECKO_PLATFORM ?= $(TARGET_PLATFORM)
+
+COMMON            = ../common/libcommon$(FLAG32BIT).a
+
+OBJ_OUTDIR        = build/$(TARGET_PLATFORM)-$(BROWSER)
+EXTENSION_OUTDIR  = prebuilt/extension-$(BROWSER)
+FF_PLATFORM_DIR   = $(EXTENSION_OUTDIR)/platform/$(TARGET_PLATFORM)
+
+INSTALLER_XPI     = prebuilt/oophm-xpcom-$(BROWSER).xpi
+FF_DLL            = $(OBJ_OUTDIR)/liboophm_$(BROWSER)$(DLL_SUFFIX)
+#FF_TYPELIB        = build/IOOPHM.xpt
+#FF_HEADER         = $(OBJ_OUTDIR)/IOOPHM.h
+FF_TYPELIB        = prebuilt/extension/components/IOOPHM.xpt
+FF_HEADER         = prebuilt/$(BROWSER)/include/IOOPHM.h
+INSTALL_RDF       = $(EXTENSION_OUTDIR)/install.rdf
+
+SDK_PATH          = $(PLUGIN_SDKS)/gecko-sdks
+GECKO_SDK         = $(SDK_PATH)/gecko-$(BROWSER_VERSION)
+GECKO_PLAT_INC    = $(GECKO_SDK)/$(GECKO_PLATFORM)/include
+GECKO_LIBS        = $(GECKO_SDK)/$(GECKO_PLATFORM)/lib$(GECKO_MINOR_VERSION)
+XPIDL             = $(GECKO_SDK)/$(GECKO_PLATFORM)/bin/xpidl
+XPIDL_FLAGS       = -I$(GECKO_SDK)/idl
+
+#DLLFLAGS += \
+#		-L$(GECKO_LIBS) \
+#		-L$(FIREFOX_LIBS) \
+#		-Wl,$(RUN_PATH_FLAG),$(FIREFOX_LIBS) \
+#		-lxpcomglue_s -lxpcom -lnspr4 -lmozjs
+DLLFLAGS += \
+		-L$(DEFAULT_FIREFOX_LIBS) \
+		-L$(GECKO_LIBS) \
+		-Wl,$(RUN_PATH_FLAG),$(DEFAULT_FIREFOX_LIBS) \
+		-Wl,$(RUN_PATH_FLAG),$(GECKO_LIBS) \
+		-lxpcomglue_s -lxpcom -lnspr4 -lmozjs
+
+INC += -I$(GECKO_PLAT_INC) -I$(GECKO_SDK)/include -I$(dir $(FF_HEADER))
+
+VERSION=0.0.$(shell ./getversion).$(shell date +%Y%m%d%H%M%S)
+
+.PHONY: all xpi lib common browser clean depend install install-platform find-ff-libs
+
+all:: common xpi
+
+lib:: browser $(OBJ_OUTDIR) $(EXTENSION_OUTDIR) $(FF_DLL)
+xpi:: $(EXTENSION_OUTDIR) $(INSTALLER_XPI)
+
+find-ff-libs::
+ifeq ($(FIREFOX_LIBS),)
+	$(warning Using firefox libraries at $(GECKO_LIBS))
+	$(eval FIREFOX_LIBS = $(GECKO_LIBS))
+endif
+
+browser:: find-ff-libs
+#	if [ ! -r $(GECKO_LIBS)/libxpcom.so ]
+#	then
+#	    $(error Missing Firefox libraries at $(GECKO_LIBS))
+#	fi
+
+# Not needed currently, but keeping around for now in case we change back to
+# putting it in build
+$(EXTENSION_OUTDIR):
+	rm -rf $@
+	mkdir -p $@
+	#cp -r prebuilt/extension/. $(EXTENSION_OUTDIR)
+	cp -r prebuilt/extension-$(BROWSER)/. $(EXTENSION_OUTDIR)
+	@mkdir -p $@/components
+
+generate-install:: $(EXTENSION_OUTDIR) install-template-$(BROWSER).rdf
+	sed -e s/GWT_OOPHM_VERSION/$(VERSION)/ install-template-$(BROWSER).rdf >$(INSTALL_RDF)
+
+SRCS =	\
+		ExternalWrapper.cpp \
+		ModuleOOPHM.cpp \
+		FFSessionHandler.cpp \
+		JavaObject.cpp \
+		JSRunner.cpp \
+		XpcomDebug.cpp
+
+FF_OBJS = $(patsubst %.cpp,$(OBJ_OUTDIR)/%.o,$(SRCS))
+
+$(FF_OBJS): $(OBJ_OUTDIR)
+
+$(OBJ_OUTDIR)::
+	@mkdir -p $@
+
+$(INSTALLER_XPI): $(FF_TYPELIB) $(EXTENSION_OUTDIR) generate-install $(shell find prebuilt/extension $(EXTENSION_OUTDIR)) $(FF_DLL)
+	@mkdir -p $(EXTENSION_OUTDIR)/components
+	(cd prebuilt/extension; find . \( -name .svn -prune \) -o -print | cpio -pmdua ../../$(EXTENSION_OUTDIR))
+	-rm $(INSTALLER_XPI)
+	(cd $(EXTENSION_OUTDIR) && zip -r -D -9 $(DIR)/$(INSTALLER_XPI) * -x '*/.svn/*' -x 'META-INF/*')
+
+$(FF_TYPELIB): IOOPHM.idl
+	$(XPIDL) $(XPIDL_FLAGS) -m typelib -e $@ $<
+
+$(FF_HEADER): IOOPHM.idl
+	$(XPIDL) $(XPIDL_FLAGS) -m header -e $@ $<
+
+$(FF_DLL): $(FF_OBJS) $(COMMON)
+	$(CXX) -m$(FLAG32BIT) -o $@ $(FF_OBJS) $(COMMON) $(DLLFLAGS) 
+	@mkdir -p $(FF_PLATFORM_DIR)/components
+	cp $(FF_DLL) $(FF_PLATFORM_DIR)/components/
+ifeq ($(OS),mac)
+	@mkdir -p $(subst x86,ppc,$(FF_PLATFORM_DIR))/components
+	cp $(FF_DLL) $(subst x86,ppc,$(FF_PLATFORM_DIR))/components/
+endif
+
+$(OBJ_OUTDIR)/%.o: %.cpp $(FF_HEADER)
+	$(CXX) $(CXXFLAGS) -c -o $@ -I. -I../common $<
+
+common $(COMMON):
+	(cd ../common && $(MAKE))
+
+clean:
+	rm -rf build
+
+install-platform:
+ifdef BROWSER
+	@-mkdir -p $(subst $(EXTENSION_OUTDIR),prebuilt/extension-$(BROWSER),$(FF_PLATFORM_DIR))/components
+	-cp $(FF_DLL) $(subst $(EXTENSION_OUTDIR),prebuilt/extension-$(BROWSER),$(FF_PLATFORM_DIR))/components
+ifeq ($(OS),mac)
+	@-mkdir -p $(subst $(EXTENSION_OUTDIR),prebuilt/extension-$(BROWSER),$(subst x86,ppc,$(FF_PLATFORM_DIR)))/components
+	-cp $(FF_DLL) $(subst $(EXTENSION_OUTDIR),prebuilt/extension-$(BROWSER),$(subst x86,ppc,$(FF_PLATFORM_DIR)))/components
+endif
+else
+	@$(MAKE) $@ BROWSER=ff2
+	@$(MAKE) $@ BROWSER=ff3
+endif
+
+DEPEND = g++ -MM -MT'$$(OBJ_OUTDIR)/$(patsubst %.cpp,%.o,$(src))' \
+  -I. -I../common -isystem$(dir $(FF_HEADER)) -isystem$(GECKO_SDK)/include $(src) &&
+depend: browser $(OBJ_OUTDIR) $(FF_HEADER)
+	($(foreach src,$(SRCS),$(DEPEND)) true) >>Makefile
+#	makedepend -- $(CFLAGS) -- $(SRCS)
+
+# DO NOT DELETE
+$(OBJ_OUTDIR)/ExternalWrapper.o: ExternalWrapper.cpp ExternalWrapper.h \
+  mozincludes.h FFSessionHandler.h SessionData.h \
+  ../common/SessionHandler.h ../common/BrowserChannel.h ../common/Value.h \
+  ../common/Debug.h ../common/Platform.h ../common/DebugLevel.h \
+  ../common/BrowserChannel.h ../common/scoped_ptr/scoped_ptr.h \
+  ../common/LoadModuleMessage.h ../common/Message.h \
+  ../common/BrowserChannel.h ../common/HostChannel.h ../common/Debug.h \
+  ../common/ByteOrder.h ../common/Platform.h ../common/Socket.h \
+  ../common/Platform.h ../common/Debug.h ../common/AllowedConnections.h \
+  ../common/Platform.h ../common/Message.h ../common/ReturnMessage.h \
+  ../common/Message.h ../common/BrowserChannel.h ../common/Value.h \
+  ../common/Value.h ../common/SessionHandler.h ../common/SessionHandler.h \
+  ../common/ServerMethods.h ../common/Value.h
+$(OBJ_OUTDIR)/ModuleOOPHM.o: ModuleOOPHM.cpp ../common/Debug.h \
+  ../common/Platform.h ../common/DebugLevel.h ExternalWrapper.h \
+  mozincludes.h FFSessionHandler.h SessionData.h \
+  ../common/SessionHandler.h ../common/BrowserChannel.h ../common/Value.h \
+  ../common/Debug.h ../common/BrowserChannel.h \
+  ../common/scoped_ptr/scoped_ptr.h
+$(OBJ_OUTDIR)/FFSessionHandler.o: FFSessionHandler.cpp FFSessionHandler.h \
+  mozincludes.h SessionData.h ../common/SessionHandler.h \
+  ../common/BrowserChannel.h ../common/Value.h ../common/Debug.h \
+  ../common/Platform.h ../common/DebugLevel.h ../common/BrowserChannel.h \
+  ../common/HostChannel.h ../common/Debug.h ../common/ByteOrder.h \
+  ../common/Platform.h ../common/Socket.h ../common/Platform.h \
+  ../common/Debug.h ../common/AllowedConnections.h ../common/Platform.h \
+  ../common/Message.h ../common/ReturnMessage.h ../common/Message.h \
+  ../common/BrowserChannel.h ../common/Value.h ../common/Value.h \
+  ../common/SessionHandler.h JavaObject.h JSRunner.h XpcomDebug.h \
+  ../common/scoped_ptr/scoped_ptr.h RootedObject.h \
+  ../common/InvokeMessage.h ../common/Message.h \
+  ../common/BrowserChannel.h ../common/Value.h ../common/ServerMethods.h \
+  ../common/Value.h
+$(OBJ_OUTDIR)/JavaObject.o: JavaObject.cpp JavaObject.h mozincludes.h \
+  FFSessionHandler.h SessionData.h ../common/SessionHandler.h \
+  ../common/BrowserChannel.h ../common/Value.h ../common/Debug.h \
+  ../common/Platform.h ../common/DebugLevel.h ../common/BrowserChannel.h \
+  ../common/ServerMethods.h ../common/Value.h XpcomDebug.h \
+  ../common/HostChannel.h ../common/Debug.h ../common/ByteOrder.h \
+  ../common/Platform.h ../common/Socket.h ../common/Platform.h \
+  ../common/Debug.h ../common/AllowedConnections.h ../common/Platform.h \
+  ../common/Message.h ../common/ReturnMessage.h ../common/Message.h \
+  ../common/BrowserChannel.h ../common/Value.h ../common/Value.h \
+  ../common/SessionHandler.h ../common/InvokeMessage.h \
+  ../common/Message.h ../common/BrowserChannel.h ../common/Value.h \
+  ../common/scoped_ptr/scoped_ptr.h
+$(OBJ_OUTDIR)/JSRunner.o: JSRunner.cpp JSRunner.h mozincludes.h
+$(OBJ_OUTDIR)/XpcomDebug.o: XpcomDebug.cpp XpcomDebug.h mozincludes.h \
+  JavaObject.h