[Unison-hackers] bundling with OCaml (was: Compiling Unison with OCaml 4.08)

frederik at ofb.net frederik at ofb.net
Wed Dec 4 06:03:04 EST 2019


Just as an addendum to my previous message, for example, when I build OCaml 4.05.0 (or 4.02, or 4.07, etc.) on Arch, I get an error about "Error: Could not find the .cmi file for interface
       /home/frederik/packages/ocaml/bytecomp/opcodes.mli".

If I use the patched OCaml source from a distro such as Arch or Raspbian Buster, then it builds properly but building Unison 2.48.15v2 (or 2.48.4, or the latest master from https://github.com/bcpierce00/unison.git) fails with various errors such as:

    ocamlopt -g -I lwt -I ubase -I system -I fsmonitor -I fsmonitor/linux -I fsmonitor/windows -I system/generic -I lwt/generic -c /home/frederik/packages/unison/src/fsmonitor/linux/inotify.ml
    File "/home/frederik/packages/unison/src/fsmonitor/linux/inotify.ml", line 98, characters 27-30:
    98 |    let toread = Unix.read fd buf 0 toread in
                                    ^^^
    Error: This expression has type string but an expression was expected of type
             bytes
    make[1]: *** [Makefile.OCaml:435: fsmonitor/linux/inotify.cmx] Error 2

This error happens with both OCaml 4.05.0 from Raspbian Buster, or 4.02.3 from the Arch git repo history.

Hence it would be useful to know which versions of Unison and OCaml are known to work together. The log entry for 2.48.15v2 just says "fix to compile with newer caml", although the source diff mentions 4.02.

By the way, "fsmonitor" looks like code for a (possibly very useful) feature that I never make use of, so if an older version of Unison/OCaml was more stable then I would be happy to go back to it.

Older versions of Unison all seem to fail with the following error:

    ocamlc -o src/mkProjectInfo src/mkProjectInfo.ml
    src/mkProjectInfo > src/Makefile.ProjectInfo
    Fatal error: exception Scanf.Scan_failure("scanf: bad input at char number 4: "looking for ':', found '$'"")

I would like to have both Unison and OCaml installed in my home directory rather than /usr or /usr/local, so that I don't have to worry about things breaking when I do a distribution upgrade. I've been assuming that I can put OCaml in e.g. "-prefix ~/ocamlbuild" and then point the Unison build system there by setting "export PATH=$HOME/ocamlbuild/bin/:$PATH" - please let me know if that is not sufficient.

Thanks in advance,

Frederick

On Tue, Dec 03, 2019 at 11:42:54PM -0800, frederik at ofb.net wrote:
>I have been trying to use Unison recently but I realized that I need to not only build Unison from the same source on all my machines, but OCaml as well, since the Unison protocol requires the same version of OCaml on both ends. Given this constraint, I wonder if anyone has considered bundling a working version of OCaml with Unison, so that they can be built together and installed locally.
>
>It looks like OCaml is about 33MB, vs 4MB for Unison. This is somewhat awkward, but bundling them could perhaps be done efficiently using Git modules?
>
>On Tue, Dec 03, 2019 at 11:20:40AM -0500, Benjamin C. Pierce wrote:
>>That worked for me too — thank you very much for the quick help!
>>
>>  - Benjamin
>>
>>>On Dec 3, 2019, at 10:50 AM, Jakob Rath <mail at jakobrath.eu> wrote:
>>>
>>>Hi,
>>>
>>>I successfully built unison with OCaml 4.08.1 on Mojave a few weeks ago.
>>>
>>>At first, I hit the same error as you though (linker can’t find the bigarray library). I assumed it was a problem with my OCaml installation and worked around it by creating a symlink:
>>>
>>>$ cd /usr/local/lib/ocaml
>>>$ ln -s bigarray.a libbigarray.a
>>>
>>>Best,
>>>Jakob
>>>
>>>
>>>>On 03.12.2019, at 15:31, Benjamin C. Pierce <bcpierce at cis.upenn.edu> wrote:
>>>>
>>>>Has anyone been able to compile the GUI version of unison with OCaml 4.08?  I get this (on both Catalina and Mohave):
>>>>
>>>>>>>>Ld /Users/bcpierce/home1/unison/src/uimac/build/Default/Unison.app/Contents/MacOS/Unison normal x86_64 (in target 'uimac' from project 'uimacnew')
>>>>   cd /Users/bcpierce/home1/unison/src/uimac
>>>>   /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -target x86_64-apple-macos10.6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -L/Users/bcpierce/home1/unison/src/uimac/build/Default -F/Users/bcpierce/home1/unison/src/uimac/build/Default -filelist /Users/bcpierce/home1/unison/src/uimac/build/uimacnew.build/Default/uimac.build/Objects-normal/x86_64/Unison.LinkFileList -Xlinker -object_path_lto -Xlinker /Users/bcpierce/home1/unison/src/uimac/build/uimacnew.build/Default/uimac.build/Objects-normal/x86_64/Unison_lto.o -fobjc-link-runtime -L/Users/bcpierce/.opam/default/lib/ocaml -lunix -lthreadsnat -lcamlstr -lbigarray -lasmrun -framework Cocoa -framework Security -framework ExceptionHandling -Xlinker -dependency_info -Xlinker /Users/bcpierce/home1/unison/src/uimac/build/uimacnew.build/Default/uimac.build/Objects-normal/x86_64/Unison_dependency_info.dat -o /Users/bcpierce/home1/unison/src/uimac/build/Default/Unison.app/Contents/MacOS/Unison
>>>>ld: library not found for -lbigarray
>>>>clang: error: linker command failed with exit code 1 (use -v to see invocation)
>>>>
>>>>** BUILD FAILED **
>>>>
>>>>Any idea what’s wrong here?  (The text UI builds fine.)
>>>>
>>>>Thanks!
>>>>
>>>>   - Benjamin
>>>>
>>>>_______________________________________________
>>>>Unison-hackers mailing list
>>>>Unison-hackers at LISTS.SEAS.UPENN.EDU
>>>>https://LISTS.SEAS.UPENN.EDU/mailman/listinfo/unison-hackers
>>>
>>>_______________________________________________
>>>Unison-hackers mailing list
>>>Unison-hackers at LISTS.SEAS.UPENN.EDU
>>>https://LISTS.SEAS.UPENN.EDU/mailman/listinfo/unison-hackers
>>>
>>
>>_______________________________________________
>>Unison-hackers mailing list
>>Unison-hackers at LISTS.SEAS.UPENN.EDU
>>https://LISTS.SEAS.UPENN.EDU/mailman/listinfo/unison-hackers
>_______________________________________________
>Unison-hackers mailing list
>Unison-hackers at LISTS.SEAS.UPENN.EDU
>https://LISTS.SEAS.UPENN.EDU/mailman/listinfo/unison-hackers


More information about the Unison-hackers mailing list