This is an automated email from the ASF dual-hosted git repository. leginee pushed a commit to branch bazel-migration in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 902cdee6fadc22a01fafa703cfe25ae0f6b20436 Author: Peter <[email protected]> AuthorDate: Thu Oct 8 10:28:01 2026 +0200 docs: odk's compiled half, and what the SDK tree still needs Co-Authored-By: Claude Opus 5.5 <[email protected]> --- .agent/migration/frontier.md | 9 ++++- main/odk/readme.md | 84 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/.agent/migration/frontier.md b/.agent/migration/frontier.md index 4932d9b376..3f13f0d47c 100644 --- a/.agent/migration/frontier.md +++ b/.agent/migration/frontier.md @@ -953,7 +953,14 @@ solenv ⬜ (legacy build environment, mostly migrated away) ── Remaining: Docs/dev tooling ────────────────────────────────────────── autodoc ⬜ (API documentation generator) -odk ⬜ (OpenDocument/Developer Kit) +odk 🟡 STARTED 2026-10-08 — source/ done on all three configs: + loader classes, unowinreg.dll, unoapploader.exe, + uno_loader_classes.zip; each verified by running it (32-bit + Temurin 8 for x86). Static CRT as upstream, so + _SNPRINTF_DLLIMPORT= (empty) avoids C2375 from sal's + snprintf.h. javac_classes now handles packaged classes. + NEXT: pack/copying (the SDK tree + odkcommon/odkexamples + zips); gendocu blocked on autodoc. See main/odk/readme.md. helpauthoring ⬜ (help authoring tools) helpcontent2 ✅ DONE 2026-10-03 — the F1 help, en-US: help/en/ with all 9 modules (.db/.ht/.key HelpLinker, .jar pages, .cfg, .tree Contents, .idxl diff --git a/main/odk/readme.md b/main/odk/readme.md new file mode 100644 index 0000000000..f2fa64ccad --- /dev/null +++ b/main/odk/readme.md @@ -0,0 +1,84 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> + +# Notes for odk (in progress) + +The Office Development Kit (SDK). Upstream builds it in three layers +(`prj/build.lst`); this migration is taking them one at a time. + +| Layer | Upstream | State | +|---|---|---| +| What odk COMPILES | `source/` | **done 2026-10-08**, all three configs | +| The SDK tree and its zips | `pack/copying`, `pack/unzip_udk`, `pack/check*`, `util` | not yet | +| The generated API reference | `pack/gendocu` (autodoc + javadoc) | not yet; blocked on `autodoc` | + +## What is built + +| Target | Upstream | What it is | +|---|---|---| +| `:loader_classes` | `source/com/sun/star/lib/loader` | `com.sun.star.lib.loader.*` as loose classes, `--release 8`. An SDK client ships them in its own jar; they find an office and put its UNO jars on a class loader. | +| `:unowinreg` | `source/unowinreg/win` | `unowinreg.dll`, the JNI half of `WinRegKey`. | +| `:unoapploader` | `source/unoapploader/win` | `unoapploader.exe`. A client copies it beside its own exe; it finds the office, puts it on `PATH` and starts `_<its own name>.exe`. | +| `:uno_loader_classes` | `pack/copying` `MYZIPTARGET` | `uno_loader_classes.zip`: `com/...` + `win/unowinreg.dll`, delivered by `prj/d.lst`. | + +## Landmines + +- **Both native targets link the static CRT**, as upstream (`DYNAMIC_CRT=` + empty for unoapploader, `STDSHL=` + `LIBCMT` for unowinreg): they run in + processes the office does not own (a client's java.exe, a client's launcher), + before any office or VC runtime has been found. So they need no manifest, and + `features = ["static_link_msvcrt"]` instead. +- **`_SNPRINTF_DLLIMPORT=` (empty) on those targets.** `sal/config.h` includes + `systools/win32/snprintf.h`, which declares `snprintf` (renamed `_snprintf` by + the VC9 toolchain's `crt_defines`) as `__declspec(dllimport)` -- right for the + DLL CRT only. Against libcmt that is C2375. The empty macro is the header's + own switch; no source change. +- **unowinreg exports the undecorated `Java_*` names** through + `util/unowinreg.def` (= `unowinreg.dxp`). On x86 the functions are + `__stdcall`, and link.exe binds each DEF name to its `_Java_...@N` symbol -- + the jurt `jpipe.def` trick. Verified by actually loading it in a 32-bit JVM. +- **`WinRegKey` loads the DLL out of the zip**: it reads the resource + `win/unowinreg.dll` from its own class loader and extracts it to a temp file. + So the zip's layout is the interface, not cosmetic. +- `findsofficepath.c` is cppuhelper's (exported from //main/cppuhelper), compiled + a second time here -- upstream delivers its `.obj` alone for exactly this. +- `javac_classes` now roots `-d` at the class-path root, so packaged classes + land at their declared `com/sun/.../X.class` paths (it used to take the first + output's directory, which only worked for a default-package class). + +## Verified (2026-10-08) + +On all three configs, with the matching JVM (32-bit Temurin 8 for x86, the +build JDK 21 for x64): + +- `WinRegKey` reads `HKLM\...\Windows NT\CurrentVersion\ProductName` through the + DLL extracted from `uno_loader_classes.zip`. +- `java -cp uno_loader_classes.zip;client com.sun.star.lib.loader.Loader + UnoClient` with `UNO_PATH` at the staged `program/`: the client loads + `com.sun.star.uno.UnoRuntime` from the office's `classes/ridl.jar`. +- `unoapploader.exe` installed as `foo.exe` beside a `_foo.exe` starts it with the + staged `program/` first on `PATH`. + +## Next + +`pack/copying` is a file list more than a build: `bin/` (cppumaker, idlc, +javamaker, regcompare, ucpp, uno-skeletonmaker, unoapploader; climaker and +autodoc not yet migrated), `lib/` import libraries under their SDK names +(`isal.lib`, `icppu.lib`, ...), `include/`, `idl/`, `classes/`, `settings/`, +docs and examples, then `odkcommon.zip`/`odkexamples.zip`.
