[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [automake] Dependency question with _LDADD

From: Ralf Wildenhues
Subject: Re: [automake] Dependency question with _LDADD
Date: Tue, 26 Aug 2008 17:43:13 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

Hello Michel,

can we limit followups to the automake list only, please?

* Michel Briand wrote on Tue, Aug 26, 2008 at 05:09:34PM CEST:
> as an exercise I decided to learn the maximum about automake and
> libtool, and write a complete example.

Thanks.  Some nits below.

> What do you think of my example ? Is it useful for other people
> to learn autotools ?

I don't know.  Typically, I'm bad at guessing what beginners need in
order to learn.

> I implemented library & program versioning. Basically.


> I also modified the program's to not rebuild the program
> when the library was just rebuilt.

I don't think showing that to a beginner is a good idea.  It's certainly
safer to let the program be rebuilt when the library changes.  But see
below for more specific remarks.

Here's a bit of review:

> ::::::::::::::
> ::::::::::::::
> autoreconf --force --install -I config -I m4

Why '-I config -I m4'?  AFAICS you do not use AC_CONFIG_MACRO_DIR([m4])
in  I'd use that, and drop '-I config'.

> ::::::::::::::
> ::::::::::::::
> AC_INIT([autotraining], [1.0], address@hidden)

If you aim at beginners, teach them the right manners by consistently
using correct m4 quotation:


> # Version: simpliest way to implement versioning

These statements cause config.status output to be dependent upon the
files PROGRAM_VERSION and LIBRARY_VERSION.  Thus, I would add

so that configure is automatically rerun when those files change.

> # C++ is not used, so related checks are not needed
> m4_defun([_LT_AC_LANG_CXX_CONFIG], [:])
> # Same for Fortran
> m4_defun([_LT_AC_LANG_F77_CONFIG], [:])

The above four lines are obsolete once you update your Libtool to a
version newer than 2.1.  So why even include them in a beginners'


This macro has been spelled AC_PROG_LIBTOOL for years, and LT_INIT since
Libtool 2.2.  Might want to at least use the AC_* form for clarity,
otherwise your adept reader might search needlessly.

> ::::::::::::::
> src/lib/
> ::::::::::::::
> # Library: libtraining
> # Generates its own pkg-config definition file

Why not put

in, so you don't need the above?  Of course you may want to
use a less generic name, e.g. TRAINING_LIBRARY_VERSION.

Similar applies to -DPROGRAM_VERSION in src/bin/

> pkgconfigdir = $(libdir)/pkgconfig
> pkgconfig_DATA = libtraining.pc

> libtraining_la_includedir = $(includedir)
> libtraining_la_include_HEADERS = libtraining.h

For what it's worth, I'd replace the two lines above with this one line
  include_HEADERS = libtraining.h

> libtraining_la_SOURCES = training.c

Since you're making an example package, how about adding an uninstalled
header here:
  libtraining_la_SOURCES = training.c internal_header.h

so that users know where to add that?

> libtraining_la_LDFLAGS = -version-info ${LIBRARY_VERSION}

> ::::::::::::::
> src/bin/
> ::::::::::::::
> # Main program: training
> # Uses libtraining in ../lib

Please drop this line.

> bin_PROGRAMS = training
> training_SOURCES = training.c
> training_LDADD = -ltraining

This last line is wrong, too.  The two *have* to be replaced with this
one line:
  training_LDADD = ../lib/

Why?  Because otherwise, paths to the uninstalled $builddir/src/lib may
end up in the installed binary on some systems.  That can be a security
issue.  If you want to work around the rebuilding issue, then *please*
guard it with a big fat comment that this isn't for the faint of the
heart, and should not be done typically.  And then do it like this:
  # Explicitly override the dependency on any libraries, to hack away
  # automatic rebuilds.  Done because the author knows better than to
  # change the library incompatibly:
  training_DEPENDENCIES =

FWIW, you could actually add ../../LIBRARY_VERSION to this variable.

I should note that when I encounter newbies reporting bugs against
autotools, which turn out to have broken builds due to this setting
of yours, I will gladly send them to you.

Hope that helps.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]