automake-patches
[Top][All Lists]
Advanced

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

[PATCH] conditional info_TEXINFOS, updated


From: Paolo Bonzini
Subject: [PATCH] conditional info_TEXINFOS, updated
Date: Mon, 12 Mar 2007 18:36:33 +0100
User-agent: Thunderbird 1.5.0.10 (Macintosh/20070221)

Ok, here's the patch I sent a month ago together with new
testcases.

I also found a little opportunity for refactoring.

Paolo

2007-03-12  Paolo Bonzini  <address@hidden>

        * automake.in (output_texinfo_build_rules): Add COND parameter.
        Emit INFO_DEPS and TEXINFOS.
        (handle_texinfo_helper): Remove references to dead variable
        info_deps_list.  Collect conditions for info_texinfos files and
        pass it to output_texinfo_build_rules.  Don't emit TEXINFOS.
        (append_pretty_variable): New.
        (push_dist_common): Use it.
        * automake.in (output_texinfo_build_rules): Add COND parameter.
        * lib/am/texibuild.am (INFODEPS): Don't emit it.
        * tests/Makefile.am (TESTS): Add condinfo.test.
        * tests/condinfo.test: New test.


Index: NEWS
===================================================================
RCS file: /sources/automake/automake/NEWS,v
retrieving revision 1.323
diff -u -p -r1.323 NEWS
--- NEWS        10 Jan 2007 17:57:24 -0000      1.323
+++ NEWS        12 Mar 2007 17:35:09 -0000
@@ -16,6 +16,11 @@ New in 1.10a:
     (and its time stamps) if the contents did not change.
 
 
+Bugs fixed in 1.10.1:
+
+* Automake is now able to handle conditional info_TEXINFOS. 
+
+
 New in 1.10:
 
 * Version requirements:
Index: automake.in
===================================================================
RCS file: /sources/automake/automake/automake.in,v
retrieving revision 1.1641
diff -u -p -r1.1641 automake.in
--- automake.in 16 Oct 2006 05:24:17 -0000      1.1641
+++ automake.in 12 Mar 2007 17:35:10 -0000
@@ -7,7 +7,7 @@ eval 'case $# in 0) exec @PERL@ -S "$0";
 
 # automake - create Makefile.in from Makefile.am
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007  Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -2960,15 +2960,16 @@ sub scan_texinfo_file ($)
 
 
 # ($DIRSTAMP, @CLEAN_FILES)
-# output_texinfo_build_rules ($SOURCE, $DEST, $INSRC, @DEPENDENCIES)
-# ------------------------------------------------------------------
+# output_texinfo_build_rules ($SOURCE, $DEST, $INSRC, $COND, @DEPENDENCIES)
+# -------------------------------------------------------------------------
 # SOURCE - the source Texinfo file
 # DEST - the destination Info file
-# INSRC - wether DEST should be built in the source tree
+# INSRC - whether DEST should be built in the source tree
+# COND - the condition under which DEST should be built
 # DEPENDENCIES - known dependencies
-sub output_texinfo_build_rules ($$$@)
+sub output_texinfo_build_rules ($$$$@)
 {
-  my ($source, $dest, $insrc, @deps) = @_;
+  my ($source, $dest, $insrc, $cond, @deps) = @_;
 
   # Split `a.texi' into `a' and `.texi'.
   my ($spfx, $ssfx) = ($source =~ /^(.*?)(\.[^.]*)?$/);
@@ -3029,6 +3030,13 @@ sub output_texinfo_build_rules ($$$@)
 
   my $dipfx = ($insrc ? '$(srcdir)/' : '') . $dpfx;
 
+  append_pretty_variable ('INFO_DEPS', $cond, INTERNAL, "$dipfx$dsfx");
+
+  # This next line isn't strictly needed now -- the places that look here
+  # could easily be changed to look in info_TEXINFOS.  But this is
+  # probably better, in case html_TEXINFOS is ever supported.
+  append_pretty_variable ('TEXINFOS', $cond, INTERNAL, $source);
+
   $output_rules .= file_contents ('texibuild',
                                  new Automake::Location,
                                  DEPS             => "@deps",
@@ -3058,7 +3066,7 @@ sub output_texinfo_build_rules ($$$@)
 sub handle_texinfo_helper ($)
 {
   my ($info_texinfos) = @_;
-  my (@infobase, @info_deps_list, @texi_deps);
+  my (@infobase, @texi_deps);
   my %versions;
   my $done = 0;
   my @texi_cleans;
@@ -3072,6 +3080,19 @@ sub handle_texinfo_helper ($)
   @f = map { s|[^A-Za-z_0-9*\[\]\-]|\\$&|g; s|\*|[^/]*|g; $_; } @f;
   my $user_cleaned_files = '^(?:' . join ('|', @f) . ')$';
 
+  my %info_texinfos_conds;
+
+  append_pretty_variable ('INFO_DEPS', TRUE, INTERNAL, '');
+  append_pretty_variable ('TEXINFOS', TRUE, INTERNAL, '');
+
+  $info_texinfos->traverse_recursively
+    (sub {
+      my ($var, $val, $cond, $full_cond) = @_;
+      $info_texinfos_conds{$val} = $full_cond;
+    },
+    undef,
+    inner_expand => 1);
+
   foreach my $texi
       ($info_texinfos->value_as_list_recursive (inner_expand => 1))
     {
@@ -3219,11 +3240,10 @@ sub handle_texinfo_helper ($)
        }
 
       my ($dirstamp, @cfiles) =
-       output_texinfo_build_rules ($texi, $out_file, $insrc, @texi_deps);
+       output_texinfo_build_rules ($texi, $out_file, $insrc,
+                                   $info_texinfos_conds{$texi}, @texi_deps);
       push (@texi_cleans, @cfiles);
 
-      push (@info_deps_list, $out_file);
-
       # If a vers*.texi file is needed, emit the rule.
       if ($vtexi)
        {
@@ -3241,8 +3261,8 @@ sub handle_texinfo_helper ($)
          # This is ugly, but it is our historical practice.
          if ($config_aux_dir_set_in_configure_ac)
            {
-             require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN,
-                                           'mdate-sh');
+             require_conf_file_with_macro (TRUE, 'info_TEXINFOS',
+                                           FOREIGN, 'mdate-sh');
            }
          else
            {
@@ -3313,11 +3333,6 @@ sub handle_texinfo_helper ($)
   define_files_variable ("PSS", @infobase, 'ps', INTERNAL);
   define_files_variable ("HTMLS", @infobase, 'html', INTERNAL);
 
-  # This next isn't strictly needed now -- the places that look here
-  # could easily be changed to look in info_TEXINFOS.  But this is
-  # probably better, in case noinst_TEXINFOS is ever supported.
-  define_variable ("TEXINFOS", variable_value ('info_TEXINFOS'), INTERNAL);
-
   # Do some error checking.  Note that this file is not required
   # when in Cygnus mode; instead we defined TEXINFO_TEX explicitly
   # up above.
@@ -3325,13 +3340,13 @@ sub handle_texinfo_helper ($)
     {
       if ($need_texi_file > 1)
        {
-         require_conf_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN,
-                                       'texinfo.tex');
+         require_conf_file_with_macro (TRUE, 'info_TEXINFOS',
+                                       FOREIGN, 'texinfo.tex');
        }
       else
        {
-         require_file_with_macro (TRUE, 'info_TEXINFOS', FOREIGN,
-                                  'texinfo.tex');
+         require_file_with_macro (TRUE, 'info_TEXINFOS',
+                                  FOREIGN, 'texinfo.tex');
        }
     }
 
@@ -5859,6 +5874,21 @@ sub cond_stack_endif ($$$)
 ## ------------------------ ##
 
 
+# &append_pretty_variable ($VAR, $COND, $WHERE, @VALUE)
+# -----------------------------------------------------
+# Like define_variable, but the value is a list, and the variable may
+# be defined conditionally.  The second argument is the Condition
+# under which the value should be defined; this should be the empty
+# string to define the variable unconditionally.  The third argument
+# is a list holding the values to use for the variable.  The value is
+# pretty printed in the output file.  Can be invoked multiple times.
+sub append_pretty_variable ($$$@)
+{
+    my ($var, $cond, $where, @value) = @_;
+    Automake::Variable::define ($var, VAR_AUTOMAKE, '+', $cond, "@value",
+                               '', $where, VAR_PRETTY);
+}
+
 # &define_pretty_variable ($VAR, $COND, $WHERE, @VALUE)
 # -----------------------------------------------------
 # Like define_variable, but the value is a list, and the variable may
@@ -5879,7 +5909,6 @@ sub define_pretty_variable ($$$@)
     }
 }
 
-
 # define_variable ($VAR, $VALUE, $WHERE)
 # --------------------------------------
 # Define a new Automake Makefile variable VAR to VALUE, but only if
@@ -7388,8 +7417,7 @@ sub push_dist_common
 {
   prog_error "push_dist_common run after handle_dist"
     if $handle_dist_run;
-  Automake::Variable::define ('DIST_COMMON', VAR_AUTOMAKE, '+', TRUE, "@_",
-                             '', INTERNAL, VAR_PRETTY);
+  append_pretty_variable ('DIST_COMMON', TRUE, INTERNAL, @_);
 }
 
 
Index: doc/Makefile.in
===================================================================
RCS file: /sources/automake/automake/doc/Makefile.in,v
retrieving revision 1.65
diff -u -p -r1.65 Makefile.in
--- doc/Makefile.in     12 Nov 2006 18:02:41 -0000      1.65
+++ doc/Makefile.in     12 Mar 2007 17:35:10 -0000
@@ -53,13 +53,13 @@ CONFIG_CLEAN_FILES =
 SOURCES =
 DIST_SOURCES =
 INFO_DEPS = $(srcdir)/automake.info
+TEXINFOS = automake.texi
 TEXINFO_TEX = $(top_srcdir)/lib/texinfo.tex
 am__TEXINFO_TEX_DIR = $(top_srcdir)/lib
 DVIS = automake.dvi
 PDFS = automake.pdf
 PSS = automake.ps
 HTMLS = automake.html
-TEXINFOS = automake.texi
 TEXI2DVI = texi2dvi
 TEXI2PDF = $(TEXI2DVI) --pdf --batch
 MAKEINFOHTML = $(MAKEINFO) --html
Index: lib/am/texibuild.am
===================================================================
RCS file: /sources/automake/automake/lib/am/texibuild.am,v
retrieving revision 1.27
diff -u -p -r1.27 texibuild.am
--- lib/am/texibuild.am 7 Aug 2005 08:30:30 -0000       1.27
+++ lib/am/texibuild.am 12 Mar 2007 17:35:10 -0000
@@ -60,8 +60,6 @@
        fi; \
        rm -rf $$backupdir; exit $$rc
 
-INFO_DEPS += %DEST_INFO_PREFIX%%DEST_SUFFIX%
-
 ?GENERIC?%SOURCE_SUFFIX%.dvi:
 ?!GENERIC?%DEST_PREFIX%.dvi: %SOURCE% %DEPS% %DIRSTAMP%
        TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
Index: tests/Makefile.am
===================================================================
RCS file: /sources/automake/automake/tests/Makefile.am,v
retrieving revision 1.617
diff -u -p -r1.617 Makefile.am
--- tests/Makefile.am   16 Oct 2006 05:24:17 -0000      1.617
+++ tests/Makefile.am   12 Mar 2007 17:35:10 -0000
@@ -152,6 +152,7 @@ condd.test \
 condhook.test \
 condinc.test \
 condinc2.test \
+condinfo.test \
 condlib.test \
 condman.test \
 condman2.test \
Index: tests/Makefile.in
===================================================================
RCS file: /sources/automake/automake/tests/Makefile.in,v
retrieving revision 1.805
diff -u -p -r1.805 Makefile.in
--- tests/Makefile.in   16 Oct 2006 05:24:17 -0000      1.805
+++ tests/Makefile.in   12 Mar 2007 17:35:10 -0000
@@ -285,6 +285,7 @@ condd.test \
 condhook.test \
 condinc.test \
 condinc2.test \
+condinfo.test \
 condlib.test \
 condman.test \
 condman2.test \
Index: tests/condinfo.test
===================================================================
RCS file: tests/condinfo.test
diff -N tests/condinfo.test
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ tests/condinfo.test 12 Mar 2007 17:35:10 -0000
@@ -0,0 +1,79 @@
+#! /bin/sh
+# Copyright (C) 2007  Free Software Foundation, Inc.
+#
+# This file is part of GNU Automake.
+#
+# GNU Automake is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# GNU Automake is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Automake; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+# Test conditional info_TEXINFOS.
+. ./defs || exit 1
+
+cat > configure.in << 'END'
+AC_INIT(Makefile.am)
+AM_INIT_AUTOMAKE(foo,0.0)
+AC_PROG_CC
+AM_CONDITIONAL(NO,[test x = y])
+AM_CONDITIONAL(YES,[test x = x])
+MAKEINFO=makeinfo
+AC_SUBST(MAKEINFO)
+AC_OUTPUT(Makefile)
+END
+
+cat > Makefile.am << 'END'
+info_TEXINFOS =
+if YES
+info_TEXINFOS += baz.texi
+endif
+if NO
+info_TEXINFOS += foo.texi
+endif
+if YES
+info_TEXINFOS += bar.texi
+endif
+if NO
+info_TEXINFOS += absent.texi
+endif
+END
+
+echo @setfilename foo.info > foo.texi
+echo This should not be generated. >> foo.texi
+
+echo @setfilename bar.info > bar.texi
+echo This should be generated. >> bar.texi
+
+echo @setfilename baz.info > baz.texi
+echo This should also be generated. >> baz.texi
+
+echo @setfilename absent.info > absent.texi
+echo This will be removed. >> absent.texi
+
+: > texinfo.tex
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+./configure
+$MAKE
+
+rm absent.texi
+
+$MAKE info
+if test -f foo.info; then exit 1; else :; fi
+test -f bar.info && rm -f bar.info
+test -f baz.info && rm -f baz.info
+
+$MAKE bar.info
+$MAKE baz.info




reply via email to

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