Makefile.in | 12 Repository.mk | 2 RepositoryExternal.mk | 41 bin/merge-app-bundles | 2 comphelper/source/misc/lok.cxx | 31 configure.ac | 71 desktop/qa/desktop_lib/test_desktop_lib.cxx | 3 desktop/source/lib/init.cxx | 19 distro-configs/CODAWindows.conf | 63 distro-configs/CPAndroidBranding.conf | 1 distro-configs/CPLinux-LOKit.conf | 3 distro-configs/CPLinuxQtFlatpak.conf | 141 distro-configs/CPMacOS-LOKit.conf | 63 distro-configs/CPWASM-LOKit.conf | 1 drawinglayer/Library_drawinglayer.mk | 2 drawinglayer/source/processor2d/cairopixelprocessor2d.cxx | 2 drawinglayer/source/processor2d/processor2dtools.cxx | 4 external/cairo/Library_cairo.mk | 181 external/cairo/Module_cairo.mk | 20 external/cairo/Package_cairo.mk | 12 external/cairo/Package_pixman.mk | 12 external/cairo/StaticLibrary_pixman.mk | 81 external/cairo/UnpackedTarball_cairo.mk | 5 external/cairo/UnpackedTarball_pixman.mk | 4 external/cairo/configs/wnt_cairo_config.h | 453 external/cairo/configs/wnt_cairo_features.h | 38 external/cairo/configs/wnt_pixman_config.h | 199 external/fontconfig/ExternalPackage_fontconfig_data.mk | 31 external/fontconfig/Module_fontconfig.mk | 17 external/fontconfig/StaticLibrary_fontconfig.mk | 77 external/fontconfig/UnpackedTarball_fontconfig.mk | 19 external/fontconfig/configs/wnt_fontconfig_config.h | 454 external/fontconfig/configs/wnt_fontconfig_fcalias.h | 460 external/fontconfig/configs/wnt_fontconfig_fcaliastail.h | 1 external/fontconfig/configs/wnt_fontconfig_fccase.h | 350 external/fontconfig/configs/wnt_fontconfig_fcftalias.h | 12 external/fontconfig/configs/wnt_fontconfig_fcftaliastail.h | 1 external/fontconfig/configs/wnt_fontconfig_fclang.h | 4917 ++++++++++ external/fontconfig/configs/wnt_fontconfig_fcobjshash.h | 358 external/fontconfig/configs/wnt_fontconfig_fcstdint.h | 9 external/fontconfig/configs/wnt_fonts.conf | 95 external/fontconfig/windowsfonts.patch | 142 external/freetype/Module_freetype.mk | 15 external/freetype/StaticLibrary_freetype.mk | 78 external/libxml2/ExternalProject_libxml2.mk | 2 include/LibreOfficeKit/LibreOfficeKit.h | 18 include/LibreOfficeKit/LibreOfficeKit.hxx | 29 include/LibreOfficeKit/LibreOfficeKitInit.h | 42 include/LibreOfficeKit/LibreOfficeKitTypes.h | 6 include/comphelper/lok.hxx | 4 include/tools/UnixWrappers.h | 336 include/vcl/virdev.hxx | 2 osx/soffice.xcodeproj/project.pbxproj | 2 osx/soffice.xcodeproj/xcshareddata/xcschemes/soffice.xcscheme | 73 postprocess/Module_postprocess.mk | 2 readlicense_oo/license/license.xml | 8 sal/osl/w32/module.cxx | 4 sc/source/core/data/formulacell.cxx | 2 sc/ucalc_setup.mk | 2 sc/uiconfig/scalc/ui/cellprotectionpage.ui | 2 sd/source/ui/inc/View.hxx | 4 sfx2/source/doc/guisaveas.cxx | 14 solenv/clang-format/excludelist | 12 solenv/gbuild/CppunitTest.mk | 2 solenv/gbuild/extensions/pre_MergedLibsList.mk | 4 svx/source/svdraw/svdomedia.cxx | 2 sw/uiconfig/swriter/ui/spellmenu.ui | 2 tools/Module_tools.mk | 1 tools/StaticLibrary_UseUnixWrappers.mk | 23 tools/source/misc/UseUnixWrappers.c | 18 vcl/Library_vcl.mk | 12 vcl/Module_vcl.mk | 5 vcl/headless/svpframe.cxx | 2 vcl/headless/svpinst.cxx | 47 vcl/inc/headless/svpinst.hxx | 4 vcl/inc/sft.hxx | 3 vcl/inc/unx/freetype_glyphcache.hxx | 1 vcl/inc/unx/freetypetextrender.hxx | 2 vcl/inc/unx/genprn.h | 7 vcl/inc/unx/glyphcache.hxx | 3 vcl/source/app/scheduler.cxx | 3 vcl/source/app/svapp.cxx | 14 vcl/source/fontsubset/sft.cxx | 25 vcl/unx/generic/fontmanager/fontconfig.cxx | 6 vcl/unx/generic/fontmanager/fontmanager.cxx | 4 vcl/unx/generic/fontmanager/helper.cxx | 7 vcl/unx/generic/glyphs/freetype_glyphcache.cxx | 40 vcl/unx/generic/print/genprnpsp.cxx | 3 vcl/unx/generic/print/genpspgraphics.cxx | 5 writerperfect/Library_wpftdraw.mk | 1 90 files changed, 9137 insertions(+), 175 deletions(-)
New commits: commit a23dd7d0dee2498f180542d55bf3e0beca74bb78 Author: Andras Timar <[email protected]> AuthorDate: Mon Dec 15 16:29:15 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:50 2026 +0100 [cp] unification of Collabora Office app configs Change-Id: I9576a5d64588d983598e99bf276400bcacb175b2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195676 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index fbfc070f85a4..c1924e9d7a06 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -1,47 +1,63 @@ -# Collabora Online Desktop app for Windows +# Config for Collabora Office app for Windows # Build environment ---with-visual-studio=2022 --enable-python=fully-internal ---without-lxml ---without-export-validation --disable-ccache --disable-pch ---without-doxygen ---without-java +--enable-mergelibs +--enable-release-build --enable-symbols +--with-visual-studio=2022 +--with-buildconfig-recorded +--without-lxml -# Branding (unused, but...) +# Branding --with-branding=icon-themes/galaxy/brand_cp +--with-vendor=Collabora -# Features ---disable-breakpad ---disable-firebird-sdbc ---disable-online-update ---without-helppack-integration +# MPLv2 subset +--disable-gpgmepp +--disable-lotuswordpro +--disable-lpsolve +--disable-mariadb-sdbc +--disable-poppler +--disable-postgresql-sdbc +--with-theme=colibre colibre_svg + +# No Java +--without-java +--without-junit +--disable-ext-nlpsolver +--disable-ext-wiki-publisher +--disable-report-builder +--disable-scripting-beanshell +--disable-scripting-javascript + +# LOKit – tiled rendering --disable-avmedia ---disable-odk +--disable-opengl --disable-skia ---disable-cli ---with-myspell-dicts +--enable-cairo-rgba --enable-headless ---enable-mergelibs + +# Misc features +--disable-breakpad +--disable-cli +--disable-firebird-sdbc +--disable-librelogo +--disable-odk +--disable-online-update --disable-opencl ---disable-opengl +--disable-sal-log +--disable-sdremote +--disable-sdremote-bluetooth +--with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW +--with-myspell-dicts --without-galleries ---disable-librelogo +--without-help --without-templates # Sensible font bundling settings for desktop --with-fonts --with-docrepair-fonts --disable-noto-font - -# MPLv2 subset ---with-theme=colibre ---disable-mariadb-sdbc ---disable-postgresql-sdbc ---disable-lotuswordpro ---disable-lpsolve ---disable-poppler ---disable-gpgmepp diff --git a/distro-configs/CPLinuxQtFlatpak.conf b/distro-configs/CPLinuxQtFlatpak.conf index cef34d73b855..a989bf4cad6b 100644 --- a/distro-configs/CPLinuxQtFlatpak.conf +++ b/distro-configs/CPLinuxQtFlatpak.conf @@ -6,7 +6,7 @@ --enable-release-build --enable-symbols --with-linker-hash-style=both ---without-buildconfig-recorded +--with-buildconfig-recorded --without-lxml # Branding @@ -33,6 +33,7 @@ --disable-scripting-javascript # LOKit – tiled rendering +--disable-avmedia --disable-dbus --disable-dconf --disable-gio @@ -40,10 +41,14 @@ --disable-gtk3 --disable-gui --disable-kf5 +--disable-opengl --disable-qt5 --disable-randr +--disable-skia +--enable-cairo-rgba # Misc features +--disable-breakpad --disable-epm --disable-evolution2 --disable-firebird-sdbc @@ -54,8 +59,8 @@ --disable-sdremote --disable-sdremote-bluetooth --enable-extension-integration ---with-galleries=no --with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW +--without-galleries --without-help --without-templates @@ -87,7 +92,6 @@ --with-system-zlib # org.kde.Platform has cairo, but we use a patched one ---enable-cairo-rgba --without-system-cairo # 3rd party libs that org.kde.Platform does not have diff --git a/distro-configs/CPMacOS-LOKit.conf b/distro-configs/CPMacOS-LOKit.conf index 36845ebf565d..82087cea2afb 100644 --- a/distro-configs/CPMacOS-LOKit.conf +++ b/distro-configs/CPMacOS-LOKit.conf @@ -1,44 +1,63 @@ -INCLUDE:CPLinux-LOKit +# Config for Collabora Office app for macOS -# LOKit needs to be able to run in the sandbox ---enable-macosx-sandbox - -# disable Linux stuff that we don't need ---disable-epm +# Build environment --disable-python ---without-package-format ---enable-gui ---without-system-dicts - -# Sensible font bundling settings for desktop ---with-fonts ---with-docrepair-fonts ---disable-noto-font - -# from LibreOfficeiOS (copied only, to avoid the --host setting) ---disable-breakpad ---disable-firebird-sdbc ---disable-online-update +--enable-macosx-sandbox +--enable-mergelibs +--enable-release-build +--with-buildconfig-recorded +--without-lxml + +# Branding +--with-branding=icon-themes/galaxy/brand_cp +--with-vendor=Collabora + +# MPLv2 subset +--enable-mpl-subset +--disable-gpgmepp +--disable-lotuswordpro +--disable-lpsolve +--disable-mariadb-sdbc +--disable-poppler +--disable-postgresql-sdbc +--with-theme=colibre colibre_svg ---without-export-validation ---without-helppack-integration +# No Java --without-java --without-junit +--disable-ext-nlpsolver +--disable-ext-wiki-publisher +--disable-report-builder +--disable-scripting-beanshell +--disable-scripting-javascript ---with-theme=colibre - ---with-build-platform-configure-options=--with-system-jpeg=no - ---disable-avahi +# LOKit – tiled rendering --disable-avmedia ---disable-compiler-plugins ---disable-cups ---disable-dconf ---disable-kf5 +--disable-opengl +--disable-skia +--enable-cairo-rgba +--enable-headless +--without-system-fontconfig +--without-system-freetype + +# Misc features +--disable-breakpad +--disable-cli +--disable-firebird-sdbc +--disable-librelogo --disable-odk +--disable-online-update --disable-openssl ---disable-poppler ---disable-python ---disable-skia +--disable-sal-log +--disable-sdremote +--disable-sdremote-bluetooth +--with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW +--with-myspell-dicts +--without-galleries +--without-help +--without-templates ---enable-headless +# Sensible font bundling settings for desktop +--with-fonts +--with-docrepair-fonts +--disable-noto-font commit e6fbae6ee3680dddbb801a2cba3f861c7e1af20f Author: Andras Timar <[email protected]> AuthorDate: Mon Dec 15 14:47:38 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:50 2026 +0100 [cp] Build Collabora Office apps without templates These templates are not used, therefore it is unnecessary to ship them. Change-Id: Ic0fc3007d5b214978eba4e575209f90af7b5bd9b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195668 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Miklos Vajna <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index 3b2d0a07d2d2..fbfc070f85a4 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -30,6 +30,7 @@ --disable-opengl --without-galleries --disable-librelogo +--without-templates # Sensible font bundling settings for desktop --with-fonts diff --git a/distro-configs/CPLinuxQtFlatpak.conf b/distro-configs/CPLinuxQtFlatpak.conf index 19ad25c88327..cef34d73b855 100644 --- a/distro-configs/CPLinuxQtFlatpak.conf +++ b/distro-configs/CPLinuxQtFlatpak.conf @@ -57,6 +57,7 @@ --with-galleries=no --with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW --without-help +--without-templates # Sensible font bundling settings for desktop --with-fonts diff --git a/distro-configs/CPMacOS-LOKit.conf b/distro-configs/CPMacOS-LOKit.conf index bea3292fab29..36845ebf565d 100644 --- a/distro-configs/CPMacOS-LOKit.conf +++ b/distro-configs/CPMacOS-LOKit.conf @@ -9,7 +9,6 @@ INCLUDE:CPLinux-LOKit --without-package-format --enable-gui --without-system-dicts ---with-templates # Sensible font bundling settings for desktop --with-fonts commit c0761f4d9b372ae56226ff430f38c0275ab8bbcf Author: Andras Timar <[email protected]> AuthorDate: Mon Dec 15 18:53:11 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:50 2026 +0100 typo 'ENBALE', but we don't use them anyway Change-Id: Icec2cafd8fc55817cc131c3f963bcb8cda81c872 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195681 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/configure.ac b/configure.ac index c7d7be668a66..67240875614d 100644 --- a/configure.ac +++ b/configure.ac @@ -1332,8 +1332,6 @@ if test "$using_freetype_fontconfig" = yes; then # We build them, don't do any pkg-config checks test_fontconfig=no test_freetype=no - ENBALE_FONTCONFIG=TRUE - ENBALE_FREETYPE=TRUE BUILD_TYPE="$BUILD_TYPE FONTCONFIG FREETYPE" fi else commit 9b710d90ef97d4d40534290123755bd9a129f67a Author: Jan Holesovsky <[email protected]> AuthorDate: Tue Dec 9 11:06:02 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:50 2026 +0100 Don't fail when copying files from the 2nd location The 2nd location may contain directory/ies that don't exist in the 1st location; in that case the copying used to fail because the target directory was not present in the final location. Change-Id: Ie115128a45cd823723a91f7ea5985602a2448342 diff --git a/bin/merge-app-bundles b/bin/merge-app-bundles index 34f84274ec5d..ffd7853fd16b 100755 --- a/bin/merge-app-bundles +++ b/bin/merge-app-bundles @@ -54,6 +54,8 @@ OUT=$(cd "$3" && /bin/pwd) ( cd "$ONE" find . -type d -print + cd "$TWO" + find . -type d -print ) | ( cd "$OUT" commit 058bc41afb76656de71f6012012f59133f586682 Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Dec 8 15:47:00 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:50 2026 +0100 Skip private system fonts found by fontcofig on macOS They have family names starting with a period. They are not intended to be used by apps, and not normally visible in apps that use just Apple APIs. So we should not use them even if they are found by fontconfig. (Letting them be found leads to an assertion failure in boost, even. Did not investigate further.) See for instance https://eclecticlight.co/2015/11/10/qa-how-to-use-san-francisco-font-in-docs/ , from which I quote: 👉 This is accomplished by prefacing its name and ID with a period (.), so that its TrueType Unique ID record, for example, describes it as “.SF NS Text”, and it is explicitly identified as a System Font. This ensures that it is omitted from font selection menus and dialogs. 👈 Change-Id: I4efea606331c5c37a321b30e908a0c8c789816e1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195230 Tested-by: Andras Timar <[email protected]> Reviewed-by: Andras Timar <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx index 642a1a7ef733..bf2a0da22370 100644 --- a/vcl/unx/generic/fontmanager/fontconfig.cxx +++ b/vcl/unx/generic/fontmanager/fontconfig.cxx @@ -660,6 +660,12 @@ void PrintFontManager::countFontconfigFonts() if( eFileRes != FcResultMatch || eFamilyRes != FcResultMatch || eScalableRes != FcResultMatch || eStyleRes != FcResultMatch ) continue; +#ifdef MACOSX + // Skip system fonts not intended for app use + if (family && family[0] == '.') + continue; +#endif + SAL_INFO( "vcl.fonts.detail", "found font \"" << family << "\" in file " << file << ", weight = " commit dfc45fd75936a43f8a20e1038fae8647cfc14e43 Author: Andras Timar <[email protected]> AuthorDate: Fri Dec 5 20:04:56 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:50 2026 +0100 [cp] add CPLinuxQtFlatpak.conf Change-Id: Ie8db1cf84ce65a1cae279a22e0c125de519fe68c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195110 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Miklos Vajna <[email protected]> diff --git a/distro-configs/CPLinuxQtFlatpak.conf b/distro-configs/CPLinuxQtFlatpak.conf new file mode 100644 index 000000000000..19ad25c88327 --- /dev/null +++ b/distro-configs/CPLinuxQtFlatpak.conf @@ -0,0 +1,136 @@ +# Config for Collabora Office Qt flatpak + +# Build environment +--enable-hardening-flags +--enable-mergelibs +--enable-release-build +--enable-symbols +--with-linker-hash-style=both +--without-buildconfig-recorded +--without-lxml + +# Branding +--with-branding=icon-themes/galaxy/brand_cp +--with-vendor=Collabora + +# MPLv2 subset +--enable-mpl-subset +--disable-gpgmepp +--disable-lotuswordpro +--disable-lpsolve +--disable-mariadb-sdbc +--disable-poppler +--disable-postgresql-sdbc +--with-theme=colibre colibre_svg + +# No Java +--without-java +--without-junit +--disable-ext-nlpsolver +--disable-ext-wiki-publisher +--disable-report-builder +--disable-scripting-beanshell +--disable-scripting-javascript + +# LOKit – tiled rendering +--disable-dbus +--disable-dconf +--disable-gio +--disable-gstreamer-1-0 +--disable-gtk3 +--disable-gui +--disable-kf5 +--disable-qt5 +--disable-randr + +# Misc features +--disable-epm +--disable-evolution2 +--disable-firebird-sdbc +--disable-librelogo +--disable-odk +--disable-online-update +--disable-sal-log +--disable-sdremote +--disable-sdremote-bluetooth +--enable-extension-integration +--with-galleries=no +--with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW +--without-help + +# Sensible font bundling settings for desktop +--with-fonts +--with-docrepair-fonts +--disable-noto-font + +# 3rd party libs and dictionaries provided by org.kde.Platform +--without-myspell-dicts +--with-system-dicts +--with-system-altlinuxhyph +--with-system-curl +--with-system-expat +--with-system-fontconfig +--with-system-freetype +--with-system-graphite +--with-system-harfbuzz +--with-system-hunspell +--with-system-icu +--with-system-lcms2 +--with-system-libpng +--with-system-libtiff +--with-system-libwebp +--with-system-libxml +--with-system-mythes +--with-system-nss +--with-system-openssl +--with-system-zlib + +# org.kde.Platform has cairo, but we use a patched one +--enable-cairo-rgba +--without-system-cairo + +# 3rd party libs that org.kde.Platform does not have +--without-system-abseil +--without-system-argon2 +--without-system-boost +--without-system-box2d +--without-system-clucene +--without-system-coinmp +--without-system-cppunit +--without-system-dragonbox +--without-system-frozen +--without-system-glm +--without-system-jpeg +--without-system-libabw +--without-system-libcdr +--without-system-libcmis +--without-system-libebook +--without-system-libeot +--without-system-libepubgen +--without-system-libetonyek +--without-system-libexttextcat +--without-system-libfixmath +--without-system-libfreehand +--without-system-liblangtag +--without-system-libmspub +--without-system-libmwaw +--without-system-libnumbertext +--without-system-libodfgen +--without-system-libpagemaker +--without-system-libqxp +--without-system-librevenge +--without-system-libstaroffice +--without-system-libvisio +--without-system-libwpd +--without-system-libwpg +--without-system-libwps +--without-system-libzmf +--without-system-mdds +--without-system-odbc +--without-system-openldap +--without-system-orcus +--without-system-redland +--without-system-sane +--without-system-xmlsec +--without-system-zxcvbn +--without-system-zxing commit 1d1a37a1c4dff5138fddf5ba8276ef31363f0dfb Author: Andras Timar <[email protected]> AuthorDate: Fri Dec 5 19:23:10 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:50 2026 +0100 [cp] Disable LibreLogo in Collabora Online/Office apps It never worked, and it is not planned to make it work. Change-Id: I94afd31d941530dd1479bfc2c441352d75c8220e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195109 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Miklos Vajna <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index cc27eacc2166..3b2d0a07d2d2 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -29,6 +29,7 @@ --disable-opencl --disable-opengl --without-galleries +--disable-librelogo # Sensible font bundling settings for desktop --with-fonts diff --git a/distro-configs/CPAndroidBranding.conf b/distro-configs/CPAndroidBranding.conf index ebfec0ad82aa..cdcaf3464dfe 100644 --- a/distro-configs/CPAndroidBranding.conf +++ b/distro-configs/CPAndroidBranding.conf @@ -12,3 +12,4 @@ --with-docrepair-fonts --enable-pdfimport --enable-release-build +--disable-librelogo diff --git a/distro-configs/CPLinux-LOKit.conf b/distro-configs/CPLinux-LOKit.conf index 33382b4c0b3f..02ac5121d243 100644 --- a/distro-configs/CPLinux-LOKit.conf +++ b/distro-configs/CPLinux-LOKit.conf @@ -68,3 +68,4 @@ --enable-sal-log --without-templates --with-buildconfig-recorded +--disable-librelogo diff --git a/distro-configs/CPWASM-LOKit.conf b/distro-configs/CPWASM-LOKit.conf index a6ee77188d3b..7bc93d3e9570 100644 --- a/distro-configs/CPWASM-LOKit.conf +++ b/distro-configs/CPWASM-LOKit.conf @@ -31,3 +31,4 @@ --disable-lotuswordpro --disable-lpsolve --without-templates +--disable-librelogo commit 09da714bce934e5bfe0f69e9b1fdbde296e2575b Author: Andras Timar <[email protected]> AuthorDate: Wed Dec 3 23:17:53 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 fontconfig conf files for macOS app Change-Id: Icfa932f9ee481eaec8e19e46f15cd00b2bdd8806 diff --git a/external/fontconfig/Module_fontconfig.mk b/external/fontconfig/Module_fontconfig.mk index dba99fde6a50..a6e376157219 100644 --- a/external/fontconfig/Module_fontconfig.mk +++ b/external/fontconfig/Module_fontconfig.mk @@ -25,6 +25,7 @@ else $(eval $(call gb_Module_add_targets,fontconfig,\ ExternalProject_fontconfig \ $(if $(filter EMSCRIPTEN,$(OS)),ExternalPackage_fontconfig_data) \ + $(if $(filter MACOSX,$(OS)),ExternalPackage_fontconfig_data) \ $(if $(filter FONTCONFIG,$(BUILD_TYPE)),ExternalPackage_fontconfig) \ )) commit d52445127e1dde142266c21a01272c6c6567f8b9 Author: Tor Lillqvist <[email protected]> AuthorDate: Sun Nov 30 19:14:01 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Look for fonts also in WINDOWSUSERFONTDIR That is where fonts installed by the user goes. Change-Id: If23c542fee8a832da723d1165d38669b24b2fb57 diff --git a/external/fontconfig/configs/wnt_fonts.conf b/external/fontconfig/configs/wnt_fonts.conf index 5dbcff5d2902..2aad205cc774 100644 --- a/external/fontconfig/configs/wnt_fonts.conf +++ b/external/fontconfig/configs/wnt_fonts.conf @@ -25,6 +25,7 @@ <!-- Font directory list --> <dir>WINDOWSFONTDIR</dir> + <dir>WINDOWSUSERFONTDIR</dir> <!-- Accept deprecated 'mono' alias, replacing it with 'monospace' commit 965619c087fbbc58eaff9e07a97c8e7fbf92d933 Author: Tor Lillqvist <[email protected]> AuthorDate: Wed Nov 5 11:47:22 2025 +0200 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Don't fail assertion in Task::~Task() if LibreOfficeKit is active Apps using LibreOfficeKit often have unusual lifecycles. Change-Id: Ie113d7458cff10beba2e44181d0b6ce5758a7634 diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx index 31f53de9ddfa..cf7078e096d9 100644 --- a/vcl/source/app/scheduler.cxx +++ b/vcl/source/app/scheduler.cxx @@ -41,6 +41,7 @@ #include <salinst.hxx> #include <comphelper/emscriptenthreading.hxx> #include <comphelper/profilezone.hxx> +#include <comphelper/lok.hxx> #include <schedulerimpl.hxx> namespace { @@ -796,7 +797,7 @@ Task::~Task() mpSchedulerData->mpTask = nullptr; } else - assert(nullptr == mpSchedulerData || comphelper::IsFuzzing()); + assert(nullptr == mpSchedulerData || comphelper::IsFuzzing() || comphelper::LibreOfficeKit::isActive()); } bool Task::DecideTransferredExecution() commit 652c05255b44bc3517b0fc934f72f1f9f319a6bb Author: Miklos Vajna <[email protected]> AuthorDate: Tue Dec 9 14:17:42 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 cool#13770 lok: add a file save dialog callback Commit f4b9d6f024b27c4d8ddaabfe0eaa0b404137e3cf (Add horrible hack to ask the filename when exporting PDF in CODA-W, 2025-12-02) added a callback from core to the LOK client to trigger a file picker during PDF export. The problem is that in its current form, this callback is Windows-specific so other platforms (Linux, macOS) can't provide their implementation in a straightforward way. Fix the problem by reworkig this, so it works similar to the anyInput callback, which is cross-platform already. The behavior for the case when the new callback is not registered is meant to be unchanged. Change-Id: I27934774889fc827772b2665799eca358dd62e55 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195294 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> Tested-by: Caolán McNamara <[email protected]> diff --git a/comphelper/source/misc/lok.cxx b/comphelper/source/misc/lok.cxx index c18e1da81a92..7e9373fc44cc 100644 --- a/comphelper/source/misc/lok.cxx +++ b/comphelper/source/misc/lok.cxx @@ -14,6 +14,9 @@ #include <osl/process.h> #include <i18nlangtag/languagetag.hxx> #include <sal/log.hxx> +#ifdef _WIN32 +#include <tools/UnixWrappers.h> +#endif #include <iostream> @@ -51,6 +54,8 @@ static std::function<bool(void*, int)> g_pAnyInputCallback; static void* g_pAnyInputCallbackData; static std::function<int()> g_pMostUrgentPriorityGetter; +static std::function<void(const char*, char*, size_t)> g_pFileSaveDialogCallback; + static std::function<void(int)> g_pViewSetter; static std::function<int()> g_pViewGetter; @@ -374,6 +379,25 @@ bool anyInput() return bRet; } +void setFileSaveDialogCallback(const std::function<void(const char*, char*, size_t)>& pFileSaveDialogCallback) +{ + g_pFileSaveDialogCallback = pFileSaveDialogCallback; +} + +bool fileSaveDialog(const OUString& rSuggested, OUString& rResult) +{ + if (!g_pFileSaveDialogCallback) + { + return false; + } + + OString aSuggested = rSuggested.toUtf8(); + char aResult[PATH_MAX]; + g_pFileSaveDialogCallback(aSuggested.getStr(), aResult, PATH_MAX); + rResult = OUString::fromUtf8(aResult); + return true; +} + void setViewSetter(const std::function<void(int)>& pViewSetter) { g_pViewSetter = pViewSetter; diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx index d1cd353b712a..dc52bcc39edd 100644 --- a/desktop/qa/desktop_lib/test_desktop_lib.cxx +++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx @@ -4239,10 +4239,11 @@ void DesktopLOKTest::testABI() CPPUNIT_ASSERT_EQUAL(classOffset(23), offsetof(struct _LibreOfficeKitClass, extractDocumentStructureRequest)); CPPUNIT_ASSERT_EQUAL(classOffset(24), offsetof(struct _LibreOfficeKitClass, registerAnyInputCallback)); CPPUNIT_ASSERT_EQUAL(classOffset(25), offsetof(struct _LibreOfficeKitClass, getDocsCount)); + CPPUNIT_ASSERT_EQUAL(classOffset(26), offsetof(struct _LibreOfficeKitClass, registerFileSaveDialogCallback)); // When extending LibreOfficeKit with a new function pointer, add new assert for the offsetof the // new function pointer and bump this assert for the size of the class. - CPPUNIT_ASSERT_EQUAL(classOffset(26), sizeof(struct _LibreOfficeKitClass)); + CPPUNIT_ASSERT_EQUAL(classOffset(27), sizeof(struct _LibreOfficeKitClass)); CPPUNIT_ASSERT_EQUAL(documentClassOffset(0), offsetof(struct _LibreOfficeKitDocumentClass, destroy)); CPPUNIT_ASSERT_EQUAL(documentClassOffset(1), offsetof(struct _LibreOfficeKitDocumentClass, saveAs)); diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index a19eb9a68a83..ffd4f597e153 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -2743,6 +2743,9 @@ static void lo_registerAnyInputCallback(LibreOfficeKit* pThis, LibreOfficeKitAnyInputCallback pAnyInputCallback, void* pData); +static void lo_registerFileSaveDialogCallback(LibreOfficeKit* pThis, + LibreOfficeKitFileSaveDialogCallback pFileSaveDialogCallback); + static void lo_sendDialogEvent(LibreOfficeKit* pThis, unsigned long long int nLOKWindowId, const char* pArguments); @@ -2792,6 +2795,7 @@ LibLibreOffice_Impl::LibLibreOffice_Impl() m_pOfficeClass->setForkedChild = lo_setForkedChild; m_pOfficeClass->extractDocumentStructureRequest = lo_extractDocumentStructureRequest; m_pOfficeClass->registerAnyInputCallback = lo_registerAnyInputCallback; + m_pOfficeClass->registerFileSaveDialogCallback = lo_registerFileSaveDialogCallback; m_pOfficeClass->getDocsCount = lo_getDocsCount; gOfficeClass = m_pOfficeClass; @@ -7907,6 +7911,13 @@ static void lo_registerAnyInputCallback(LibreOfficeKit* /*pThis*/, }); } +static void lo_registerFileSaveDialogCallback(LibreOfficeKit* /*pThis*/, + LibreOfficeKitFileSaveDialogCallback pFileSaveDialogCallback) +{ + SolarMutexGuard aGuard; + comphelper::LibreOfficeKit::setFileSaveDialogCallback(pFileSaveDialogCallback); +} + static int lo_getDocsCount(LibreOfficeKit* /*pThis*/) { SolarMutexGuard aGuard; diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h index 8d6ec5fa2646..4c94cb6041ad 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.h +++ b/include/LibreOfficeKit/LibreOfficeKit.h @@ -179,6 +179,10 @@ struct _LibreOfficeKitClass /// @see lok::Office::getDocsCount(). int (*getDocsCount) (LibreOfficeKit* pThis); + + /// @see lok::Office::registerFileSaveDialogCallback() + void (*registerFileSaveDialogCallback)(LibreOfficeKit* pThis, + LibreOfficeKitFileSaveDialogCallback pCallback); }; #define LIBREOFFICEKIT_DOCUMENT_HAS(pDoc,member) LIBREOFFICEKIT_HAS_MEMBER(LibreOfficeKitDocumentClass,member,(pDoc)->pClass->nSize) diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx index 77facfb1867f..1b608d702504 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.hxx +++ b/include/LibreOfficeKit/LibreOfficeKit.hxx @@ -1325,6 +1325,14 @@ public: return mpThis->pClass->getDocsCount(mpThis); } + /** + * Registers a callback that can display an interactive file save dialog. + */ + void registerFileSaveDialogCallback(LibreOfficeKitFileSaveDialogCallback pCallback) + { + return mpThis->pClass->registerFileSaveDialogCallback(mpThis, pCallback); + } + /** * Frees the memory pointed to by pFree. * diff --git a/include/LibreOfficeKit/LibreOfficeKitTypes.h b/include/LibreOfficeKit/LibreOfficeKitTypes.h index 939766567607..167b4f65ca8d 100644 --- a/include/LibreOfficeKit/LibreOfficeKitTypes.h +++ b/include/LibreOfficeKit/LibreOfficeKitTypes.h @@ -10,6 +10,8 @@ #ifndef INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKIT_TYPES_H #define INCLUDED_LIBREOFFICEKIT_LIBREOFFICEKIT_TYPES_H +#include <stddef.h> + #ifdef __cplusplus extern "C" { #endif @@ -28,6 +30,10 @@ typedef void (*LibreOfficeKitWakeCallback)(void* pData); /// @see lok::Office::registerAnyInputCallback() typedef bool (*LibreOfficeKitAnyInputCallback)(void* pData, int nMostUrgentPriority); +/// @see lok::Office::registerFileSaveDialogCallback() +typedef void (*LibreOfficeKitFileSaveDialogCallback)(const char* pSuggestedUri, char* pResultUri, + size_t nResultUri); + #ifdef __cplusplus } #endif diff --git a/include/comphelper/lok.hxx b/include/comphelper/lok.hxx index 9d28f839c9c0..ebdb8439ba0e 100644 --- a/include/comphelper/lok.hxx +++ b/include/comphelper/lok.hxx @@ -150,6 +150,10 @@ setAnyInputCallback(const std::function<bool(void*, int)>& pAnyInputCallback, vo const std::function<int()>& pMostUrgentPriorityGetter); COMPHELPER_DLLPUBLIC bool anyInput(); +COMPHELPER_DLLPUBLIC void setFileSaveDialogCallback( + const std::function<void(const char*, char*, size_t)>& pFileSaveDialogCallback); +COMPHELPER_DLLPUBLIC bool fileSaveDialog(const OUString& rSuggested, OUString& rResult); + // These allow setting callbacks, so that set/get of a LOK view is possible even in code that is // below sfx2. COMPHELPER_DLLPUBLIC void setViewSetter(const std::function<void(int)>& pViewSetter); diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx index 12f2a701f457..3ba1ab5c947d 100644 --- a/sfx2/source/doc/guisaveas.cxx +++ b/sfx2/source/doc/guisaveas.cxx @@ -1720,25 +1720,18 @@ bool SfxStoringHelper::FinishGUIStoreModel(::comphelper::SequenceAsHashMap::cons { OUString aFileName; aFileNameIter->second >>= aFileName; -#ifdef _WIN32 if (comphelper::LibreOfficeKit::isActive()) { - // FIXME: Horrible hack. In CODA-W, we didn't actually - // display any dialog yet, so call into a function in - // CODA.cpp. - typedef void (*ofd_t)(const std::wstring& suggestedURI, std::string& result); - // Use mangled name to catch changes in parameters... - ofd_t ofd = (ofd_t)GetProcAddress(GetModuleHandle(NULL), "?output_file_dialog_from_core@@YAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z"); - if (ofd != NULL) + // In the LOK case, we didn't actually display any dialog yet, so invoke a callback if + // that's set. + OUString aNewURI; + if (comphelper::LibreOfficeKit::fileSaveDialog(aFileName, aNewURI)) { - std::string newURI; - (*ofd)(std::wstring(o3tl::toW(aFileName)), newURI); - if (newURI == "") + if (aNewURI.isEmpty()) return false; - aFileName = OUString::fromUtf8(newURI.c_str()); + aFileName = aNewURI; } } -#endif aURL.SetURL( aFileName ); DBG_ASSERT( aURL.GetProtocol() != INetProtocol::NotValid, "Illegal URL!" ); commit 99b0e3478ebef09d75ea3e32c2d0b8d75b884f30 Author: Tor Lillqvist <[email protected]> AuthorDate: Tue Nov 4 20:40:34 2025 +0200 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Make the CODA-W PDF export file save dialog hack a bit more secure Look for the mangled ++ name, to catch a potential mismatch in function signature. Also, check that the returned function pointer is non-null before calling it. Change-Id: Ib2e0d1cd4b3e26081800b736b74e5972d0819736 diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx index 2f18ac21a4fb..12f2a701f457 100644 --- a/sfx2/source/doc/guisaveas.cxx +++ b/sfx2/source/doc/guisaveas.cxx @@ -1727,12 +1727,16 @@ bool SfxStoringHelper::FinishGUIStoreModel(::comphelper::SequenceAsHashMap::cons // display any dialog yet, so call into a function in // CODA.cpp. typedef void (*ofd_t)(const std::wstring& suggestedURI, std::string& result); - ofd_t ofd = (ofd_t)GetProcAddress(GetModuleHandle(NULL), "output_file_dialog_from_core"); - std::string newURI; - (*ofd)(std::wstring(o3tl::toW(aFileName)), newURI); - if (newURI == "") - return false; - aFileName = OUString::fromUtf8(newURI.c_str()); + // Use mangled name to catch changes in parameters... + ofd_t ofd = (ofd_t)GetProcAddress(GetModuleHandle(NULL), "?output_file_dialog_from_core@@YAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z"); + if (ofd != NULL) + { + std::string newURI; + (*ofd)(std::wstring(o3tl::toW(aFileName)), newURI); + if (newURI == "") + return false; + aFileName = OUString::fromUtf8(newURI.c_str()); + } } #endif commit 4d307c81cc303f676ab40457468472627553efea Author: Tor Lillqvist <[email protected]> AuthorDate: Tue Nov 4 17:33:28 2025 +0200 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Add horrible hack to ask the filename when exporting PDF in CODA-W The PDF export functionality displays a dialog from JavaScript that allows the user to choose various PDF parameters. But unlike export to other formats, no system file save dialog gets displayed by CODA. So do something horrible: Look up a function in CODA.cpp and call it directly. Sorry. Change-Id: I21932b2ba67d3aab72463d51f8ef71182ca5c736 diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx index 9580778b3456..2f18ac21a4fb 100644 --- a/sfx2/source/doc/guisaveas.cxx +++ b/sfx2/source/doc/guisaveas.cxx @@ -107,6 +107,7 @@ #include <vcl/abstdlg.hxx> #ifdef _WIN32 +#include <o3tl/char16_t2wchar_t.hxx> #include <Shlobj.h> #ifdef GetTempPath #undef GetTempPath @@ -1719,6 +1720,22 @@ bool SfxStoringHelper::FinishGUIStoreModel(::comphelper::SequenceAsHashMap::cons { OUString aFileName; aFileNameIter->second >>= aFileName; +#ifdef _WIN32 + if (comphelper::LibreOfficeKit::isActive()) + { + // FIXME: Horrible hack. In CODA-W, we didn't actually + // display any dialog yet, so call into a function in + // CODA.cpp. + typedef void (*ofd_t)(const std::wstring& suggestedURI, std::string& result); + ofd_t ofd = (ofd_t)GetProcAddress(GetModuleHandle(NULL), "output_file_dialog_from_core"); + std::string newURI; + (*ofd)(std::wstring(o3tl::toW(aFileName)), newURI); + if (newURI == "") + return false; + aFileName = OUString::fromUtf8(newURI.c_str()); + } +#endif + aURL.SetURL( aFileName ); DBG_ASSERT( aURL.GetProtocol() != INetProtocol::NotValid, "Illegal URL!" ); commit 646ddd85c68e6dcf25a2d254d546ab318feab0cf Author: Tor Lillqvist <[email protected]> AuthorDate: Tue May 27 10:48:36 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Add some DISABLE_DYNLOADING ifdefs to osl/w32, as for unx Lots of things will have to be tweaked to build core statically for Windows. This is just one small isolated and fairly obvious trivial commit. (Assuming that in the disable-dynloading case, for Windows we want to ´drop the same dynamic library loading functions in osl as for Unixish systems.) Change-Id: Ica0a00d7a3d5b85e5eb933ebd5722824fbf5deeb diff --git a/sal/osl/w32/module.cxx b/sal/osl/w32/module.cxx index 8286f6a095cb..bf42b5c961d6 100644 --- a/sal/osl/w32/module.cxx +++ b/sal/osl/w32/module.cxx @@ -32,6 +32,8 @@ #include <systools/win32/extended_max_path.hxx> #include <vector> +#ifndef DISABLE_DYNLOADING + /* under WIN32, we use the void* oslModule as a WIN32 HANDLE (which is also a 32-bit value) @@ -104,6 +106,8 @@ oslModule osl_loadModuleRelativeAscii( return osl_loadModuleRelative(baseModule, OUString::createFromAscii(relativePath).pData, mode); } +#endif // !DISABLE_DYNLOADING + sal_Bool SAL_CALL osl_getModuleHandle(rtl_uString *pModuleName, oslModule *pResult) { commit 7fd529703fa59cff7a325ec655746db2c9cf79c9 Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Nov 24 16:26:02 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Don't use sub-pixel rendering in WASM and CODA-W We have no knowledge of the sub-pixel order of the display hardware. Change-Id: I7aee7797d5b4a976b34cc95e93b605cc23039617 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194615 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Meeks <[email protected]> diff --git a/external/fontconfig/ExternalPackage_fontconfig_data.mk b/external/fontconfig/ExternalPackage_fontconfig_data.mk index 32c81d0c446f..c7837c7ae7eb 100644 --- a/external/fontconfig/ExternalPackage_fontconfig_data.mk +++ b/external/fontconfig/ExternalPackage_fontconfig_data.mk @@ -26,7 +26,7 @@ $(eval $(call gb_ExternalPackage_add_files,fontconfig_data,$(FONTCONFIG_DATA_FOL $(eval $(call gb_ExternalPackage_add_unpacked_files,fontconfig_data,$(FONTCONFIG_DATA_FOLDER)/conf.d,\ conf.d/10-hinting-slight.conf \ conf.d/10-scale-bitmap-fonts.conf \ - conf.d/10-sub-pixel-rgb.conf \ + conf.d/10-sub-pixel-none.conf \ conf.d/10-yes-antialias.conf \ conf.d/11-lcdfilter-default.conf \ conf.d/20-unhint-small-vera.conf \ commit 1eedeb4c503169f4ec296871dcd7bc2b0f347fbe Author: Andras Timar <[email protected]> AuthorDate: Sun Nov 23 00:24:58 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 CODA-W: more tweaks to build config Change-Id: I1900d19d95e27a9a47ad2c17715ffba5b4eadd99 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194614 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/configure.ac b/configure.ac index efdba98664c6..c7d7be668a66 100644 --- a/configure.ac +++ b/configure.ac @@ -2260,6 +2260,11 @@ AC_ARG_ENABLE(opencl, [Disable OpenCL support.]), ,enable_opencl=yes) +AC_ARG_ENABLE(opengl, + AS_HELP_STRING([--disable-opengl], + [Disable OpenGL support.]), +,enable_opengl=yes) + libo_FUZZ_ARG_ENABLE(librelogo, AS_HELP_STRING([--disable-librelogo], [Do not build LibreLogo.]), @@ -12876,9 +12881,13 @@ AC_SUBST(GSTREAMER_1_0_CFLAGS) AC_SUBST(GSTREAMER_1_0_LIBS) AC_SUBST(ENABLE_GSTREAMER_1_0) +dnl ================================================= +dnl Check whether to build with OpenGL support. +dnl ================================================= + ENABLE_OPENGL_TRANSITIONS= ENABLE_OPENGL_CANVAS= -if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE"; then +if test $_os = iOS -o $_os = Android -o "$ENABLE_FUZZERS" = "TRUE" -o "$enable_opengl" != "yes"; then : # disable elif test "$_os" = "Darwin"; then # We use frameworks on macOS, no need for detail checks diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index bcae85b35ef5..cc27eacc2166 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -11,6 +11,9 @@ --without-java --enable-symbols +# Branding (unused, but...) +--with-branding=icon-themes/galaxy/brand_cp + # Features --disable-breakpad --disable-firebird-sdbc @@ -24,6 +27,7 @@ --enable-headless --enable-mergelibs --disable-opencl +--disable-opengl --without-galleries # Sensible font bundling settings for desktop @@ -33,7 +37,9 @@ # MPLv2 subset --with-theme=colibre +--disable-mariadb-sdbc --disable-postgresql-sdbc --disable-lotuswordpro --disable-lpsolve --disable-poppler +--disable-gpgmepp commit 78d5b982bf96f81d3ccd19c2ac4ba45c9c32d8ae Author: Tor Lillqvist <[email protected]> AuthorDate: Sat Nov 22 09:31:33 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Don't package conflicting and pointless fontconfig configuration files For instance, having both 10-no-antialias.conf and 10-yes-antialias.conf in the same conf.d folder is silly. Look at what Ubuntu has in /etc/fonts/conf.d and keep only those. Note that ExternalPackage_fontconfig_data is used only for WASM and CODA-W anyway, so the "local" and "user" ones are surely irrelevant. Change-Id: I76219eb38675f2e3018d84ab1fc845b1131cc4f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194613 Reviewed-by: Thorsten Behrens <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/external/fontconfig/ExternalPackage_fontconfig_data.mk b/external/fontconfig/ExternalPackage_fontconfig_data.mk index 6635932f5144..32c81d0c446f 100644 --- a/external/fontconfig/ExternalPackage_fontconfig_data.mk +++ b/external/fontconfig/ExternalPackage_fontconfig_data.mk @@ -24,28 +24,12 @@ $(eval $(call gb_ExternalPackage_add_files,fontconfig_data,$(FONTCONFIG_DATA_FOL # The list below is created with # find workdir/UnpackedTarball/fontconfig/conf.d/ -name "*.conf" | LC_COLLATE=C sort | sed -e 's/^/ /' -e 's/$/ \/' -e 's/workdir\/UnpackedTarball\/fontconfig\///' $(eval $(call gb_ExternalPackage_add_unpacked_files,fontconfig_data,$(FONTCONFIG_DATA_FOLDER)/conf.d,\ - conf.d/05-reset-dirs-sample.conf \ - conf.d/09-autohint-if-no-hinting.conf \ - conf.d/10-autohint.conf \ - conf.d/10-hinting-full.conf \ - conf.d/10-hinting-medium.conf \ - conf.d/10-hinting-none.conf \ conf.d/10-hinting-slight.conf \ - conf.d/10-no-antialias.conf \ conf.d/10-scale-bitmap-fonts.conf \ - conf.d/10-sub-pixel-bgr.conf \ - conf.d/10-sub-pixel-none.conf \ conf.d/10-sub-pixel-rgb.conf \ - conf.d/10-sub-pixel-vbgr.conf \ - conf.d/10-sub-pixel-vrgb.conf \ - conf.d/10-unhinted.conf \ conf.d/10-yes-antialias.conf \ conf.d/11-lcdfilter-default.conf \ - conf.d/11-lcdfilter-legacy.conf \ - conf.d/11-lcdfilter-light.conf \ - conf.d/11-lcdfilter-none.conf \ conf.d/20-unhint-small-vera.conf \ - conf.d/25-unhint-nonlatin.conf \ conf.d/30-metric-aliases.conf \ conf.d/35-lang-normalize.conf \ conf.d/40-nonlatin.conf \ @@ -53,18 +37,13 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,fontconfig_data,$(FONTCONFIG conf.d/45-latin.conf \ conf.d/48-spacing.conf \ conf.d/49-sansserif.conf \ - conf.d/50-user.conf \ - conf.d/51-local.conf \ conf.d/60-generic.conf \ conf.d/60-latin.conf \ conf.d/65-fonts-persian.conf \ conf.d/65-khmer.conf \ conf.d/65-nonlatin.conf \ conf.d/69-unifont.conf \ - conf.d/70-no-bitmaps-and-emoji.conf \ conf.d/70-no-bitmaps-except-emoji.conf \ - conf.d/70-no-bitmaps.conf \ - conf.d/70-yes-bitmaps.conf \ conf.d/80-delicious.conf \ conf.d/90-synthetic.conf \ )) commit e8c292887c75b72f693d875e77943da8939ebc90 Author: Tor Lillqvist <[email protected]> AuthorDate: Sat Nov 22 07:52:34 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Package the fonts.conf file and the conf.d folder also for Windows On Windows, fontconfig looks for fonts.conf in a "fonts" subfolder of the folder where DLL is where the fontconfig code lives. Thus in our case, the "program" folder. Change-Id: I2d7ae5ea02c61bd22c2ae9ca19e1138ffd35881e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194612 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/external/fontconfig/ExternalPackage_fontconfig_data.mk b/external/fontconfig/ExternalPackage_fontconfig_data.mk index e7d78142f456..6635932f5144 100644 --- a/external/fontconfig/ExternalPackage_fontconfig_data.mk +++ b/external/fontconfig/ExternalPackage_fontconfig_data.mk @@ -11,13 +11,19 @@ $(eval $(call gb_ExternalPackage_ExternalPackage,fontconfig_data,fontconfig)) $(eval $(call gb_ExternalPackage_use_external_project,fontconfig_data,fontconfig)) -$(eval $(call gb_ExternalPackage_add_files,fontconfig_data,$(LIBO_SHARE_FOLDER)/fontconfig,\ +ifeq ($(COM),MSC) +FONTCONFIG_DATA_FOLDER=$(LIBO_BIN_FOLDER)/fonts +else +FONTCONFIG_DATA_FOLDER=$(LIBO_SHARE_FOLDER)/fontconfig +endif + +$(eval $(call gb_ExternalPackage_add_files,fontconfig_data,$(FONTCONFIG_DATA_FOLDER),\ fonts.conf \ )) # The list below is created with # find workdir/UnpackedTarball/fontconfig/conf.d/ -name "*.conf" | LC_COLLATE=C sort | sed -e 's/^/ /' -e 's/$/ \/' -e 's/workdir\/UnpackedTarball\/fontconfig\///' -$(eval $(call gb_ExternalPackage_add_unpacked_files,fontconfig_data,$(LIBO_SHARE_FOLDER)/fontconfig/conf.d,\ +$(eval $(call gb_ExternalPackage_add_unpacked_files,fontconfig_data,$(FONTCONFIG_DATA_FOLDER)/conf.d,\ conf.d/05-reset-dirs-sample.conf \ conf.d/09-autohint-if-no-hinting.conf \ conf.d/10-autohint.conf \ diff --git a/external/fontconfig/Module_fontconfig.mk b/external/fontconfig/Module_fontconfig.mk index b99b954bf827..dba99fde6a50 100644 --- a/external/fontconfig/Module_fontconfig.mk +++ b/external/fontconfig/Module_fontconfig.mk @@ -17,6 +17,7 @@ ifeq ($(COM),MSC) $(eval $(call gb_Module_add_targets,fontconfig,\ StaticLibrary_fontconfig \ + ExternalPackage_fontconfig_data \ )) else diff --git a/external/fontconfig/UnpackedTarball_fontconfig.mk b/external/fontconfig/UnpackedTarball_fontconfig.mk index 0fb9557c0db8..1ac569ecf082 100644 --- a/external/fontconfig/UnpackedTarball_fontconfig.mk +++ b/external/fontconfig/UnpackedTarball_fontconfig.mk @@ -30,6 +30,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,fontconfig,\ external/fontconfig/windowsfonts.patch \ )) +$(eval $(call gb_UnpackedTarball_add_file,fontconfig,fonts.conf,external/fontconfig/configs/wnt_fonts.conf)) $(eval $(call gb_UnpackedTarball_add_file,fontconfig,config.h,external/fontconfig/configs/wnt_fontconfig_config.h)) $(eval $(call gb_UnpackedTarball_add_file,fontconfig,fc-case/fccase.h,external/fontconfig/configs/wnt_fontconfig_fccase.h)) $(eval $(call gb_UnpackedTarball_add_file,fontconfig,fc-lang/fclang.h,external/fontconfig/configs/wnt_fontconfig_fclang.h)) diff --git a/external/fontconfig/configs/wnt_fonts.conf b/external/fontconfig/configs/wnt_fonts.conf new file mode 100644 index 000000000000..5dbcff5d2902 --- /dev/null +++ b/external/fontconfig/configs/wnt_fonts.conf @@ -0,0 +1,94 @@ +<?xml version="1.0"?> +<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> +<!-- /etc/fonts/fonts.conf file to configure system font access --> +<fontconfig> + <description>Default configuration file</description> + +<!-- + DO NOT EDIT THIS FILE. + IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED. + LOCAL CHANGES BELONG IN 'local.conf'. + + The intent of this standard configuration file is to be adequate for + most environments. If you have a reasonably normal environment and + have found problems with this configuration, they are probably + things that others will also want fixed. Please submit any problems + to the fontconfig issue tracking system located at fontconfig.org + + Note that the normal 'make install' procedure for fontconfig is to + replace any existing fonts.conf file with the new version. Place + any local customizations in local.conf which this file references. + + Keith Packard +--> + +<!-- Font directory list --> + + <dir>WINDOWSFONTDIR</dir> + +<!-- + Accept deprecated 'mono' alias, replacing it with 'monospace' +--> + <match target="pattern"> + <test qual="any" name="family"> + <string>mono</string> + </test> + <edit name="family" mode="assign" binding="same"> + <string>monospace</string> + </edit> + </match> + +<!-- + Accept alternate 'sans serif' spelling, replacing it with 'sans-serif' +--> + <match target="pattern"> + <test qual="any" name="family"> + <string>sans serif</string> + </test> + <edit name="family" mode="assign" binding="same"> + <string>sans-serif</string> + </edit> + </match> + +<!-- + Accept deprecated 'sans' alias, replacing it with 'sans-serif' +--> + <match target="pattern"> + <test qual="any" name="family"> + <string>sans</string> + </test> + <edit name="family" mode="assign" binding="same"> + <string>sans-serif</string> + </edit> + </match> +<!-- + Accept alternate 'system ui' spelling, replacing it with 'system-ui' +--> + <match target="pattern"> + <test qual="any" name="family"> + <string>system ui</string> + </test> + <edit name="family" mode="assign" binding="same"> + <string>system-ui</string> + </edit> + </match> + +<!-- + Load local system customization file +--> + <include ignore_missing="yes">conf.d</include> + +<!-- Font cache directory list --> + + <cachedir>WINDOWSTEMPDIR_FONTCONFIG_CACHE</cachedir> + + <config> +<!-- + Rescan configuration every 30 seconds when FcFontSetList is called + --> + <rescan> + <int>30</int> + </rescan> + </config> + +</fontconfig> commit c8836ffc637d833a0d4c716c5bb21ce2c14fe545 Author: Tor Lillqvist <[email protected]> AuthorDate: Sat Nov 22 07:24:39 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 Also log successfully opened fontconfig configuration files on Windows Change-Id: Idb12ad6c5bee5f72c411ae5df713b0c86330e654 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194611 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/external/fontconfig/windowsfonts.patch b/external/fontconfig/windowsfonts.patch index 1c390cdc42e3..f1a795a950d8 100644 --- a/external/fontconfig/windowsfonts.patch +++ b/external/fontconfig/windowsfonts.patch @@ -85,6 +85,17 @@ well. FcConfigMessage (parse, FcSevereError, "SHGetFolderPathA failed"); goto bail; } +@@ -3169,7 +3169,9 @@ + name); + ret = FcFalse; + goto bail0; +- } ++ } else ++ fprintf (stderr, "Fontconfig: Successfully opened directory %s ", dir); ++ + /* freed below */ + file = (FcChar8 *)malloc (strlen ((char *)dir) + 1 + FC_MAX_FILE_LEN + 1); + if (!file) { @@ -3363,9 +3363,6 @@ FcStrBuf reason; @@ -95,6 +106,16 @@ well. filename = FcConfigGetFilename (config, name); if (!filename) { +@@ -3407,7 +3407,8 @@ + FcStrBufString (&reason, (FcChar8 *)"Unable to open "); + FcStrBufString (&reason, realfilename); + goto bail1; +- } ++ } else ++ fprintf (stderr, "Fontconfig: Successfully opened file %s ", realfilename); + + do { + len = read (fd, buf, BUFSIZ); @@ -3488,23 +3488,6 @@ return FcConfigParseAndLoadFromMemoryInternal (config, (const FcChar8 *)"memory", buffer, complain, FcTrue); } commit 6b9db8055d818e6190356b14e506504a5f0c4518 Author: Tor Lillqvist <[email protected]> AuthorDate: Sat Nov 22 05:38:55 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:49 2026 +0100 No need to look up SHGetFolderPathA dynamically There was perhaps a good reason for that over 20 years ago when fontconfig was initially ported to Windows, but surely not any longer. Change-Id: I6bbe37e0aaff1c58646fb75ade1ba216668795e0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194610 Reviewed-by: Thorsten Behrens <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/external/fontconfig/windowsfonts.patch b/external/fontconfig/windowsfonts.patch index f00e371f3098..1c390cdc42e3 100644 --- a/external/fontconfig/windowsfonts.patch +++ b/external/fontconfig/windowsfonts.patch @@ -9,19 +9,20 @@ well. --- src/fcint.h +++ src/fcint.h -@@ -69,9 +69,7 @@ +@@ -69,10 +69,6 @@ #ifdef _WIN32 # include "fcwindows.h" -typedef UINT (WINAPI *pfnGetSystemWindowsDirectory) (LPSTR, UINT); - typedef HRESULT (WINAPI *pfnSHGetFolderPathA) (HWND, int, HANDLE, DWORD, LPSTR); +-typedef HRESULT (WINAPI *pfnSHGetFolderPathA) (HWND, int, HANDLE, DWORD, LPSTR); -extern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory; - extern pfnSHGetFolderPathA pSHGetFolderPathA; +-extern pfnSHGetFolderPathA pSHGetFolderPathA; # define FC_SEARCH_PATH_SEPARATOR ';' # define FC_DIR_SEPARATOR '\' + # define FC_DIR_SEPARATOR_S "\" --- src/fcxml.c +++ src/fcxml.c -@@ -58,8 +58,9 @@ +@@ -58,11 +58,9 @@ #ifdef _WIN32 # include <mbstring.h> @@ -29,10 +30,20 @@ well. +# include <Shlobj.h> extern FcChar8 fontconfig_instprefix[]; -pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL; - pfnSHGetFolderPathA pSHGetFolderPathA = NULL; - static void - _ensureWin32GettersReady (); -@@ -1386,17 +1387,23 @@ +-pfnSHGetFolderPathA pSHGetFolderPathA = NULL; +-static void +-_ensureWin32GettersReady (); + #endif + + static FcChar8 *__fc_userdir = NULL; +@@ -1330,23 +1330,29 @@ + strcat ((char *)path, "\..\share\fonts"); + } else if (strcmp ((const char *)path, "WINDOWSUSERFONTDIR") == 0) { + path = buffer; +- if (!(pSHGetFolderPathA && SUCCEEDED (pSHGetFolderPathA (NULL, /* CSIDL_LOCAL_APPDATA */ 28, NULL, 0, (char *)buffer)))) { ++ if (!SUCCEEDED (SHGetFolderPathA (NULL, CSIDL_LOCAL_APPDATA, NULL, 0, (char *)buffer))) { + FcConfigMessage (parse, FcSevereError, "SHGetFolderPathA failed"); + return NULL; } strcat ((char *)path, "\Microsoft\Windows\Fonts"); } else if (strcmp ((const char *)path, "WINDOWSFONTDIR") == 0) { @@ -65,15 +76,46 @@ well. } else { if (!prefix) { if (!FcStrIsAbsoluteFilename (path) && path[0] != '~') -@@ -3488,11 +3488,6 @@ - static void - _ensureWin32GettersReady () - { +@@ -2288,7 +2288,7 @@ + char szFPath[MAX_PATH + 1]; + size_t len; + +- if (!(pSHGetFolderPathA && SUCCEEDED (pSHGetFolderPathA (NULL, /* CSIDL_LOCAL_APPDATA */ 28, NULL, 0, szFPath)))) { ++ if (!SUCCEEDED (SHGetFolderPathA (NULL, CSIDL_LOCAL_APPDATA, NULL, 0, szFPath))) { + FcConfigMessage (parse, FcSevereError, "SHGetFolderPathA failed"); + goto bail; + } +@@ -3363,9 +3363,6 @@ + FcStrBuf reason; + + FcStrBufInit (&reason, NULL, 0); +-#ifdef _WIN32 +- _ensureWin32GettersReady(); +-#endif + + filename = FcConfigGetFilename (config, name); + if (!filename) { +@@ -3488,23 +3488,6 @@ + return FcConfigParseAndLoadFromMemoryInternal (config, (const FcChar8 *)"memory", buffer, complain, FcTrue); + } + +-#ifdef _WIN32 +-static void +-_ensureWin32GettersReady () +-{ - if (!pGetSystemWindowsDirectory) { - HMODULE hk32 = GetModuleHandleA ("kernel32.dll"); - if (!(pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory)GetProcAddress (hk32, "GetSystemWindowsDirectoryA"))) - pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory)GetWindowsDirectory; - } - if (!pSHGetFolderPathA) { - HMODULE hSh = LoadLibraryA ("shfolder.dll"); - /* the check is done later, because there is no provided fallback */ +- if (!pSHGetFolderPathA) { +- HMODULE hSh = LoadLibraryA ("shfolder.dll"); +- /* the check is done later, because there is no provided fallback */ +- if (hSh) +- pSHGetFolderPathA = (pfnSHGetFolderPathA)GetProcAddress (hSh, "SHGetFolderPathA"); +- } +-} +-#endif // _WIN32 + + #define __fcxml__ + #include "fcaliastail.h" commit 0493c3f7687ddf9406c7ec46a4ed34ffd5764c57 Author: Tor Lillqvist <[email protected]> AuthorDate: Sat Nov 22 05:11:32 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 We don't use GetSystemWindowsDirectoryA() any more so don't look it up Change-Id: Ibafb12bbc1f7c474efae4bc07c3061f172318f70 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194609 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/external/fontconfig/windowsfonts.patch b/external/fontconfig/windowsfonts.patch index dccad99db916..f00e371f3098 100644 --- a/external/fontconfig/windowsfonts.patch +++ b/external/fontconfig/windowsfonts.patch @@ -7,17 +7,31 @@ But probaly fontconfig asumes system codepage for pathnames it uses on Windows all over the place anyway, so things are really messed up. Oh well. +--- src/fcint.h ++++ src/fcint.h +@@ -69,9 +69,7 @@ + + #ifdef _WIN32 + # include "fcwindows.h" +-typedef UINT (WINAPI *pfnGetSystemWindowsDirectory) (LPSTR, UINT); + typedef HRESULT (WINAPI *pfnSHGetFolderPathA) (HWND, int, HANDLE, DWORD, LPSTR); +-extern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory; + extern pfnSHGetFolderPathA pSHGetFolderPathA; + # define FC_SEARCH_PATH_SEPARATOR ';' + # define FC_DIR_SEPARATOR '\' --- src/fcxml.c +++ src/fcxml.c -@@ -58,6 +58,8 @@ +@@ -58,8 +58,9 @@ #ifdef _WIN32 # include <mbstring.h> +# include <wchar.h> +# include <Shlobj.h> extern FcChar8 fontconfig_instprefix[]; - pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL; +-pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL; pfnSHGetFolderPathA pSHGetFolderPathA = NULL; + static void + _ensureWin32GettersReady (); @@ -1386,17 +1387,23 @@ } strcat ((char *)path, "\Microsoft\Windows\Fonts"); @@ -51,3 +65,15 @@ well. } else { if (!prefix) { if (!FcStrIsAbsoluteFilename (path) && path[0] != '~') +@@ -3488,11 +3488,6 @@ + static void + _ensureWin32GettersReady () + { +- if (!pGetSystemWindowsDirectory) { +- HMODULE hk32 = GetModuleHandleA ("kernel32.dll"); +- if (!(pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory)GetProcAddress (hk32, "GetSystemWindowsDirectoryA"))) +- pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory)GetWindowsDirectory; +- } + if (!pSHGetFolderPathA) { + HMODULE hSh = LoadLibraryA ("shfolder.dll"); + /* the check is done later, because there is no provided fallback */ commit 8644a89373e1d3a7d229f6adf6fae37215b24647 Author: Tor Lillqvist <[email protected]> AuthorDate: Sat Nov 22 00:50:11 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 Make the weird FT_Done_MM_Var() trick in vcl work also on Windows For Windows we build freetype as a static library. But we must build freetype with DLL_EXPORT defined so that symbols like FT_Done_MM_Var get exported by the DLL into which the static freetype library is linked. That is mergedlo.dll or vcllo.dll. Then in vcl's dlFT_Done_MM_Var() we can't just call osl_getAsciiFunctionSymbol() with a nullptr for the first "module" parameter and expect it to look through all modules, like dlsym() does on Unixes. On Windows, osl_getAsciiFunctionSymbol() calls GetProcAddress(), and passing a NULL first parameter to tht is simply invalid. We must look for FT_Done_MM_Var in mergedlo.dll, or if that isn't loaded, vcllo.dll. Possibly it would be simpler to just pretend we don't HAVE_DLAPI in this case and call FT_Done_MM_Var() directly. Without this commit, FT_Done_MM_Var will not be found, so the code will just call free() instead of FT_Done_MM_Var(), and if built using the debugging C library that will lead to a strange assertion failure in the C library. With the non-debugging C library it might perhaps lead to some odd bug, or just not do whatever proper deallocation of resources or something it is that FT_Done_MM_Var() does. Change-Id: Ia7b726cc7167ba22ea8f3263ad85f8cd4ac5c483 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194608 Reviewed-by: Thorsten Behrens <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/external/freetype/StaticLibrary_freetype.mk b/external/freetype/StaticLibrary_freetype.mk index 978a904d62ba..4dc6a3ad634d 100644 --- a/external/freetype/StaticLibrary_freetype.mk +++ b/external/freetype/StaticLibrary_freetype.mk @@ -24,6 +24,7 @@ $(eval $(call gb_StaticLibrary_add_defs,freetype,\ -DDLG_STATIC \ -DZ_PREFIX \ -DFT2_BUILD_LIBRARY \ + -DDLL_EXPORT \ -DFT_DEBUG_LOGGING \ )) diff --git a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx index aa6da15885ff..8ebff2ada0a5 100644 --- a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx +++ b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx @@ -183,9 +183,26 @@ namespace { #if !HAVE_DLAPI FT_Done_MM_Var(library, amaster); +#else +#ifdef _WIN32 + // Unlike on Unixes, we can't pass a NULL module parameter to + // osl_getAsciiFunctionSymbol(), i.e. GetProcAddress(), and + // have it look through all modules loaded, like dlsym() does. + // Instead, we "know" that FT_Done_MM_Var will wither be in + // mergedlo.dll or vcllo.dll. + void(*func)(FT_Library, FT_MM_Var*) = nullptr; + oslModule module; + if (osl_getModuleHandle((u"mergedlo.dll"_ustr).pData, &module) || + osl_getModuleHandle((u"vcllo.dll"_ustr).pData, &module)) + func = reinterpret_cast<void(*)(FT_Library, FT_MM_Var*)>( + osl_getAsciiFunctionSymbol(module, "FT_Done_MM_Var")); + // If FT_Done_MM_Var is not found, we will crash or something, + // at least in a build with the debugging C runtime, as + // calling free() below is very wrong, I think. #else static auto func = reinterpret_cast<void(*)(FT_Library, FT_MM_Var*)>( osl_getAsciiFunctionSymbol(nullptr, "FT_Done_MM_Var")); +#endif if (func) func(library, amaster); else commit 44e9b90a95fbe4f3472eda5ec4ab6faa3c900238 Author: Andras Timar <[email protected]> AuthorDate: Mon Nov 17 12:04:21 2025 +0000 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 CODA-W: update default build config Change-Id: Ie4942ecd90c92b2651c9cbf144a6c2c3cec7f104 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194607 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index 8900e4013f3b..bcae85b35ef5 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -1,31 +1,39 @@ # Collabora Online Desktop app for Windows ---disable-breakpad ---disable-firebird-sdbc ---disable-online-update +# Build environment +--with-visual-studio=2022 +--enable-python=fully-internal +--without-lxml --without-export-validation ---without-helppack-integration +--disable-ccache +--disable-pch +--without-doxygen --without-java ---without-junit +--enable-symbols ---with-theme=colibre +# Features +--disable-breakpad +--disable-firebird-sdbc +--disable-online-update +--without-helppack-integration +--disable-avmedia +--disable-odk +--disable-skia +--disable-cli +--with-myspell-dicts +--enable-headless +--enable-mergelibs +--disable-opencl +--without-galleries # Sensible font bundling settings for desktop --with-fonts --with-docrepair-fonts --disable-noto-font ---disable-avahi ---disable-avmedia ---disable-compiler-plugins ---disable-cups ---disable-dconf ---disable-kf5 ---disable-odk +# MPLv2 subset +--with-theme=colibre +--disable-postgresql-sdbc +--disable-lotuswordpro +--disable-lpsolve --disable-poppler ---disable-skia ---disable-cli - ---enable-python=fully-internal - -#--disable-dynamic-loading commit 4ee7640a9b6a4a99e3f597732de09d5da593e707 Author: Andras Timar <[email protected]> AuthorDate: Sat Nov 15 09:52:43 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 CODA-M: we want bundled templates (disabled by LOKit config) Change-Id: Ibe340ce83cc11d89b09a124963831306ebde464b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194606 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/distro-configs/CPMacOS-LOKit.conf b/distro-configs/CPMacOS-LOKit.conf index 36845ebf565d..bea3292fab29 100644 --- a/distro-configs/CPMacOS-LOKit.conf +++ b/distro-configs/CPMacOS-LOKit.conf @@ -9,6 +9,7 @@ INCLUDE:CPLinux-LOKit --without-package-format --enable-gui --without-system-dicts +--with-templates # Sensible font bundling settings for desktop --with-fonts commit 1d78ab2eb9a1937c2c47454d10a7b2cdd345d8e4 Author: Andras Timar <[email protected]> AuthorDate: Wed Nov 12 07:34:35 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 --disable-extensions disables hunspell dictionaries, let's remove it! Change-Id: I43bd5d0568ff61968ba91b96c0f6f720b97cea8e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194605 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index 06c622f212e4..8900e4013f3b 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -20,7 +20,6 @@ --disable-compiler-plugins --disable-cups --disable-dconf ---disable-extensions --disable-kf5 --disable-odk --disable-poppler diff --git a/distro-configs/CPMacOS-LOKit.conf b/distro-configs/CPMacOS-LOKit.conf index c1abc7bf3f52..36845ebf565d 100644 --- a/distro-configs/CPMacOS-LOKit.conf +++ b/distro-configs/CPMacOS-LOKit.conf @@ -34,7 +34,6 @@ INCLUDE:CPLinux-LOKit --disable-compiler-plugins --disable-cups --disable-dconf ---disable-extensions --disable-kf5 --disable-odk --disable-openssl commit 1b2797a0f1be03ed0445a3c27c0e6d58bd63d725 Author: Andras Timar <[email protected]> AuthorDate: Wed Nov 5 17:15:05 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 CODA-M: add --without-system-dicts to config We have --with-system-dicts inherited from CPLinux-LOKit.conf which is invalid on macOS. Change-Id: Ieabdc60676c8582741d1bd52b88d5f7e9878875a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194604 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/distro-configs/CPMacOS-LOKit.conf b/distro-configs/CPMacOS-LOKit.conf index 99ef6ad85e1b..c1abc7bf3f52 100644 --- a/distro-configs/CPMacOS-LOKit.conf +++ b/distro-configs/CPMacOS-LOKit.conf @@ -8,6 +8,7 @@ INCLUDE:CPLinux-LOKit --disable-python --without-package-format --enable-gui +--without-system-dicts # Sensible font bundling settings for desktop --with-fonts commit e5dd6319202921e4d7612c954b70eb659cd660ff Author: Andras Timar <[email protected]> AuthorDate: Mon Nov 3 17:17:43 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 CODA-W: disable CLI; this app is not for .NET automation Change-Id: I0a2c8df9aac7afc8ec0aa1f6d6b92acd65b05851 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194600 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index 3857b043a99d..06c622f212e4 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -25,6 +25,7 @@ --disable-odk --disable-poppler --disable-skia +--disable-cli --enable-python=fully-internal commit e0a9efbf8970cf0da17acd7856b1421ff31d233e Author: Andras Timar <[email protected]> AuthorDate: Mon Nov 3 11:17:21 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 CODA: Sensible font bundling settings for desktop Change-Id: Ic2dc242b653f248516dcdd550ab528c904e3d061 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194599 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index 26e69939490d..3857b043a99d 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -10,6 +10,11 @@ --with-theme=colibre +# Sensible font bundling settings for desktop +--with-fonts +--with-docrepair-fonts +--disable-noto-font + --disable-avahi --disable-avmedia --disable-compiler-plugins diff --git a/distro-configs/CPMacOS-LOKit.conf b/distro-configs/CPMacOS-LOKit.conf index 2f9de4cdaa63..99ef6ad85e1b 100644 --- a/distro-configs/CPMacOS-LOKit.conf +++ b/distro-configs/CPMacOS-LOKit.conf @@ -9,6 +9,11 @@ INCLUDE:CPLinux-LOKit --without-package-format --enable-gui +# Sensible font bundling settings for desktop +--with-fonts +--with-docrepair-fonts +--disable-noto-font + # from LibreOfficeiOS (copied only, to avoid the --host setting) --disable-breakpad --disable-firebird-sdbc commit 87b54aead9e56daa887e2932d4c5570d7ca58226 Author: Andras Timar <[email protected]> AuthorDate: Mon Nov 3 07:48:58 2025 +0100 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 CODA: Disable build of Skia on Windows and macOS It should be implied with LOKit config (--disable-gui), for some reason --diable-gui was not added to these configs. It needs investigation why. We can still disable Skia, it's unused. Change-Id: If8700d859593d2c7db4f6dcc6c612a70433cd2c0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194598 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf index 1c4077999a04..26e69939490d 100644 --- a/distro-configs/CODAWindows.conf +++ b/distro-configs/CODAWindows.conf @@ -19,6 +19,7 @@ --disable-kf5 --disable-odk --disable-poppler +--disable-skia --enable-python=fully-internal diff --git a/distro-configs/CPMacOS-LOKit.conf b/distro-configs/CPMacOS-LOKit.conf index 0781801d2913..2f9de4cdaa63 100644 --- a/distro-configs/CPMacOS-LOKit.conf +++ b/distro-configs/CPMacOS-LOKit.conf @@ -34,5 +34,6 @@ INCLUDE:CPLinux-LOKit --disable-openssl --disable-poppler --disable-python +--disable-skia --enable-headless commit cd9356d5986887829b3e6434a0c22d582ad106e5 Author: Tor Lillqvist <[email protected]> AuthorDate: Sat Nov 1 23:15:36 2025 +0200 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 Make pixman build for Windows on ARM64 Also silence more warnings in pixman and cairo. Change-Id: Ic00c0ece203a0bdac5407f958c446ac8147093b1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194597 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/external/cairo/Library_cairo.mk b/external/cairo/Library_cairo.mk index 732162c44b95..e850760ce51d 100644 --- a/external/cairo/Library_cairo.mk +++ b/external/cairo/Library_cairo.mk @@ -21,9 +21,19 @@ $(eval $(call gb_Library_set_include,cairo,\ $(eval $(call gb_Library_add_defs,cairo,\ -wd4057 \ -wd4100 \ + -wd4132 \ -wd4146 \ + -wd4200 \ + -wd4245 \ -wd4267 \ + -wd4295 \ + -wd4456 \ + -wd4701 \ -wd4702 \ + -wd4703 \ + -wd5294 \ + -wd5286 \ + -wd5287 \ )) $(eval $(call gb_Library_use_static_libraries,cairo, \ diff --git a/external/cairo/StaticLibrary_pixman.mk b/external/cairo/StaticLibrary_pixman.mk index 0272892a408a..94e998775736 100644 --- a/external/cairo/StaticLibrary_pixman.mk +++ b/external/cairo/StaticLibrary_pixman.mk @@ -21,7 +21,16 @@ $(eval $(call gb_StaticLibrary_add_defs,pixman,\ -DHAVE_CONFIG_H \ -wd4100 \ -wd4127 \ + -wd4132 \ + -wd4146 \ -wd4189 \ + -wd4245 \ + -wd4267 \ + -wd4389 \ + -wd4456 \ + -wd4457 \ + -wd4701 \ + -wd5286 \ )) $(eval $(call gb_StaticLibrary_add_generated_cobjects,pixman,\ @@ -48,15 +57,19 @@ $(eval $(call gb_StaticLibrary_add_generated_cobjects,pixman,\ pixman-matrix \ pixman-mips-dspr2 \ pixman-mips \ - pixman-mmx \ + $(if $(filter-out AARCH64,$(CPUNAME)), \ + pixman-mmx \ + ) \ pixman-noop \ pixman-ppc \ pixman-radial-gradient \ pixman-region16 \ pixman-region32 \ pixman-solid-fill \ - pixman-sse2 \ - pixman-ssse3 \ + $(if $(filter-out AARCH64,$(CPUNAME)), \ + pixman-sse2 \ + pixman-ssse3 \ + ) \ pixman-timer \ pixman-trap \ pixman-utils \ diff --git a/external/cairo/configs/wnt_pixman_config.h b/external/cairo/configs/wnt_pixman_config.h index 180a8f93df15..e038a711f4d5 100644 --- a/external/cairo/configs/wnt_pixman_config.h +++ b/external/cairo/configs/wnt_pixman_config.h @@ -159,10 +159,14 @@ /* #undef USE_OPENMP */ /* use SSE2 compiler intrinsics */ +#ifndef _M_ARM64 #define USE_SSE2 1 +#endif /* use SSSE3 compiler intrinsics */ +#ifndef _M_ARM64 #define USE_SSSE3 1 +#endif /* use VMX compiler intrinsics */ /* #undef USE_VMX */ commit ef91a1b1679e33d44bb0c7833ef972ac1229bbbc Author: Tor Lillqvist <[email protected]> AuthorDate: Fri Jul 11 16:19:11 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 Clarify that freeError() despite its name is a generic LOKit deallocation API Especially on Windows it is important to not call free() in your own code on a pointer returned from some random other dynamic library (like the one the desktop/source/lib/init.cxx code goes into). It might have been allocated by calling malloc() (etc) in a C runtime library that is different from the one used by your code. That will lead to a crash. One should alays call the free() in the same C runtime where the malloc() that allocated the pointer is. Add a wrapper called freeMemory() to the C++ API. Change-Id: Ibf9cf6fad2c30c4416d2a1f6badbd161c7ba18a6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194594 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index c8e0f759dc98..a19eb9a68a83 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -7711,6 +7711,7 @@ static char* lo_getError (LibreOfficeKit *pThis) static void lo_freeError(char* pFree) { + // Do not try to do anything clever here. This should just call free() on the pointer. free(pFree); } diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h index 7860adf3c66b..8d6ec5fa2646 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.h +++ b/include/LibreOfficeKit/LibreOfficeKit.h @@ -65,6 +65,20 @@ struct _LibreOfficeKitClass const char* pURL, const char* pOptions); /// @since LibreOffice 5.2 + + /// The name "freeError" is a historical accident, actually this + /// is a generic deallocation function for dynamically allocated + /// memory returned by other LibreOfficeKit functions. + + /// Especially on Windows it is important to not call free() in + /// your own code on a pointer returned from some random other + /// dynamic library (like the one this code goes into) where it + /// might have been allocated by calling malloc() (etc) in a C + /// runtime library that is different from the one used by your + /// code. That will lead to a crash. Alays call the free() in the + /// same C runtime where the malloc() that allocated the pointer + /// is. + void (*freeError) (char* pFree); /// @since LibreOffice 6.0 diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx index b6cdd929cb95..77facfb1867f 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.hxx +++ b/include/LibreOfficeKit/LibreOfficeKit.hxx @@ -486,6 +486,9 @@ public: * e.g. {commandName: ".uno:StyleApply", commandValues: {"familyName1" : ["list of style names in the family1"], etc.}} * @param pCommand a UNO command for which the possible values are requested * @return {commandName: unoCmd, commandValues: {possible_values}} + * + * The return value is dynamically allocated and should be + * deallocated by calling the lok::Office::freeMemory() function. */ char* getCommandValues(const char* pCommand) { @@ -1009,7 +1012,8 @@ public: return new Document(pDoc); } - /// Returns the last error as a string, the returned pointer has to be freed by the caller. + /// Returns the last error as a string. The returned pointer has to be freed by the caller + /// by calling the freeError() member function. char* getError() { return mpThis->pClass->getError(mpThis); @@ -1018,6 +1022,10 @@ public: /** * Frees the memory pointed to by pFree. * + * Use on dynamically allocated data returned by LibreOfficeKit + * functions. In other cases than the value returned by + * getError(), call freeMemory() instead for clarity. + * * @since LibreOffice 5.2 */ void freeError(char* pFree) @@ -1316,6 +1324,17 @@ public: { return mpThis->pClass->getDocsCount(mpThis); } + + /** + * Frees the memory pointed to by pFree. + * + * Use on dynamically allocated data returned by LibreOfficeKit + * functions. Just a wrapper for freeError() with a better name. + */ + void freeMemory(char* pFree) + { + freeError(pFree); + } }; /// Factory method to create a lok::Office instance. commit 9c5d5933973cca86dcfdccfd7e0514d4c3e361be Author: Tor Lillqvist <[email protected]> AuthorDate: Tue Jul 15 09:23:41 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 Use more obvious macro names Instead of TARGET_LIB, just call it SOFFICEAPP_LIB, as it is the "sofficeapp" dynamic library that it always refers to. And instead of TARGET_MERGED_LIB, just call it MERGED_LIB, as that always refers to the "mergedlo" dynamic library. Change-Id: Ic3a8f29cd9b168f064bc2d02f15341b5ea1afef0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194593 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/include/LibreOfficeKit/LibreOfficeKitInit.h b/include/LibreOfficeKit/LibreOfficeKitInit.h index e3b30dbb2615..28cb38cb3657 100644 --- a/include/LibreOfficeKit/LibreOfficeKitInit.h +++ b/include/LibreOfficeKit/LibreOfficeKitInit.h @@ -32,15 +32,15 @@ #include <dlfcn.h> #ifdef __APPLE__ - #define TARGET_LIB "lib" "sofficeapp" ".dylib" - #define TARGET_MERGED_LIB "lib" "mergedlo" ".dylib" + #define SOFFICEAPP_LIB "libsofficeapp.dylib" + #define MERGED_LIB "libmergedlo.dylib" #if (!defined TARGET_OS_IPHONE || TARGET_OS_IPHONE == 0) && (!defined TARGET_OS_OSX || TARGET_OS_OSX == 0) #error LibreOfficeKit is not supported on tvOS, visionOS or watchOS #endif #else - #define TARGET_LIB "lib" "sofficeapp" ".so" - #define TARGET_MERGED_LIB "lib" "mergedlo" ".so" + #define SOFFICEAPP_LIB "libsofficeapp.so" + #define MERGED_LIB "libmergedlo.so" #endif #define SEPARATOR '/' @@ -49,11 +49,11 @@ #if !defined WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif - #include <windows.h> - #define TARGET_LIB "sofficeapp" ".dll" - #define TARGET_MERGED_LIB "mergedlo" ".dll" - #define SEPARATOR '\' - #define UNOPATH "\..\URE\bin" + #include <windows.h> + #define SOFFICEAPP_LIB "sofficeapp.dll" + #define MERGED_LIB "mergedlo.dll" + #define SEPARATOR '\' + #define UNOPATH "\..\URE\bin" #undef DELETE @@ -202,7 +202,7 @@ static void *lok_dlopen( const char *install_path, char ** _imp_lib ) // allocate large enough buffer partial_length = strlen(install_path); - imp_lib_size = partial_length + sizeof(TARGET_LIB) + sizeof(TARGET_MERGED_LIB) + 2; + imp_lib_size = partial_length + sizeof(SOFFICEAPP_LIB) + sizeof(MERGED_LIB) + 2; imp_lib = (char *) malloc(imp_lib_size); if (!imp_lib) { @@ -215,10 +215,10 @@ static void *lok_dlopen( const char *install_path, char ** _imp_lib ) extendUnoPath(install_path); imp_lib[partial_length++] = SEPARATOR; - strncpy(imp_lib + partial_length, TARGET_LIB, imp_lib_size - partial_length); + strncpy(imp_lib + partial_length, SOFFICEAPP_LIB, imp_lib_size - partial_length); struct stat st; - // If TARGET_LIB exists but is ridiculously small, it is the + // If SOFFICEAPP_LIB exists but is ridiculously small, it is the // one-line text stub as in the --enable-mergedlib case. if (stat(imp_lib, &st) == 0 && st.st_size > 1000) { @@ -235,7 +235,7 @@ static void *lok_dlopen( const char *install_path, char ** _imp_lib ) } else { - strncpy(imp_lib + partial_length, TARGET_MERGED_LIB, imp_lib_size - partial_length); + strncpy(imp_lib + partial_length, MERGED_LIB, imp_lib_size - partial_length); dlhandle = lok_loadlib(imp_lib); if (!dlhandle) commit c690bf94a00e88656586207ed060c4a03454807e Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Apr 21 15:14:21 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:48 2026 +0100 Accept Homebrew pkg-config also on an Intel Macs On Intel Macs, Homebrew sadly uses the installation prefix /usr/local and not /opt/homebrew. Change-Id: I96a15dc69292799168cb67514b841a977dc353ad Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194588 Reviewed-by: Tomaž Vajngerl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/configure.ac b/configure.ac index 6c656ec8ac0d..efdba98664c6 100644 --- a/configure.ac +++ b/configure.ac @@ -7129,7 +7129,9 @@ if test $_os = Darwin; then if test -n "$PKG_CONFIG"; then if test "$PKG_CONFIG" = /usr/bin/pkg-config && ls -l /usr/bin/pkg-config | $GREP -q Mono.framework; then AC_MSG_ERROR([yes, from Mono. This *will* break the build. Please remove or hide $PKG_CONFIG]) - elif test "$PKG_CONFIG" = "/opt/homebrew/bin/pkg-config"; then + elif test `uname -m` = "arm64" -a "$PKG_CONFIG" = "/opt/homebrew/bin/pkg-config"; then + AC_MSG_RESULT([yes, from Homebrew. This is OK.]) + elif [[[ `uname -m` == "x86_64" && "$PKG_CONFIG" == "/usr/local/bin/pkg-config" && `readlink "$PKG_CONFIG"` == ../Cellar/pkgconf/*/bin/pkg-config ]]]; then AC_MSG_RESULT([yes, from Homebrew. This is OK.]) else if test "$enable_bogus_pkg_config" = "yes"; then commit 8651eb94428dc0cb40fd70d647d7b253ae44b406 Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Jul 14 21:02:29 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:47 2026 +0100 Don't even try to load a clearly bogus sofficeapp library If it is smaller than 1000 bytes it can't be real, it must be the dummy text file in the --enable-mergelibs case. Change-Id: Ib3a913830bf34dc1e17955626576e72f5f7cd2d7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194592 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/include/LibreOfficeKit/LibreOfficeKitInit.h b/include/LibreOfficeKit/LibreOfficeKitInit.h index f7fe24475902..e3b30dbb2615 100644 --- a/include/LibreOfficeKit/LibreOfficeKitInit.h +++ b/include/LibreOfficeKit/LibreOfficeKitInit.h @@ -217,15 +217,13 @@ static void *lok_dlopen( const char *install_path, char ** _imp_lib ) imp_lib[partial_length++] = SEPARATOR; strncpy(imp_lib + partial_length, TARGET_LIB, imp_lib_size - partial_length); - dlhandle = lok_loadlib(imp_lib); - if (!dlhandle) + struct stat st; + // If TARGET_LIB exists but is ridiculously small, it is the + // one-line text stub as in the --enable-mergedlib case. + if (stat(imp_lib, &st) == 0 && st.st_size > 1000) { - // If TARGET_LIB exists, and likely is a real library (not a - // small one-line text stub as in the --enable-mergedlib - // case), but dlopen failed for some reason, don't try - // TARGET_MERGED_LIB. - struct stat st; - if (stat(imp_lib, &st) == 0 && st.st_size > 100) + dlhandle = lok_loadlib(imp_lib); + if (!dlhandle) { char *pErrMessage = lok_dlerror(); fprintf(stderr, "failed to open library '%s': %s ", @@ -234,7 +232,9 @@ static void *lok_dlopen( const char *install_path, char ** _imp_lib ) free(imp_lib); return NULL; } - + } + else + { strncpy(imp_lib + partial_length, TARGET_MERGED_LIB, imp_lib_size - partial_length); dlhandle = lok_loadlib(imp_lib); commit d6508db9567b63190f28a4d217eb03ba8b281e79 Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Jul 14 11:31:05 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:47 2026 +0100 Make avmediawin conditional on AVMEDIA Change-Id: I2cdec861d840d5987a70c26fd1b61ba1f39f0a30 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194591 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/solenv/gbuild/extensions/pre_MergedLibsList.mk b/solenv/gbuild/extensions/pre_MergedLibsList.mk index b16cc2ddcccc..2c4e2c68e2b7 100644 --- a/solenv/gbuild/extensions/pre_MergedLibsList.mk +++ b/solenv/gbuild/extensions/pre_MergedLibsList.mk @@ -10,7 +10,9 @@ # we link all object files from these libraries into one, merged library gb_MERGE_LIBRARY_LIST := \ avmedia \ - $(if $(filter WNT,$(OS)),avmediawin) \ + $(call gb_Helper_optional,AVMEDIA, \ + $(if $(filter WNT,$(OS)),avmediawin) \ + ) \ $(call gb_Helper_optional,SCRIPTING, \ basctl \ basprov \ commit f5f1b89744c417ffd80de32df739d3c9f69913be Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Jan 20 09:37:08 2025 +0200 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:47 2026 +0100 _FORTIFY_SOURCE has a meaning only in glibc Change-Id: Ia087324841e4019d414d5ae3c845e80c7a7d1b73 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194566 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/configure.ac b/configure.ac index 2d9294aa82b4..6c656ec8ac0d 100644 --- a/configure.ac +++ b/configure.ac @@ -7894,17 +7894,19 @@ if test "$GCC" = "yes" -o "$COM_IS_CLANG" = TRUE; then [AC_MSG_RESULT([no])]) CFLAGS=$save_CFLAGS - AC_MSG_CHECKING([whether $CC_BASE supports -D_FORTIFY_SOURCE=2]) - save_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS -Werror -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2" - if test "$ENABLE_OPTIMIZED" = TRUE; then - CFLAGS="$CFLAGS -O2" + if test "$_os" = "Linux"; then + AC_MSG_CHECKING([whether $CC_BASE supports -D_FORTIFY_SOURCE=2]) + save_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2" + if test "$ENABLE_OPTIMIZED" = TRUE; then + CFLAGS="$CFLAGS -O2" + fi + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include <string.h>]], [[return 0;]])], + [AC_MSG_RESULT([yes]); HARDENING_OPT_CFLAGS="$HARDENING_OPT_CFLAGS -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"], + [AC_MSG_RESULT([no])]) + CFLAGS=$save_CFLAGS fi - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[#include <string.h>]], [[return 0;]])], - [AC_MSG_RESULT([yes]); HARDENING_OPT_CFLAGS="$HARDENING_OPT_CFLAGS -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=2"], - [AC_MSG_RESULT([no])]) - CFLAGS=$save_CFLAGS AC_MSG_CHECKING([whether $CC_BASE supports -D_GLIBCXX_ASSERTIONS]) save_CFLAGS=$CFLAGS commit f20611c2589a518d55b7825271abc05e2403d757 Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Apr 14 18:54:35 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:47 2026 +0100 Make the fontconfig Windows patch apply to fontconfig 2.16.1 Note that this patch is for now just a start of work that is paused for now. The handling of non-ASCII filenames in the external libraries that in the CODA case are now used also on Windows is likely very broken, and needs to be carefully checked and modified. The new <tools/UnixWrappers.h> thing, with additional work, will probably be used. Change-Id: I30cb09747a8de8716608669a75c872b73812b3f0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194587 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/external/fontconfig/windowsfonts.patch b/external/fontconfig/windowsfonts.patch index feaaf80937c5..dccad99db916 100644 --- a/external/fontconfig/windowsfonts.patch +++ b/external/fontconfig/windowsfonts.patch @@ -12,37 +12,35 @@ well. @@ -58,6 +58,8 @@ #ifdef _WIN32 - #include <mbstring.h> -+#include <wchar.h> -+#include <Shlobj.h> - extern FcChar8 fontconfig_instprefix[]; + # include <mbstring.h> ++# include <wchar.h> ++# include <Shlobj.h> + extern FcChar8 fontconfig_instprefix[]; pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL; - pfnSHGetFolderPathA pSHGetFolderPathA = NULL; -@@ -1386,18 +1387,25 @@ - } - else if (strcmp ((const char *) path, "WINDOWSFONTDIR") == 0) - { + pfnSHGetFolderPathA pSHGetFolderPathA = NULL; +@@ -1386,17 +1387,23 @@ + } + strcat ((char *)path, "\Microsoft\Windows\Fonts"); + } else if (strcmp ((const char *)path, "WINDOWSFONTDIR") == 0) { - int rc; - path = buffer; - _ensureWin32GettersReady(); -- rc = pGetSystemWindowsDirectory ((LPSTR) buffer, sizeof (buffer) - 20); -- if (rc == 0 || rc > sizeof (buffer) - 20) +- rc = pGetSystemWindowsDirectory ((LPSTR)buffer, sizeof (buffer) - 20); +- if (rc == 0 || rc > sizeof (buffer) - 20) { + wchar_t *wpath; + int size_needed; + -+ if (!SUCCEEDED(SHGetKnownFolderPath(&FOLDERID_Fonts, 0, NULL, &wpath))) - { ++ if (!SUCCEEDED(SHGetKnownFolderPath(&FOLDERID_Fonts, 0, NULL, &wpath))) { - FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed"); + FcConfigMessage (parse, FcSevereError, "SHGetKnownFolderPath for FOLDERID_Fonts failed"); return NULL; } -- if (path [strlen ((const char *) path) - 1] != '\') -- strcat ((char *) path, "\"); -- strcat ((char *) path, "fonts"); +- if (path[strlen ((const char *)path) - 1] != '\') +- strcat ((char *)path, "\"); +- strcat ((char *)path, "fonts"); + /* We assume that the code using fontconfig handles UTF-8 strings and not system codepage */ + size_needed = WideCharToMultiByte (CP_UTF8, 0, wpath, wcslen(wpath), NULL, 0, NULL, NULL); -+ if (size_needed <= 0 || size_needed > sizeof(buffer)) -+ { ++ if (size_needed <= 0 || size_needed > sizeof(buffer)) { + FcConfigMessage (parse, FcSevereError, "WideCharToMultiByte failed"); + CoTaskMemFree (wpath); + return NULL; @@ -50,6 +48,6 @@ well. + path = buffer; + WideCharToMultiByte(CP_UTF8, 0, wpath, wcslen(wpath), path, size_needed, NULL, NULL); + CoTaskMemFree (wpath); - } - else - { + } else { + if (!prefix) { + if (!FcStrIsAbsoluteFilename (path) && path[0] != '~') commit bc1b5f6079d82ef5b1aaa5505a26b1b8903d8d8e Author: Tor Lillqvist <[email protected]> AuthorDate: Tue Apr 8 16:58:59 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:47 2026 +0100 Add --enable-msvc-debug-runtime to use that even without dbgutil Adapt libxml2 build accordingly. It's MSVC_USE_DEBUG_RUNTIME we should check to see whether the ICU libraries have a 'd' suffix in their names, not ENABLE_DBGUTIL. Change-Id: Ic817e3c15e7164478ae557627047d3793e3a88c7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194584 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> diff --git a/configure.ac b/configure.ac index 8253b3f95f9e..2d9294aa82b4 100644 --- a/configure.ac +++ b/configure.ac @@ -1732,6 +1732,12 @@ AC_ARG_ENABLE(avahi, [Determines whether to use Avahi to advertise Impress to remote controls.]) ) +AC_ARG_ENABLE(msvc-debug-runtime, + AS_HELP_STRING([--enable-msvc-debug-runtime], + [Determines whether to use the Microsoft Visual Studio debugging runtime. + Automatically turned on by --enable-dbgutil but not by --enable-debug]) +) + AC_ARG_ENABLE(msvc-analyze, AS_HELP_STRING([--enable-msvc-analyze], [Determines whether to enable the Microsoft Visual Studio /analyze flag to provide additional warnings.]) @@ -5013,7 +5019,11 @@ if test -n "$enable_dbgutil" -a "$enable_dbgutil" != "no"; then fi else ENABLE_DBGUTIL="" - MSVC_USE_DEBUG_RUNTIME="" + if test "$enable_msvc_debug_runtime" = "yes"; then + MSVC_USE_DEBUG_RUNTIME="TRUE" + else + MSVC_USE_DEBUG_RUNTIME="" + fi AC_MSG_RESULT([no]) fi AC_SUBST(ENABLE_DBGUTIL) diff --git a/external/libxml2/ExternalProject_libxml2.mk b/external/libxml2/ExternalProject_libxml2.mk index 26005343d24a..e42cc4797477 100644 --- a/external/libxml2/ExternalProject_libxml2.mk +++ b/external/libxml2/ExternalProject_libxml2.mk @@ -27,7 +27,7 @@ $(call gb_ExternalProject_get_state_target,libxml2,build): $(call gb_ExternalProject_run,build,\ cscript /e:javascript configure.js \ iconv=no icu=yes sax1=yes $(if $(MSVC_USE_DEBUG_RUNTIME),cruntime=/MDd) \ - $(if $(filter TRUE,$(ENABLE_DBGUTIL)),debug=yes) \ + $(if $(filter TRUE,$(MSVC_USE_DEBUG_RUNTIME)),debug=yes) \ && nmake \ ,win32) $(call gb_Trace_EndRange,libxml2,EXTERNAL) commit 9be879b5b545e1d6c61e0d8019414f4a483c42b6 Author: Tor Lillqvist <[email protected]> AuthorDate: Tue Apr 1 11:16:59 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:47 2026 +0100 Add some missing gb_StaticLibrary_use_unpacked calls I had missed that such are needed, which explains why I had had to manually hand-hold the build of those externals. (These are built as static libraries, for now, only for CODA-W.) Change-Id: Ib19ed82e0ab443b7ddfab254ed5754efd013bdf1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194583 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/external/cairo/StaticLibrary_pixman.mk b/external/cairo/StaticLibrary_pixman.mk index 7b52c0dab0c1..0272892a408a 100644 --- a/external/cairo/StaticLibrary_pixman.mk +++ b/external/cairo/StaticLibrary_pixman.mk @@ -9,6 +9,8 @@ $(eval $(call gb_StaticLibrary_StaticLibrary,pixman)) +$(eval $(call gb_StaticLibrary_use_unpacked,pixman,cairo)) + $(eval $(call gb_StaticLibrary_set_include,pixman,\ -I$(gb_UnpackedTarball_workdir)/pixman \ -I$(gb_UnpackedTarball_workdir)/pixman/pixman \ diff --git a/external/fontconfig/StaticLibrary_fontconfig.mk b/external/fontconfig/StaticLibrary_fontconfig.mk index 963e30a5b3cd..7ad137a7808f 100644 --- a/external/fontconfig/StaticLibrary_fontconfig.mk +++ b/external/fontconfig/StaticLibrary_fontconfig.mk @@ -11,6 +11,8 @@ $(eval $(call gb_StaticLibrary_StaticLibrary,fontconfig)) +$(eval $(call gb_StaticLibrary_use_unpacked,fontconfig,fontconfig)) + $(eval $(call gb_StaticLibrary_set_include,fontconfig,\ -I$(gb_UnpackedTarball_workdir)/fontconfig \ -I$(gb_UnpackedTarball_workdir)/freetype/include \ diff --git a/external/freetype/StaticLibrary_freetype.mk b/external/freetype/StaticLibrary_freetype.mk index c76f8613ef69..978a904d62ba 100644 --- a/external/freetype/StaticLibrary_freetype.mk +++ b/external/freetype/StaticLibrary_freetype.mk @@ -11,6 +11,8 @@ $(eval $(call gb_StaticLibrary_StaticLibrary,freetype)) +$(eval $(call gb_StaticLibrary_use_unpacked,freetype,freetype)) + $(eval $(call gb_StaticLibrary_set_include,freetype,\ -I$(gb_UnpackedTarball_workdir)/freetype/include \ $$(INCLUDE) \ commit a6a3c761054f7eb306d645a895c996d9fc1a722f Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Mar 31 09:01:48 2025 +0300 Commit: Andras Timar <[email protected]> CommitDate: Mon Jan 5 16:25:47 2026 +0100 We seem to need postprocess_fontconfig also for CODA-W, for make check In that case, USE_HEADLESS_CODE will be non-empty, even if USING_X11 and DISABLE_GUI are empty. Change-Id: I553407737395789acef2380e0b1edb824bbcbad8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194582 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> diff --git a/postprocess/Module_postprocess.mk b/postprocess/Module_postprocess.mk index 56ecd75db150..79643e086bc4 100644 --- a/postprocess/Module_postprocess.mk +++ b/postprocess/Module_postprocess.mk @@ -41,7 +41,7 @@ $(eval $(call gb_Module_add_l10n_targets,postprocess,\ # contain content from at least one of external/more_fonts/fc_local.snippet # (conditional on MORE_FONTS in BUILD_TYPE) and # extras/source/truetype/symbol/fc_local.snippet (unconditional): -ifneq ($(USING_X11)$(DISABLE_GUI)$(filter ANDROID EMSCRIPTEN,$(OS)),) +ifneq ($(USE_HEADLESS_CODE)$(USING_X11)$(DISABLE_GUI)$(filter ANDROID EMSCRIPTEN,$(OS)),) $(eval $(call gb_Module_add_targets,postprocess, \ CustomTarget_fontconfig \ Package_fontconfig \ commit e763d5148886f62db3e4d531c7584b6aae75355a Author: Tor Lillqvist <[email protected]> -e ... etc. - the rest is truncated
