Re: CMake minimum required version

Daniel Sahlberg <[email protected]> Thu, 23 Jul 2026 17:14:47 +0200
Newsgroups gmane.comp.version-control.subversion.devel
Message-ID <CAMHy98N9jU1a0+QUUfyp-mbdFq_2PxWPO-St6yjhouomYKqX5g@mail.gmail.com>
--0000000000004b91ee065748b800
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Den tors 23 juli 2026 kl 17:08 skrev Branko =C4=8Cibej <[email protected]>:

> On 23. 7. 2026 16:59, Ivan Zhakov wrote:
>
> I would like to discuss CMake minimum required version for trunk and
> 1.15.x.
>
> Currently Subversion requires CMake version >=3D 3.14
>
> We have two workarounds to support CMake < 3.18 [1, 2]. And one workaroun=
d
> to support CMake < 3.20 [3]
>
> Compatibility with versions of CMake older than 3.10 is deprecated in
> CMake 3.31 [4].
> Compatibility with versions of CMake older than 3.5 is removed in CMake
> 4.0 [4].
>
> Information about bundled CMake versions in different distributions and
> toolsets:
> - Visual Studio 2017     (supported until Apr 2027): CMake 3.6
> - Visual Studio 2019     (supported until Apr 2029): CMake 3.20
> - Visual Studio 2022     (supported until Jan 2032): CMake 3.31
> - Visual Studio 2026     (supported until Nov 2028): CMake 4.3
> - Debian 11 "bullseye"   (supported until Aug 2026): CMake 3.18
> - Debian 12 "bookworm"   (supported until Jun 2028): CMake 3.25
> - Debian 13 "trixie"     (supported until Aug 2030): CMake 3.31
> - Ubuntu 22.04 LTS       (supported until May 2027): CMake 3.22
> - Ubuntu 24.04 LTS       (supported until May 2029): CMake 3.28
> - Ubuntu 26.04 LTS       (supported until May 2031): CMake 4.2
> - RHEL 8                 (supported until May 2029): CMake 3.26
> - RHEL 9                 (supported until May 2032): CMake 3.31
> - RHEL 10                (supported until May 2035): CMake 3.31
>
> The same information sorted by CMake version:
> - Visual Studio 2017     (supported until Apr 2027): CMake 3.6
> - Debian 11 "bullseye"   (supported until Aug 2026): CMake 3.18
> - Visual Studio 2019     (supported until Apr 2029): CMake 3.20
> - Ubuntu 22.04 LTS       (supported until May 2027): CMake 3.22
> - Debian 12 "bookworm"   (supported until Jun 2028): CMake 3.25
> - RHEL 8                 (supported until May 2029): CMake 3.26
> - Ubuntu 24.04 LTS       (supported until May 2029): CMake 3.28
> - Visual Studio 2022     (supported until Jan 2032): CMake 3.31
> - RHEL 9                 (supported until May 2032): CMake 3.31
> - RHEL 10                (supported until May 2035): CMake 3.31
> - Debian 13 "trixie"     (supported until Aug 2030): CMake 3.31
> - Ubuntu 26.04 LTS       (supported until May 2031): CMake 4.2
> - Visual Studio 2026     (supported until Nov 2028): CMake 4.3
>
> Based on these tables, I think we can make CMake 3.20 the minimum require=
d
> version. This would support building Subversion with bundled CMake in
> Visual Studio 2019 and would allow us to remove the three workarounds.
>
>
>
> I assume that the bundled version can be ignored/updated by a separate
> installation of CMake? If not, we should explicitly say in the release
> notes that we do not support building with CMake with VS 2017. That's a
> build environment that's less than 10 years old. Well, we still support i=
t
> in the vcxproj generator.
>
>
> The other close option is CMake 3.18 (for Debian 11 support), but I would
> say it's not exactly worth it, since Debian 11 becomes unsupported in Aug
> 2026.
>
>
>
> Unix distros will use the autotools build. We should ignore them for this
> discussion. I don't see the distros switching to CMake given that they've
> used autotools for decades.
>
>
> So I propose that we bump the minimum required version to 3.20 and
> backport this change to 1.15.x branch.
>
>

Thanks for doing the digging out all cmake versions! Really helps this
discussion!

When I saw the list, I also started thinking about this issue. I came to
the same conclusion as you did - let's update the minimum requirement to
3.20 with the arguments you have provided above. Debian 11 can still build
with autoconf.

If someone would provide a convincing argument for updating even further, I
would be inclined to listen. If we for example "only" support the latest
two versions of a given tool I think that is acceptable for trunk if that
lets us do something we otherwise have to jump through hoops to do.
(Especially if it is technically possible to install a newer version just
for building).

Cheers,
Daniel


>
> Thoughts?
>
> [1]:
> https://svn.apache.org/viewvc/subversion/trunk/CMakeLists.txt?revision=3D=
1936525&pathrev=3D1936525&view=3Dmarkup#l725
> [2]:
> https://svn.apache.org/viewvc/subversion/trunk/CMakeLists.txt?revision=3D=
1936525&pathrev=3D1936525&view=3Dmarkup#l1042
>
> [3]:
> https://svn.apache.org/viewvc/subversion/trunk/CMakeLists.txt?revision=3D=
1936525&pathrev=3D1936525&view=3Dmarkup#l459
> [4]:
> https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html#p=
olicy-version
>
> --
> Ivan Zhakov
>
>
>

--0000000000004b91ee065748b800
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><span style=3D"background-color:transpare=
nt">Den tors 23 juli 2026 kl 17:08 skrev Branko =C4=8Cibej &lt;<a href=3D"m=
ailto:[email protected]">[email protected]</a>&gt;:</span></div><div class=3D=
"gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><u></u>

 =20
   =20
 =20
  <div>
    <div>On 23. 7. 2026 16:59, Ivan Zhakov
      wrote:<br>
    </div>
    <blockquote type=3D"cite">
     =20
      <div dir=3D"ltr">
        <div>I would like to discuss=C2=A0CMake minimum required version fo=
r
          trunk and 1.15.x.</div>
        <div><br>
        </div>
        <div>Currently Subversion requires CMake version &gt;=3D=C2=A03.14<=
/div>
        <div><br>
        </div>
        <div>
          <div>We have two workarounds to support CMake &lt; 3.18 [1,
            2]. And one workaround to support CMake &lt; 3.20 [3]</div>
          <br>
        </div>
        <div>Compatibility with versions of CMake older than 3.10 is
          deprecated in CMake 3.31 [4].</div>
        <div>
          <span> </span>Compatibility
          with versions of CMake older than 3.5 is removed in CMake 4.0
          [4].</div>
        <div><br>
        </div>
        <div>Information about bundled CMake versions in different
          distributions and toolsets:</div>
        <div><span style=3D"font-family:monospace">- Visual Studio 2017 =C2=
=A0
            =C2=A0 (supported until Apr 2027): CMake 3.6<br>
            - Visual Studio 2019 =C2=A0 =C2=A0 (supported until Apr 2029): =
CMake
            3.20<br>
            - Visual Studio 2022 =C2=A0 =C2=A0 (supported until Jan 2032): =
CMake
            3.31<br>
            - Visual Studio 2026 =C2=A0 =C2=A0 (supported until Nov 2028): =
CMake
            4.3<br>
            - Debian 11 &quot;bullseye&quot; =C2=A0 (supported until Aug 20=
26): CMake
            3.18<br>
            - Debian 12 &quot;bookworm&quot; =C2=A0 (supported until Jun 20=
28): CMake
            3.25<br>
            - Debian 13 &quot;trixie&quot; =C2=A0 =C2=A0 (supported until A=
ug 2030): CMake
            3.31<br>
            - Ubuntu 22.04 LTS =C2=A0 =C2=A0 =C2=A0 (supported until May 20=
27): CMake
            3.22<br>
            - Ubuntu 24.04 LTS =C2=A0 =C2=A0 =C2=A0 (supported until May 20=
29): CMake
            3.28<br>
            - Ubuntu 26.04 LTS =C2=A0 =C2=A0 =C2=A0 (supported until May 20=
31): CMake
            4.2<br>
            - RHEL 8 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (supported until May 2029): CMake
            3.26<br>
            - RHEL 9 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (supported until May 2032): CMake
            3.31<br>
            - RHEL 10 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0(supported until May 2035): CMake
            3.31<br>
          </span><br>
        </div>
        <div>The same information sorted by CMake version:</div>
        <span style=3D"font-family:monospace">- Visual Studio 2017 =C2=A0 =
=C2=A0
          (supported until Apr 2027): CMake 3.6<br>
        </span>
        <span style=3D"font-family:monospace">- Debian 11 &quot;bullseye&qu=
ot; =C2=A0
          (supported until Aug 2026): CMake 3.18<br>
        </span><span style=3D"font-family:monospace">- Visual Studio 2019
          =C2=A0 =C2=A0 (supported until Apr 2029): CMake 3.20<br>
          - Ubuntu 22.04 LTS =C2=A0 =C2=A0 =C2=A0 (supported until May 2027=
): CMake
          3.22<br>
        </span>
        <span style=3D"font-family:monospace">- Debian 12 &quot;bookworm&qu=
ot; =C2=A0
          (supported until Jun 2028): CMake 3.25<br>
        </span>
        <span style=3D"font-family:monospace">- RHEL 8 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
          (supported until May 2029): CMake 3.26<br>
        </span><span style=3D"font-family:monospace">- Ubuntu 24.04 LTS =C2=
=A0
          =C2=A0 =C2=A0 (supported until May 2029): CMake 3.28<br>
        </span>
        <span style=3D"font-family:monospace">- Visual Studio 2022 =C2=A0 =
=C2=A0
          (supported until Jan 2032): CMake 3.31<br>
        </span>
        <span style=3D"font-family:monospace">- RHEL 9 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
          (supported until May 2032): CMake 3.31<br>
          - RHEL 10 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(supported until May 2035): CMake
          3.31<br>
        </span>
        <span style=3D"font-family:monospace">- Debian 13 &quot;trixie&quot=
; =C2=A0 =C2=A0
          (supported until Aug 2030): CMake 3.31<br>
        </span>
        <span style=3D"font-family:monospace">- Ubuntu 26.04 LTS =C2=A0 =C2=
=A0 =C2=A0
          (supported until May 2031): CMake 4.2<br>
        </span>
        <span style=3D"font-family:monospace">- Visual Studio 2026 =C2=A0 =
=C2=A0
          (supported until Nov 2028): CMake 4.3<br>
        </span>
        <div><br>
        </div>
        <div>
          <span>Based on these tables, I think we can make CMake 3.20
            the minimum required version. This would support building
            Subversion with bundled CMake in Visual Studio 2019 and
            would allow us to remove the three workarounds.<br>
          </span></div>
      </div>
    </blockquote>
    <br>
    <br>
    I assume that the bundled version can be ignored/updated by a
    separate installation of CMake? If not, we should explicitly say in
    the release notes that we do not support building with CMake with VS
    2017. That&#39;s a build environment that&#39;s less than 10 years old.
    Well, we still support it in the vcxproj generator.<br>
    <br>
    <br>
    <blockquote type=3D"cite">
      <div dir=3D"ltr">
        <div><span>The other close option is CMake 3.18 (for Debian 11
            support), but I would say it&#39;s not exactly worth it, since
            Debian 11 becomes unsupported in Aug 2026.<br>
          </span></div>
      </div>
    </blockquote>
    <br>
    <br>
    Unix distros will use the autotools build. We should ignore them for
    this discussion. I don&#39;t see the distros switching to CMake given
    that they&#39;ve used autotools for decades.<br>
    <br>
    <br>
    <blockquote type=3D"cite">
      <div dir=3D"ltr">
        <div><span>So I propose that we bump the minimum required
            version to 3.20 and backport this change to 1.15.x branch.<br><=
/span></div></div></blockquote></div></blockquote><div><br></div><div><br c=
lass=3D"gmail-Apple-interchange-newline">Thanks for doing the digging out a=
ll cmake versions! Really helps this discussion!</div><div><br></div><div>W=
hen I saw the list, I also started thinking about this issue. I came to the=
 same conclusion as you did - let&#39;s update the minimum requirement to 3=
.20 with the arguments you have provided above. Debian 11 can still build w=
ith autoconf.</div><div><br></div><div><span style=3D"background-color:tran=
sparent">If someone would provide a convincing argument for updating even f=
urther, I would be inclined to listen. If we for example &quot;only&quot; s=
upport the latest two versions of a given tool I think that is acceptable f=
or trunk if that lets us do something we otherwise have to jump through hoo=
ps to do. (Especially if it is technically possible to install a newer vers=
ion just for building).</span></div><div><br></div><div>Cheers,</div><div><=
span style=3D"background-color:transparent">Daniel</span></div><div>=C2=A0<=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex"><div><blockquote typ=
e=3D"cite"><div dir=3D"ltr"><div><span>
            <br>
            Thoughts?</span>
        </div>
        <div><br>
        </div>
        <div>[1]:=C2=A0<a href=3D"https://svn.apache.org/viewvc/subversion/=
trunk/CMakeLists.txt?revision=3D1936525&amp;pathrev=3D1936525&amp;view=3Dma=
rkup#l725" target=3D"_blank">https://svn.apache.org/viewvc/subversion/trunk=
/CMakeLists.txt?revision=3D1936525&amp;pathrev=3D1936525&amp;view=3Dmarkup#=
l725</a></div>
        <div>[2]:=C2=A0<a href=3D"https://svn.apache.org/viewvc/subversion/=
trunk/CMakeLists.txt?revision=3D1936525&amp;pathrev=3D1936525&amp;view=3Dma=
rkup#l1042" target=3D"_blank">https://svn.apache.org/viewvc/subversion/trun=
k/CMakeLists.txt?revision=3D1936525&amp;pathrev=3D1936525&amp;view=3Dmarkup=
#l1042</a>=C2=A0</div>
        <div>[3]:=C2=A0<a href=3D"https://svn.apache.org/viewvc/subversion/=
trunk/CMakeLists.txt?revision=3D1936525&amp;pathrev=3D1936525&amp;view=3Dma=
rkup#l459" target=3D"_blank">https://svn.apache.org/viewvc/subversion/trunk=
/CMakeLists.txt?revision=3D1936525&amp;pathrev=3D1936525&amp;view=3Dmarkup#=
l459</a></div>
        <div>[4]:=C2=A0<a href=3D"https://cmake.org/cmake/help/latest/comma=
nd/cmake_minimum_required.html#policy-version" target=3D"_blank">https://cm=
ake.org/cmake/help/latest/command/cmake_minimum_required.html#policy-versio=
n</a></div>
        <div><br>
        </div>
        <span class=3D"gmail_signature_prefix">-- </span><br>
        <div dir=3D"ltr" class=3D"gmail_signature">Ivan Zhakov</div>
      </div>
    </blockquote>
    <br>
  </div>

</blockquote></div></div>

--0000000000004b91ee065748b800--