You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Original bug ID: 4943 Reporter:@ygrek Status: resolved (set by @damiendoligez on 2017-03-03T15:55:09Z) Resolution: suspended Priority: normal Severity: feature Version: 3.11.1 Category: -for ocamlbuild use https://github.com/ocaml/ocamlbuild/issues Tags: junior_job Related to:#4958
Bug description
Consider this ocaml_lib code (in ocaml_utils.ml) :
if byte then
flag_and_dep ["ocaml"; tag_name; "link"; "byte"] (libpath^".cma");
if native then
flag_and_dep ["ocaml"; tag_name; "link"; "native"] (libpath^".cmxa");
When the final linking target is a program - everything is ok. If it is a library - ocamlc will work, but ocamlopt will refuse to link cmxa into another cmxa, producing highly confusing error message : "...cmxa is not a compilation unit description". Of course, this situation can be avoided by carefully specifying tags like "true and not <*.cmxa>: use_lib" but this quickly becomes cumbersome in non-trivial projects. So the suggestion is for ocaml_lib to be more specific with tags :
if byte then
flag_and_dep ["ocaml"; tag_name; "link"; "program"; "byte"] (libpath^".cma");
if native then
flag_and_dep ["ocaml"; tag_name; "link"; "program"; "native"] (libpath^".cmxa");
Are those the only link targets : "library" and "program" ?
Additional information
$ cat _tags
true: use_str
$ cat q.ml
let x = Str.regexp "a"
$ cat q.mllib
Q
$ ocamlbuild q.cma
Finished, 3 targets (0 cached) in 00:00:00.
$ ocamlbuild q.cmxa
/usr/bin/ocamlopt.opt -a str.cmxa q.cmx -o q.cmxa
File "none", line 1, characters 0-1:
Error: /usr/lib/ocaml/str.cmxa
is not a compilation unit description.
Command exited with code 2.
The text was updated successfully, but these errors were encountered:
Original bug ID: 4943
Reporter: @ygrek
Status: resolved (set by @damiendoligez on 2017-03-03T15:55:09Z)
Resolution: suspended
Priority: normal
Severity: feature
Version: 3.11.1
Category: -for ocamlbuild use https://github.com/ocaml/ocamlbuild/issues
Tags: junior_job
Related to: #4958
Bug description
Consider this ocaml_lib code (in ocaml_utils.ml) :
When the final linking target is a program - everything is ok. If it is a library - ocamlc will work, but ocamlopt will refuse to link cmxa into another cmxa, producing highly confusing error message : "...cmxa is not a compilation unit description". Of course, this situation can be avoided by carefully specifying tags like "true and not <*.cmxa>: use_lib" but this quickly becomes cumbersome in non-trivial projects. So the suggestion is for ocaml_lib to be more specific with tags :
Are those the only link targets : "library" and "program" ?
Additional information
$ cat _tags
true: use_str
$ cat q.ml
let x = Str.regexp "a"
$ cat q.mllib
Q
$ ocamlbuild q.cma
Finished, 3 targets (0 cached) in 00:00:00.
$ ocamlbuild q.cmxa
File "none", line 1, characters 0-1:
Error: /usr/lib/ocaml/str.cmxa
is not a compilation unit description.
Command exited with code 2.
The text was updated successfully, but these errors were encountered: