Re: CMake on Unix

Timofei Zhakov <[email protected]> Tue, 19 May 2026 15:19:42 +0200
Newsgroups gmane.comp.apache.apr.devel
Message-ID <CAPD1kXTzfXaZS88PvQ2LqdpcyVW6xGLe+WPM8xY6xwpXDyRRHg@mail.gmail.com>
--000000000000856c1806522b8ade
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Mon, May 18, 2026 at 11:20=E2=80=AFPM Branko =C4=8Cibej <[email protected]=
g> wrote:

> On 18. 5. 26 22:27, Ivan Zhakov wrote:
>
> On Mon, 18 May 2026 at 21:24, Timofei Zhakov <[email protected]> wrote:
>
>> On Mon, May 18, 2026 at 5:22=E2=80=AFPM Branko =C4=8Cibej <brane@apache.=
org> wrote:
>>
>>> On 18. 5. 26 17:04, Ivan Zhakov wrote:
>>>
>>>
>> [..]
>
>> Yes, especially because the Unix and Win32 versions share a lot of thing=
s
>> in common but sometimes need to do it in a slightly different way.
>>
>> Also what do you guys think about the fact that Win32 apr.h includes
>> windows.h? It seems odd to me. APR promises to eliminate platform
>> dependence by wrapping everything into POSIX-ish style API
>>
>
> Cross-platform API. I'm not sure what you mean by POSIX-ish, but APR isn'=
t
> that.
>
>
I mean that the API is similar. For example, apr_file_open() kind of works
almost like fopen(). Not exactly but in my head I have this connection.
Okay their signatures are very different and even naming, but I think there
is some pattern of doing the same thing but in a slightly more modern way
with a bit more control.


> without extra unneeded junk and then all high level code essentially has
>> GetLastError in the scope. I think if one wants to explicitly use win32
>> API, they should include those headers themselves.
>>
>
> It's a good question. I agree that apr.h should not depend on system
> headers like Windows.h. But one reason that Windows error codes are used =
in
> apr_errno.h.
>
>
> apr.h is a generated, *system-specific* header. Of course it can and
> should depend on system headers if it needs them. It also includes
> sys/types.h and sys/socket.h and sys/wait.h and os2.h and so on, dependin=
g
> on the target. That makes perfect sense.
>
>
The question I have is whether we really want it or not.

In reality it's always included in every source file. Take svn_wc.h for
example:

[[[
#include <apr.h>
#include <apr_pools.h>
#include <apr_tables.h>
#include <apr_hash.h>
#include <apr_time.h>
#include <apr_file_io.h>

#include "svn_types.h"
#include "svn_string.h"
#include "svn_checksum.h"
#include "svn_io.h"
#include "svn_delta.h"     /* for svn_stream_t */
#include "svn_opt.h"
#include "svn_ra.h"        /* for svn_ra_reporter_t type */
]]]


> Sure, if anyone wants to use the Win32 API or a pure POSIX API or the
> Linux API or the macOS API along with APR, they have to include those
> headers *before* apr.h.
>
> -- Brane
>
>
>
>

--=20
Timofei Zhakov

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

<div dir=3D"ltr"><div dir=3D"ltr">On Mon, May 18, 2026 at 11:20=E2=80=AFPM =
Branko =C4=8Cibej &lt;<a href=3D"mailto:[email protected]">[email protected]<=
/a>&gt; wrote:</div><div class=3D"gmail_quote gmail_quote_container"><block=
quote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1=
px solid rgb(204,204,204);padding-left:1ex"><u></u>

 =20
   =20
 =20
  <div>
    <div>On 18. 5. 26 22:27, Ivan Zhakov wrote:<br>
    </div>
    <blockquote type=3D"cite">
     =20
      <div dir=3D"ltr">
        <div dir=3D"ltr">On Mon, 18 May 2026 at 21:24, Timofei Zhakov &lt;<=
a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>=
&gt;
          wrote:</div>
        <div class=3D"gmail_quote">
          <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div dir=3D"ltr">
              <div dir=3D"ltr">
                <div dir=3D"ltr">On Mon, May 18, 2026 at 5:22=E2=80=AFPM Br=
anko
                  =C4=8Cibej &lt;<a href=3D"mailto:[email protected]" target=
=3D"_blank">[email protected]</a>&gt;
                  wrote:</div>
                <div class=3D"gmail_quote">
                  <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px=
 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                    <div>
                      <div>On 18. 5. 26 17:04, Ivan Zhakov wrote:<br>
                      </div>
                      =C2=A0</div>
                  </blockquote>
                </div>
              </div>
            </div>
          </blockquote>
          <div>[..]=C2=A0</div>
          <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div dir=3D"ltr">
              <div dir=3D"ltr">
                <div class=3D"gmail_quote">
                  <div>Yes, especially because the Unix and Win32
                    versions share a lot of things in common but
                    sometimes need to do it in a slightly different way.</d=
iv>
                  <div><br>
                  </div>
                  <div>Also what do you guys think about the fact that
                    Win32 apr.h includes windows.h? It seems odd to me.
                    APR promises to eliminate platform dependence by
                    wrapping everything into POSIX-ish style API</div>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
      </div>
    </blockquote>
    <br>
    Cross-platform API. I&#39;m not sure what you mean by POSIX-ish, but AP=
R
    isn&#39;t that.<br>
    <br></div></blockquote><div><br></div><div>I mean that the API is simil=
ar. For example, apr_file_open() kind of works almost like fopen(). Not exa=
ctly but in my head I have this connection. Okay their signatures are very =
different and even naming, but I think there is some pattern of doing the s=
ame thing but in a slightly more modern way with a bit more control.</div><=
div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0=
px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
    <blockquote type=3D"cite">
      <div dir=3D"ltr">
        <div class=3D"gmail_quote">
          <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div dir=3D"ltr">
              <div dir=3D"ltr">
                <div class=3D"gmail_quote">
                  <div>without extra unneeded junk and then all high
                    level code essentially has GetLastError in the
                    scope. I think if one wants to explicitly use win32
                    API, they should include those headers themselves.</div=
>
                </div>
              </div>
            </div>
          </blockquote>
          <br>
        </div>
        <div class=3D"gmail_quote">It&#39;s a good
          question. I agree that apr.h should not depend on system
          headers like Windows.h. But one reason that Windows error
          codes are used in apr_errno.h.</div>
      </div>
    </blockquote>
    <br>
    apr.h is a generated, <i>system-specific</i> header. Of course it
    can and should depend on system headers if it needs them. It also
    includes sys/types.h and sys/socket.h and sys/wait.h and os2.h and
    so on, depending on the target. That makes perfect sense.<br>
    <br></div></blockquote><div><br></div><div>The question I have is wheth=
er we really want it or not.=C2=A0</div><div><br></div><div>In reality it&#=
39;s always included in every source file. Take svn_wc.h for example:</div>=
<div><br></div><div>[[[</div><div>#include &lt;apr.h&gt;<br>#include &lt;ap=
r_pools.h&gt;<br>#include &lt;apr_tables.h&gt;<br>#include &lt;apr_hash.h&g=
t;<br>#include &lt;apr_time.h&gt;<br>#include &lt;apr_file_io.h&gt;<br><br>=
#include &quot;svn_types.h&quot;<br>#include &quot;svn_string.h&quot;<br>#i=
nclude &quot;svn_checksum.h&quot;<br>#include &quot;svn_io.h&quot;<br>#incl=
ude &quot;svn_delta.h&quot; =C2=A0 =C2=A0 /* for svn_stream_t */<br>#includ=
e &quot;svn_opt.h&quot;<br>#include &quot;svn_ra.h&quot; =C2=A0 =C2=A0 =C2=
=A0 =C2=A0/* for svn_ra_reporter_t type */<br>]]]</div><div>=C2=A0</div><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex"><div>
    Sure, if anyone wants to use the Win32 API or a pure POSIX API or
    the Linux API or the macOS API along with APR, they have to include
    those headers=C2=A0<i>before</i>=C2=A0apr.h.<br>
    <br>
    -- Brane<br>
    <br>
    <br>
    <br>
  </div>

</blockquote></div><div><br clear=3D"all"></div><br><span class=3D"gmail_si=
gnature_prefix">-- </span><br><div dir=3D"ltr" class=3D"gmail_signature"><d=
iv dir=3D"ltr"><div>Timofei Zhakov</div></div></div></div>

--000000000000856c1806522b8ade--