diff options
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | lib/am/java.am | 4 | ||||
-rw-r--r-- | lib/am/libs.am | 6 | ||||
-rw-r--r-- | lib/am/lisp.am | 8 | ||||
-rw-r--r-- | lib/am/ltlib.am | 6 | ||||
-rw-r--r-- | lib/am/progs.am | 6 | ||||
-rw-r--r-- | tests/Makefile.am | 4 | ||||
-rw-r--r-- | tests/Makefile.in | 4 | ||||
-rwxr-xr-x | tests/instfail-info.test | 66 | ||||
-rwxr-xr-x | tests/instfail-java.test | 66 | ||||
-rwxr-xr-x | tests/instfail-libtool.test | 83 | ||||
-rwxr-xr-x | tests/instfail.test | 97 |
12 files changed, 351 insertions, 16 deletions
@@ -1,7 +1,22 @@ 2008-09-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> - Exit upon `install' failure, part one. + Fail upon install or ranlib failure, part two. + * lib/am/java.am (install-%DIR%JAVA): Fail upon install failure. + * lib/am/lisp.am (install-%DIR%LISP): Likewise. + * lib/am/ltlib.am (install-%DIR%LTLIBRARIES): Likewise. + * lib/am/libs.am (install-%DIR%LIBRARIES): Likewise, for + `install' as well as `ranlib'. + * lib/am/progs.am (install-%DIR%PROGRAMS): If `install' fails, + return its exit failure, not 1. + * tests/instfail.test: New test, for PROGRAMS (without libtool), + LIBRARIES, including nobase variants. + * tests/instfail-info.test: Likewise, for TEXINFOS. + * tests/instfail-java.test: Likewise, for JAVA. + * tests/instfail-libtool.test: Likewise, for PROGRAMS (with + libtool) and LTLIBRARIES. + * tests/Makefile.am: Adjust. + Exit upon `install' failure, part one. * lib/am/data.am (install-%DIR%%PRIMARY%): Exit if any install command fails. * lib/am/python.am (install-%DIR%PYTHON): Likewise. diff --git a/lib/am/java.am b/lib/am/java.am index 1031688eb..98a1fcf36 100644 --- a/lib/am/java.am +++ b/lib/am/java.am @@ -1,5 +1,5 @@ ## automake - create Makefile.in from Makefile.am -## Copyright (C) 1998, 1999, 2001, 2003, 2004, 2006 Free Software +## Copyright (C) 1998, 1999, 2001, 2003, 2004, 2006, 2008 Free Software ## Foundation, Inc. ## This program is free software; you can redistribute it and/or modify @@ -52,7 +52,7 @@ install-%DIR%JAVA: class%DIR%.stamp ## directory. This is not optimal, but will have to do for now. @test -z "$(%DIR%_JAVA)" || for p in *.class; do \ echo " $(INSTALL_DATA) '$$p' '$(DESTDIR)$(%NDIR%dir)/$$p'"; \ - $(INSTALL_DATA) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$p"; \ + $(INSTALL_DATA) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$p" || exit $$?; \ done endif %?INSTALL% diff --git a/lib/am/libs.am b/lib/am/libs.am index 18d96421a..6cd0988d8 100644 --- a/lib/am/libs.am +++ b/lib/am/libs.am @@ -40,7 +40,7 @@ if %?BASE% done; \ test -z "$$list2" || { \ echo " $(%DIR%LIBRARIES_INSTALL) $$list2 '$(DESTDIR)$(%NDIR%dir)'"; \ - $(%DIR%LIBRARIES_INSTALL) $$list2 "$(DESTDIR)$(%NDIR%dir)"; } + $(%DIR%LIBRARIES_INSTALL) $$list2 "$(DESTDIR)$(%NDIR%dir)" || exit $$?; } else !%?BASE% ## Funny invocation because Makefile variable can be empty, leading to ## a syntax error in sh. @@ -53,7 +53,7 @@ else !%?BASE% echo "$(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir"; }; \ echo " $(%DIR%%PRIMARY%_INSTALL) $$xfiles '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \ - $(%DIR%%PRIMARY%_INSTALL) $$xfiles "$(DESTDIR)$(%NDIR%dir)/$$dir"; }; \ + $(%DIR%%PRIMARY%_INSTALL) $$xfiles "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; }; \ done endif !%?BASE% ## We do two loops here so that $(POST_INSTALL) can be empty. If we @@ -67,7 +67,7 @@ endif !%?BASE% %BASE?$(am__strip_dir):f=$$p;% \ ## Must ranlib after installing because mod time changes. echo " $(RANLIB) '$(DESTDIR)$(%NDIR%dir)/$$f'"; \ - $(RANLIB) "$(DESTDIR)$(%NDIR%dir)/$$f"; \ + $(RANLIB) "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \ else :; fi; \ done endif %?INSTALL% diff --git a/lib/am/lisp.am b/lib/am/lisp.am index cdc086107..a7759d782 100644 --- a/lib/am/lisp.am +++ b/lib/am/lisp.am @@ -1,6 +1,6 @@ ## automake - create Makefile.in from Makefile.am -## Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -## Free Software Foundation, Inc. +## Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +## 2007, 2008 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 @@ -95,11 +95,11 @@ install-%DIR%LISP: $(%DIR%_LISP) $(ELCFILES) if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ %BASE?$(am__strip_dir):$(am__vpath_adj)% \ echo " $(%DIR%LISP_INSTALL) '$$d$$p' '$(DESTDIR)$(%NDIR%dir)/$$f'"; \ - $(%DIR%LISP_INSTALL) "$$d$$p" "$(DESTDIR)$(%NDIR%dir)/$$f"; \ + $(%DIR%LISP_INSTALL) "$$d$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \ ## Only install .elc file if it exists. if test -f $${p}c; then \ echo " $(%DIR%LISP_INSTALL) '$${p}c' '$(DESTDIR)$(%NDIR%dir)/$${f}c'"; \ - $(%DIR%LISP_INSTALL) "$${p}c" "$(DESTDIR)$(%NDIR%dir)/$${f}c"; \ + $(%DIR%LISP_INSTALL) "$${p}c" "$(DESTDIR)$(%NDIR%dir)/$${f}c" || exit $$?; \ else : ; fi; \ done; \ else : ; fi diff --git a/lib/am/ltlib.am b/lib/am/ltlib.am index e114faf8a..3637ea05d 100644 --- a/lib/am/ltlib.am +++ b/lib/am/ltlib.am @@ -1,6 +1,6 @@ ## automake - create Makefile.in from Makefile.am ## Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2003, 2004, -## 2005, 2006, 2007 Free Software Foundation, Inc. +## 2005, 2006, 2007, 2008 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 @@ -43,9 +43,9 @@ install-%DIR%LTLIBRARIES: $(%DIR%_LTLIBRARIES) ## Use INSTALL and not INSTALL_DATA because libtool knows the right ## permissions to use. ?LIBTOOL? echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(%NDIR%dir)/$$f'"; \ -?LIBTOOL? $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f"; \ +?LIBTOOL? $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \ ?!LIBTOOL? echo " $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(%NDIR%dir)/$$f'"; \ -?!LIBTOOL? $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f"; \ +?!LIBTOOL? $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \ else :; fi; \ done endif %?INSTALL% diff --git a/lib/am/progs.am b/lib/am/progs.am index e8cdaea01..83a8f1b3c 100644 --- a/lib/am/progs.am +++ b/lib/am/progs.am @@ -1,6 +1,6 @@ ## automake - create Makefile.in from Makefile.am ## Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2003, 2004, -## 2006, 2007 Free Software Foundation, Inc. +## 2006, 2007, 2008 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 @@ -47,9 +47,9 @@ install-%DIR%PROGRAMS: $(%DIR%_PROGRAMS) ## lossage if the install program doesn't have a name that libtool ## expects. ?LIBTOOL? echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%PROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(%NDIR%dir)/$$f'"; \ -?LIBTOOL? $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%PROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit 1; \ +?LIBTOOL? $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%PROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \ ?!LIBTOOL? echo " $(INSTALL_PROGRAM_ENV) $(%DIR%PROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(%NDIR%dir)/$$f'"; \ -?!LIBTOOL? $(INSTALL_PROGRAM_ENV) $(%DIR%PROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit 1; \ +?!LIBTOOL? $(INSTALL_PROGRAM_ENV) $(%DIR%PROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \ else :; fi; \ done endif %?INSTALL% diff --git a/tests/Makefile.am b/tests/Makefile.am index 54ac671b9..7a6b2865a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -303,6 +303,10 @@ instsh3.test \ instdat.test \ instdat2.test \ instexec.test \ +instfail.test \ +instfail-info.test \ +instfail-java.test \ +instfail-libtool.test \ insthook.test \ instman.test \ instman2.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 9dca1ae21..914ebf84f 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -454,6 +454,10 @@ instsh3.test \ instdat.test \ instdat2.test \ instexec.test \ +instfail.test \ +instfail-info.test \ +instfail-java.test \ +instfail-libtool.test \ insthook.test \ instman.test \ instman2.test \ diff --git a/tests/instfail-info.test b/tests/instfail-info.test new file mode 100755 index 000000000..ba2b5b60a --- /dev/null +++ b/tests/instfail-info.test @@ -0,0 +1,66 @@ +#! /bin/sh +# Copyright (C) 2008 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 +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + +# The install rule should honor failures of the install program. +# Some of these are already caught by instmany.test. + +# This test has a few sister tests, for java, info, libtool. + + +# non-root should catch 'chmod a-r'-challenged file systems. +required='non-root makeinfo' +. ./defs || Exit 1 + +set -e + +cat >>configure.in <<END +AC_OUTPUT +END + +cat >Makefile.am <<'END' +info_TEXINFOS = info1.texi info2.texi info3.texi +END + +for n in 1 2 3; do + cat >info$n.texi <<END +\input texinfo +@setfilename info$n.info +@settitle main +@node Top +Hello walls. +@bye +END +done + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +instdir=`pwd`/inst +./configure --prefix="$instdir" +$MAKE + +$MAKE install +$MAKE uninstall + +for file in info1.info +do + chmod a-r $file + $MAKE install-data && Exit 1 + chmod u+r $file +done + +: diff --git a/tests/instfail-java.test b/tests/instfail-java.test new file mode 100755 index 000000000..44b5971b4 --- /dev/null +++ b/tests/instfail-java.test @@ -0,0 +1,66 @@ +#! /bin/sh +# Copyright (C) 2008 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 +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + +# The install rule should honor failures of the install program. +# Some of these are already caught by instmany.test. + +# This is the java sister test of instfail.test. + + +# non-root should catch 'chmod a-r'-challenged file systems. +required='non-root' +. ./defs || Exit 1 + +set -e + +cat >>configure.in <<'END' +AC_CHECK_PROG([HAS_JAVAC], [javac], [:], [exit]) +($HAS_JAVAC 77); $HAS_JAVAC 77 +AC_OUTPUT +END + +cat >Makefile.am <<'END' +javadir = $(datadir)/java +java_JAVA = java1.java java2.java java3.java +END + +for n in 1 2 3; do + cat >java$n.java <<END +class java$n +{ +} +END +done + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +instdir=`pwd`/inst +./configure --prefix="$instdir" +$MAKE + +$MAKE install +$MAKE uninstall + +for file in java1.class +do + chmod a-r $file + $MAKE install-data && Exit 1 + chmod u+r $file +done + +: diff --git a/tests/instfail-libtool.test b/tests/instfail-libtool.test new file mode 100755 index 000000000..1b6bd2b8f --- /dev/null +++ b/tests/instfail-libtool.test @@ -0,0 +1,83 @@ +#! /bin/sh +# Copyright (C) 2008 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 +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + +# The install rule should honor failures of the install program. +# Some of these are already caught by instmany.test. + +# This is the libtool sister test of instfail.test + + +# non-root should catch 'chmod a-r'-challenged file systems. +required='non-root libtool libtoolize' +. ./defs || Exit 1 + +set -e + +cat >>configure.in <<END +AC_PROG_LIBTOOL +AC_OUTPUT +END + +cat >Makefile.am <<'END' +bin_PROGRAMS = prog1 prog2 prog3 +nobase_bin_PROGRAMS = progn1 progn2 progn3 +lib_LTLIBRARIES = liblt1.la liblt2.la liblt3.la +nobase_lib_LTLIBRARIES = libltn1.la libltn2.la libltn3.la +unreadable-prog: + chmod a-r prog1$(EXEEXT) +readable-prog: + chmod a+r prog1$(EXEEXT) +unreadable-progn: + chmod a-r progn1$(EXEEXT) +readable-progn: + chmod a+r progn1$(EXEEXT) +END + +for n in 1 2 3; do + echo "int main () { return 0; }" > prog$n.c + echo "int main () { return 0; }" > progn$n.c + echo "int foolt$n () { return 0; }" > liblt$n.c + echo "int fooltn$n () { return 0; }" > libltn$n.c +done + +libtoolize +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +instdir=`pwd`/inst +./configure --prefix="$instdir" +$MAKE + +$MAKE install +$MAKE uninstall + +$MAKE unreadable-prog +$MAKE install-exec && Exit 1 +$MAKE readable-prog + +$MAKE unreadable-progn +$MAKE install-exec && Exit 1 +$MAKE readable-progn + +for file in liblt1.la libltn1.la +do + chmod a-r $file + $MAKE install-exec && Exit 1 + chmod u+r $file +done + +: diff --git a/tests/instfail.test b/tests/instfail.test new file mode 100755 index 000000000..a09ca1759 --- /dev/null +++ b/tests/instfail.test @@ -0,0 +1,97 @@ +#! /bin/sh +# Copyright (C) 2008 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 +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + +# The install rule should honor failures of the install program. +# Some of these are already caught by instmany.test. + +# This test has a few sister tests, for java, info, libtool. + + +# non-root should catch 'chmod a-r'-challenged file systems. +required=non-root +. ./defs || Exit 1 + +set -e + +cat >>configure.in <<END +AC_PROG_CC +AC_PROG_RANLIB +AM_PATH_LISPDIR +AC_OUTPUT +END + +cat >Makefile.am <<'END' +bin_PROGRAMS = prog1 prog2 prog3 +nobase_bin_PROGRAMS = progn1 progn2 progn3 +lisp_LISP = lisp1.el lisp2.el lisp3.el +nobase_lisp_LISP = lispn1.el lispn2.el lispn3.el +lib_LIBRARIES = lib1.a lib2.a lib3.a +nobase_lib_LIBRARIES = libn1.a libn2.a libn3.a +unreadable-prog: + chmod a-r prog1$(EXEEXT) +readable-prog: + chmod a+r prog1$(EXEEXT) +unreadable-progn: + chmod a-r progn1$(EXEEXT) +readable-progn: + chmod a+r progn1$(EXEEXT) +END + +for n in 1 2 3; do + echo "int main () { return 0; }" > prog$n.c + echo "int main () { return 0; }" > progn$n.c + echo "int foo$n () { return 0; }" > lib$n.c + echo "int foon$n () { return 0; }" > libn$n.c + echo >lisp$n.el + echo >lispn$n.el +done + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +instdir=`pwd`/inst +./configure --prefix="$instdir" +$MAKE + +$MAKE install +$MAKE uninstall + +$MAKE unreadable-prog +$MAKE install-exec && Exit 1 +$MAKE readable-prog + +$MAKE unreadable-progn +$MAKE install-exec && Exit 1 +$MAKE readable-progn + +for file in lib1.a libn1.a +do + chmod a-r $file + $MAKE install-exec && Exit 1 + chmod u+r $file +done + +if grep "^EMACS = no" Makefile; then :; else + for file in lisp1.el lisp1.elc + do + chmod a-r $file + $MAKE install-data && Exit 1 + chmod u+r $file + done +fi + +: |