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