Kaydet (Commit) 41893e08 authored tarafından Christian Lohmaier's avatar Christian Lohmaier

allow to use internal Python on Mac (Python built as framework)

üst 47a7b902
......@@ -85,10 +85,14 @@ $(DLLDEST)$/%.py: %.py
cp $? $@
.ENDIF # L10N_framework
ALLTAR : $(MISC)/pythonloader.component
ALLTAR : $(MISC)/pythonloader.component $(eq,$(OS),MACOSX $(MISC)/installname_loader $(NULL))
$(MISC)/pythonloader.component .ERRREMOVE : \
$(SOLARENV)/bin/createcomponent.xslt pythonloader.component
$(XSLTPROC) --nonet --stringparam uri \
'vnd.sun.star.expand:$$OOO_BASE_DIR/program/$(SHL1TARGETN:f)' -o $@ \
$(SOLARENV)/bin/createcomponent.xslt pythonloader.component
$(MISC)/installname_loader : $(LB)/$(TARGET)$(DLLPOST)
install_name_tool -change $(PYTHON_MAKEINSTALLDIR)/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython @loader_path/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython $<
touch $@
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# only, as published by the Free Software Foundation.
#
# OpenOffice.org is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License version 3 for more details
# (a copy is included in the LICENSE file that accompanied this code).
#
# You should have received a copy of the GNU Lesser General Public License
# version 3 along with OpenOffice.org. If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
#*************************************************************************
PRJ=..$/..
PRJNAME=pyuno
TARGET=pythonloader.uno
ENABLE_EXCEPTIONS=TRUE
# --- Settings -----------------------------------------------------
.INCLUDE : settings.mk
.IF "$(L10N_framework)"==""
DLLPRE =
#-------------------------------------------------------------------
.IF "$(OS)$(COMEX)" == "SOLARIS4"
# no -Bdirect for SunWS CC
DIRECT= $(LINKFLAGSDEFS)
.ENDIF
.IF "$(SYSTEM_PYTHON)" == "YES"
PYTHONLIB=$(PYTHON_LIBS)
CFLAGS+=$(PYTHON_CFLAGS)
.IF "$(EXTRA_CFLAGS)"!=""
PYTHONLIB+= -framework Python
.ENDIF # "$(EXTRA_CFLAGS)"!=""
.ELSE
.INCLUDE : pyversion.mk
CFLAGS+= -I$(SOLARINCDIR)$/python
.ENDIF
SHL1TARGET= $(TARGET)
SHL1STDLIBS= \
$(CPPULIB) \
$(CPPUHELPERLIB) \
$(SALLIB) \
$(PYUNOLIB) \
$(PYTHONLIB)
SHL1VERSIONMAP= $(SOLARENV)$/src$/component.map
SHL1DEPN=
SHL1IMPLIB= i$(TARGET)
SHL1LIBS= $(SLB)$/$(TARGET).lib
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME= $(SHL1TARGET)
SLOFILES= $(SLO)$/pyuno_loader.obj
# --- Targets ------------------------------------------------------
ALL : ALLTAR \
$(DLLDEST)$/pythonloader.py
.ENDIF # L10N_framework
.INCLUDE : target.mk
.IF "$(L10N_framework)"==""
$(DLLDEST)$/%.py: %.py
cp $? $@
.ENDIF # L10N_framework
ALLTAR : $(MISC)/pythonloader.component
$(MISC)/pythonloader.component .ERRREMOVE : \
$(SOLARENV)/bin/createcomponent.xslt pythonloader.component
$(XSLTPROC) --nonet --stringparam uri \
'vnd.sun.star.expand:$$OOO_BASE_DIR/program/$(SHL1TARGETN:f)' -o $@ \
$(SOLARENV)/bin/createcomponent.xslt pythonloader.component
--- pyuno/source/loader/makefile.mk
+++ pyuno/source/loader/makefile.mk
@@ -89,11 +89,17 @@
$(DLLDEST)$/pyuno_services.rdb
.ENDIF # L10N_framework
+ALLTAR: $(eq,$(OS),MACOSX $(MISC)/installname_loader $(NULL))
+
.INCLUDE : target.mk
.IF "$(L10N_framework)"==""
$(DLLDEST)$/%.py: %.py
cp $? $@
+$(MISC)/installname_loader : $(LB)/$(TARGET)$(DLLPOST)
+ install_name_tool -change $(PYTHON_MAKEINSTALLDIR)/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython @loader_path/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython $<
+ touch $@
+
$(DLLDEST)$/pyuno_services.rdb : makefile.mk $(DLLDEST)$/$(DLLPRE)$(TARGET)$(DLLPOST)
-rm -f $@ $(DLLDEST)$/pyuno_services.tmp $(DLLDEST)$/pyuno_services.rdb
cd $(DLLDEST) && $(REGCOMP) -register -r pyuno_services.tmp -wop $(foreach,i,$(COMPONENTS) -c $(i))
......@@ -121,7 +121,7 @@ $(LB)$/lib$(TARGET).a: $(MISC)$/$(TARGET).def
targetdll=$(LB)$/$(TARGET)$(DLLPOST)
.ENDIF
ALLTAR : \
ALLTAR : $(eq,$(OS),MACOSX $(MISC)/installname_module $(NULL)) \
$(DLLDEST)$/uno.py \
$(DLLDEST)$/unohelper.py \
$(targetdll) \
......@@ -134,6 +134,12 @@ ALLTAR : \
$(DLLDEST)$/%.py: %.py
cp $? $@
$(MISC)/installname_module : $(LB)/$(DLLPRE)$(TARGET)$(DLLPOST)
install_name_tool -change $(PYTHON_MAKEINSTALLDIR)/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython @loader_path/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython $<
# hack to make checkdll happy
ln -sf $(SOLARLIBDIR)/OOoPython.framework $(LB)/OOoPython.framework
touch $@
$(MISC)$/$(PYUNORC) : pyuno
-rm -f $@
cat pyuno > $@
......
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# only, as published by the Free Software Foundation.
#
# OpenOffice.org is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License version 3 for more details
# (a copy is included in the LICENSE file that accompanied this code).
#
# You should have received a copy of the GNU Lesser General Public License
# version 3 along with OpenOffice.org. If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
#*************************************************************************
PRJ=..$/..
PRJNAME=pyuno
TARGET=pyuno
ENABLE_EXCEPTIONS=TRUE
LINKFLAGSDEFS = # do not fail with missing symbols
# --- Settings -----------------------------------------------------
.INCLUDE : settings.mk
.IF "$(L10N_framework)"==""
#-------------------------------------------------------------------
.IF "$(OS)$(COMEX)" == "SOLARIS4"
# no -Bdirect for SunWS CC
DIRECT = $(LINKFLAGSDEFS)
.ENDIF
# special setting from environment
.IF "$(EXTRA_CFLAGS)"!=""
EXTRA_FRAMEWORK_FLAG=-framework Python
.ENDIF # .IF "$(EXTRA_CFLAGS)"!=""
.IF "$(GUI)" == "UNX"
PYUNORC=pyunorc
.ELSE
.INCLUDE : pyversion.mk
PYUNORC=pyuno.ini
DLLPOST=.pyd
.ENDIF
.IF "$(SYSTEM_PYTHON)" == "YES"
PYTHONLIB=$(PYTHON_LIBS)
CFLAGS+=$(PYTHON_CFLAGS)
.ELSE # "$(SYSTEM_PYTHON)" == "YES"
.INCLUDE : pyversion.mk
CFLAGS+=-I$(SOLARINCDIR)$/python
.ENDIF # "$(SYSTEM_PYTHON)" == "YES"
SHL1TARGET=$(TARGET)
SLOFILES= \
$(SLO)$/pyuno_runtime.obj \
$(SLO)$/pyuno.obj \
$(SLO)$/pyuno_callable.obj \
$(SLO)$/pyuno_module.obj \
$(SLO)$/pyuno_type.obj \
$(SLO)$/pyuno_util.obj \
$(SLO)$/pyuno_except.obj \
$(SLO)$/pyuno_adapter.obj \
$(SLO)$/pyuno_gc.obj
# remove this, when issue i35064 is integrated
.IF "$(COM)"=="GCC"
NOOPTFILES= \
$(SLO)$/pyuno_module.obj
.ENDIF # "$(COM)"=="GCC"
SHL1STDLIBS= \
$(CPPULIB) \
$(CPPUHELPERLIB) \
$(SALLIB) \
$(PYTHONLIB) \
$(EXTRA_FRAMEWORK_FLAG)
SHL1DEPN=
SHL1LIBS= $(SLB)$/$(TARGET).lib
SHL1IMPLIB= i$(TARGET)
SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME= $(SHL1TARGET)
DEF1DEPN= $(MISC)$/pyuno.flt
DEFLIB1NAME=$(TARGET)
# --- Targets ------------------------------------------------------
.IF "$(GUI)$(COM)"=="WNTGCC"
ALLTAR : \
$(DLLDEST)$/uno.py \
$(DLLDEST)$/unohelper.py \
$(MISC)$/$(PYUNORC) \
$(LB)$/lib$(TARGET).a
$(LB)$/lib$(TARGET).a: $(MISC)$/$(TARGET).def
dlltool --dllname $(TARGET)$(DLLPOST) --input-def=$(MISC)$/$(TARGET).def --kill-at --output-lib=$(LB)$/lib$(TARGET).a
.ELSE
.IF "$(GUI)"!="WNT"
# For some reason the build breaks on Windows if this is listed in the
# prerequisite list of ALLTAR, but pyuno.pyd still gets produced. Go
# figure. But we need it on non-Windows.
targetdll=$(LB)$/$(TARGET)$(DLLPOST)
.ENDIF
ALLTAR : \
$(DLLDEST)$/uno.py \
$(DLLDEST)$/unohelper.py \
$(targetdll) \
$(MISC)$/$(PYUNORC)
.ENDIF
.ENDIF
.INCLUDE : target.mk
.IF "$(L10N_framework)"==""
$(DLLDEST)$/%.py: %.py
cp $? $@
$(MISC)$/$(PYUNORC) : pyuno
-rm -f $@
cat pyuno > $@
$(MISC)$/pyuno.flt : pyuno.flt
-rm -f $@
cat $? > $@
.IF "$(DLLPRE)"!=""
# python does not accept the "lib" prefix in the module library
$(LB)$/$(TARGET)$(DLLPOST) : $(LB)$/$(DLLPRE)$(TARGET)$(DLLPOST)
-rm -f $@
ln -s $? $@
.ENDIF
.ENDIF # L10N_framework
# vim:set shiftwidth=4 softtabstop=4 expandtab:
--- pyuno/source/module/makefile.mk
+++ pyuno/source/module/makefile.mk
@@ -120,7 +120,7 @@
$(LB)$/lib$(TARGET).a: $(MISC)$/$(TARGET).def
dlltool --dllname $(TARGET)$(DLLPOST) --input-def=$(MISC)$/$(TARGET).def --kill-at --output-lib=$(LB)$/lib$(TARGET).a
.ELSE
-ALLTAR : \
+ALLTAR : $(eq,$(OS),MACOSX $(MISC)/installname_module $(NULL)) \
$(DLLDEST)$/uno.py \
$(DLLDEST)$/unohelper.py \
$(PYUNO_MODULE) \
@@ -157,6 +157,11 @@
@+source $(MISC)$/$(@:b).cmd
.ENDIF
+$(MISC)/installname_module : $(LB)/$(DLLPRE)$(TARGET)$(DLLPOST)
+ install_name_tool -change $(PYTHON_MAKEINSTALLDIR)/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython @loader_path/OOoPython.framework/Versions/$(PYMAJOR).$(PYMINOR)/OOoPython $<
+ # hack to make checkdll happy
+ ln -sf $(SOLARLIBDIR)/OOoPython.framework $(LB)/OOoPython.framework
+ touch $@
$(MISC)$/$(PYUNORC) : pyuno
-rm -f $@
......@@ -37,7 +37,7 @@ UWINAPILIB =
.IF "$(SYSTEM_PYTHON)" == "YES"
systempython:
@echo "Not building python-core because system python is being used"
@echo "Not building python-core because system python is being used"
.ELSE
.INCLUDE : pyversion.mk
......@@ -54,6 +54,7 @@ PYTHONBINARY=$(DESTROOT)$/bin$/python$(EXECPOST)
.ENDIF
.ENDIF
.IF "$(OS)" != "MACOSX"
FINDLIBFILES_TMP:=$(subst,/,$/ \
$(shell @$(FIND) $(SOLARLIBDIR)$/python -type f| $(GREP) -v "\.pyc" |$(GREP) -v "\.py~" |$(GREP) -v .orig | $(GREP) -v _failed))
FINDLIBFILES=$(subst,$(SOLARLIBDIR)$/python, $(FINDLIBFILES_TMP))
......@@ -75,15 +76,18 @@ OBJFILES = $(OBJ)$/python.obj
ALLTAR: \
$(BIN)$/$(PYDIRNAME).zip
.ENDIF
.IF "$(GUI)" == "UNX"
ALLTAR : $(BIN)$/python.sh
STRIPMAC=-e '/^NONMACSECTION/d' -e '/^MACSECTION/,$$d'
STRIPNONMAC=-e '/^NONMACSECTION/,/^MACSECTION/d'
$(BIN)$/python.sh : python.sh
-rm -f $@
cat $? > $@
sed 's/%%PYVERSION%%/$(PYVERSION)/g' < $@ | sed 's/%%OOO_LIBRARY_PATH_VAR%%/$(OOO_LIBRARY_PATH_VAR)/g' > $@.new
mv $@.new $@
chmod +x $@
$(COMMAND_ECHO)sed -e 's/%%PYVERSION%%/$(eq,$(OS),MACOSX $(PYMAJOR).$(PYMINOR) $(PYVERSION))/g' -e 's/%%OOO_LIBRARY_PATH_VAR%%/$(OOO_LIBRARY_PATH_VAR)/g' \
$(!eq,$(OS),MACOSX $(STRIPNONMAC) $(STRIPMAC)) < $? > $@
@chmod +x $@
.ENDIF
$(OBJ)$/python.obj: $(OUT)$/inc$/pyversion.hxx
......@@ -93,7 +97,7 @@ $(OUT)$/inc$/pyversion.hxx: pyversion.inc
$(BIN)$/$(PYDIRNAME).zip : $(FILES)
.IF "$(GUI)" == "UNX"
.IF "$(OS)" != "MACOSX" && "$(OS)" != "AIX"
.IF "$(OS)" != "AIX"
cd $(DESTROOT) && find . -name '*$(DLLPOST)' | xargs strip
.ENDIF
.ENDIF
......@@ -127,6 +131,4 @@ $(DESTROOT)$/bin$/python$(EXECPOST) : $(SOLARBINDIR)$/python$(EXECPOST)
.ENDIF
.ELSE
ivo:
$(ECHO)
.ENDIF # L10N_framework
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# only, as published by the Free Software Foundation.
#
# OpenOffice.org is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License version 3 for more details
# (a copy is included in the LICENSE file that accompanied this code).
#
# You should have received a copy of the GNU Lesser General Public License
# version 3 along with OpenOffice.org. If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
#*************************************************************************
PRJNAME=pyuno
PRJ=..
TARGET=zipcore
LIBTARGET=NO
.INCLUDE : settings.mk
.IF "$(L10N_framework)"==""
UWINAPILIB =
.IF "$(SYSTEM_PYTHON)" == "YES"
systempython:
@echo "Not building python-core because system python is being used"
.ELSE
.INCLUDE : pyversion.mk
PYDIRNAME=python-core-$(PYVERSION)
DESTROOT=$(BIN)$/$(PYDIRNAME)
.IF "$(GUI)" == "UNX"
PYTHONBINARY=$(BIN)$/python$(EXECPOST).bin
.ELSE
.IF "$(COM)" == "GCC"
PYTHONBINARY=$(DESTROOT)$/bin$/python.bin
.ELSE
PYTHONBINARY=$(DESTROOT)$/bin$/python$(EXECPOST)
.ENDIF
.ENDIF
FINDLIBFILES_TMP:=$(subst,/,$/ \
$(shell @$(FIND) $(SOLARLIBDIR)$/python -type f| $(GREP) -v "\.pyc" |$(GREP) -v "\.py~" |$(GREP) -v .orig | $(GREP) -v _failed))
FINDLIBFILES=$(subst,$(SOLARLIBDIR)$/python, $(FINDLIBFILES_TMP))
FILES=\
$(PYTHONBINARY) \
$(foreach,i,$(FINDLIBFILES) $(DESTROOT)$/lib$(i))
.IF "$(OS)" == "WNT"
APP1TARGET = python
APP1OBJS = $(OBJFILES) $(SOLARLIBDIR)$/pathutils-obj.obj
APP1STDLIBS =
APP1RPATH = BRAND
OBJFILES = $(OBJ)$/python.obj
.ENDIF
.INCLUDE: target.mk
ALLTAR: \
$(BIN)$/$(PYDIRNAME).zip
.IF "$(GUI)" == "UNX"
ALLTAR : $(BIN)$/python.sh
$(BIN)$/python.sh : python.sh
-rm -f $@
cat $? > $@
sed 's/%%PYVERSION%%/$(PYVERSION)/g' < $@ | sed 's/%%OOO_LIBRARY_PATH_VAR%%/$(OOO_LIBRARY_PATH_VAR)/g' > $@.new
mv $@.new $@
chmod +x $@
.ENDIF
$(OBJ)$/python.obj: $(OUT)$/inc$/pyversion.hxx
$(OUT)$/inc$/pyversion.hxx: pyversion.inc
$(SED) $(USQ)s/@/$(PYVERSION)/g$(USQ) < $< > $@
$(BIN)$/$(PYDIRNAME).zip : $(FILES)
.IF "$(GUI)" == "UNX"
.IF "$(OS)" != "MACOSX" && "$(OS)" != "AIX"
cd $(DESTROOT) && find . -name '*$(DLLPOST)' | xargs strip
.ENDIF
.ENDIF
-rm -f $@
cd $(BIN) && zip -r $(PYDIRNAME).zip $(PYDIRNAME)
$(DESTROOT)$/lib$/% : $(SOLARLIBDIR)$/python$/%
-$(MKDIRHIER) $(@:d)
-rm -f $@
cat $< > $@
.IF "$(GUI)"== "UNX"
$(BIN)$/python$(EXECPOST).bin : $(SOLARBINDIR)$/python$(EXECPOST)
-$(MKDIRHIER) $(@:d)
-rm -f $@
cat $< > $@
.IF "$(OS)" != "MACOSX" && "$(OS)" != "AIX"
strip $@
.ENDIF
chmod +x $@
.ELSE
.IF "$(COM)" == "GCC"
$(DESTROOT)$/bin$/python.bin : $(SOLARBINDIR)$/python$(EXECPOST)
.ELSE
$(DESTROOT)$/bin$/python$(EXECPOST) : $(SOLARBINDIR)$/python$(EXECPOST)
.ENDIF
-$(MKDIRHIER) $(@:d)
-rm -f $@
cat $< > $@
.ENDIF
.ENDIF
.ELSE
ivo:
$(ECHO)
.ENDIF # L10N_framework
......@@ -30,7 +30,7 @@
sd_cwd="`pwd`"
if [ -h "$0" ] ; then
sd_basename=`basename "$0"`
sd_script=`ls -l "$0" | sed "s/.*${sd_basename} -> //g"`
sd_script=`ls -l "$0" | sed "s/.*${sd_basename} -> //g"`
cd "`dirname "$0"`"
cd "`dirname "$sd_script"`"
else
......@@ -56,6 +56,7 @@ export UNO_PATH
: ${URE_BOOTSTRAP=vnd.sun.star.pathname:$sd_prog/fundamentalrc}
export URE_BOOTSTRAP
NONMACSECTION
PYTHONPATH=$sd_prog/../basis-link/program:$sd_prog/../basis-link/program/python-core-%%PYVERSION%%/lib:$sd_prog/../basis-link/program/python-core-%%PYVERSION%%/lib/lib-dynload:$sd_prog/../basis-link/program/python-core-%%PYVERSION%%/lib/lib-tk:$sd_prog/../basis-link/program/python-core-%%PYVERSION%%/lib/site-packages${PYTHONPATH+:$PYTHONPATH}
export PYTHONPATH
PYTHONHOME=$sd_prog/../basis-link/program/python-core-%%PYVERSION%%
......@@ -63,3 +64,13 @@ export PYTHONHOME
# execute binary
exec "$sd_prog/../basis-link/program/python.bin" "$@"
MACSECTION
PYTHONHOME=$sd_prog/../basis-link/program/OOoPython.framework
export PYTHONHOME
pybasislibdir=$PYTHONHOME/Versions/%%PYVERSION%%/lib/python%%PYVERSION%%
PYTHONPATH=$sd_prog/../basis-link/program:$pybasislibdir:$pybasislibdir/lib-dynload:$pybasislibdir/lib-tk:$pybasislibdir/site-packages${PYTHONPATH+:$PYTHONPATH}
export PYTHONPATH
# execute binary
exec "$PYTHONHOME/Versions/%%PYVERSION%%/Resources/Python.app/Contents/MacOS/OOoPython" "$@"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment