tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: xentools41 LDFLAGS Re: broken packages for 2012Q3
Hi,
On Sat, Nov 24, 2012 at 10:40:54PM -0800, Aaron J. Grier wrote:
> On Fri, Nov 23, 2012 at 11:45:20PM -0800, Aaron J. Grier wrote:
> > On Fri, Nov 23, 2012 at 10:02:45PM -0800, Aaron J. Grier wrote:
> > > see attached patch, which allows oxenstored to build with the
> > > correct rpath. -L seems to take care of the link rpath. untested,
> > > as I'm still getting another xen server assembled to test this on.
> >
> > oxenstored compiles and runs, but falls over quickly due to some
> > linuxisms in define.ml that I'm now attempting to flush out. :)
>
> --- ocaml/Makefile.rules.orig 2012-11-20 08:16:03.000000000 +0000
> +++ ocaml/Makefile.rules 2012-11-20 08:16:48.000000000 +0000
> @@ -65,7 +65,7 @@
> $(1)_stubs.a: $(foreach obj,$$($(1)_C_OBJS),$(obj).o)
> $(call mk-caml-stubs,$$@, $$+)
> lib$(1)_stubs.a: $(foreach obj,$($(1)_C_OBJS),$(obj).o)
> - $(call mk-caml-lib-stubs,$$@, $$+, $(LIBS_$(1)))
> + $(call mk-caml-lib-stubs,$$@, $$+, -ldopt -Wl,-rpath=$(PREFIX)/lib
> $(LIBS_$(1)))
> endef
>
> define OCAML_NOC_LIBRARY_template
Unfortunately, this is wrong - gmake uses , as argument separator for
functions, so the above sequence results in all the part after -Wl being
left out, including $(LIBS_$(1)). That is, the resulting shared library
is missing the rpath as well as the references to the libraries.
The net-wisdom is to have
comma := ,
somewhere above in the file, and use
+ $(call mk-caml-lib-stubs,$$@, $$+, -ldopt -Wl$(comma)-rpath=$(PREFIX)/lib
$(LIB S_$(1)))
Unfortunately, this doesn't solve the issue. If we do this, both the
-L and the -Wl,-rpath path are added to the .so's rpath.
That's because ocamlmklib adds the -L arguments to the rpath used later with
-R, if they're absolute (defined for Unixoids as "starting with '/'"):
From ocamlmklib:
else if starts_with s "-L" then
(c_Lopts := s :: !c_Lopts;
let l = chop_prefix s "-L" in
if not (Filename.is_relative l) then rpath := l :: !rpath)
From stdlib/filename.ml:
module Unix = struct
[...]
let is_reltive n = String.length n < 1 || n.[0] <> '/';;
So when the OBJDIR is absolute, it's added.
I've escaleted this to the OCaML people as
<http://caml.inria.fr/mantis/view.php?id=5943>
I wonder if we have something to edit the resulting .so to fix the rpath?
otherwise a custom-edited ocamlmklib would work.
Regards,
-is
Home |
Main Index |
Thread Index |
Old Index