2001-02-19 11:31:46 +03:00
|
|
|
# The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
# 1.1 (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.mozilla.org/MPL/
|
|
|
|
#
|
|
|
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
|
|
|
# the specific language governing rights and limitations under the License.
|
|
|
|
#
|
|
|
|
# The Original Code is the Python XPCOM language bindings.
|
|
|
|
#
|
|
|
|
# The Initial Developer of the Original Code is ActiveState Tool Corp.
|
|
|
|
# Portions created by ActiveState Tool Corp. are Copyright (C) 2000, 2001
|
|
|
|
# ActiveState Tool Corp. All Rights Reserved.
|
|
|
|
#
|
|
|
|
# Contributor(s): Trent Mick <TrentM@ActiveState.com> (original author)
|
|
|
|
# Mark Hammond <MarkH@ActiveState.com>
|
|
|
|
#
|
2001-02-19 08:24:45 +03:00
|
|
|
|
|
|
|
# Dumb makefile to build PyXPCOM on linux
|
|
|
|
#
|
|
|
|
# The build is by no means clean. I just kept shoving in compiler and linker
|
|
|
|
# options until it worked. :)
|
|
|
|
#
|
|
|
|
# USAGE:
|
|
|
|
# 1. edit top section as appropriate
|
|
|
|
# 2. build, install, and test PyXPCOM
|
|
|
|
# > make -f makefile.stupid.linux DEBUG=1
|
|
|
|
# > make -f makefile.stupid.linux DEBUG=1 install
|
|
|
|
# > make -f makefile.stupid.linux DEBUG=1 test
|
|
|
|
# A debug build is suggested (DEBUG=1) by default because a default
|
|
|
|
# mozilla build is a debug build. Exclude the "DEBUG=1" to build for a
|
|
|
|
# release build of mozilla.
|
|
|
|
#
|
|
|
|
|
|
|
|
#-------------------------
|
|
|
|
# You must edit the variables in this section as appropriate for your machine
|
|
|
|
# The most common edits will just be:
|
|
|
|
# MOZ_SRC, INSTALLDIR, and PYTHON_SRC
|
|
|
|
# =========== START OF SECTION FOR COMMON EDITS =====================
|
|
|
|
|
|
|
|
# this will have an "xpcom" subdir on install
|
|
|
|
INSTALLDIR=/usr/local/ActivePython-2.0/lib/python2.0/site-packages
|
|
|
|
|
|
|
|
PYTHON_SRC=/usr/local/ActivePython-2.0
|
|
|
|
|
|
|
|
# =========== START OF SECTION FOR COMMON EDITS =====================
|
2001-02-19 11:31:46 +03:00
|
|
|
# We expect a "mozilla" directory under this
|
|
|
|
MOZ_SRC=../../../../..
|
2001-02-19 08:24:45 +03:00
|
|
|
|
|
|
|
MOZCOMPONENTSDIR=$(MOZ_SRC)/mozilla/dist/bin/components
|
|
|
|
MOZINCLUDES=-I$(MOZ_SRC)/mozilla/dist/include
|
|
|
|
MOZLIBDIR=$(MOZ_SRC)/mozilla/dist/lib
|
|
|
|
|
|
|
|
# this is setup to use the *installed* Python directory structure
|
|
|
|
# - To use the development Python dir structure some changes are
|
|
|
|
# necessary here *and* below (below, because there two lib dir
|
|
|
|
# to include in LDFLAGS for the dev dir structure)
|
|
|
|
PYTHON_SRC=/usr/local/ActivePython-2.0
|
|
|
|
PYTHONINCLUDES=-I$(PYTHON_SRC)/include/python2.0
|
|
|
|
PYTHONLIBDIR=$(PYTHON_SRC)/lib/python2.0/config
|
|
|
|
|
|
|
|
XPIDL=$(MOZ_SRC)/mozilla/dist/bin/xpidl
|
|
|
|
IDLINCLUDES=-I$(MOZ_SRC)/mozilla/dist/idl
|
|
|
|
|
|
|
|
|
|
|
|
#-------------------------
|
|
|
|
# You should not need to edit anything beyond this point.
|
|
|
|
#
|
|
|
|
|
|
|
|
# the main PyXPCOM engine library
|
|
|
|
ENGINE=src/_xpcommodule.so
|
|
|
|
# the PyXPCOM loader
|
|
|
|
LOADER=src/loader/libpyloader.so
|
|
|
|
|
|
|
|
all:: $(ENGINE) $(LOADER)
|
|
|
|
|
|
|
|
|
|
|
|
#---- build the PyXPCOM loader
|
|
|
|
|
|
|
|
LOADER_CFLAGS=-fpic -fno-rtti -fno-exceptions -Wconversion \
|
|
|
|
-Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual \
|
|
|
|
-Wsynth -pedantic -Wno-long-long -pthread -DTRIMMED
|
|
|
|
ifdef DEBUG
|
|
|
|
LOADER_CFLAGS += -DDEBUG
|
|
|
|
endif
|
|
|
|
|
|
|
|
# NOTE: not sure if using -rpath is the best way to do this
|
|
|
|
LOADER_LDFLAGS=-Xlinker -rpath -Xlinker $(MOZLIBDIR) \
|
|
|
|
-Xlinker -rpath -Xlinker $(MOZLIBDIR)/components \
|
|
|
|
-Xlinker -rpath -Xlinker $(PYTHONLIBDIR) \
|
|
|
|
-L$(MOZLIBDIR) -L$(PYTHONLIBDIR)
|
|
|
|
# NOTE: can't remember if "-shared" is necessary here
|
|
|
|
LOADER_LIBS=-lpython2.0 -ldl -lpthread -ldb -lutil -shared -lxpcom
|
|
|
|
$(LOADER): src/loader/pyloader.cpp
|
|
|
|
c++ $(LOADER_CFLAGS) $(MOZINCLUDES) $(PYTHONINCLUDES) \
|
|
|
|
-c src/loader/pyloader.cpp \
|
|
|
|
-o src/loader/pyloader.o
|
|
|
|
c++ $(LOADER_CFLAGS) $(LOADER_LDFLAGS) $(LOADER_LIBS) \
|
|
|
|
-o $(LOADER) \
|
|
|
|
src/loader/pyloader.o
|
|
|
|
|
|
|
|
|
|
|
|
#---- build the PyXPCOM engine
|
|
|
|
|
|
|
|
ENGINE_CFLAGS=-fpic -fno-rtti -fno-exceptions -Wconversion \
|
|
|
|
-Wpointer-arith -Wbad-function-cast -Wcast-align -Woverloaded-virtual \
|
|
|
|
-Wsynth -pedantic -Wno-long-long -pthread -DTRIMMED -nostdlib
|
|
|
|
ifdef DEBUG
|
|
|
|
ENGINE_CFLAGS += -DDEBUG
|
|
|
|
endif
|
|
|
|
|
|
|
|
# -DXPCOM_EXPORTS
|
|
|
|
XPCOM_SRC_OBJECTS = \
|
|
|
|
src/ErrorUtils.o \
|
|
|
|
src/PyGBase.o \
|
|
|
|
src/PyGModule.o \
|
|
|
|
src/PyGStub.o \
|
|
|
|
src/PyGInputStream.o \
|
|
|
|
src/PyGWeakReference.o \
|
|
|
|
src/PyIComponentManager.o \
|
|
|
|
src/PyIInputStream.o \
|
|
|
|
src/PyIEnumerator.o \
|
|
|
|
src/PyIID.o \
|
|
|
|
src/PyIInterfaceInfo.o \
|
|
|
|
src/PyIInterfaceInfoManager.o \
|
|
|
|
src/PyIServiceManager.o \
|
|
|
|
src/PyISimpleEnumerator.o \
|
|
|
|
src/PyISupports.o \
|
|
|
|
src/Pyxpt_info.o \
|
|
|
|
src/TypeObject.o \
|
|
|
|
src/VariantUtils.o \
|
|
|
|
src/dllmain.o \
|
|
|
|
src/xpcom.o
|
|
|
|
|
|
|
|
%.o: %.cpp
|
|
|
|
c++ $(ENGINE_CFLAGS) $(MOZINCLUDES) $(PYTHONINCLUDES) \
|
|
|
|
-c $< -o $@
|
|
|
|
|
|
|
|
# NOTE: not sure if using -rpath is the best way to do this
|
|
|
|
# NOTE: can't remember if "-shared" is necessary here
|
|
|
|
ENGINE_LDFLAGS=-Xlinker -rpath -Xlinker $(MOZLIBDIR) \
|
|
|
|
-Xlinker -rpath -Xlinker $(MOZLIBDIR)/components \
|
|
|
|
-Xlinker -rpath -Xlinker $(PYTHONLIBDIR) \
|
|
|
|
-Xlinker -shared
|
|
|
|
ENGINE_LIBS=-lpython2.0 -ldl -lpthread -ldb -lutil -lxpcom \
|
|
|
|
-lnspr4 -lgtk -lgdk -rdynamic -lgmodule -lglib -lm -lplc4 \
|
|
|
|
-lpthread -lnsl -lresolv -lm -lc -lgcc
|
|
|
|
|
|
|
|
$(ENGINE): $(XPCOM_SRC_OBJECTS)
|
|
|
|
c++ $(ENGINE_CFLAGS) $(ENGINE_LDFLAGS) -o $(ENGINE) \
|
|
|
|
$(XPCOM_SRC_OBJECTS) -L$(MOZLIBDIR) -L$(PYTHONLIBDIR) $(ENGINE_LIBS)
|
|
|
|
|
|
|
|
|
|
|
|
#---- install PyXPCOM
|
|
|
|
|
|
|
|
XPCOM_PACKAGE_FILES = \
|
|
|
|
__init__.py \
|
|
|
|
components.py \
|
|
|
|
file.py \
|
|
|
|
nsError.py \
|
|
|
|
register.py \
|
|
|
|
xpcom_consts.py \
|
|
|
|
xpt.py \
|
|
|
|
client/__init__.py \
|
|
|
|
server/__init__.py \
|
|
|
|
server/enumerator.py \
|
|
|
|
server/factory.py \
|
|
|
|
server/loader.py \
|
|
|
|
server/module.py \
|
|
|
|
server/policy.py
|
|
|
|
|
|
|
|
# this is a cheasy install
|
|
|
|
# - no attention to permissions
|
|
|
|
# - doesn't explicitly use $(XPCOM_PACKAGE_FILES)
|
|
|
|
install:: all $(XPCOM_PACKAGE_FILES)
|
|
|
|
mkdir -p $(INSTALLDIR)/xpcom/client
|
|
|
|
mkdir -p $(INSTALLDIR)/xpcom/server
|
|
|
|
cp -f *.py $(INSTALLDIR)/xpcom
|
|
|
|
cp -f client/*.py $(INSTALLDIR)/xpcom/client
|
|
|
|
cp -f server/*.py $(INSTALLDIR)/xpcom/server
|
|
|
|
cp -f $(ENGINE) $(INSTALLDIR)/xpcom
|
|
|
|
mkdir -p $(MOZCOMPONENTSDIR)
|
|
|
|
cp -f $(LOADER) $(MOZCOMPONENTSDIR)
|
|
|
|
( \
|
|
|
|
export PYTHONPATH=$(INSTALLDIR):$(PYTHONPATH) ; \
|
|
|
|
export MOZILLA_FIVE_HOME=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
export LD_LIBRARY_PATH=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
$(MOZ_SRC)/mozilla/dist/bin/regxpcom \
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
#---- build and run the PyXPCOM test suite
|
|
|
|
|
|
|
|
all:: test/test_component/py_test_component.xpt
|
|
|
|
|
|
|
|
test/test_component/py_test_component.xpt: test/test_component/py_test_component.idl
|
|
|
|
$(XPIDL) -m typelib -w $(IDLINCLUDES) -o test/test_component/py_test_component $<
|
|
|
|
|
|
|
|
install::
|
|
|
|
mkdir -p $(MOZCOMPONENTSDIR)
|
|
|
|
cp -f test/test_component/py_test_component.xpt $(MOZCOMPONENTSDIR)
|
|
|
|
cp -f test/test_component/py_test_component.py $(MOZCOMPONENTSDIR)
|
|
|
|
( \
|
|
|
|
export PYTHONPATH=$(INSTALLDIR):$(PYTHONPATH) ; \
|
|
|
|
export MOZILLA_FIVE_HOME=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
export LD_LIBRARY_PATH=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
$(MOZ_SRC)/mozilla/dist/bin/regxpcom \
|
|
|
|
)
|
|
|
|
|
|
|
|
test:: install
|
|
|
|
( \
|
|
|
|
export PYTHONPATH=$(INSTALLDIR):$(PYTHONPATH) ; \
|
|
|
|
export MOZILLA_FIVE_HOME=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
export LD_LIBRARY_PATH=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
python test/regrtest.py \
|
|
|
|
)
|
|
|
|
|
|
|
|
runpython: install
|
|
|
|
( \
|
|
|
|
export PYTHONPATH=$(INSTALLDIR):$(PYTHONPATH) ; \
|
|
|
|
export MOZILLA_FIVE_HOME=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
export LD_LIBRARY_PATH=$(MOZ_SRC)/mozilla/dist/bin ; \
|
|
|
|
python \
|
|
|
|
)
|
|
|
|
|
|
|
|
clean:
|
|
|
|
find . -name "*~" | xargs rm -f
|
|
|
|
find . -name "*.o" | xargs rm -f
|
|
|
|
find . -name "*.pyc" | xargs rm -f
|
|
|
|
find . -name "*.so" | xargs rm -f
|
|
|
|
|