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 $@

Reply via email to