This is an automated email from the ASF dual-hosted git repository. leginee pushed a commit to branch win10-msvc-trunk in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 56e9585c8caf643b67d57a0e0c94b800ae139426 Author: Peter Kovacs <[email protected]> AuthorDate: Tue Aug 25 09:27:55 2026 +0200 desktop: stamp the manifest with the architecture being built template.manifest spells out processorArchitecture="x86" twice and was copied verbatim into whichever build was running. On x64 that handed the process an activation context asking for the *x86* Common-Controls 6.0 assembly: ModLoad: C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_ 6595b64144ccf1df_6.0.26100.9168_none_...\COMCTL32.dll A 32 bit COMCTL32 cannot bind into a 64 bit process, so every component that touches common controls failed to load. fps.dll is one, which is why the native file dialogs silently fell back to the OpenOffice ones no matter what Tools > Options said -- fpicker.cxx catches the load failure and falls back without logging, so the option looked broken instead of the picker. Substituting rather than copying keeps the checked-in template as it is and gives each build its own architecture. Three sites, including the pre-VC9 branch's template copy. On x86 CPUNAME is INTEL, so the substitution is a no-op and that build is untouched. Verified on the x64 build: the regenerated manifest reads amd64, and com.sun.star.ui.dialogs.SystemFilePicker now instantiates as com.sun.star.comp.fpicker.VistaFileDialog where it previously threw CannotActivateFactoryException. NB the generated manifest depends only on template.manifest, so this rule change does not invalidate an existing one -- delete $(MISC)/soffice.{bin,exe}.manifest to pick it up. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01VrM7EMKgiuyVcCUe9nSbZR --- main/desktop/util/makefile.mk | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/main/desktop/util/makefile.mk b/main/desktop/util/makefile.mk index 567371dd1c..3163142cc9 100644 --- a/main/desktop/util/makefile.mk +++ b/main/desktop/util/makefile.mk @@ -241,12 +241,26 @@ ALLTAR : $(BIN)$/soffice_mac$(EXECPOST) # CRT as a side-by-side assembly, and the UCRT is not one -- it is an operating # system component on Windows 10. The template carries everything else this # executable needs, which is what the pre-VC9 branch has always relied on. +# template.manifest is checked in with the x86 architecture spelled out. It is +# copied verbatim into whichever build is running, so on x64 it used to hand the +# process an activation context asking for the *x86* Common-Controls 6.0 +# assembly. Binding that into a 64 bit process pulls +# WinSxS\x86_microsoft.windows.common-controls\COMCTL32.dll, which cannot load, +# so every component that touches common controls failed to load -- fps.dll +# among them, which is why the native file dialogs silently fell back to the +# OpenOffice ones. Substitute the architecture instead of copying. +.IF "$(CPUNAME)"=="X86_64" +MANIFEST_ARCH=amd64 +.ELSE +MANIFEST_ARCH=x86 +.ENDIF + .IF "$(CCNUMVER)" <= "001399999999" || "$(COMEX)" == "14" $(MISC)$/$(TARGET).exe.manifest: template.manifest - $(COPY) $< $@ + $(COMMAND_ECHO)$(SED) -e 's/processorArchitecture="x86"/processorArchitecture="$(MANIFEST_ARCH)"/g' $< > $@ .ELSE $(MISC)$/$(TARGET).exe.template.manifest: template.manifest - $(COPY) $< $@ + $(COMMAND_ECHO)$(SED) -e 's/processorArchitecture="x86"/processorArchitecture="$(MANIFEST_ARCH)"/g' $< > $@ $(MISC)$/$(TARGET).exe.linker.manifest: $(BIN)$/$(TARGET)$(EXECPOST) mt.exe -inputresource:$(BIN)$/$(TARGET)$(EXECPOST) -out:$@ @@ -260,7 +274,7 @@ $(MISC)$/$(TARGET).exe.manifest: $(MISC)$/$(TARGET).exe.template.manifest $(MISC # Same condition as above, and for the same reason. .IF "$(CCNUMVER)" <= "001399999999" || "$(COMEX)" == "14" $(MISC)$/$(TARGET).bin.manifest: template.manifest - $(COPY) $< $@ + $(COMMAND_ECHO)$(SED) -e 's/processorArchitecture="x86"/processorArchitecture="$(MANIFEST_ARCH)"/g' $< > $@ .ELSE $(MISC)$/$(TARGET).bin.manifest: $(MISC)$/$(TARGET).exe.manifest $(COPY) $(MISC)$/$(TARGET).exe.manifest $@
