automake
[Top][All Lists]
Advanced

[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 (&macro_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.



reply via email to

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