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 31d987f26a98a5625c012d48682b407148914a0f
Author: Peter Kovacs <[email protected]>
AuthorDate: Wed Aug 26 23:36:10 2026 +0200

    odk: an x64 SDK must stamp windows_x86_64 into description.xml
    
    platform.mk mapped UNOPKG_PLATFORM "Windows" to windows_x86
    unconditionally, so an extension built with a 64-bit SDK declared the
    32-bit platform and the office it belongs to refused to install it.
    
    The two platform strings an extension carries are checked differently,
    which is what makes UNOPKG_PLATFORM the wrong source for this one:
    
      - the manifest media-type parameter goes through platform_fits(),
        which also accepts a token with no architecture in it and matches on
        the OS alone.  "Windows" is therefore right on both architectures and
        UNOPKG_PLATFORM stays as it is -- it is also the directory name
        inside the .oxt.
    
      - description.xml's <platform value="..."/> goes through
        isValidPlatform(), which compares against a fixed list of exact
        tokens.  Nothing but windows_x86_64 will match a 64-bit build.
    
    Nothing in the SDK environment knows the architecture -- settings.mk
    derives PROCTYPE from config.guess, which does not exist on Windows and
    leaves PROCTYPE empty there -- so the value is baked in when the SDK is
    built, as SDK_PLATFORMID in the generated dk.mk.  PLATFORMID is already
    computed by solenv/inc/settings.mk as $(RTL_OS:l)_$(RTL_ARCH:l), which
    is what the main build's own extensions are stamped with, so both sides
    now derive from the same place: windows_x86 on wntmsci14, windows_x86_64
    on wntmscx14.  dk.mk is included before platform.mk, and the fallback
    keeps an SDK built before this change working.
    
    Verified with GNU make against the four cases: x64 SDK ->
    windows_x86_64, x86 SDK -> windows_x86, SDK without SDK_PLATFORMID ->
    windows_x86, Linux_x86_64 -> linux_x86_64.  Not exercised by an actual
    extension build.
    
    Co-Authored-By: Claude Opus 5 <[email protected]>
    Claude-Session: https://claude.ai/code/session_012NFKmwTogkytKnrTBX5Lax
---
 main/odk/pack/copying/dk.mk       |  7 +++++++
 main/odk/pack/copying/makefile.mk |  2 +-
 main/odk/settings/platform.mk     | 12 +++++++++++-
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/main/odk/pack/copying/dk.mk b/main/odk/pack/copying/dk.mk
index 28ba9d4542..b3979c0216 100644
--- a/main/odk/pack/copying/dk.mk
+++ b/main/odk/pack/copying/dk.mk
@@ -23,3 +23,10 @@
 SDKVERSION=@@RELEASE@@
 BUILDID=@@BUILDID@@
 SCM_REVISION=@@SCMREVISION@@
+
+# The extension platform token for the architecture this SDK was built for,
+# i.e. what description.xml's <platform value="..."/> has to say.  Baked in
+# here because nothing in the SDK environment knows the architecture:
+# settings.mk derives PROCTYPE from config.guess, which does not exist on
+# Windows.  See settings/platform.mk.
+SDK_PLATFORMID=@@PLATFORMID@@
diff --git a/main/odk/pack/copying/makefile.mk 
b/main/odk/pack/copying/makefile.mk
index 54cd41a317..42bf976324 100644
--- a/main/odk/pack/copying/makefile.mk
+++ b/main/odk/pack/copying/makefile.mk
@@ -231,7 +231,7 @@ $(DESTDIRBIN)/addsym-macosx.sh : addsym-macosx.sh
 $(DESTDIRSETTINGS)/dk.mk : dk.mk
        @@-rm -f $@
        -$(MKDIRHIER) $(@:d)
-       tr -d "\015" < dk.mk | sed -e 's/@@RELEASE@@/$(PRODUCT_RELEASE)/' -e 
's/@@BUILDID@@/$(RSCREVISION)/' -e 's/@@SCMREVISION@@/$(SCMREVISION)/'> $@
+       tr -d "\015" < dk.mk | sed -e 's/@@RELEASE@@/$(PRODUCT_RELEASE)/' -e 
's/@@BUILDID@@/$(RSCREVISION)/' -e 's/@@SCMREVISION@@/$(SCMREVISION)/' -e 
's/@@PLATFORMID@@/$(PLATFORMID)/' > $@
 
 $(CONVERTTAGFLAG) : $(DOCUHTMLFILES)
 #      $(PERL) $(CONVERTTAGSCRIPT) 1 "$(TITLE)" "$(OFFICEPRODUCTNAME)" 
$(DOCUHTMLFILES)
diff --git a/main/odk/settings/platform.mk b/main/odk/settings/platform.mk
index 8471e6b448..085594df1a 100644
--- a/main/odk/settings/platform.mk
+++ b/main/odk/settings/platform.mk
@@ -59,7 +59,17 @@ else
                EXTENSION_PLATFORM=solaris_x86
        else
        ifeq "$(UNOPKG_PLATFORM)" "Windows"
-               EXTENSION_PLATFORM=windows_x86
+               # UNOPKG_PLATFORM deliberately carries no architecture: it 
names the
+               # manifest platform, and the office matches that with 
platform_fits(),
+               # which accepts an OS-only token on every architecture.  The
+               # description.xml platform value has no such shortcut -- it goes
+               # through isValidPlatform(), which wants the exact token -- so 
an x64
+               # SDK must say windows_x86_64 here or the office it belongs to 
will
+               # reject its own extensions.  Nothing in the SDK environment 
knows the
+               # architecture (settings.mk gets PROCTYPE from config.guess, 
which does
+               # not exist on Windows), so dk.mk carries the value baked in at 
SDK
+               # build time.  The fallback keeps an SDK built before that 
works.
+               EXTENSION_PLATFORM=$(if 
$(SDK_PLATFORMID),$(SDK_PLATFORMID),windows_x86)
        endif
        endif
        endif

Reply via email to