[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FYI: Overriding user variables
From: |
Akim Demaille |
Subject: |
FYI: Overriding user variables |
Date: |
12 Apr 2001 17:39:05 +0200 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Cuyahoga Valley) |
Up to now, I had Automake die when it tries to redefine a user
variable. The rationale was `it must not happen, hence it's an
error'.
But it is not adequate for Automake where some `default' values may be
read _after_ the user value might have been read (of course, since
Makefile.am is loaded first, and then Automake's *.am files are read).
One typical example is when someone defines DEFS. Afterwards Automake
load compile.am, and then, boom.
So finally, I have Automake skip Automake definitions when a user
value is already defined. But since I want to be able at least to see
that, I left a verbose message. In a perfect world, --warning would
already have been implemented, and this would have been hooked on
something better than --verbose.
As an example, before:
am/tests/testSubDir % am
Makefile.am:1: DEFS multiply defined in condition TRUE
DEFS (User, where = 1) =
{
TRUE => toto
}
After:
am/tests/testSubDir % am
am/tests/testSubDir % am --verbo
automake: reading configure.in
automake: reading aclocal.m4
automake: reading /home/lrde/prof/akim/src/am/header-vars.am
automake: reading Makefile.am
automake: Makefile.am: required file `./INSTALL' not found
automake: Makefile.am: required file `./NEWS' not found
automake: Makefile.am: required file `./README' not found
automake: Makefile.am: required file `./COPYING' not found
automake: Makefile.am: required file `./AUTHORS' not found
automake: Makefile.am: required file `./ChangeLog' not found
automake: reading /home/lrde/prof/akim/src/am/configure.am
automake: reading /home/lrde/prof/akim/src/am/progs.am
automake: reading /home/lrde/prof/akim/src/am/program.am
automake: reading /home/lrde/prof/akim/src/am/compile.am
automake: refusing to override the user definition of:
DEFS (User, where = 1) =
{
TRUE => toto
}
automake: with `TRUE' => address@hidden@ -I. -I$(srcdir)
-I$(top_builddir)/include'
automake: reading /home/lrde/prof/akim/src/am/tags.am
automake: reading /home/lrde/prof/akim/src/am/depend.am
automake: reading /home/lrde/prof/akim/src/am/depend2.am
Sources ending in .c become .o
Sources ending in .c become .obj
automake: reading /home/lrde/prof/akim/src/am/distdir.am
automake: reading /home/lrde/prof/akim/src/am/footer.am
automake: reading /home/lrde/prof/akim/src/am/install.am
automake: reading /home/lrde/prof/akim/src/am/clean.am
automake: creating Makefile.in
automake: reading /home/lrde/prof/akim/src/am/header-vars.am
automake: reading include/Makefile.am
automake: reading /home/lrde/prof/akim/src/am/configure.am
automake: reading /home/lrde/prof/akim/src/am/remake-hdr.am
automake: reading /home/lrde/prof/akim/src/am/clean-hdr.am
automake: reading /home/lrde/prof/akim/src/am/distdir.am
automake: reading /home/lrde/prof/akim/src/am/footer.am
automake: reading /home/lrde/prof/akim/src/am/install.am
automake: reading /home/lrde/prof/akim/src/am/clean.am
automake: creating include/Makefile.in
Index: ChangeLog
from Akim Demaille <address@hidden>
* automake.in (¯o_define): Ignore Automake definition for
($var, $cond) if there is already a user definition for ($var, $cond).
Index: automake.in
===================================================================
RCS file: /cvs/automake/automake/automake.in,v
retrieving revision 1.1037
diff -u -u -r1.1037 automake.in
--- automake.in 2001/04/12 14:12:05 1.1037
+++ automake.in 2001/04/12 15:37:05
@@ -5636,13 +5636,27 @@
$var_line{$var} = $where
unless defined $var_line{$var};
- # There must be no previous value unless the user is redefining
- # an Automake variable or an AC_SUBST variable.
- check_ambiguous_conditional ($var, $cond)
- unless ($var_is_am{$var} && !$var_is_am
- || exists $configure_vars{$var});
+ # If Automake tries to override a value specified by the user,
+ # just don't let it do.
+ if (defined $var_value{$var}{$cond} && !$var_is_am{$var} && $var_is_am)
+ {
+ if ($verbose)
+ {
+ print STDERR "$me: refusing to override the user definition
of:\n";
+ variable_dump ($var);
+ print STDERR "$me: with `$cond' => `$value'\n";
+ }
+ }
+ else
+ {
+ # There must be no previous value unless the user is redefining
+ # an Automake variable or an AC_SUBST variable.
+ check_ambiguous_conditional ($var, $cond)
+ unless ($var_is_am{$var} && !$var_is_am
+ || exists $configure_vars{$var});
- $var_value{$var}{$cond} = $value;
+ $var_value{$var}{$cond} = $value;
+ }
}
# An Automake variable can be given to the user, but not the converse.
- FYI: Overriding user variables,
Akim Demaille <=