[Pkg-octave-devel] Bug#637787: Bug#637787: Bug#637787: Bug#637787: Bug#637787: Bug#637787: Bug#637787: Bug#637787: trivial fix

John W. Eaton jwe at octave.org
Tue Oct 25 17:20:29 UTC 2011


On 24-Oct-2011, John W. Eaton wrote:

| On 24-Oct-2011, Thomas Weber wrote:
| 
| | On Thu, Sep 01, 2011 at 09:03:57PM +0200, Thomas Weber wrote:
| | > On Tue, Aug 23, 2011 at 12:24:17PM -0400, John W. Eaton wrote:
| | > > If you don't want to change octlibdir, then you can change the lines
| | > > like
| | > > 
| | > >   octlib_LTLIBRARIES = liboctave.la
| | > > 
| | > > in the Makefile.am files to be
| | > > 
| | > >   lib_LTLIBRARIES = liboctave.la
| | > > 
| | > > instead.  It's the octlib (or lib) prefix that is used to generate the
| | > > variable that determines the installation directory. 
| | 
| | I did the change above, but the build fails almost always (almost = in a
| | clean chroot). It builds reliable in my normal work directory, which is
| | strange (I already looked at timestamp issues, but I do not think that
| | that is the problem). It always fails when linking in libcruft/ with the
| | error message:
| | 
| | libtool: link: cannot find the library `libranlib.la' or unhandled
| | argument `libranlib.la'
| | 
| | I've put a log file of the build at
| | http://people.debian.org/~tweber/octave.log.bz2
| | 
| | The commands effectively run are:
| | 	automake --foreign --verbose
| | 	./configure --build=x86_64-linux-gnu --prefix=/usr 
| | 	make -j1
| | 
| | Do you have any ideas?
| 
| I can't reproduce the problem, but I'm not sure I'm doing exactly the
| same thing as you.
| 
| Can you please give me step-by-step instructions for how to download
| exactly the Debian package files and what to do with them to try to
| generate the package?  Jordi gave me that info a few days ago and with
| what he showed me, I was able to generate the error you mention
| above.  But now I can't find his instructions.

OK, Jordi gave me the instructions and I can reproduce the problem.

When libcruft/Makefile.am contains

  octlib_LTLIBRARIES = libcruft.la
  noinst_LTLIBRARIES = libranlib.la

The generated Makefile.in file contains

  LTLIBRARIES = $(noinst_LTLIBRARIES) $(octlib_LTLIBRARIES)
  ...
  all-am: Makefile $(LTLIBRARIES) $(HEADERS)

and when it contains

  lib_LTLIBRARIES = libcruft.la
  noinst_LTLIBRARIES = libranlib.la

LTLIBRARIES is defined to be

  LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)

So apparently these variables are sorted alphabetically when creating
the LTLIBRARIES variable.  Then Make is building these libraries in
the order they are listed, so the latter fails, because libcruft.la
depends on libranlib.la, but it is not built yet.

I think automake is supposed to be using the libcruft_la_LIBADD
variable to generate the dependency list for libcruft.la, but it
doesn't seem to be doing that.

The quick fix appears to be adding libranlib.la to the
libcruft_la_DEPENDENCIES variable, so change the line

  libcruft_la_DEPENDENCIES = cruft.def

in libcruft/Makefile.am to be

  libcruft_la_DEPENDENCIES = cruft.def libranlib.la

instead.

jwe





More information about the Pkg-octave-devel mailing list