|
4 | 4 | > Each `## [<version>]` section is that release's notes. Entries are written in English |
5 | 5 | > from 2026.9.28.3 on; earlier entries remain as written. |
6 | 6 |
|
| 7 | +## [2026.10.5.2] - 2026-10-05 |
| 8 | + |
| 9 | +This release closes mcpp#771 and mcpp#770 and the follow-ups of mcpp#768: the |
| 10 | +link line of a shared library that is not the root's, native MSVC LTO and its |
| 11 | +meeting with export discovery, and `std.compat` on every Default row. It also |
| 12 | +fixes the Windows quoting of an argument that ends in a backslash, and makes a |
| 13 | +workspace's `[profile.*]` and its own package behave as members do. No default |
| 14 | +toolchain changes. The design record is |
| 15 | +`.agents/docs/2026-10-05-std-module-pair-msvc-lto-and-export-discovery-design.md`. |
| 16 | + |
| 17 | +### Fixed |
| 18 | + |
| 19 | +- **A shared library links with its own package's flags (#771).** A shared |
| 20 | + library that is not the root's linked with the root's link line. In a |
| 21 | + workspace a member's `build.mcpp` libraries did not reach the member's own |
| 22 | + DLL (`LNK2019` on the symbol), and in every plan the root's private |
| 23 | + `ldflags`, and an unrelated member's, reached a dependency's image. Such a |
| 24 | + library now links with the graph's flags (the profile's `ldflags`, the words |
| 25 | + `[target.<selector>.abi]` renders) and those of the packages its owner |
| 26 | + reaches. E2E 884 reads the result from the produced images. |
| 27 | +- **Arguments ending in a backslash on Windows.** The quoting of a Windows |
| 28 | + command line escaped `"` but not the backslashes before it, so an argument |
| 29 | + ending in `\` closed no quote and shifted every argument after it. In a |
| 30 | + Visual Studio developer environment, whose `WindowsSdkDir` ends in `\`, the |
| 31 | + LLVM row's `import std` failed in the std module precompile. The quoting |
| 32 | + follows the argv rules of the Windows runtime, and `WindowsSdkDir` is read |
| 33 | + without its trailing separator, so one SDK has one cache key inside and |
| 34 | + outside a developer environment. E2E 888. |
| 35 | +- **`import std.compat` on the GCC row.** libstdc++'s `bits/std.compat.cc` was |
| 36 | + not built, and the first unit importing `std.compat` failed. It is built |
| 37 | + beside `std` now, as SPEC-009 §6.2 requires of a Default row. E2E 886. |
| 38 | +- **`/bigobj` objects take part in export discovery.** The reader of a DLL's |
| 39 | + objects reads the `/bigobj` layout. A `/GL` object, which has no symbol table, |
| 40 | + and an import object are reported as what they are; both were reported as |
| 41 | + `/bigobj` before. |
| 42 | +- **A workspace's `[profile.*]` reaches its members.** A virtual root's profiles |
| 43 | + reached no member and were ignored without a diagnostic. Profiles are now |
| 44 | + root-position keys, inherited by name, and a member's own table of a name |
| 45 | + replaces the workspace's. In a workspace with its own `[package]`, the root |
| 46 | + file's profile is the same for every selection, so `--workspace` plans one |
| 47 | + graph and compiles a shared library once. E2E 885. |
| 48 | +- **The unit tests of mcpp run in mcpp.exe's code page.** |
| 49 | + `Glob.EscapedSpellingIsUtf8WhateverTheName` constructed a Windows path from |
| 50 | + bytes that only a single-byte code page converts, and failed on a machine in |
| 51 | + the Chinese region; it passed on CI, whose code page is 1252. The test is |
| 52 | + corrected, and mcpp's tests run in UTF-8 as mcpp.exe does. |
| 53 | + |
| 54 | +### Changed |
| 55 | + |
| 56 | +- **`lto = true` on cl.exe.** It compiled nothing differently while the build |
| 57 | + summary said `+ lto`. It now compiles with `/GL` and links and archives with |
| 58 | + `/LTCG`. A DLL whose exports are discovered cannot hold `/GL` objects: when |
| 59 | + `windows_auto_export` is omitted, the packages linked into it compile with |
| 60 | + `/GL-` and the build reports this once (`+ lto (partial)`); a stated `true`, |
| 61 | + and `/GL` written into those packages' flags, are refused with |
| 62 | + `lto-export-discovery`. |
| 63 | +- **The root package's `[build] ldflags` no longer reach a dependency's shared |
| 64 | + library.** A dependency that needs a search path or a library states it in |
| 65 | + its own `ldflags` or `build.mcpp`. When the root names one and the plan holds |
| 66 | + a dependency's shared library, the build notes it under `link/root-flags`. |
| 67 | +- **A workspace's own package receives `[workspace.package]` and |
| 68 | + `[workspace.build]`** once, as every member does. |
| 69 | +- **`std.compat` is built only when a unit imports it**, and an import of it |
| 70 | + from a standard library that does not provide it is refused before any |
| 71 | + compile, naming the library. |
| 72 | +- **`mcpp pack` ships static libraries without LTO intermediate code**, which |
| 73 | + only the compiler release that wrote it can read. |
| 74 | + |
| 75 | +### Added |
| 76 | + |
| 77 | +- **`[test] windows_code_page`** states the code page of every discovered test |
| 78 | + program on Windows, with the values of the target key of the same name. |
| 79 | + |
7 | 80 | ## [2026.10.5.1] - 2026-10-05 |
8 | 81 |
|
9 | 82 | This release gives the program that `mcpp run` starts the terminal, and closes |
|
0 commit comments