automake-patches
[Top][All Lists]
Advanced

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

Re: Bigger picture of automake variables


From: Ralf Wildenhues
Subject: Re: Bigger picture of automake variables
Date: Sun, 21 Dec 2008 18:06:57 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

[ moving from automake@ ]

Hello,

* LCID Fire wrote on Sun, Dec 14, 2008 at 07:51:07PM CET:
> Ralf Wildenhues wrote:
> > Elsewhere, flags like AM_LDFLAGS are denoted as global.  In that case,
> > it is meant to say that, unlike program_LDFLAGS, which applies to
> > 'program' only, the flags apply to all binaries created by this
> > Makefile.am (that themselves don't have per-target flags which override
> > the "global" AM_LDFLAGS).  Makes sense a bit?
> IMO global is used incorrectly here because it is just per Makefile.
> Global initially made me think it really is for all Makefiles.

Good point. WDYT about the patch below?
Can I get a real name for THANKS?

> > Variables are not transported between Makefile files the way you think.
> > In the above example, the first line is redundant, and AM_CFLAGS will
> > have the value of "whatever" in this Makefile.  In 'somedir', it will
> > have no particular value unless you set it there.
> So basically variables are not ever transported between Makefiles.

Correct.

BTW, there is a reason this is not done: portability.  The Autoconf
manual has a chapter about why portably transporting variables between
makefiles is a major pain.

> AFAIU setting a variable in configure.in provides this set of
> variable/value to all Makefiles.

Correct.  But you can override this in individual Makefile.am files
by also setting the variable explicitly there.

> And the variable again is NOT globally modifiable
> since setting the variable in one Makefile is something another makefile
> will not recognize

Correct.

> (thus I'd say upon writing a local copy of every variable is created).

Well, what really happens is that, with
  AC_SUBST([VARIABLE])

in configure.ac, and
  VARIABLE = my value from Makefile.am

in Makefile.am, the Makefile.in will contain

  VARIABLE = @VARIABLE@
  ...
  VARIABLE = my value from Makefile.am

and thus the latter wins.

> > Hope that helps.
> Thanks, helped a great deal. These concepts were not really obvious to
> me when reading the documentation.

Good documentation patches are always welcome.  :-)

Cheers,
Ralf

    Do not use 'global' for makefile-wide settings.
    
    * doc/automake.texi (Linking, Libtool Flags)
    (Program and Library Variables, Flag Variables Ordering):
    Reword instances of `global variables' that really mean
    makefile-wide ones.
    Report by LCID Fire <address@hidden>.

diff --git a/doc/automake.texi b/doc/automake.texi
index fa0a277..e7ae93b 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -4586,9 +4586,8 @@ Sometimes, multiple programs are built in one directory 
but do not share
 the same link-time requirements.  In this case, you can use the
 @address@hidden variable (where @var{prog} is the name of the
 program as it appears in some @code{_PROGRAMS} variable, and usually
-written in lowercase) to override the global @code{LDADD}.  If this
-variable exists for a given program, then that program is not linked
-using @code{LDADD}.
+written in lowercase) to override @code{LDADD}.  If this variable exists
+for a given program, then that program is not linked using @code{LDADD}.
 @vindex maude_LDADD
 
 For instance, in GNU cpio, @code{pax}, @code{cpio} and @code{mt} are
@@ -5256,8 +5255,8 @@ Libtool Manual} for more options) should appear before 
the mode
 selection on the command line; in @file{Makefile.am}s they should
 be listed in the @address@hidden variable.
 
-If @address@hidden is not defined, the global
address@hidden variable is used instead.
+If @address@hidden is not defined, then the variable
address@hidden is used instead.
 
 These flags are passed to libtool after the @address@hidden
 option computed by Automake (if any), so
@@ -5495,11 +5494,11 @@ of any library built by your package.  Doing so will 
ensure that
 
 @item maude_LDFLAGS
 This variable is used to pass extra flags to the link step of a program
-or a shared library.  It overrides the global @code{AM_LDFLAGS} variable.
+or a shared library.  It overrides the @code{AM_LDFLAGS} variable.
 
 @item maude_LIBTOOLFLAGS
 This variable is used to pass extra options to @command{libtool}.
-It overrides the global @code{AM_LIBTOOLFLAGS} variable.
+It overrides the @code{AM_LIBTOOLFLAGS} variable.
 These options are output before @command{libtool}'s @address@hidden
 option, so they should not be mode-specific options (those belong to
 the compiler or linker flags).  @xref{Libtool Flags}.
@@ -10768,7 +10767,7 @@ has neither @code{AM_} nor per-target cousin.
 Finally you should not think either that the existence of a per-target
 variable implies that of an @code{AM_} variable or that of a user
 variable.  For instance, the @code{mumble_LDADD} per-target variable
-overrides the global @code{LDADD} variable (which is not a user
+overrides the makefile-wide @code{LDADD} variable (which is not a user
 variable), and @code{mumble_LIBADD} exists only as a per-target
 variable.  @xref{Program and Library Variables}.
 




reply via email to

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