Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MPR#4943: ocaml_lib is not specific enough with tags, leading to highly confusing error message #225

Open
damiendoligez opened this issue Mar 3, 2017 · 0 comments

Comments

@damiendoligez
Copy link
Member

PR transferred from https://caml.inria.fr/mantis/view.php?id=4943
[original reporter: @ygrek]

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 ?


$ 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant