diff options
author | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> | 2008-09-07 09:59:52 +0200 |
---|---|---|
committer | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> | 2008-09-07 10:13:35 +0200 |
commit | 2cfd4806452c2b206b0d77c57ec6129bf2fc0118 (patch) | |
tree | b593ce59adf6492688da302113e5bf3744f7c449 /lib/am/mans.am | |
parent | 7c02797d0d5985627fdb50f15a15b6076f8f8843 (diff) | |
download | automake-2cfd4806452c2b206b0d77c57ec6129bf2fc0118.tar.gz |
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 <Ralf.Wildenhues@gmx.de>
Diffstat (limited to 'lib/am/mans.am')
-rw-r--r-- | lib/am/mans.am | 159 |
1 files changed, 73 insertions, 86 deletions
diff --git a/lib/am/mans.am b/lib/am/mans.am index 338b43c51..803a89227 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% |