<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style="">
<p style="margin: 0px 0px 1.2em !important;">Hi</p>
<p style="margin: 0px 0px 1.2em !important;">On 28/09/2024 15:26,
<a class="moz-txt-link-abbreviated" href="mailto:some-java-user-99206970363698485155@vodafonemail.de">some-java-user-99206970363698485155@vodafonemail.de</a> wrote:</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:dcdae7f4-8563-403a-996a-f9027e0fff46@vodafonemail.de">
<p>Hello,</p>
<p>it seems currently the various `--library` options of
jextract can be summarized as:</p>
<ol>
<li>The library is at an OS-dependent library path, and the
name is mapped in an OS-specific way (`--library libname`)</li>
<li>The library is at a specific relative or absolute file
path (`--library :filepath`); no OS-specific file name
mapping is performed, so you limit which OS you support,
or you have to omit the `.dll` or `.so` extension to avoid
confusion (in case that works)</li>
<li>The library is loaded with System#loadLibrary
(`--use-system-load-library`); this is similar to (1.)
except that it also supports `java.library.path` (related:
JDK-8311090), but might have limitations for the dynamic
linker (CODETOOLS-7903654)<br>
</li>
<li>It is assumed that the user has already loaded the
library with System#load or System#loadLibrary (no
`--library`)</li>
</ol>
<p><br>
</p>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<p style="margin: 0px 0px 1.2em !important;">Your description of
the options is correct. Not sure I see (3) as similar to (1) in
the sense that (1) uses the OS to do the library lookup (e.g. OS
dynamic linker), wherease (3) is oblivious to all that and uses
java.library.path (plus a bunch of hardcoded paths in the VM
impl - which are not even relevant in modern Linux distros).</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:dcdae7f4-8563-403a-996a-f9027e0fff46@vodafonemail.de">
<p> </p>
<p>A use cases which is not covered is when you expect that
the user normally provides the library at an OS-dependent
path, but for custom use cases allow them to load the
library from a custom location. The context of this use case
is not where the user generates the code with jextract
themselves, but where they consume some third-party bindings
which include jextract generated code.<br>
</p>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<p style="margin: 0px 0px 1.2em !important;">I believe I can see
how that might be useful with the tree-sitter library, as you
have two components there: the library and the user-defined
“plugins” :-)</p>
<p style="margin: 0px 0px 1.2em !important;">That said, maybe in
such a setting you want to load the main library with (1)/(2)
and leave the “plugins” to “loaderLookup” ? Note that
“loaderLookup” is always added by jextract to the chain of
lookups generated for a given set of bindings. But maybe this is
not exactly the use case you have in mind.</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:dcdae7f4-8563-403a-996a-f9027e0fff46@vodafonemail.de">
<p> </p>
<p>Ideally this would be solved with a user-provided
SymbolLookup (see also [1] and CODETOOLS-7903186), but that
might not be that easily achievable or complicate the API of
jextract-based bindings.</p>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<p style="margin: 0px 0px 1.2em !important;">Yes, this is the
general solution to this kind of problems.</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:dcdae7f4-8563-403a-996a-f9027e0fff46@vodafonemail.de">
<p> A potential solution to address part of the problem might
be to have a (opt-in) combination of the library loading
variants mentioned above: (1.) respectively (3.) with a
fallback of (4.) [^2] <br>
This is just a rough general idea. However, if System#load /
#loadLibrary is considered legacy and should be avoided,
then maybe this approach should be avoided? What do you
think?</p>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<p style="margin: 0px 0px 1.2em !important;">So, let me try to
uplevel your observation a bit. The behavior of the various
symbol lookup factories is not completely symmetric:</p>
<ul style="margin: 1.2em 0px;padding-left: 2em;">
<li style="margin: 0.5em 0px;">SymbolLookup::loaderLookup always
succeeds</li>
<li style="margin: 0.5em 0px;">Linker::defaultLookup always
succeeds</li>
<li style="margin: 0.5em 0px;">Symbol::libraryLookup can fail
(e.g. if the specified library cannot be loaded)</li>
</ul>
<p style="margin: 0px 0px 1.2em !important;">Because of the
differences in the exception behavior, these things can’t
compose nicely if there’s a library load failure. A possible way
to address this, would be for jextract to try and wrap a library
lookup, so that either:</p>
<ul style="margin: 1.2em 0px;padding-left: 2em;">
<li style="margin: 0.5em 0px;">we return the library lookup
successfully created</li>
<li style="margin: 0.5em 0px;">we return a dummy lookup (one
that always fails to find symbols), in case creation failed</li>
</ul>
<p style="margin: 0px 0px 1.2em !important;">This would allow
jextract to “keep going” even in the face of library loading
errors. My question is whether this behavior would be useful:
IMHO <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">--library</code>
is a strong sign to jextract that you know where things are
located. So, if things aren’t where you expected, should that
issue be ignored? Or should we report the failure to the user?
My feeling is that 99% you want that to be an error - e.g.
because that will be the result of a wrong name being passed to
the jextract command line.</p>
<p style="margin: 0px 0px 1.2em !important;">So, while swallowing
exceptions is a possibility, I’m not sure we’ll make (all) users
a service?</p>
<p style="margin: 0px 0px 1.2em !important;">The general solution
for this kind of cornery lookup situation is CODETOOLS-7903186 -
adding even more library-related flags is surely technically
possible, but strikes me as a bad way to get there.</p>
<p style="margin: 0px 0px 1.2em !important;">Maurizio</p>
<div title="MDH:PHA+SGk8YnI+PC9wPjxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+T24gMjgvMDkvMjAyNCAx
NToyNiwgc29tZS1qYXZhLXVzZXItOTkyMDY5NzAzNjM2OTg0ODUxNTVAdm9kYWZvbmVtYWlsLmRl
IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjaXRlPSJtaWQ6ZGNkYWU3
ZjQtODU2My00MDNhLTk5NmEtZjkwMjdlMGZmZjQ2QHZvZGFmb25lbWFpbC5kZSI+Cgo8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgIj4KICAKICAKICAg
IDxwPkhlbGxvLDwvcD4KICAgIDxwPml0IHNlZW1zIGN1cnJlbnRseSB0aGUgdmFyaW91cyBgLS1s
aWJyYXJ5YCBvcHRpb25zIG9mIGpleHRyYWN0CiAgICAgIGNhbiBiZSBzdW1tYXJpemVkIGFzOjwv
cD4KICAgIDxvbD4KICAgICAgPGxpPlRoZSBsaWJyYXJ5IGlzIGF0IGFuIE9TLWRlcGVuZGVudCBs
aWJyYXJ5IHBhdGgsIGFuZCB0aGUgbmFtZQogICAgICAgIGlzIG1hcHBlZCBpbiBhbiBPUy1zcGVj
aWZpYyB3YXkgKGAtLWxpYnJhcnkgbGlibmFtZWApPC9saT4KICAgICAgPGxpPlRoZSBsaWJyYXJ5
IGlzIGF0IGEgc3BlY2lmaWMgcmVsYXRpdmUgb3IgYWJzb2x1dGUgZmlsZSBwYXRoCiAgICAgICAg
KGAtLWxpYnJhcnkgOmZpbGVwYXRoYCk7IG5vIE9TLXNwZWNpZmljIGZpbGUgbmFtZSBtYXBwaW5n
IGlzCiAgICAgICAgcGVyZm9ybWVkLCBzbyB5b3UgbGltaXQgd2hpY2ggT1MgeW91IHN1cHBvcnQs
IG9yIHlvdSBoYXZlIHRvCiAgICAgICAgb21pdCB0aGUgYC5kbGxgIG9yIGAuc29gIGV4dGVuc2lv
biB0byBhdm9pZCBjb25mdXNpb24gKGluIGNhc2UKICAgICAgICB0aGF0IHdvcmtzKTwvbGk+CiAg
ICAgIDxsaT5UaGUgbGlicmFyeSBpcyBsb2FkZWQgd2l0aCBTeXN0ZW0jbG9hZExpYnJhcnkKICAg
ICAgICAoYC0tdXNlLXN5c3RlbS1sb2FkLWxpYnJhcnlgKTsgdGhpcyBpcyBzaW1pbGFyIHRvICgx
LikgZXhjZXB0CiAgICAgICAgdGhhdCBpdCBhbHNvIHN1cHBvcnRzIGBqYXZhLmxpYnJhcnkucGF0
aGAgKHJlbGF0ZWQ6CiAgICAgICAgSkRLLTgzMTEwOTApLCBidXQgbWlnaHQgaGF2ZSBsaW1pdGF0
aW9ucyBmb3IgdGhlIGR5bmFtaWMgbGlua2VyCiAgICAgICAgKENPREVUT09MUy03OTAzNjU0KTxi
cj4KICAgICAgPC9saT4KICAgICAgPGxpPkl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdXNlciBoYXMg
YWxyZWFkeSBsb2FkZWQgdGhlIGxpYnJhcnkKICAgICAgICB3aXRoIFN5c3RlbSNsb2FkIG9yIFN5
c3RlbSNsb2FkTGlicmFyeSAobm8gYC0tbGlicmFyeWApPC9saT4KICAgIDwvb2w+CiAgICA8cD48
YnI+PC9wPjwvYmxvY2txdW90ZT48cD5Zb3VyIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zIGlz
IGNvcnJlY3QuIE5vdCBzdXJlIEkgc2VlICgzKSBhcyBzaW1pbGFyIHRvICgxKSBpbiB0aGUgc2Vu
c2UgdGhhdCAoMSkgdXNlcyB0aGUgT1MgdG8gZG8gdGhlIGxpYnJhcnkgbG9va3VwIChlLmcuIE9T
IGR5bmFtaWMgbGlua2VyKSwgd2hlcmVhc2UgKDMpIGlzIG9ibGl2aW91cyB0byBhbGwgdGhhdCBh
bmQgdXNlcyBqYXZhLmxpYnJhcnkucGF0aCAocGx1cyBhIGJ1bmNoIG9mIGhhcmRjb2RlZCBwYXRo
cyBpbiB0aGUgVk0gaW1wbCAtIHdoaWNoIGFyZSBub3QgZXZlbiByZWxldmFudCBpbiBtb2Rlcm4g
TGludXggZGlzdHJvcykuPC9wPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDpkY2Rh
ZTdmNC04NTYzLTQwM2EtOTk2YS1mOTAyN2UwZmZmNDZAdm9kYWZvbmVtYWlsLmRlIj48cD4KICAg
IDwvcD4KICAgIDxwPkEgdXNlIGNhc2VzIHdoaWNoIGlzIG5vdCBjb3ZlcmVkIGlzIHdoZW4geW91
IGV4cGVjdCB0aGF0IHRoZSB1c2VyCiAgICAgIG5vcm1hbGx5IHByb3ZpZGVzIHRoZSBsaWJyYXJ5
IGF0IGFuIE9TLWRlcGVuZGVudCBwYXRoLCBidXQgZm9yCiAgICAgIGN1c3RvbSB1c2UgY2FzZXMg
YWxsb3cgdGhlbSB0byBsb2FkIHRoZSBsaWJyYXJ5IGZyb20gYSBjdXN0b20KICAgICAgbG9jYXRp
b24uIFRoZSBjb250ZXh0IG9mIHRoaXMgdXNlIGNhc2UgaXMgbm90IHdoZXJlIHRoZSB1c2VyCiAg
ICAgIGdlbmVyYXRlcyB0aGUgY29kZSB3aXRoIGpleHRyYWN0IHRoZW1zZWx2ZXMsIGJ1dCB3aGVy
ZSB0aGV5CiAgICAgIGNvbnN1bWUgc29tZSB0aGlyZC1wYXJ0eSBiaW5kaW5ncyB3aGljaCBpbmNs
dWRlIGpleHRyYWN0IGdlbmVyYXRlZAogICAgICBjb2RlLjxicj48L3A+PC9ibG9ja3F1b3RlPjxw
PkkgYmVsaWV2ZSBJIGNhbiBzZWUgaG93IHRoYXQgbWlnaHQgYmUgdXNlZnVsIHdpdGggdGhlIHRy
ZWUtc2l0dGVyIGxpYnJhcnksIGFzIHlvdSBoYXZlIHR3byBjb21wb25lbnRzIHRoZXJlOiB0aGUg
bGlicmFyeSBhbmQgdGhlIHVzZXItZGVmaW5lZCAicGx1Z2lucyIgOi0pPC9wPjxwPlRoYXQgc2Fp
ZCwgbWF5YmUgaW4gc3VjaCBhIHNldHRpbmcgeW91IHdhbnQgdG8gbG9hZCB0aGUgbWFpbiBsaWJy
YXJ5IHdpdGggKDEpLygyKSBhbmQgbGVhdmUgdGhlICJwbHVnaW5zIiB0byAibG9hZGVyTG9va3Vw
IiA/IE5vdGUgdGhhdCAibG9hZGVyTG9va3VwIiBpcyBhbHdheXMgYWRkZWQgYnkgamV4dHJhY3Qg
dG8gdGhlIGNoYWluIG9mIGxvb2t1cHMgZ2VuZXJhdGVkIGZvciBhIGdpdmVuIHNldCBvZiBiaW5k
aW5ncy4gQnV0IG1heWJlIHRoaXMgaXMgbm90IGV4YWN0bHkgdGhlIHVzZSBjYXNlIHlvdSBoYXZl
IGluIG1pbmQuPGJyPjwvcD48YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjaXRlPSJtaWQ6ZGNkYWU3
ZjQtODU2My00MDNhLTk5NmEtZjkwMjdlMGZmZjQ2QHZvZGFmb25lbWFpbC5kZSI+PHA+CiAgICA8
L3A+CiAgICA8cD5JZGVhbGx5IHRoaXMgd291bGQgYmUgc29sdmVkIHdpdGggYSB1c2VyLXByb3Zp
ZGVkIFN5bWJvbExvb2t1cAogICAgICAoc2VlIGFsc28gWzFdIGFuZCBDT0RFVE9PTFMtNzkwMzE4
NiksIGJ1dCB0aGF0IG1pZ2h0IG5vdCBiZSB0aGF0CiAgICAgIGVhc2lseSBhY2hpZXZhYmxlIG9y
IGNvbXBsaWNhdGUgdGhlIEFQSSBvZiBqZXh0cmFjdC1iYXNlZAogICAgICBiaW5kaW5ncy48L3A+
PC9ibG9ja3F1b3RlPjxwPlllcywgdGhpcyBpcyB0aGUgZ2VuZXJhbCBzb2x1dGlvbiB0byB0aGlz
IGtpbmQgb2YgcHJvYmxlbXMuPGJyPjwvcD48YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjaXRlPSJt
aWQ6ZGNkYWU3ZjQtODU2My00MDNhLTk5NmEtZjkwMjdlMGZmZjQ2QHZvZGFmb25lbWFpbC5kZSI+
PHA+IEEgcG90ZW50aWFsIHNvbHV0aW9uIHRvIGFkZHJlc3MgcGFydCBvZiB0aGUgcHJvYmxlbQog
ICAgICBtaWdodCBiZSB0byBoYXZlIGEgKG9wdC1pbikgY29tYmluYXRpb24gb2YgdGhlIGxpYnJh
cnkgbG9hZGluZwogICAgICB2YXJpYW50cyBtZW50aW9uZWQgYWJvdmU6ICgxLikgcmVzcGVjdGl2
ZWx5ICgzLikgd2l0aCBhIGZhbGxiYWNrCiAgICAgIG9mICg0LikgW14yXSA8YnI+VGhpcyBpcyBq
dXN0IGEgcm91Z2ggZ2VuZXJhbCBpZGVhLiBIb3dldmVyLCBpZiBTeXN0ZW0jbG9hZCAvCiAgICAg
ICNsb2FkTGlicmFyeSBpcyBjb25zaWRlcmVkIGxlZ2FjeSBhbmQgc2hvdWxkIGJlIGF2b2lkZWQs
IHRoZW4KICAgICAgbWF5YmUgdGhpcyBhcHByb2FjaCBzaG91bGQgYmUgYXZvaWRlZD8gV2hhdCBk
byB5b3UgdGhpbms/PC9wPjwvYmxvY2txdW90ZT48cD5TbywgbGV0IG1lIHRyeSB0byB1cGxldmVs
IHlvdXIgb2JzZXJ2YXRpb24gYSBiaXQuIFRoZSBiZWhhdmlvciBvZiB0aGUgdmFyaW91cyBzeW1i
b2wgbG9va3VwIGZhY3RvcmllcyBpcyBub3QgY29tcGxldGVseSBzeW1tZXRyaWM6PC9wPjxwPiog
U3ltYm9sTG9va3VwOjpsb2FkZXJMb29rdXAgYWx3YXlzIHN1Y2NlZWRzPGJyPiogTGlua2VyOjpk
ZWZhdWx0TG9va3VwIGFsd2F5cyBzdWNjZWVkczxicj4qIFN5bWJvbDo6bGlicmFyeUxvb2t1cCBj
YW4gZmFpbCAoZS5nLiBpZiB0aGUgc3BlY2lmaWVkIGxpYnJhcnkgY2Fubm90IGJlIGxvYWRlZCk8
L3A+PHA+QmVjYXVzZSBvZiB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGV4Y2VwdGlvbiBiZWhhdmlv
ciwgdGhlc2UgdGhpbmdzIGNhbid0IGNvbXBvc2UgbmljZWx5IGlmIHRoZXJlJ3MgYSBsaWJyYXJ5
IGxvYWQgZmFpbHVyZS4gQSBwb3NzaWJsZSB3YXkgdG8gYWRkcmVzcyB0aGlzLCB3b3VsZCBiZSBm
b3IgamV4dHJhY3QgdG8gdHJ5IGFuZCB3cmFwIGEgbGlicmFyeSBsb29rdXAsIHNvIHRoYXQgZWl0
aGVyOjwvcD48cD4qIHdlIHJldHVybiB0aGUgbGlicmFyeSBsb29rdXAgc3VjY2Vzc2Z1bGx5IGNy
ZWF0ZWQ8YnI+KiB3ZSByZXR1cm4gYSBkdW1teSBsb29rdXAgKG9uZSB0aGF0IGFsd2F5cyBmYWls
cyB0byBmaW5kIHN5bWJvbHMpLCBpbiBjYXNlIGNyZWF0aW9uIGZhaWxlZDwvcD48cD5UaGlzIHdv
dWxkIGFsbG93IGpleHRyYWN0IHRvICJrZWVwIGdvaW5nIiBldmVuIGluIHRoZSBmYWNlIG9mIGxp
YnJhcnkgbG9hZGluZyBlcnJvcnMuIE15IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBiZWhhdmlv
ciB3b3VsZCBiZSB1c2VmdWw6IElNSE8gYC0tbGlicmFyeWAgaXMgYSBzdHJvbmcgc2lnbiB0byBq
ZXh0cmFjdCB0aGF0IHlvdSBrbm93IHdoZXJlIHRoaW5ncyBhcmUgbG9jYXRlZC4gU28sIGlmIHRo
aW5ncyBhcmVuJ3Qgd2hlcmUgeW91IGV4cGVjdGVkLCBzaG91bGQgdGhhdCBpc3N1ZSBiZSBpZ25v
cmVkPyBPciBzaG91bGQgd2UgcmVwb3J0IHRoZSBmYWlsdXJlIHRvIHRoZSB1c2VyPyBNeSBmZWVs
aW5nIGlzIHRoYXQgOTklIHlvdSB3YW50IHRoYXQgdG8gYmUgYW4gZXJyb3IgLSBlLmcuIGJlY2F1
c2UgdGhhdCB3aWxsIGJlIHRoZSByZXN1bHQgb2YgYSB3cm9uZyBuYW1lIGJlaW5nIHBhc3NlZCB0
byB0aGUgamV4dHJhY3QgY29tbWFuZCBsaW5lLjwvcD48cD5Tbywgd2hpbGUgc3dhbGxvd2luZyBl
eGNlcHRpb25zIGlzIGEgcG9zc2liaWxpdHksIEknbSBub3Qgc3VyZSB3ZSdsbCBtYWtlIChhbGwp
IHVzZXJzIGEgc2VydmljZT88L3A+PHA+VGhlIGdlbmVyYWwgc29sdXRpb24gZm9yIHRoaXMga2lu
ZCBvZiBjb3JuZXJ5IGxvb2t1cCBzaXR1YXRpb24gaXMgQ09ERVRPT0xTLTc5MDMxODYgLSBhZGRp
bmcgZXZlbiBtb3JlIGxpYnJhcnktcmVsYXRlZCBmbGFncyBpcyBzdXJlbHkgdGVjaG5pY2FsbHkg
cG9zc2libGUsIGJ1dCBzdHJpa2VzIG1lIGFzIGEgYmFkIHdheSB0byBnZXQgdGhlcmUuPC9wPjxw
Pk1hdXJpemlvPGJyPjwvcD4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>