janestreet / ppx_custom_printf

Printf-style format-strings for user-defined string conversion
MIT License
23 stars 9 forks source link

Error while installing ppx_custom_printf.113.24.00 ā€” undeclared dependencies? #2

Closed Blaisorblade closed 6 years ago

Blaisorblade commented 8 years ago

I got a repeatable error while installing ppx_custom_printf.113.24.00 (the latest version), which was fixed by opam upgrade, so I conjecture there's some undeclared dependency (or some missing version restriction). But I'm a newbie with opam, so I'll let you judge. Details below.

While I ran opam upgrade core core_kernel merlin utop core_bench core_extended async, on Ocaml 4.02.3, I got the following:

#=== ERROR while installing ppx_custom_printf.113.24.00 =======================#
# opam-version 1.2.2
# os           darwin
# command      make
# path         /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00
# compiler     system (4.02.3)
# exit-code    2
# env-file     /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-68122-706ca6.env
# stdout-file  /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-68122-706ca6.out
# stderr-file  /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-68122-706ca6.err
### stdout ###
# [...]
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander -
package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmi src/ppx_custom_printf.mli
# + /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander
 -package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmi src/ppx_custom_printf.mli
# findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /usr/local/lib/ocaml/compiler-libs, /usr/local/lib/ocaml
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamldep -package ppx_tools.metaquot -package ppx_sexp_conv.expander -package ppx_driver -package ppx_core -predicates ppx_driver -m
odules src/ppx_custom_printf.ml > src/ppx_custom_printf.ml.depends
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander -
package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmo src/ppx_custom_printf.ml
# + /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander
 -package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmo src/ppx_custom_printf.ml
# findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /usr/local/lib/ocaml/compiler-libs, /usr/local/lib/ocaml
# File "src/ppx_custom_printf.ml", line 220, characters 10-47:
# Error: Unbound class Ppx_format_lifter.lifter
# Command exited with code 2.
### stderr ###
# W: Cannot find source file matching module 'Ppx_format_lifter' in library ppx_format_lifter
# W: Cannot find source file matching module 'Ppx_format_lifter' in library ppx_format_lifter
# E: Failure("Command ''/usr/local/bin/ocamlbuild' format-lifter/ppx_format_lifter.cma format-lifter/ppx_format_lifter.cmxa format-lifter/ppx_format_lifter.a format-lifter/ppx_for
mat_lifter.cmxs src/ppx_custom_printf.cma src/ppx_custom_printf.cmxa src/ppx_custom_printf.a src/ppx_custom_printf.cmxs as_ppx/ppx.native -use-ocamlfind -tag debug' terminated wit
h error code 10")
# make: *** [build] Error 1

Again, after that, I ran opam install ppx_custom_printf, and got the following (full log now):

$ opam install ppx_custom_printf
The following actions will be performed:
  āˆ—  install ppx_custom_printf 113.24.00

=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  šŸ«
[ppx_custom_printf] Archive in cache

=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  šŸ«
[ERROR] The compilation of ppx_custom_printf failed at "make".

#=== ERROR while installing ppx_custom_printf.113.24.00 =======================#
# opam-version 1.2.2
# os           darwin
# command      make
# path         /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00
# compiler     system (4.02.3)
# exit-code    2
# env-file     /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-89955-e7966f.env
# stdout-file  /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-89955-e7966f.out
# stderr-file  /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-89955-e7966f.err
### stdout ###
# [...]
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander -
package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmi src/ppx_custom_printf.mli
# + /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander
 -package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmi src/ppx_custom_printf.mli
# findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /usr/local/lib/ocaml/compiler-libs, /usr/local/lib/ocaml
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamldep -package ppx_tools.metaquot -package ppx_sexp_conv.expander -package ppx_driver -package ppx_core -predicates ppx_driver -m
odules src/ppx_custom_printf.ml > src/ppx_custom_printf.ml.depends
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander -
package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmo src/ppx_custom_printf.ml
# + /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander
 -package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmo src/ppx_custom_printf.ml
# findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /usr/local/lib/ocaml/compiler-libs, /usr/local/lib/ocaml
# File "src/ppx_custom_printf.ml", line 220, characters 10-47:
# Error: Unbound class Ppx_format_lifter.lifter
# Command exited with code 2.
### stderr ###
# W: Cannot find source file matching module 'Ppx_format_lifter' in library ppx_format_lifter
# W: Cannot find source file matching module 'Ppx_format_lifter' in library ppx_format_lifter
# E: Failure("Command ''/usr/local/bin/ocamlbuild' format-lifter/ppx_format_lifter.cma format-lifter/ppx_format_lifter.cmxa format-lifter/ppx_format_lifter.a format-lifter/ppx_for
mat_lifter.cmxs src/ppx_custom_printf.cma src/ppx_custom_printf.cmxa src/ppx_custom_printf.a src/ppx_custom_printf.cmxs as_ppx/ppx.native -use-ocamlfind -tag debug' terminated wit
h error code 10")
# make: *** [build] Error 1

=-=- Error report -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  šŸ«
The following actions failed
  āˆ—  install ppx_custom_printf 113.24.00
No changes have been performed

This was fixed by the following upgrade, so it seems likely to be a dependency issue:

$ opam upgrade
The following actions will be performed:
  ā†—  upgrade   ocamlfind         1.5.5 to 1.5.6
  ā†˜  downgrade camlp4            4.02.0+system to 4.02+system  [required by utop]
  ā†—  upgrade   ppx_tools         0.99.2 to 0.99.3
  ā†—  upgrade   easy-format       1.0.2 to 1.2.0
  ā†—  upgrade   cppo              1.1.2 to 1.3.1
  ā†»  recompile react             1.2.0                         [uses ocamlfind]
  ā†»  recompile ounit             2.0.0                         [uses ocamlfind]
  ā†»  recompile menhir            20151112                      [uses ocamlfind]
  ā†»  recompile delimcc           0                             [uses ocamlfind]
  ā†»  recompile cryptokit         1.10                          [uses ocamlfind]
  ā†»  recompile camomile          0.8.5                         [uses ocamlfind]
  ā†»  recompile base-bytes        base                          [uses ocamlfind]
  ā†»  recompile type_conv         113.00.02                     [uses ocamlfind]
  ā†»  recompile pipebang          113.00.00                     [uses ocamlfind]
  ā†»  recompile ocp-build         1.99.9-beta                   [uses ocamlfind]
  ā†»  recompile herelib           112.35.00                     [uses ocamlfind]
  ā†»  recompile ppx_deriving      3.0                           [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_core          113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile biniou            1.0.9                         [uses easy-format, ocamlfind]
  ā†»  recompile lwt               2.5.1                         [uses ocamlfind, ppx_tools]
  ā†—  upgrade   stringext         1.2.0 to 1.4.0
  ā†—  upgrade   re                1.2.2 to 1.5.0
  ā†»  recompile zed               1.4                           [uses ocamlfind]
  ā†»  recompile ocplib-endian     0.8                           [uses cppo, ocamlfind]
  ā†»  recompile base64            2.0.0                         [uses ocamlfind]
  ā†»  recompile pa_ounit          113.00.00                     [uses ocamlfind]
  ā†»  recompile enumerate         111.08.00                     [uses ocamlfind]
  ā†»  recompile comparelib        113.00.00                     [uses ocamlfind]
  ā†»  recompile ocp-indent        1.5.2                         [uses ocp-build]
  ā†»  recompile ppx_optcomp       113.24.00                     [uses ocamlfind, ppx_tools]
  ā†—  upgrade   yojson            1.2.0 to 1.3.0
  ā†»  recompile lambda-term       1.9                           [uses ocamlfind]
  ā†»  recompile pa_bench          113.00.00                     [uses ocamlfind]
  ā†»  recompile ppx_driver        113.24.00                     [uses ocamlfind]
  ā†»  recompile merlin            2.3.1                         [uses ocamlfind, yojson]
  ā†»  recompile utop              1.18.1                        [uses cppo, ocamlfind]
  ā†»  recompile ppx_type_conv     113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_pipebang      113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_let           113.24.00                     [uses ocamlfind]
  ā†»  recompile ppx_inline_test   113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_here          113.24.00                     [uses ocamlfind]
  ā†»  recompile ppx_variants_conv 113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_typerep_conv  113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_sexp_conv     113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_fields_conv   113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_enumerate     113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_compare       113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_bin_prot      113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_bench         113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_fail          113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_sexp_value    113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_sexp_message  113.24.00                     [uses ocamlfind, ppx_tools]
  ā†»  recompile ppx_assert        113.24.00                     [uses ocamlfind, ppx_tools]
===== ā†»  45   ā†—  7   ā†˜  1 =====
Do you want to continue ? [Y/n] y

Disclaimer: while I understand functional programming in other languages, I'm a relative newbie in actually using Ocaml, and I might well be doing something wrong (I've done multiple upgrades and downgrades, if I was using Haskell's cabal-install everything would have exploded multiple times).

ghost commented 8 years ago

The error message is about a value that is generated. Can you try the following command and see what it prints:

ocamlfind ppx_tools/genlifter Pervasives.format6
Blaisorblade commented 8 years ago

Thanks for the prompt answer. After further investigation, I have some evidence suggesting you should depend on ppx_tools.0.99.3, because that command fails with version 0.99.2. Below's the actual evidence.

Details

Here's the output when ppx_custom_printf installs correctly (after the upgrade I mentioned above):

https://gist.github.com/Blaisorblade/16f37ae045862c22f54e.

It does defines class lifter.

This command reminds me that ppx_custom_printf depends on ppx_tools without a version range, and that the upgrade that solved the problem also upgraded ppx_tools:

upgrade ppx_tools 0.99.2 to 0.99.3

So, I ran opam install ppx_tools.0.99.2, and verified that ppx_custom_printf fails again to build :smile: . And the command you gave plainly fails:

$ ocamlfind ppx_tools/genlifter Pervasives.format6
** fatal error: File "genlifter.ml", line 110, characters 26-32: Assertion failed

And the build failure looks very similar:

#=== ERROR while installing ppx_custom_printf.113.24.00 =======================#
# opam-version 1.2.2
# os           darwin
# command      make
# path         /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00
# compiler     system (4.02.3)
# exit-code    2
# env-file     /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-94081-a5e08f.env
# stdout-file  /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-94081-a5e08f.out
# stderr-file  /Users/pgiarrusso/.opam/system/build/ppx_custom_printf.113.24.00/ppx_custom_printf-94081-a5e08f.err
### stdout ###
# [...]
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander -
package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmi src/ppx_custom_printf.mli
# + /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander
 -package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmi src/ppx_custom_printf.mli
# findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /usr/local/lib/ocaml/compiler-libs, /usr/local/lib/ocaml
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamldep -package ppx_tools.metaquot -package ppx_sexp_conv.expander -package ppx_driver -package ppx_core -predicates ppx_driver -m
odules src/ppx_custom_printf.ml > src/ppx_custom_printf.ml.depends
# /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander -
package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmo src/ppx_custom_printf.ml
# + /Users/pgiarrusso/.opam/system/bin/ocamlfind ocamlc -c -g -annot -bin-annot -no-alias-deps -thread -I format-lifter -package ppx_tools.metaquot -package ppx_sexp_conv.expander
 -package ppx_driver -package ppx_core -predicates ppx_driver -w -40 -I src -I format-lifter -o src/ppx_custom_printf.cmo src/ppx_custom_printf.ml
# findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /usr/local/lib/ocaml/compiler-libs, /usr/local/lib/ocaml
# File "src/ppx_custom_printf.ml", line 220, characters 10-47:
# Error: Unbound class Ppx_format_lifter.lifter
# Command exited with code 2.
### stderr ###
# W: Cannot find source file matching module 'Ppx_format_lifter' in library ppx_format_lifter
# W: Cannot find source file matching module 'Ppx_format_lifter' in library ppx_format_lifter
# E: Failure("Command ''/usr/local/bin/ocamlbuild' format-lifter/ppx_format_lifter.cma format-lifter/ppx_format_lifter.cmxa format-lifter/ppx_format_lifter.a format-lifter/ppx_for
mat_lifter.cmxs src/ppx_custom_printf.cma src/ppx_custom_printf.cmxa src/ppx_custom_printf.a src/ppx_custom_printf.cmxs as_ppx/ppx.native -use-ocamlfind -tag debug' terminated wit
h error code 10")
# make: *** [build] Error 1
ghost commented 8 years ago

Thanks for looking into this, I created a PR to add the version constraint