From 1dfb0c99365857a32c5a8bb613882ffa656a207a Mon Sep 17 00:00:00 2001 From: Xisco Fauli Date: Tue, 23 Sep 2025 13:17:41 +0200 Subject: [PATCH] tdf#168512: python3: bundle sqlite3 Add sqlite3.patch.1 since sqlite3.vcxproj expects the sqlite version in the path Change-Id: Ieb262b5401447cc9cc8c8d68197b3ec492c6ed94 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191394 Tested-by: Jenkins Reviewed-by: Xisco Fauli --- external/python3/ExternalPackage_python3.mk | 12 +++++++++++- external/python3/ExternalProject_python3.mk | 6 ++++-- external/python3/UnpackedTarball_python3.mk | 1 + external/python3/generateExternalPackage.py | 2 +- .../python3/python-3.5.4-msvc-disable.patch.1 | 17 +++-------------- external/python3/sqlite3.patch.1 | 11 +++++++++++ pyuno/Module_pyuno.mk | 1 + pyuno/PythonTest_pyuno_pytests_testsqlite3.mk | 16 ++++++++++++++++ pyuno/qa/pytests/testsqlite3.py | 14 ++++++++++++++ 9 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 external/python3/sqlite3.patch.1 create mode 100644 pyuno/PythonTest_pyuno_pytests_testsqlite3.mk create mode 100644 pyuno/qa/pytests/testsqlite3.py diff --git a/external/python3/ExternalPackage_python3.mk b/external/python3/ExternalPackage_python3.mk index 056cd5973513..5653aa89857b 100644 --- a/external/python3/ExternalPackage_python3.mk +++ b/external/python3/ExternalPackage_python3.mk @@ -22,6 +22,7 @@ endif $(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/bin/python.exe,PCbuild/$(python_arch_subdir)python$(if $(MSVC_USE_DEBUG_RUNTIME),_d).exe)) $(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/python$(PYTHON_VERSION_MAJOR)$(PYTHON_VERSION_MINOR)$(if $(MSVC_USE_DEBUG_RUNTIME),_d).dll,PCbuild/$(python_arch_subdir)python$(PYTHON_VERSION_MAJOR)$(PYTHON_VERSION_MINOR)$(if $(MSVC_USE_DEBUG_RUNTIME),_d).dll)) +$(eval $(call gb_ExternalPackage_add_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib,PCbuild/$(python_arch_subdir)sqlite3$(if $(MSVC_USE_DEBUG_RUNTIME),_d).dll)) ifeq ($(MSVC_USE_DEBUG_RUNTIME),) $(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/python$(PYTHON_VERSION_MAJOR).dll,PCbuild/$(python_arch_subdir)python$(PYTHON_VERSION_MAJOR).dll)) endif @@ -36,6 +37,7 @@ python3_EXTENSION_MODULES= \ PCbuild/$(python_arch_subdir)_overlapped$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \ PCbuild/$(python_arch_subdir)_queue$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \ PCbuild/$(python_arch_subdir)_socket$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \ + PCbuild/$(python_arch_subdir)_sqlite3$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \ PCbuild/$(python_arch_subdir)_ssl$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \ PCbuild/$(python_arch_subdir)_uuid$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \ PCbuild/$(python_arch_subdir)_zoneinfo$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \ @@ -117,6 +119,7 @@ python3_EXTENSION_MODULES= \ Modules/_sha2.$(python3_EXTENSION_MODULE_SUFFIX).so \ Modules/_sha3.$(python3_EXTENSION_MODULE_SUFFIX).so \ Modules/_socket.$(python3_EXTENSION_MODULE_SUFFIX).so \ + Modules/_sqlite3.$(python3_EXTENSION_MODULE_SUFFIX).so \ Modules/spwd.$(python3_EXTENSION_MODULE_SUFFIX).so \ $(if $(ENABLE_OPENSSL), \ Modules/_ssl.$(python3_EXTENSION_MODULE_SUFFIX).so \ @@ -173,7 +176,7 @@ endif # packages not shipped: -# dbm, sqlite3 - need some database stuff +# dbm - need some database stuff # curses - need curses to build the C module # idlelib, tkinter, turtledemo - need Tk to build the C module # test - probably unnecessary? was explicitly removed #i116738# @@ -1726,6 +1729,13 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p Lib/site-packages/README.txt \ )) +$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/sqlite3,\ + Lib/sqlite3/__init__.py \ + Lib/sqlite3/__main__.py \ + Lib/sqlite3/dbapi2.py \ + Lib/sqlite3/dump.py \ +)) + $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/tomllib,\ Lib/tomllib/__init__.py \ Lib/tomllib/_parser.py \ diff --git a/external/python3/ExternalProject_python3.mk b/external/python3/ExternalProject_python3.mk index af49f9bdd081..30a8cdcbd7ba 100644 --- a/external/python3/ExternalProject_python3.mk +++ b/external/python3/ExternalProject_python3.mk @@ -14,6 +14,7 @@ $(eval $(call gb_ExternalProject_use_externals,python3,\ expat \ $(if $(filter WNT LINUX,$(OS)),libffi) \ openssl \ + $(if $(ENABLE_SQLITE3),sqlite3) \ zlib \ )) @@ -42,6 +43,7 @@ $(call gb_ExternalProject_get_state_target,python3,build) : /p:opensslIncludeDir=$(gb_UnpackedTarball_workdir)/openssl/include \ /p:opensslOutDir=$(gb_UnpackedTarball_workdir)/openssl \ /p:zlibDir=$(gb_UnpackedTarball_workdir)/zlib \ + /p:sqlite3Dir=$(gb_UnpackedTarball_workdir)/sqlite3 \ /p:libffiOutDir=$(gb_UnpackedTarball_workdir)/libffi/$(HOST_PLATFORM)/.libs \ /p:libffiIncludeDir=$(gb_UnpackedTarball_workdir)/libffi/$(HOST_PLATFORM)/include \ /maxcpucount \ @@ -112,6 +114,7 @@ $(call gb_ExternalProject_get_state_target,python3,build) : $(if $(filter -fsanitize=undefined,$(CC)),-fno-sanitize=function) \ $(if $(SYSTEM_BZIP2),,-I$(gb_UnpackedTarball_workdir)/bzip2) \ $(if $(SYSTEM_EXPAT),,-I$(gb_UnpackedTarball_workdir)/expat/lib) \ + $(if $(SYSTEM_SQLITE3),,-I$(gb_UnpackedTarball_workdir)/sqlite3) \ $(if $(SYSBASE), -I$(SYSBASE)/usr/include) \ )" \ $(if $(python3_cflags),CFLAGS='$(python3_cflags)') \ @@ -121,6 +124,7 @@ $(call gb_ExternalProject_get_state_target,python3,build) : $(if $(SYSTEM_BZIP2),,-L$(gb_UnpackedTarball_workdir)/bzip2) \ $(if $(SYSTEM_EXPAT),,-L$(gb_StaticLibrary_WORKDIR)) \ $(if $(SYSTEM_ZLIB),,-L$(gb_StaticLibrary_WORKDIR)) \ + $(if $(SYSTEM_SQLITE3),,-L$(gb_StaticLibrary_WORKDIR)) \ $(if $(SYSBASE), -L$(SYSBASE)/usr/lib) \ $(gb_LTOFLAGS) \ )" \ @@ -203,7 +207,6 @@ $(call gb_ExternalProject_get_state_target,python3,executables) : $(call gb_Exte $(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 -r $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/dbm - rm -r $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/sqlite3 rm -r $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/curses rm -r $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/idlelib rm -r $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/tkinter @@ -211,7 +214,6 @@ $(call gb_ExternalProject_get_state_target,python3,removeunnecessarystuff) : $(c rm -r $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/test # Then the binary libraries rm $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib-dynload/_dbm.$(python3_EXTENSION_MODULE_SUFFIX).so - rm $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib-dynload/_sqlite3.$(python3_EXTENSION_MODULE_SUFFIX).so rm $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib-dynload/_curses.$(python3_EXTENSION_MODULE_SUFFIX).so rm $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib-dynload/_curses_panel.$(python3_EXTENSION_MODULE_SUFFIX).so rm $(python3_fw_prefix)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib-dynload/_test*.$(python3_EXTENSION_MODULE_SUFFIX).so diff --git a/external/python3/UnpackedTarball_python3.mk b/external/python3/UnpackedTarball_python3.mk index a34c4c58fdcc..e47088eb256b 100644 --- a/external/python3/UnpackedTarball_python3.mk +++ b/external/python3/UnpackedTarball_python3.mk @@ -42,6 +42,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,python3,\ external/python3/ubsan.patch.0 \ external/python3/init-sys-streams-cant-initialize-stdin.patch.0 \ external/python3/setuptools.patch.1 \ + external/python3/sqlite3.patch.1 \ )) ifneq ($(filter DRAGONFLY FREEBSD LINUX NETBSD OPENBSD SOLARIS,$(OS)),) diff --git a/external/python3/generateExternalPackage.py b/external/python3/generateExternalPackage.py index afa4aab0610e..18fe5af3e10b 100755 --- a/external/python3/generateExternalPackage.py +++ b/external/python3/generateExternalPackage.py @@ -10,7 +10,7 @@ from os import path, walk if __name__ == '__main__': - ignoredPackages = ["dbm", "curses", "test", "tkinter", "turtledemo", "sqlite3", "idlelib"] + ignoredPackages = ["dbm", "curses", "test", "tkinter", "turtledemo", "idlelib"] coreDir = path.dirname(path.dirname(path.dirname(path.abspath(__file__)))) pythonDir = path.join(coreDir, "workdir/UnpackedTarball/python3") diff --git a/external/python3/python-3.5.4-msvc-disable.patch.1 b/external/python3/python-3.5.4-msvc-disable.patch.1 index 74a96f8800e3..81aca78fbea1 100644 --- a/external/python3/python-3.5.4-msvc-disable.patch.1 +++ b/external/python3/python-3.5.4-msvc-disable.patch.1 @@ -36,16 +36,7 @@ diff -ru python3.orig/PCbuild/pcbuild.sln python3/PCbuild/pcbuild.sln Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcxproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_decimal", "_decimal.vcxproj", "{0E9791DB-593A-465F-98BC-681011311617}" -@@ -73,8 +63,6 @@ - EndProject - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcxproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}" - EndProject --Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_sqlite3", "_sqlite3.vcxproj", "{13CECB97-4119-4316-9D42-8534019A5A44}" --EndProject - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_ssl", "_ssl.vcxproj", "{C6E20F84-3247-4AD6-B051-B073268F73BA}" - EndProject - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcxproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}" -@@ -85,22 +73,14 @@ +@@ -75,20 +75,14 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testimportmultiple", "_testimportmultiple.vcxproj", "{36D0C52C-DF4E-45D0-8BC7-E294C3ABC781}" EndProject @@ -63,11 +54,9 @@ diff -ru python3.orig/PCbuild/pcbuild.sln python3/PCbuild/pcbuild.sln EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_hashlib", "_hashlib.vcxproj", "{447F05A8-F581-4CAC-A466-5AC7936E207E}" -EndProject --Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcxproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}" --EndProject - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcxproj", "{9E48B300-37D1-11DD-8C41-005056C00008}" + Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite3", "sqlite3.vcxproj", "{A1A295E5-463C-437F-81CA-1F32367685DA}" EndProject - Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python3dll", "python3dll.vcxproj", "{885D4898-D08D-4091-9C40-C700CFE3FC5A}" + Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcxproj", "{9E48B300-37D1-11DD-8C41-005056C00008}" @@ -139,8 +119,6 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_queue", "_queue.vcxproj", "{78D80A15-BD8C-44E2-B49E-1F05B0A0A687}" diff --git a/external/python3/sqlite3.patch.1 b/external/python3/sqlite3.patch.1 new file mode 100644 index 000000000000..22a987924efc --- /dev/null +++ b/external/python3/sqlite3.patch.1 @@ -0,0 +1,11 @@ +--- python3/PCbuild/sqlite3.vcxproj 2025-10-28 12:15:59.386769096 +0100 ++++ python3/PCbuild/sqlite3.vcxproj 2025-10-28 12:21:58.905090639 +0100 +@@ -88,7 +88,7 @@ + + + <_ProjectFileVersion>10.0.30319.1 +- <_SqliteVersion>$([System.Text.RegularExpressions.Regex]::Match(`$(sqlite3Dir)`, `((\d+)\.(\d+)\.(\d+)\.(\d+))\\?$`).Groups) ++ <_SqliteVersion>$([System.Text.RegularExpressions.Regex]::Match(`0.0.0.0`, `((\d+)\.(\d+)\.(\d+)\.(\d+))\\?$`).Groups) + $(_SqliteVersion.Split(`;`)[1]) + $(_SqliteVersion.Split(`;`)[2]) + $(_SqliteVersion.Split(`;`)[3]) diff --git a/pyuno/Module_pyuno.mk b/pyuno/Module_pyuno.mk index 7cf679bafdc6..c5cf0371050e 100644 --- a/pyuno/Module_pyuno.mk +++ b/pyuno/Module_pyuno.mk @@ -49,6 +49,7 @@ $(eval $(call gb_Module_add_check_targets,pyuno, \ PythonTest_pyuno_pytests_testbz2 \ PythonTest_pyuno_pytests_testpip \ PythonTest_pyuno_pytests_testsetuptools \ + PythonTest_pyuno_pytests_testsqlite3 \ PythonTest_pyuno_pytests_testvenv \ )) diff --git a/pyuno/PythonTest_pyuno_pytests_testsqlite3.mk b/pyuno/PythonTest_pyuno_pytests_testsqlite3.mk new file mode 100644 index 000000000000..6a1ed36c5621 --- /dev/null +++ b/pyuno/PythonTest_pyuno_pytests_testsqlite3.mk @@ -0,0 +1,16 @@ +# -*- 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_PythonTest_PythonTest,pyuno_pytests_testsqlite3)) + +$(eval $(call gb_PythonTest_add_modules,pyuno_pytests_testsqlite3,$(SRCDIR)/pyuno/qa/pytests,\ + testsqlite3 \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/pyuno/qa/pytests/testsqlite3.py b/pyuno/qa/pytests/testsqlite3.py new file mode 100644 index 000000000000..bf515d351f02 --- /dev/null +++ b/pyuno/qa/pytests/testsqlite3.py @@ -0,0 +1,14 @@ +import os +import unittest + +# I want to ensure that import sqlite3 works on all platforms +class SQLITE3Test(unittest.TestCase): + def test_sqlite3_import(self): + import sqlite3 + + # use imported sqlite3 module for pyflakes + with open(os.devnull, "w") as devnull: + print(str(sqlite3), file=devnull) + +if __name__ == '__main__': + unittest.main()