Richard W.M. Jones wrote:
On Tue, Aug 28, 2012 at 05:46:49PM +0200, Jim Meyering wrote:
> In Makefile.am files, installation-related rules
> must honor the $(prefix) Makefile variable. For example,
> in many Makefiles you'll find files being installed to
> $(DESTDIR)$(bindir), with these definitions:
>
> bindir = ${exec_prefix}/bin
> exec_prefix = ${prefix}
>
> Currently, $(OCAMLLIB) (set from m4/ocaml.m4 by running $OCAMLC) is set
> to /usr/lib64/ocaml for me. If we could make it include $(exec_prefix),
> that would solve this problem.
I see. Not an easy one to solve however. The OCaml library path
comes from running:
$OCAMLC -where
A slightly kludgey (pragmatic?) fix would be to transform the
current $OCAMLLIB by these in ocaml.m4:
s,/usr/lib64/,$(exec_prefix)/lib64,
s,/usr/lib/,$(exec_prefix)/lib,
However, that would work only if ocamlc is installed in the normal
system-wide location. It would not work if you are using a version of
ocamlc that you installed using --prefix=$HOME/ocaml. For cases like that
(where the above substitutions make no change), the easiest/safest would be
to abort the configure script. Perhaps easier still, but not safe, would
be to allow the configure/build to proceed, but then "make distcheck"
could end up modifying files under $HOME/ocaml for those whose ocamlc
has a writable OCAMLLIB directory.
Currently, if root runs "make distcheck", I suspect it would put things in
$OCAMLLIB. That would be rather antisocial, but maybe you have something
to abort a "make distcheck" when it's run by root? I haven't tried
that.
This is not an (especially) peculiar OCaml thing. For example we
detect the Python library path using:
$PYTHON -c "import distutils.sysconfig; \
print (distutils.sysconfig.get_python_inc ());"
This allows multiple parallel Python installations to get along on
Debian. The user just specifies the $PYTHON binary and everything
works off that. So I'm fairly sure the same bug exists in some
Python, Perl and Ruby code in libguestfs too.
Rich.