diff options
Diffstat (limited to 'external/python3/ExternalProject_python3.mk')
-rw-r--r-- | external/python3/ExternalProject_python3.mk | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/external/python3/ExternalProject_python3.mk b/external/python3/ExternalProject_python3.mk new file mode 100644 index 000000000..91c6c1948 --- /dev/null +++ b/external/python3/ExternalProject_python3.mk @@ -0,0 +1,184 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_ExternalProject_ExternalProject,python3)) + +$(eval $(call gb_ExternalProject_use_externals,python3,\ + expat \ + $(if $(filter LINUX,$(OS)),libffi) \ + openssl \ + zlib \ +)) + +$(eval $(call gb_ExternalProject_register_targets,python3,\ + build \ + $(if $(filter MACOSX,$(OS)),\ + fixscripts \ + fixinstallnames \ + executables \ + removeunnecessarystuff \ + ) \ +)) + +ifeq ($(OS),WNT) + +# TODO: using Debug configuration and related mangling of pyconfig.h + +# at least for MSVC 2008 it is necessary to clear MAKEFLAGS because +# nmake is invoked +$(call gb_ExternalProject_get_state_target,python3,build) : + $(call gb_Trace_StartRange,python3,EXTERNAL) + $(call gb_ExternalProject_run,build,\ + MAKEFLAGS= MSBuild.exe pcbuild.sln /t:Build \ + /p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \ + /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \ + /p:opensslIncludeDir=$(call gb_UnpackedTarball_get_dir,openssl)/include \ + /p:opensslOutDir=$(call gb_UnpackedTarball_get_dir,openssl)/out32dll \ + /p:zlibDir=$(call gb_UnpackedTarball_get_dir,zlib) \ + /maxcpucount \ + $(if $(filter 160,$(VCVER)),/p:PlatformToolset=v142 /p:VisualStudioVersion=16.0 /ToolsVersion:Current) \ + $(if $(filter 10,$(WINDOWS_SDK_VERSION)),/p:WindowsTargetPlatformVersion=$(UCRTVERSION)) \ + ,PCBuild) + $(call gb_Trace_EndRange,python3,EXTERNAL) + +else + +# --with-system-expat: this should find the one in the workdir (or system) + +# OPENSSL_INCLUDES OPENSSL_LDFLAGS OPENSSL_LIBS cannot be set via commandline! +# use --with-openssl instead, which requires include/ and lib/ subdirs. + +# libffi is not all that stable, with 3 different SONAMEs currently, so we +# have to bundle it; --without-system-ffi does not work any more on Linux. +# Unfortuantely (as of 3.7) pkg-config is used to locate libffi so we do some +# hacks to find the libffi.pc in workdir by overriding PKG_CONFIG_LIBDIR. +# Also, pkg-config is only used to find the headers, the libdir needs to be +# passed extra. + +# create a symlink "LO_lib" because the .so are in a directory with platform +# specific name like build/lib.linux-x86_64-3.3 + +python3_cflags = $(ZLIB_CFLAGS) +ifneq (,$(ENABLE_VALGRIND)) + python3_cflags += $(VALGRIND_CFLAGS) +endif + +# This happens to override the -O3 in the default OPT set in +# workdir/UnpackedTarball/python3/configure.ac while keeping the other content of that OPT intact: +ifeq ($(ENABLE_OPTIMIZED),) +python3_cflags += $(gb_COMPILERNOOPTFLAGS) +endif + +$(call gb_ExternalProject_get_state_target,python3,build) : + $(call gb_Trace_StartRange,python3,EXTERNAL) + $(call gb_ExternalProject_run,build,\ + $(if $(filter MACOSX,$(OS)), \ + $(if $(filter 10.8 10.9 10.10 10.11,$(MACOSX_DEPLOYMENT_TARGET)), \ + ac_cv_func_getentropy=no \ + ac_cv_func_clock_gettime=no \ + ) \ + ) \ + ./configure \ + $(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \ + $(if $(ENABLE_VALGRIND),--with-valgrind) \ + --prefix=/python-inst \ + --with-system-expat \ + $(if $(filter AIX,$(OS)), \ + --disable-ipv6 --with-threads OPT="-g0 -fwrapv -O3 -Wall") \ + $(if $(filter MACOSX,$(OS)), \ + $(if $(filter INTEL,$(CPUNAME)),--enable-universalsdk=$(MACOSX_SDK_PATH) \ + --with-universal-archs=intel \ + ) \ + --enable-framework=/@__________________________________________________OOO --with-framework-name=LibreOfficePython, \ + --enable-shared \ + $(if $(filter 1090 101000 101100 101200,$(MAC_OS_X_VERSION_MIN_REQUIRED)),ac_cv_func_utimensat=no) \ + ) \ + $(if $(SYSTEM_OPENSSL)$(DISABLE_OPENSSL),,\ + --with-openssl=$(call gb_UnpackedTarball_get_dir,openssl) \ + ) \ + $(if $(filter LINUX,$(OS)), \ + PKG_CONFIG_LIBDIR="$(call gb_UnpackedTarball_get_dir,libffi)/$(HOST_PLATFORM)$${PKG_CONFIG_LIBDIR:+:$$PKG_CONFIG_LIBDIR}" \ + ) \ + CC="$(strip $(CC) \ + $(if $(SYSTEM_EXPAT),,-I$(call gb_UnpackedTarball_get_dir,expat)/lib) \ + $(if $(SYSBASE), -I$(SYSBASE)/usr/include) \ + )" \ + $(if $(python3_cflags),CFLAGS='$(python3_cflags)') \ + $(if $(filter -fsanitize=%,$(CC)),LINKCC="$(CXX) -pthread") \ + LDFLAGS="$(strip $(LDFLAGS) \ + $(if $(filter LINUX,$(OS)),-L$(call gb_UnpackedTarball_get_dir,libffi)/$(HOST_PLATFORM)/.libs) \ + $(if $(SYSTEM_EXPAT),,-L$(gb_StaticLibrary_WORKDIR)) \ + $(if $(SYSTEM_ZLIB),,-L$(gb_StaticLibrary_WORKDIR)) \ + $(if $(SYSBASE), -L$(SYSBASE)/usr/lib) \ + $(gb_LTOFLAGS) \ + )" \ + && MAKEFLAGS= $(MAKE) \ + $(if $(filter MACOSX,$(OS)),DESTDIR=$(EXTERNAL_WORKDIR)/python-inst install) \ + $(if $(SYSTEM_ZLIB),,ZLIB_INCDIR=$(WORKDIR)/UnpackedTarball/zlib) \ + && ln -s build/lib.* LO_lib \ + ) + $(call gb_Trace_EndRange,python3,EXTERNAL) + +endif + +ifeq ($(OS),MACOSX) + +python3_fw_prefix=$(call gb_UnpackedTarball_get_dir,python3)/python-inst/@__________________________________________________OOO/LibreOfficePython.framework + +# rule to allow relocating the whole framework, removing reference to buildinstallation directory +$(call gb_ExternalProject_get_state_target,python3,fixscripts) : $(call gb_ExternalProject_get_state_target,python3,build) + $(call gb_Output_announce,python3 - remove reference to installroot from scripts,build,CUS,5) + $(COMMAND_ECHO)for file in \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/2to3 \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/2to3-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/idle$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/pydoc$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)-config \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m-config \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/pyvenv-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) ; do \ + { rm "$$file" && $(gb_AWK) '\ + BEGIN {print "#!/bin/bash\n\ +origpath=$$(pwd)\n\ +bindir=$$(cd $$(dirname \"$$0\") ; pwd)\n\ +cd \"$$origpath\"\n\ +\"$$bindir/../Resources/Python.app/Contents/MacOS/LibreOfficePython\" - $$@ <<EOF"} \ + FNR==1{next} \ + {print} \ + END {print "EOF"}' > "$$file" ; } < "$$file" ; chmod +x "$$file" ; done + touch $@ + +$(call gb_ExternalProject_get_state_target,python3,fixinstallnames) : $(call gb_ExternalProject_get_state_target,python3,build) + $(INSTALL_NAME_TOOL) -change \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/LibreOfficePython \ + @executable_path/../../../../LibreOfficePython \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/Resources/Python.app/Contents/MacOS/LibreOfficePython + for file in $(shell $(FIND) $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib-dynload -name "*.so") ; do \ + $(INSTALL_NAME_TOOL) -change \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/LibreOfficePython \ + @loader_path/../../../LibreOfficePython $$file ; done + touch $@ + +# also delete binaries that are symlinked in scp2 +$(call gb_ExternalProject_get_state_target,python3,executables) : $(call gb_ExternalProject_get_state_target,python3,build) + cd $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin ; \ + for file in python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \ + python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m ; do \ + $(INSTALL_NAME_TOOL) -change \ + $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/LibreOfficePython \ + @executable_path/../LibreOfficePython $$file ; done + touch $@ + +$(call gb_ExternalProject_get_state_target,python3,removeunnecessarystuff) : $(call gb_ExternalProject_get_state_target,python3,build) + $(call gb_Output_announce,python3 - remove the stuff we don't need to ship,build,CUS,5) + rm -rf $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/test + touch $@ + +endif + +# vim: set noet sw=4 ts=4: |