automake-commit
[Top][All Lists]
Advanced

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

[Automake-commit] [SCM] GNU Automake branch, master, updated. Release-1-


From: Ralf Wildenhues
Subject: [Automake-commit] [SCM] GNU Automake branch, master, updated. Release-1-10-175-g2cfd480
Date: Sun, 07 Sep 2008 08:33:56 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Automake".

http://git.sv.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=2cfd4806452c2b206b0d77c57ec6129bf2fc0118

The branch, master has been updated
       via  2cfd4806452c2b206b0d77c57ec6129bf2fc0118 (commit)
      from  7c02797d0d5985627fdb50f15a15b6076f8f8843 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2cfd4806452c2b206b0d77c57ec6129bf2fc0118
Author: Ralf Wildenhues <address@hidden>
Date:   Sun Sep 7 09:59:52 2008 +0200

    Reliable multi-file install for man pages.
    
    * lib/am/mans.am: Include inst-vars.am.
    (install-man%SECTION%): Gather lists of man pages to install,
    and install up to 40 of those that do not have to be renamed
    at once.  Fail if installation of any file fails.
    (uninstall-man%SECTION%): Rewrite to use fewer sed invocations.
    * doc/automake.texi (Man pages): Hint the user to the fast path.
    Indentation fix.
    * tests/instmany-mans.test: New test.
    * tests/Makefile.am: Update.
    
    Signed-off-by: Ralf Wildenhues <address@hidden>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   14 ++
 doc/automake.texi                                  |    5 +
 lib/am/mans.am                                     |  159 +++++++++-----------
 tests/Makefile.am                                  |    1 +
 tests/Makefile.in                                  |    1 +
 tests/{instmany-python.test => instmany-mans.test} |   44 ++++--
 6 files changed, 122 insertions(+), 102 deletions(-)
 copy tests/{instmany-python.test => instmany-mans.test} (71%)

diff --git a/ChangeLog b/ChangeLog
index 4266e4d..e5b4eb6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,18 @@
 2008-09-07  Ralf Wildenhues  <address@hidden>
+           Jim Meyering <address@hidden>
+
+       Reliable multi-file install for man pages.
+       * lib/am/mans.am: Include inst-vars.am.
+       (install-man%SECTION%): Gather lists of man pages to install,
+       and install up to 40 of those that do not have to be renamed
+       at once.  Fail if installation of any file fails.
+       (uninstall-man%SECTION%): Rewrite to use fewer sed invocations.
+       * doc/automake.texi (Man pages): Hint the user to the fast path.
+       Indentation fix.
+       * tests/instmany-mans.test: New test.
+       * tests/Makefile.am: Update.
+
+2008-09-07  Ralf Wildenhues  <address@hidden>
 
        Faster `make uninstall'; fast install for JAVA.
        * lib/am/inst-vars.am (am__nobase_strip_setup)
diff --git a/doc/automake.texi b/doc/automake.texi
index 0ea5780..263d1b6 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -7644,6 +7644,7 @@ For instance, consider this example:
 man1_MANS = rename.man thesame.1 alsothesame.1c
 @end example
 
address@hidden
 In this case, @file{rename.man} will be renamed to @file{rename.1} when
 installed, but the other files will keep their names.
 
@@ -7661,6 +7662,10 @@ not expend effort to keep the man pages up to date.  In 
these cases, the
 installed by default.  The user can still explicitly install them via
 @samp{make install-man}.
 
+For fast installation, with many files it is preferable to use
address@hidden@var{SECTION}_MANS} over @samp{man_MANS} as well as files that
+do not need to be renamed.
+
 Man pages are not currently considered to be source, because it is not
 uncommon for man pages to be automatically generated.  Therefore they
 are not automatically included in the distribution.  However, this can
diff --git a/lib/am/mans.am b/lib/am/mans.am
index 338b43c..803a892 100644
--- a/lib/am/mans.am
+++ b/lib/am/mans.am
@@ -15,6 +15,7 @@
 ## You should have received a copy of the GNU General Public License
 ## along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+include inst-vars.am
 man%SECTION%dir = $(mandir)/man%SECTION%
 
 ## ------------ ##
@@ -34,62 +35,69 @@ install-man%SECTION%: %DEPS%
 if %?NOTRANS_MANS%
 ## Handle MANS with notrans_ prefix
        @list='%NOTRANS_SECT_LIST%'; \
+       { for i in $$list; do echo "$$i"; done;  \
 ## Extract all items from notrans_man_MANS that should go in this section.
 ## This must be done dynamically to support conditionals.
-?HAVE_NOTRANS? l2='%NOTRANS_LIST%'; \
-?HAVE_NOTRANS? for i in $$l2; do \
-?HAVE_NOTRANS?   case "$$i" in \
-## Have to accept files like `foo.1c'.
-?HAVE_NOTRANS?     *.%SECTION%*) list="$$list $$i" ;; \
-?HAVE_NOTRANS?   esac; \
+?HAVE_NOTRANS? l2='%NOTRANS_LIST%'; for i in $$l2; do \
+## Accept files like `foo.1c'.
+?HAVE_NOTRANS?   case $$i in *.%SECTION%*) echo "$$i";; esac; \
 ?HAVE_NOTRANS? done; \
-       for i in $$list; do \
+## Extract basename of manpage, change the extension if needed.
+       } | while read p; do \
 ## Find the file.
-         if test -f $$i; then file=$$i; \
-         else file=$(srcdir)/$$i; fi; \
-## Change the extension if needed.
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           %SECTION%*) ;; \
-           *) ext='%SECTION%' ;; \
-         esac; \
-## Extract basename of man page and append extension.
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`.$$ext; \
-         echo " $(INSTALL_DATA) '$$file' 
'$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
-         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man%SECTION%dir)/$$inst"; \
-       done
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+## Extract the basename of the man page and change the extension if needed.
+       sed 'n;s,.*/,,;p;s,\.[^%SECTION%][0-9a-z]*$$,.%SECTION%,' | \
+       sed 'N;N;s,\n, ,g' | { \
+## We now have a list "sourcefile basename installed-name".
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' 
'$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man%SECTION%dir)/$$inst" || 
exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man%SECTION%dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man%SECTION%dir)" || exit $$?; 
}; \
+       done; }
 endif %?NOTRANS_MANS%
 if %?TRANS_MANS%
 ## Handle MANS without notrans_ prefix
        @list='%TRANS_SECT_LIST%'; \
-## Extract all items from man_MANS that should go in this section.
+       { for i in $$list; do echo "$$i"; done; \
+## Extract all items from notrans_man_MANS that should go in this section.
 ## This must be done dynamically to support conditionals.
-?HAVE_TRANS?   l2='%TRANS_LIST%'; \
-?HAVE_TRANS?   for i in $$l2; do \
-?HAVE_TRANS?     case "$$i" in \
-## Have to accept files like `foo.1c'.
-?HAVE_TRANS?       *.%SECTION%*) list="$$list $$i" ;; \
-?HAVE_TRANS?     esac; \
+?HAVE_TRANS?   l2='%TRANS_LIST%'; for i in $$l2; do \
+## Accept files like `foo.1c'.
+?HAVE_TRANS?     case $$i in *.%SECTION%*) echo "$$i";; esac; \
 ?HAVE_TRANS?   done; \
-       for i in $$list; do \
+## Extract basename of manpage, change the extension if needed.
+       } | while read p; do \
 ## Find the file.
-         if test -f $$i; then file=$$i; \
-         else file=$(srcdir)/$$i; fi; \
-## Change the extension if needed.
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           %SECTION%*) ;; \
-           *) ext='%SECTION%' ;; \
-         esac; \
-## Extract basename of man page and run it through the program rename
-## transform.
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`; \
-         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-         echo " $(INSTALL_DATA) '$$file' 
'$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
-         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man%SECTION%dir)/$$inst"; \
-       done
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+## Extract the basename of the man page and change the extension if needed.
+       sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^%SECTION%][0-9a-z]*$$,%SECTION%,;x' 
\
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+       sed 'N;N;s,\n, ,g' | { \
+## We now have a list "sourcefile basename installed-name".
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' 
'$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man%SECTION%dir)/$$inst" || 
exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man%SECTION%dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man%SECTION%dir)" || exit $$?; 
}; \
+       done; }
 endif %?TRANS_MANS%
 
 
@@ -97,7 +105,6 @@ endif %?TRANS_MANS%
 ## Uninstalling.  ##
 ## -------------- ##
 
-## This is just completely gross.
 .PHONY: uninstall-man
 ?INSTALL-MAN?uninstall-am: uninstall-man
 .PHONY uninstall-man: uninstall-man%SECTION%
@@ -106,54 +113,34 @@ uninstall-man%SECTION%:
 if %?NOTRANS_MANS%
 ## Handle MANS with notrans_ prefix
        @list='%NOTRANS_SECT_LIST%'; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
 ## Extract all items from notrans_man_MANS that should go in this section.
 ## This must be done dynamically to support conditionals.
-?HAVE_NOTRANS? l2='%NOTRANS_LIST%'; \
-?HAVE_NOTRANS? for i in $$l2; do \
-?HAVE_NOTRANS?   case "$$i" in \
-## Have to accept files like `foo.1c'.
-?HAVE_NOTRANS?     *.%SECTION%*) list="$$list $$i" ;; \
-?HAVE_NOTRANS?   esac; \
+?HAVE_NOTRANS? l2='%NOTRANS_LIST%'; for i in $$l2; do \
+## Accept files like `foo.1c'.
+?HAVE_NOTRANS?   case $$i in *.%SECTION%*) echo "$$i";; esac; \
 ?HAVE_NOTRANS? done; \
-       for i in $$list; do \
-## Change the extension if needed.
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           %SECTION%*) ;; \
-           *) ext='%SECTION%' ;; \
-         esac; \
-## Extract basename of man page and append extension.
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`.$$ext; \
-         echo " rm -f '$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
-         rm -f "$(DESTDIR)$(man%SECTION%dir)/$$inst"; \
-       done
+## Extract basename of manpage, change the extension if needed.
+       } | sed 's,.*/,,;s,\.[^%SECTION%][0-9a-z]*$$,.%SECTION%,'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(man%SECTION%dir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(man%SECTION%dir)" && rm -f $$files
 endif %?NOTRANS_MANS%
 if %?TRANS_MANS%
 ## Handle MANS without notrans_ prefix
        @list='%TRANS_SECT_LIST%'; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
 ## Extract all items from man_MANS that should go in this section.
 ## This must be done dynamically to support conditionals.
-?HAVE_TRANS?   l2='%TRANS_LIST%'; \
-?HAVE_TRANS?   for i in $$l2; do \
-?HAVE_TRANS?     case "$$i" in \
-## Have to accept files like `foo.1c'.
-?HAVE_TRANS?       *.%SECTION%*) list="$$list $$i" ;; \
-?HAVE_TRANS?     esac; \
+?HAVE_TRANS?   l2='%TRANS_LIST%'; for i in $$l2; do \
+## Accept files like `foo.1c'.
+?HAVE_TRANS?     case $$i in *.%SECTION%*) echo "$$i";; esac; \
 ?HAVE_TRANS?   done; \
-       for i in $$list; do \
-## Change the extension if needed.
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           %SECTION%*) ;; \
-           *) ext='%SECTION%' ;; \
-         esac; \
-## Extract basename of man page and run it through the program rename
-## transform.
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`; \
-         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-         echo " rm -f '$(DESTDIR)$(man%SECTION%dir)/$$inst'"; \
-         rm -f "$(DESTDIR)$(man%SECTION%dir)/$$inst"; \
-       done
+## Extract basename of manpage, run it through the program rename
+## transform, and change the extension if needed.
+       } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^%SECTION%][0-9a-z]*$$,%SECTION%,;x' 
\
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(man%SECTION%dir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(man%SECTION%dir)" && rm -f $$files
 endif %?TRANS_MANS%
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7a6b286..a9e995e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -311,6 +311,7 @@ insthook.test \
 instman.test \
 instman2.test \
 instmany.test \
+instmany-mans.test \
 instmany-python.test \
 instspc.test \
 interp.test \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 914ebf8..d5559b6 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -462,6 +462,7 @@ insthook.test \
 instman.test \
 instman2.test \
 instmany.test \
+instmany-mans.test \
 instmany-python.test \
 instspc.test \
 interp.test \
diff --git a/tests/instmany-python.test b/tests/instmany-mans.test
similarity index 71%
copy from tests/instmany-python.test
copy to tests/instmany-mans.test
index beace0c..3f331a6 100755
--- a/tests/instmany-python.test
+++ b/tests/instmany-mans.test
@@ -16,17 +16,23 @@
 
 # Installing many files should not exceed the command line length limit.
 
-# This is the python sister test of instmany.test, see there for details.
+# This is the mans sister test of instmany.test, see there for details.
 
-required='non-root python'
+required=non-root    # hope to catch 'chmod a-r'-challenged file systems.
 . ./defs || Exit 1
 
 set -e
 
+# In order to have a useful test on modern systems (which have a high
+# limit, if any), use a fake install program that errors out for more
+# than 2K characters in a command line.  The POSIX limit is 4096, but
+# that may include space taken up by the environment.
+
 limit=2500
 subdir=long_subdir_name_with_many_characters
 nfiles=81
 
+# Let's use `seq' if available, it's faster than the loop.
 list=`(seq 1 $nfiles) 2>/dev/null || {
   i=1
   while test $i -le $nfiles; do
@@ -67,7 +73,6 @@ END
 chmod +x rm
 
 cat >>configure.in <<END
-AM_PATH_PYTHON
 AC_CONFIG_FILES([myinstall], [chmod +x ./myinstall])
 AC_CONFIG_FILES([$subdir/Makefile])
 AC_OUTPUT
@@ -81,17 +86,23 @@ mkdir $subdir
 cd $subdir
 
 cat >Makefile.am <<'END'
-python_PYTHON =
-nobase_python_PYTHON =
+man_MANS =
+man3_MANS =
+notrans_man_MANS =
+notrans_man3_MANS =
 END
 
 for n in $list; do
   cat >>Makefile.am <<END
-python_PYTHON += python$n.py
-nobase_python_PYTHON += npython$n.py
+man_MANS += page$n.1
+man3_MANS += page$n.man
+notrans_man_MANS += npage$n.1
+notrans_man3_MANS += npage$n.man
 END
-  echo >python$n.py
-  echo >npython$n.py
+  echo >page$n.1
+  echo >page$n.man
+  echo >npage$n.1
+  echo >npage$n.man
 done
 
 cd ..
@@ -118,18 +129,19 @@ srcdir=../../$subdir
 
 # Ensure 'make install' fails when 'install' fails.
 
-for file in python3.py python$nfiles.py
-do
+# We cheat here, for efficiency, knowing the internal rule names.
+# For correctness, one should `$MAKE install' here always, or at
+# least use install-exec or install-data.
+
+for file in page3.1 page$nfiles.1 npage3.1 npage$nfiles.1; do
   chmod a-r $srcdir/$file
-  $MAKE install && Exit 1
+  $MAKE install-man1 && Exit 1
   chmod u+r $srcdir/$file
 done
 
-for file in npython3.py npython$nfiles.py
-do
+for file in page3.man page$nfiles.man npage3.man npage$nfiles.man; do
   chmod a-r $srcdir/$file
-  $MAKE install && Exit 1
+  $MAKE install-man3 && Exit 1
   chmod u+r $srcdir/$file
 done
-
 :


hooks/post-receive
--
GNU Automake




reply via email to

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