ports/189710: ocamlbuild doesn't handle SIGPIPE
Török Edwin
edwin at skylable.com
Mon May 12 13:50:02 UTC 2014
>Number: 189710
>Category: ports
>Synopsis: ocamlbuild doesn't handle SIGPIPE
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon May 12 13:50:01 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator: edwin
>Release: FreeBSD 10.0-RELEASE amd64
>Organization:
>Environment:
System: FreeBSD freebsd10.home.lan 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root at snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
If ocamlfind prints a warning during build then ocamlbuild fails like this:
/usr/local/bin/ocamlfind ocamlc -where > /usr/ports/devel/ocaml-pcre/work/pcre-ocaml-7.0.4/_build/ocamlc.where
Command got signal -8.
If I run the ocamlfind command manually it works, but it prints a warning too:
ocamlfind: [WARNING] Cannot read directory /usr/ports/devel/ocaml-pcre/work/stage/usr/local/lib/ocaml/site-lib/pcre which is mentioned in ld.conf
That warnings causes a SIGPIPE in ocamlbuild or somewhere, which causes the signal -8 message to be printed:
You can use 'truss -f make' to confirm:
75895: write(2,"ocamlfind: [WARNING] Cannot read"...,146) ERR#32 'Broken pipe'
75895: SIGNAL 13 (SIGPIPE)
75895: process exit, rval = 0
75889: wait4(75895,{ SIGNALED,sig=SIGPIPE },0x0,0x0) = 75895 (0x12877)
75889: write(1,"\r\^[[K",4) = 4 (0x4)
+ ocamlfind ocamlc -where > /usr/ports/textproc/ocaml-text/work/ocaml-text-0.6/_build/ocamlc.where
75889: write(1,"+ ocamlfind ocamlc -where > /usr"...,103) = 103 (0x67)
75889: close(4) = 0 (0x0)
75889: write(3,"+ ocamlfind ocamlc -where > /usr"...,150) = 150 (0x96)
75889: close(3) = 0 (0x0)
75889: gettimeofday({1399897227.200087 },0x0) = 0 (0x0)
Command got signal -8.
This is not related to a particular OCaml package, I got this on ocaml-pcre or ocaml-text, but others have encountered this issue elsewhere:
https://bugzilla.skylable.com/show_bug.cgi?id=470#c3
https://github.com/the-lambda-church/merlin/issues/193
https://github.com/the-lambda-church/merlin/issues/183
I don't know if this is related to GCC or Clang (my system seems to use Clang), but this appears to be a
FreeBSD-specific problem with ocamlbuild (on Linux I've never seen this error).
>How-To-Repeat:
Install the ocaml compiler (from source, see other PR as binary package seems to be missing):
# cd /usr/ports/lang/ocaml
# make install
# cd /usr/ports/textproc/ocaml-text
# make install
[...]
Oh this wants to build PCRE, but there's a binary package, ... interrupt the build!
[..]
^C
Install pcre binary package
# pkg install pcre
OK lets resume
# make install
[....]
+ /usr/local/bin/ocamlfind ocamlc -where > /usr/ports/devel/ocaml-pcre/work/pcre-ocaml-7.0.4/_build/ocamlc.where
Command got signal -8.
Expected behaviour:
ocamlbuild should print the error message from ocamlfind's stderr, instead of dieing on SIGPIPE!
>Fix:
Run 'ocamlfind ocamlc -where' manually
Edit /usr/local/lib/ocaml/ld.conf and remove the lines it complained about
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list