lib-ocamlnet3 issueshttps://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues2023-07-14T16:42:59Zhttps://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/27the version in opam doesn't compile with ocaml-52023-07-14T16:42:59ZBerenger Francoisthe version in opam doesn't compile with ocaml-5Since ocamlnet is good at multiprocess and provides an extended unix/posix API, it is still useful.Since ocamlnet is good at multiprocess and provides an extended unix/posix API, it is still useful.https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/26XDR fails on array inside recursive types2022-09-27T06:29:25ZHans Ole RafaelsenXDR fails on array inside recursive typesHi,
When updating some code from an old version of Ocamlnet to the latest, I ran into a problem where it seems like it no longer works with arrays of recursive types.
It fails with following exception:
`Fatal error: exception Failure("...Hi,
When updating some code from an old version of Ocamlnet to the latest, I ran into a problem where it seems like it no longer works with arrays of recursive types.
It fails with following exception:
`Fatal error: exception Failure("Netxdr.validate_xdr_type: Array elements must not have length 0")`
The following definition:
```
struct bar {
bar vbar<>;
};
program B {
version B {
int f(bar) = 1;
} = 1;
} = 1;
```
Fails for this program:
`Netxdr.validate_xdr_type Test1_aux.xdrt_B'B'f'arg`
netstring (version: 4.1.9)
Same problem if the recursive type is an union.
Changing Netxdr to Xdr, the program works with old version of Ocamlnet
netstring (version: 3.4.1)
Is this a bug in the new version?
Regards,
Hans Ole Rafaelsen
[test_xdr.tgz](/uploads/90c18d0e7757c7397df9f8d5e1729997/test_xdr.tgz)https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/25Unsafe use of the `Field` macro2021-11-19T13:41:02ZXavier ClercUnsafe use of the `Field` macroThe following pattern is likely unsafe
```
v = alloc_small(...);
Field(v, ...) = expr;
```
when `expr` allocates, and `netsys_get_custom_ops` [1]
is based on that pattern.
[1] https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/blob/master...The following pattern is likely unsafe
```
v = alloc_small(...);
Field(v, ...) = expr;
```
when `expr` allocates, and `netsys_get_custom_ops` [1]
is based on that pattern.
[1] https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/blob/master/code/src/netsys/netsys_c_mem.c#L1504https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/24INSTALL-Description seems to be outdated2023-03-13T14:12:04ZOliver BandelINSTALL-Description seems to be outdatedhttps://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/blob/master/code/INSTALL
Talks about oasis and "configure".
There is no configure-script and trying
```
ocaml setup.ml -configure; ocaml setup.ml -build
```
also does not work.
But usin...https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/blob/master/code/INSTALL
Talks about oasis and "configure".
There is no configure-script and trying
```
ocaml setup.ml -configure; ocaml setup.ml -build
```
also does not work.
But using ./build.sh starts compilation.https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/23Fix TLS1.32021-03-23T18:09:31ZGerd StolpmannFix TLS1.3MR !14 disables TLS1.3 as a quickfix. Need to understand what is going on, and how to enable it again.MR !14 disables TLS1.3 as a quickfix. Need to understand what is going on, and how to enable it again.https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/22ocamlrpcgen native code2021-01-25T12:26:17ZGerd Stolpmannocamlrpcgen native code> Hi Gerd,
>
> The following patch changes ocamlrpcgen so it is built as a native
> code program (only).
>
> The problem we have in Fedora is that ocamlrpcgen is currently built
> with the legacy -custom option which attaches bytecode t...> Hi Gerd,
>
> The following patch changes ocamlrpcgen so it is built as a native
> code program (only).
>
> The problem we have in Fedora is that ocamlrpcgen is currently built
> with the legacy -custom option which attaches bytecode to the
> executable. This bytecode gets stripped automatically, resulting in a
> broken executable. To get around that we had to disable stripping,
> but that causes other problems
> (https://bugzilla.redhat.com/show_bug.cgi?id=1915570).
>
> In Fedora we no longer have any bytecode-only architectures, so the
> real fix for this is to stop buiding the binary as bytecode.
>
> I guess an ideal patch would build the best available out of
> { bytecode, nativecode } but I couldn't work out how to do that
> given the custom build system used by ocamlnet.
>
> Rich.
```
---
code/src/rpc-generator/Makefile | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/code/src/rpc-generator/Makefile b/code/src/rpc-generator/Makefile
index e0ed4f5..a475e83 100644
--- a/code/src/rpc-generator/Makefile
+++ b/code/src/rpc-generator/Makefile
@@ -6,9 +6,11 @@ PKGNAME = rpc-generator
ARCHIVE = rpc_generator
OBJECTS = config.cmo syntax.cmo options.cmo parser.cmo lexer.cmo rename.cmo \
generate.cmo direct.cmo
+XOBJECTS = config.cmx syntax.cmx options.cmx parser.cmx lexer.cmx rename.cmx \
+ generate.cmx direct.cmx
DOBJECTS =
-ALL_EXTRA = ocamlrpcgen$(EXEC_SUFFIX) rpcgen-packlist
+OPT_EXTRA = ocamlrpcgen$(EXEC_SUFFIX) rpcgen-packlist
PACKLIST = rpcgen-packlist
@@ -21,12 +23,12 @@ PP_OPTIONS = -pp "$(CPPO) $(PP_BYTES) $(PP_DEPRECATED)"
include $(TOP_DIR)/Makefile.rules
-ocamlrpcgen$(EXEC_SUFFIX): $(ARCHIVE).cma main.cmo
+ocamlrpcgen$(EXEC_SUFFIX): $(ARCHIVE).cmxa main.cmx
rm -f ocamlrpcgen ocamlrpcgen$(EXEC_SUFFIX)
OCAMLPATH="..$(PATH_SEP)$$OCAMLPATH" \
- $(OCAMLC) -custom -o ocamlrpcgen \
+ $(OCAMLOPT) -o ocamlrpcgen \
-package unix,netstring,$(REGEXP_PROVIDER) \
- $(ARCHIVE).cma main.cmo -linkpkg
+ $(ARCHIVE).cmxa main.cmx -linkpkg
rpcgen-packlist:
echo $(BINDIR)/ocamlrpcgen >rpcgen-packlist
--
2.28.0.rc2
```https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/19Ocamlnet 4.1.6 - Buffer closed before really being flushed when using netzip2021-03-23T19:35:14ZThierry CaebergsOcamlnet 4.1.6 - Buffer closed before really being flushed when using netzipDear developers,
I have been affected by a bug when using zip compression when retrieving files with ocamlnet.\
Some were cut, some other not.\
After investigation, I realized that it is linked to the file size, and more specifically, p...Dear developers,
I have been affected by a bug when using zip compression when retrieving files with ocamlnet.\
Some were cut, some other not.\
After investigation, I realized that it is linked to the file size, and more specifically, problems dealing with the separation in data chunk from the connection (--> equeue) :
* If one chunk of zip content was needed : OK
* If two chunks of zip content were needed : it was truncated to the content of the first chunk (decompressed : 1024B)
* If more chunks of zip content were needed : it was OK (for decompressed files about bigger than 35kB)\
It seems to me that the buffer was closed before being fully read in some circumstances.
I narrowed down the problem to `equeue/uq_io.ml`.\
Please find the diff file here below. It worked for me on release 4.1.6.\
Only changes in `equeue/uq_io.ml` seem to be necessary.
Could you please review this patch and apply it for the next release if suitable ?
Thank you in advance !
Best regards,
Thierry
[chunked_gzip_compression.patch](/uploads/2cf533d8d76c575130a3bf3594560778/chunked_gzip_compression.patch)
PS : Here are the main lines concerning the ocamlnet setup in my code.\
In the main() :
```
Netgzip.init();
Nettls_gnutls.init();
```
For each call :
```
let call = new H.post "https://xyz.com" [("aaa" , "xxx") ; ("bbb" , "yyy")] in
call # set_accept_encoding () ;
call # set_response_body_storage (`File (fun () ->"test.dat")) ;
call # set_chunked_request () ;`
pipeline # add call;
pipeline # run();
```https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/17Would need some help with ocamlrpcgen and Rpc use2020-08-01T21:54:59ZMatthieu DubugetWould need some help with ocamlrpcgen and Rpc useHello,
I'm trying to drive a oscilloscope. For this, I started from this [vxi11.x](https://github.com/applied-optics/vxi11/blob/master/library/vxi11.x) and slightly modified it (replaced `long` and `char` by `int`), which works (tested ...Hello,
I'm trying to drive a oscilloscope. For this, I started from this [vxi11.x](https://github.com/applied-optics/vxi11/blob/master/library/vxi11.x) and slightly modified it (replaced `long` and `char` by `int`), which works (tested under Linux).
I then used ocamlrpcgen like this: `ocamlrpcgen -aux -clnt -int unboxed vxi11.x`.
And tried to connect to my instrument with the following:
```
let c = Vxi11.Vxi11_clnt.DEVICE_CORE.DEVICE_CORE_VERSION.create_client (Rpc_client.Inet("172.17.1.31",111)) Rpc.Tcp;;
let l = Vxi11.Vxi11_clnt.DEVICE_CORE.DEVICE_CORE_VERSION.create_link c {clientid=2; lockdevice=false; lock_timeout=1000; device="instr0"};;
```
The first line is working: it returns a client, which I can inspect (I checked the program number, etc.).
But the second line triggers Rpc.Unavailable_program.
I'm now blocked, and do not know how to go further in solving this problem.
Any suggestion?
Best regardshttps://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/16set_close_on_exec for Netcgi sockets2019-11-06T22:35:58ZChristopheset_close_on_exec for Netcgi socketsShouldn't the socket created by `Unix.socket (Unix.domain_of_sockaddr saddr) Unix.SOCK_STREAM 0` on line 831 in `netcgi_fcgi.ml` be set the close-on-exec flag? Indeed the process handling the FCGI connection may fork subprocesses in ord...Shouldn't the socket created by `Unix.socket (Unix.domain_of_sockaddr saddr) Unix.SOCK_STREAM 0` on line 831 in `netcgi_fcgi.ml` be set the close-on-exec flag? Indeed the process handling the FCGI connection may fork subprocesses in order not to block the main one (and these should not inherit the open socket).https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/15Tweak `netsys_get_custom_ops` for GC safety2019-08-22T10:48:13ZGerd StolpmannTweak `netsys_get_custom_ops` for GC safetyMy understanding is that it is unsafe to have an
allocating expression on the right-hand side of
an assignment to a `Field(...)` l-value.
It happens in "netsys_c_mem.c", the following
patch fixing the issue:
```
diff --git a/code/src/n...My understanding is that it is unsafe to have an
allocating expression on the right-hand side of
an assignment to a `Field(...)` l-value.
It happens in "netsys_c_mem.c", the following
patch fixing the issue:
```
diff --git a/code/src/netsys/netsys_c_mem.c b/code/src/netsys/netsys_c_mem.c
index 7a55884..86db886 100644
--- a/code/src/netsys/netsys_c_mem.c
+++ b/code/src/netsys/netsys_c_mem.c
@@ -1498,13 +1498,15 @@ value netsys_get_custom_ops (value v)
{
struct custom_operations *custom_ops;
CAMLparam1(v);
- CAMLlocal1(r);
+ CAMLlocal3(r, s, n);
if (Is_block(v) && Tag_val(v) == Custom_tag) {
custom_ops = Custom_ops_val(v);
+ s = caml_copy_string(custom_ops->identifier);
+ n = caml_copy_nativeint((intnat) custom_ops);
r = alloc_small(2,0);
- Field(r,0) = caml_copy_string(custom_ops->identifier);
- Field(r,1) = caml_copy_nativeint((intnat) custom_ops);
+ Field(r,0) = s;
+ Field(r,1) = n;
}
else
invalid_argument("Netsys_mem.get_custom_ops");
```https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/14Missing dependency in netsys2020-05-12T19:41:17ZGerd StolpmannMissing dependency in netsysI'm using `netstring` (from ocamlnet 4.1.6) which has a dependency towards netsys and the following error message appeared when I tried to compile everything:
```
Error: No implementations provided for the following modules:
Thr...I'm using `netstring` (from ocamlnet 4.1.6) which has a dependency towards netsys and the following error message appeared when I tried to compile everything:
```
Error: No implementations provided for the following modules:
Thread referenced from /home/kit_ty_kate/.opam/4.06.1/lib/netsys/netsys_oothr_mt.cmxa(Netsys_oothr_mt)
Mutex referenced from /home/kit_ty_kate/.opam/4.06.1/lib/netsys/netsys_oothr_mt.cmxa(Netsys_oothr_mt)
Condition referenced from /home/kit_ty_kate/.opam/4.06.1/lib/netsys/netsys_oothr_mt.cmxa(Netsys_oothr_mt)
```
When I manually added `threads` to the netsys requirements, compilation succeeded.https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/13ocamlnet needs an update for 4.072018-05-04T13:36:19ZGerd Stolpmannocamlnet needs an update for 4.074.07 breaks the copy of cppo that is embedded in the ocamlnet sources because it demands a file name for every #line directive.
See https://github.com/mjambon/cppo/commit/0696693c36f433e36801df5892d16e5b624270b9 for the patch that was a...4.07 breaks the copy of cppo that is embedded in the ocamlnet sources because it demands a file name for every #line directive.
See https://github.com/mjambon/cppo/commit/0696693c36f433e36801df5892d16e5b624270b9 for the patch that was applied to cppo to make it compatible with 4.07.
I'll try to make a merge request with a smaller patch.https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/12Ocamlnet Shell.call takes a VERY long time when max no of file descriptors is...2018-04-26T16:00:57ZGerd StolpmannOcamlnet Shell.call takes a VERY long time when max no of file descriptors is largeA simple `Shell.(call [cmd "cat" ["/etc/passwd"]])` can take minutes to execute when the max number of file descriptors is large (100,000 or 1,000,000) as is the case by default on our large FreeBSD servers.
With `ulimit -n 1024`:
```
o...A simple `Shell.(call [cmd "cat" ["/etc/passwd"]])` can take minutes to execute when the max number of file descriptors is large (100,000 or 1,000,000) as is the case by default on our large FreeBSD servers.
With `ulimit -n 1024`:
```
ocaml debug.ml > /dev/null 0.20s user 0.04s system 99% cpu 0.240 total
```
With the FreeBSD default (3772809 on this smaller server):
```
ocaml debug.ml > /dev/null 1.14s user 97.55s system 100% cpu 1:38.65 total
```
Tracing the slow-running executable shows thousands of dup2's fcntls and closes in groups like this:
```
24442 debug.native RET close 0
24442 debug.native CALL dup2(0x3,0x37733c)
24442 debug.native RET dup2 3633980/0x37733c
24442 debug.native CALL fcntl(0x37733c,F_SETFD,0)
24442 debug.native RET fcntl 0
24442 debug.native CALL close(0x37733c)
```
The problem doesn't occur for `Sys.command "cat /etc/passwd"` or `Unix.execvp "cat" [|"cat";"/etc/passwd"|]`, or `Unix.open_process_in`. All of those run equally fast no matter how many file descriptors, but of course they don't have the nice high level abstraction that Shell provides.
[debug.ml](/uploads/43c310a113129031d030c6eee3c86865/debug.ml)https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/11Netgzip doesn't compile on OCaml 4.062018-01-04T10:46:19ZGerd StolpmannNetgzip doesn't compile on OCaml 4.06Netgzip converts bytes to strings via `Bytes.unsafe_to_string`, only to pass the result to code that expects bytes. If I remove these conversions, everything compiles correctly. I attach a trivial patch.
[netgzip-4.06.diff](/uploads/60b...Netgzip converts bytes to strings via `Bytes.unsafe_to_string`, only to pass the result to code that expects bytes. If I remove these conversions, everything compiles correctly. I attach a trivial patch.
[netgzip-4.06.diff](/uploads/60b5e94f53c72636334102186215450f/netgzip-4.06.diff)https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/9In nettls-gnutls, the client peer name is checked against the client certific...2017-10-16T12:28:54ZGerd StolpmannIn nettls-gnutls, the client peer name is checked against the client certificate?Hello,
When using CamlCrush (https://github.com/ANSSI-FR/caml-crush) with TLS and mutual authentication, the connection to the server fails.
See https://github.com/ANSSI-FR/caml-crush/issues/29.
CamlCrush uses Ocamlnet as the TCP/TLS ...Hello,
When using CamlCrush (https://github.com/ANSSI-FR/caml-crush) with TLS and mutual authentication, the connection to the server fails.
See https://github.com/ANSSI-FR/caml-crush/issues/29.
CamlCrush uses Ocamlnet as the TCP/TLS backend.
In `/src/nettls-gnutls/nettls_gnutls.ml`, the peer name is checked against the peer certificate:
```
let name_ok =
match ep.peer_name with
| None ->
false
| Some pn ->
let der_peer_certs =
G.gnutls_certificate_get_peers ep.session in
assert(der_peer_certs <> [| |]);
let peer_cert = G.gnutls_x509_crt_init() in
G.gnutls_x509_crt_import peer_cert der_peer_certs.(0) `Der;
let ok = G.gnutls_x509_crt_check_hostname peer_cert pn in
ok in
```
In the CamlCrush ticket, `rb-anssi` assumes that the check is also performed by the server. In that case, the client peer name is empty, and the check fails.
I'm not fluent enough in Ocaml to analyze if that's true, could you have a look ?
Thank youhttps://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/8ocamlnet needs an update for 4.052017-10-07T09:44:17ZGerd Stolpmannocamlnet needs an update for 4.05The upcoming 4.05 release breaks the build of 4.1.2.
opam-builder report:
http://opam.ocamlpro.com/builder/html/ocamlnet/ocamlnet.4.1.2/05c7405b69fdeaa0ad4dcd976ca3d6d4
> Error: This variant or record definition does not match t...The upcoming 4.05 release breaks the build of 4.1.2.
opam-builder report:
http://opam.ocamlpro.com/builder/html/ocamlnet/ocamlnet.4.1.2/05c7405b69fdeaa0ad4dcd976ca3d6d4
> Error: This variant or record definition does not match that of type
> Unix.open_flag.
> The field O_KEEPEXEC is only present in the original definition.
`O_KEEPEXEC` was introduced in the Unix library in
https://github.com/ocaml/ocaml/pull/650https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/7ocamlnet 4.1.2 compile with safe string fails in cppo-0.9.42017-10-07T09:44:17ZGerd Stolpmannocamlnet 4.1.2 compile with safe string fails in cppo-0.9.4Compiler 4.04.0+safe-string, opam package ocamlnet.4.1.2, fails with type byte string problem.
The problem occurs in ocamlnet.4.1.2/tools/cppo-0.9.4. An "install cppo 1.4.1" succeeds. So evidently an old version of cppo is shipped wit...Compiler 4.04.0+safe-string, opam package ocamlnet.4.1.2, fails with type byte string problem.
The problem occurs in ocamlnet.4.1.2/tools/cppo-0.9.4. An "install cppo 1.4.1" succeeds. So evidently an old version of cppo is shipped with ocamlnet and this causes this problem.
For completeness I am pasting the relevant part of the compile error:
`### stdout ###
# [...]
# make[1]: Entering directory '/data/lvmvol/opt/opam/4.04.0+safe-string/build/ocamlnet.4.1.2/tools/cppo-0.9.4'
# echo 'let cppo_version = "0.9.4"' > cppo_version.ml
# ocamlyacc cppo_parser.mly
# ocamllex cppo_lexer.mll
# 352 states, 13139 transitions, table size 54668 bytes
# 3450 additional bytes used for bindings
# ocamlc -o cppo -dtypes unix.cma cppo_version.ml cppo_types.ml cppo_parser.mli cppo_parser.ml cppo_lexer.ml cppo_command.ml cppo_eval.ml cppo_main.ml
# Makefile:60: recipe for target 'all' failed
# make[1]: Leaving directory '/data/lvmvol/opt/opam/4.04.0+safe-string/build/ocamlnet.4.1.2/tools/cppo-0.9.4'
# Makefile:51: recipe for target 'tools' failed
### stderr ###
# File "cppo_lexer.mll", line 24, characters 7-8:
# Error: This expression has type bytes but an expression was expected of type
# string
# make[1]: *** [all] Error 2
`https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/6Nethttp_client: can throw Netchannels.Closed_channel2017-10-07T09:44:17ZGerd StolpmannNethttp_client: can throw Netchannels.Closed_channelGot this, unclear why.Got this, unclear why.https://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/5Nethttpclient doesn't open several connections2017-10-07T09:44:17ZGerd StolpmannNethttpclient doesn't open several connectionsAlthough number_of_parallel_connections has been increased this code still opens only one connection:
```
for n = 1 to 1000 do
let msg = create() in
client#add_with_callback
msg
(fun msg ->
printf...Although number_of_parallel_connections has been increased this code still opens only one connection:
```
for n = 1 to 1000 do
let msg = create() in
client#add_with_callback
msg
(fun msg ->
printf "Status: %d\n" msg#response_status_code;
printf "Body:\n%s\n%!" msg#response_body#value;
printf "Open connections: %d\n%!" client#number_of_open_connections
);
done;
client # run()
```
Suspicios code in nethttp_client.ml:
```
let empty_conns = List.exists (fun c -> c#length = 0) !connlist in
if not empty_conns &&
List.length !connlist < !options.number_of_parallel_connections
then <open_another_connection>
else <push_request_to_existing_connection>
```
What if c#length is not updated immediately when the message is pushed to the queue? Because:
```
method length =
match fp_opt with
| None -> 0
| Some fp -> fp#length
```
So, when we don't have a real TCP connection yet, we always report 0.
Suggested fix: Change `length` to:
```
method length =
match fp_opt with
| None -> Q.length queue
| Some fp -> fp#length
```
Needs to be checked whether this is compatible with the other callers of `length`, of course.Gerd StolpmannGerd Stolpmannhttps://gitlab.com/gerdstolpmann/lib-ocamlnet3/-/issues/3BUILD Fail - Cannot find an existing alternative files among2017-10-07T09:44:17ZGerd StolpmannBUILD Fail - Cannot find an existing alternative files amongHi again,
I tried to apply changes to ocamlnet-4.1.1 source to be able to compile with ocaml 4.03.0 but another error occured.
Have you any clue how to solve this error?
```
W: Cannot find an existing alternative files among: src/eq...Hi again,
I tried to apply changes to ocamlnet-4.1.1 source to be able to compile with ocaml 4.03.0 but another error occured.
Have you any clue how to solve this error?
```
W: Cannot find an existing alternative files among: src/equeue/equeue.cmxs
W: Cannot find an existing alternative files among: src/netcamlbox/netcamlbox.cmxs
W: Cannot find an existing alternative files among: src/netcgi2/netcgi2.cma
W: Cannot find an existing alternative files among: src/netcgi2/netcgi2.cmxa
W: Cannot find an existing alternative files among: src/netcgi2/netcgi2.a
W: Cannot find an existing alternative files among: src/netcgi2/netcgi2.cmxs
W: Cannot find an existing alternative files among: src/netcgi2-plex/netcgi2-plex.cmxs
W: Cannot find an existing alternative files among: src/netclient/netclient.cmxs
W: Cannot find an existing alternative files among: src/netmulticore/netmulticore.cmxs
W: Cannot find an existing alternative files among: src/netplex/netplex.cmxs
W: Cannot find an existing alternative files among: src/netshm/netshm.cmxs
W: Cannot find an existing alternative files among: src/netstring/netstring.cmxs
W: Cannot find an existing alternative files among: src/netsys/netsys.cmxs
W: Cannot find an existing alternative files among: src/netunidata/netunidata.cmxs
W: Cannot find an existing alternative files among: src/rpc/rpc.cmxs
W: Cannot find an existing alternative files among: src/rpc-auth-local/rpc-auth-local.cma
W: Cannot find an existing alternative files among: src/rpc-auth-local/rpc-auth-local.cmxa
W: Cannot find an existing alternative files among: src/rpc-auth-local/rpc-auth-local.a
W: Cannot find an existing alternative files among: src/rpc-auth-local/rpc-auth-local.cmxs
W: Cannot find an existing alternative files among: src/rpc-generator/rpc-generator.cma
W: Cannot find an existing alternative files among: src/rpc-generator/rpc-generator.cmxa
W: Cannot find an existing alternative files among: src/rpc-generator/rpc-generator.a
W: Cannot find an existing alternative files among: src/rpc-generator/rpc-generator.cmxs
W: Cannot find an existing alternative files among: src/shell/shell.cmxs
```