Jens Geyer created THRIFT-6320:
----------------------------------
Summary: Stop asking for a static runtime when building the
release compiler
Key: THRIFT-6320
URL: https://issues.apache.org/jira/browse/THRIFT-6320
Project: Thrift
Issue Type: Bug
Components: Build Process
Reporter: Jens Geyer
Fix For: 0.26.0
h2. Situation
Commit {{dd8ecde06}} moved the project away from a statically linked Windows
compiler. {{doc/ReleaseManagement.md}} now reads:
bq. The compiler is portable and folks find it useful to be able to download
one, especially if they are using third-party distributed runtime libraries for
interpreted languages on Windows. It requires Visual C++ Runtime due to ASF
regulations.
Two things were left behind by that change.
h3. The document still asks for the old property
A few lines further down it still says:
bq. Verify the executable only depends on kernel32.dll using depends.exe.
A compiler that links the shared runtime cannot satisfy that, so the
instruction contradicts the paragraph above it and cannot be followed.
h3. The build still asks for the static runtime
{{-DWITH_MT=ON}} is still passed by {{build/docker/msvc/build-compiler.bat}}
and by the manual recipe in the same document. {{WITH_MT}} is the option whose
whole purpose is to select the static runtime.
It happens to do nothing. It is implemented by rewriting {{/MD}} to {{/MT}} in
the per configuration compiler flag variables, and policy
[CMP0091|https://cmake.org/cmake/help/latest/policy/CMP0091.html] took the
runtime library out of those variables and moved it to the
{{MSVC_RUNTIME_LIBRARY}} target property. That policy is NEW whenever a project
requires CMake 3.15 or newer, and the top level {{CMakeLists.txt}} requires
3.16, so there is no {{/MD}} left to replace.
The released compiler therefore links the shared runtime, which is what is
wanted - but it is reached by accident. {{WITH_MT}} looks like a plain bug, and
anyone repairing it would silently turn the release build back into the
statically linked one the project deliberately moved away from.
h2. Change
* Drop {{-DWITH_MT=ON}} from {{build/docker/msvc/build-compiler.bat}} and from
the manual recipe in {{doc/ReleaseManagement.md}}, with a note saying why it is
not wanted.
* Replace the "only depends on kernel32.dll" step with what is actually
expected of the executable.
Neither recipe builds any library ({{BUILD_LIBRARIES=OFF}} and {{WITH_CPP=OFF}}
respectively), so the {{THRIFT_RUNTIME_POSTFIX}} that {{WITH_MT}} also sets
renames nothing.
_Drafted with AI assistance (Claude Opus 5); reviewed and posted by Jens Geyer._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)