<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>Yes, that warning is unrelated. It likely means that <span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">_sd_useless_struct_to_allow_trailing_semicolon_</span></span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> is
only a declaration that does not have a definition, so no
bindings will be generated for it.</span></p>
<p><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">Jorn<br>
</span></p>
<div class="moz-cite-prefix">On 17-2-2025 14:12, Nils Kattenbeck
wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAKkJDRcyk_53omZrLFgT+8Of7j=pki5_s7kM6hHDOcQYS+Bjhw@mail.gmail.com">
<div dir="ltr">
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Thanks, v22
works. I was checking with jextract 21 as that is the JDK
version I have running. With v22 everything seems to work,
both when specifying one or two header files. There are still
a few warnings but those seem unrelated:<br>
<br>
<span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">sd-daemon.h:26:1:
warning: Skipping
_sd_useless_struct_to_allow_trailing_semicolon_ (type
Declared(_sd_useless_struct_to_allow_trailing_semicolon_)
is not supported)</span><br>
<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">
</span><br>
<br>
</span></div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Cheers, Nils</div>
</div>
<br>
<div class="gmail_quote gmail_quote_container">
<div dir="ltr" class="gmail_attr">On Mon, Feb 17, 2025 at
2:04 PM Jorn Vernee <<a href="mailto:jorn.vernee@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">jorn.vernee@oracle.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>Looking at the code, we already unconditionally generate
an intermediate header file [1]. So this should already
work on the latest version of jextract.<br>
</p>
<p>Jorn<br>
</p>
<p>[1]:
<a href="https://urldefense.com/v3/__https://github.com/openjdk/jextract/blob/7ed79ecdf678db804f40b3494b6f1dafa760c808/src/main/java/org/openjdk/jextract/JextractTool.java*L110__;Iw!!ACWV5N9M2RV99hQ!Iw0EA9Y9KDQAmnT1W734TK58GyrdlXU9udm4XBJYBuYjQwu9PftFnhLsLnywJZ4adAjR2S4WJH1D6l4innKM$" target="_blank" moz-do-not-send="true">https://github.com/openjdk/jextract/blob/7ed79ecdf678db804f40b3494b6f1dafa760c808/src/main/java/org/openjdk/jextract/JextractTool.java#L110</a><br>
</p>
<div>On 17-2-2025 14:00, Maurizio Cimadamore wrote:<br>
</div>
<blockquote type="cite">
<p>I wonder how this interacts with the fact that jextract
now also accepts multiple headers and, in that case, it
will generate an intermediate header that includes the
specified headers.</p>
<p>Can you try passing jextract _two_ headers, both
sd-daemon.h and something else, and see what happens? My
feeling is that things should work in that case.</p>
<p>Which, if true, would advocate for jextract to handle
both cases in the same way: with an intermediate header
including the specified header file(s).</p>
<p>Maurizio<br>
</p>
<p><br>
</p>
<p><br>
</p>
<div>On 15/02/2025 16:46, Nils Kattenbeck wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Hi
Jorn,</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Your
assessment seems to be correct. In C the main.c
would be level 0 which libclang sidesteps in this
case. Creating a dummy header file which simply
includes the <span style="font-family:monospace">sd-daemon.h</span>
file seems to fix the problem.</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">That
being said I think it would still make sense for
jextract to work around this issue. Given that the
resulting Java classes would be similar to the main
translation unit in C it would make sense for
jextract to emulate this behaviour and read the
header files as if they already were at level 1.
This could e.g. be done creating such a dummy header
file automatically (like I now did manually). This
would better match expectations, resolve the issue
in this specific instance with systemd but more
importantly would prevent hard to troubleshoot
issues in the future.</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Cheers,
Nils</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Fri, Feb 14, 2025
at 11:46 PM Jorn Vernee <<a href="mailto:jorn.vernee@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">jorn.vernee@oracle.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>Hey Nils,</p>
<p>Jextract uses clang under the hood to do the
parsing, so it is clang that is managing the <font face="monospace">__INCLUDE_LEVEL__</font>
value, and I'm assuming it does that correctly.<br>
</p>
<p>I think the issue here is that, normally, you
would write a program that includes sd-daemon.h,
so the include level of that file starts out at
1, with the main program translation unit being
level 0. But, since jextract uses clang to parse
the sd-daemon.h file directly, it has include
level 0 instead, and this implementation header
seems to end up with include level 1, failing
the check. You should see the same error if you
directly pass sd-daemon.h to clang (or gcc).<br>
</p>
<p>I think another way to work around this would
be to create a wrapper header file in which you
<font face="monospace">#include sd-deamon.h</font>,
and then pass that wrapper header file to
jextract.<br>
</p>
<p>Jorn<br>
</p>
<div>On 13-2-2025 17:51, Nils Kattenbeck wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Dear all,</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Today I tried to use
jextract on sd-daemon.h (from systemd) to
access the sd_notify* class of functions. To
my surprise this did not work and returned
in the following error message:</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><span style="font-family:monospace"><span style="color:rgb(24,24,178);background-color:rgb(255,255,255)">../jextract-21/bin/jextract
</span><span style="color:rgb(24,178,178);background-color:rgb(255,255,255)">--source
-t foo.bar </span><span style="color:rgb(24,178,178);background-color:rgb(255,255,255)">/usr/include/systemd/sd-daemon.h</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">WARNING: A
restricted method in
java.lang.foreign.AddressLayout has been
called</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">WARNING:
java.lang.foreign.AddressLayout::withTargetLayout
has been called by module
org.openjdk.jextract</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">WARNING: Use
--enable-native-access=org.openjdk.jextract to avoid a warning for this
module</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
<br>
<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">/usr/include/systemd/_sd-common.h:23:4:
error: "Do not include _sd-common.h
directly; it is a private header."</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"></span></span><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">which comes down to the
following preprocessor code in _sd-common.h
(which is included by sd-daemon.h):</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">#if
defined(__INCLUDE_LEVEL__) &&
__INCLUDE_LEVEL__ <= 1 &&
!defined(__COVERITY__)</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"># error "Do
not include _sd-common.h directly; it is
a private header."</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
<span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">#endif</span><br>
</span></div>
<br>
<div><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">It seems like jextract
does not increase the __INCLUDE_LEVEL__
resulting in this error. However, it does
seem to define it which makes this more
curious.</span></div>
<div><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">The fix would be to
either a) not set it at all or b)
correctly increment it when parsing files
from an #include statement.</span></div>
<div><span class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</span></div>
<div><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">For now I have been able
to circumvent this by telling jextract to
also define </span><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">__COVERITY__<span class="gmail_default" style="font-family:arial,helvetica,sans-serif"> though this is only a
very dirty hack and will not work in
every instance.</span></span></span></div>
<div><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br>
</span></span></span></div>
<div><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">Cheers,</span></span></span></div>
<div><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">Nils</span></span></span></div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</body>
</html>