Subject: [bug#49867] [PATCH v2 13/31] gnu: Add ocaml-mirage-crypto.

From: pukkamustard <[email-masked]>
Date: Mon, 23 Aug 2021 16:52:42 +0000

pukkamustard <[email-masked]> writes:

> Julien Lepiller <[email-masked]> writes:
>
>> Trying to build ocaml-mirage-crypto, I get errors during the 
>> tests:
>>
>> ocamlopt tests/test_symmetric_runner.exe (exit 2)
>>
>> Error: Files
>> /gnu/store/id3dchcsw5gijsnn73kw5sn9ymjj90ai-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/bigstring/eqaf_bigstring.cmxa
>> and
>> /gnu/store/id3dchcsw5gijsnn73kw5sn9ymjj90ai-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/eqaf.cmxa
>> make inconsistent assumptions over implementation Eqaf
>>
>> this seems to indicate Eqaf did not build properly? Does it 
>> build for
>> you?
>
> Negative. Can confirm that ocaml-mirage-crypto does not build 
> when rebased on
> master. I will investigate.

This seems to be related to the recently added dune profile 
parameter (https://issues.guix.gnu.org/49868).

The installed eqaf.cmxa seems to be the one built by using the 
"dev" profile, whereas eqaf_bigstring.cmxa is expecting the Eqaf 
module built with the "release" profile:

```
$ ocamlobjinfo 
/gnu/store/id3dchcsw5gijsnn73kw5sn9ymjj90ai-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/bigstring/eqaf_bigstring.cmxa
[..]
Implementations imported:
	193f160ab58c2c455f4e1fe1425b8971	Eqaf
[..]

$ ocamlobjinfo 
/gnu/store/id3dchcsw5gijsnn73kw5sn9ymjj90ai-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/eqaf.cmxa
[..]
CRC of implementation: f693310ffd4f92f54cd1fde8271782b8
[..]
```

With (arguments `(#:profile "dev")):
```
$ ocamlobjinfo 
/gnu/store/v2s1h1is0ci2ij2h8k5fbna3j8ycrw9y-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/bigstring/eqaf_bigstring.cmxa
[..]
Implementations imported:
[..]
--------------------------------	Eqaf

$ ocamlobjinfo 
/gnu/store/v2s1h1is0ci2ij2h8k5fbna3j8ycrw9y-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/eqaf.cmxa
[..]
CRC of implementation: f693310ffd4f92f54cd1fde8271782b8
[..]
```

When using the "dev" profile the ocaml-eqaf and 
ocaml-mirage-crypto build and pass the checks.

(I assume that the missing CRC in eqaf_bigstring.cmxa means it 
does not check the CRC of the Eqaf implementation.)

If I set (arguments `(#:package "eqaf")), then also everything 
builds fine and the hashes seem to be right:

```
$ ocamlobjinfo 
/gnu/store/cyw1n07cqdh25w5awww185s44yzbcyss-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/bigstring/eqaf_bigstring.cmxa
Implementations imported:
	193f160ab58c2c455f4e1fe1425b8971	Eqaf

$ ocamlobjinfo 
/gnu/store/cyw1n07cqdh25w5awww185s44yzbcyss-ocaml-eqaf-0.7/lib/ocaml/site-lib/eqaf/eqaf.cmxa
CRC of implementation: 193f160ab58c2c455f4e1fe1425b8971
```

This seems weird. I don't understand why dune installs the 
eqaf.cmxa built with "dev" profile but eqaf_bigstring.cmxa with 
"release" profile. Maybe this is a bug in dune?

It does seem that using the dune "--profile" options on its own is 
not very common. Opam uses the dune "-p" option. This sets the 
profile to "release" and does a couple of other things 
(https://dune.readthedocs.io/en/stable/opam.html?highlight=build%20profile#invocation-from-opam). 
I don't think many people use the "--profile" option on its own.

For our dune-build-system I think it makes more sense to always 
use the "-p" flag. This requires adding the explicit OCaml 
package(s) to many specifications in Guix. I also think the 
"profile" parameter should be removed as the interactions with the 
"package" parameter (dune "-p") are not as expected. Sorry for not 
doing this research before submitting the patch that added the 
"profile" parameter.

Thoughts?

-pukkamustard