]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
Do not reorder nobase ltlib installation.
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Sat, 20 Sep 2008 10:30:48 +0000 (12:30 +0200)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Sat, 20 Sep 2008 10:35:48 +0000 (12:35 +0200)
This patch changes back the order of installation of nobase
LTLIBRARIES to that in which files are listed in the variables.
It does not fix the issue of strict dependency ordering, as
implied by *_LIBADD, but as before allows to steer the order by
listing the libraries in nobase_*_LTLIBRARIES appropriately.

As an advantage over the state of 1.10, multiple consecutive
nobase libraries to be installed in the same directory are
passed to libtool in one invocation.

* lib/am/ltlib.am (install-%DIR%LTLIBRARIES) [!%?BASE%]: Do not
reorder libraries upon installation.  Remove spurious empty
line.
* tests/ltorder.test: New test.
* tests/Makefile.am: Update.

Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
ChangeLog
lib/am/ltlib.am
tests/Makefile.am
tests/Makefile.in
tests/ltorder.test [new file with mode: 0755]

index ba25fcdca1df0e47f57b1747767cf866abd2dc09..364b3fd52c36b6bb6c058ca55cbf5fe76f915910 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2008-09-20  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
+       Do not reorder nobase ltlib installation.
+       This patch changes back the order of installation of nobase
+       LTLIBRARIES to that in which files are listed in the variables.
+       It does not fix the issue of strict dependency ordering, as
+       implied by *_LIBADD, but as before allows to steer the order by
+       listing the libraries in nobase_*_LTLIBRARIES appropriately.
+       As an advantage over the state of 1.10, multiple consecutive
+       nobase libraries to be installed in the same directory are
+       passed to libtool in one invocation.
+       * lib/am/ltlib.am (install-%DIR%LTLIBRARIES) [!%?BASE%]: Do not
+       reorder libraries upon installation.  Remove spurious empty
+       line.
+       * tests/ltorder.test: New test.
+       * tests/Makefile.am: Update.
+
        Fix -rpath arguments for nobase_*_LTLIBRARIES.
        * automake.in (handle_ltlibraries): New hash %instsubdirs to
        track the dirname of nobase ltlibraries, and tack it onto the
index 7afc657af9e23946d8e612760b379cabc6615b7c..c6d731de3d0a46afa63d86ca509e4525fdcbb903 100644 (file)
@@ -49,23 +49,26 @@ if %?BASE%
 ?!LIBTOOL?       $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$list "$(DESTDIR)$(%NDIR%dir)"; \
        }
 else !%?BASE%
-       @list='$(%DIR%_LTLIBRARIES)'; $(am__nobase_list) | \
+       @list='$(%DIR%_LTLIBRARIES)'; for p in $$list; do \
+         if test -f "$$p"; then echo "$$p $$p"; else :; fi; done | \
+       sed '/ .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+       $(AWK) 'BEGIN { cur = "." } \
+         { if ($$2 == cur) { files = files " " $$1 } \
+           else { print cur, files; files = $$1; cur = $$2 } } \
+         END { print cur, files }' | \
        while read dir files; do \
-         xfiles=; for p in $$files; do \
-           if test -f "$$p"; then xfiles="$$xfiles $$p"; else :; fi; done; \
-         test -z "$$xfiles" || { \
+         test -z "$$files" || { \
            test "x$$dir" = x. || { \
              echo "$(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
              $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir"; }; \
-
 ## Note that we explicitly set the libtool mode.  This avoids any lossage
 ## if the program doesn't have a name that libtool expects.
 ## 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) $$xfiles '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
-?LIBTOOL?          $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$xfiles "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
-?!LIBTOOL?         echo " $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$xfiles '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
-?!LIBTOOL?         $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$xfiles "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
+?LIBTOOL?          echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$files '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+?LIBTOOL?          $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$files "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
+?!LIBTOOL?         echo " $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$files '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+?!LIBTOOL?         $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$files "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
          }; \
        done
 endif !%?BASE%
index 4445c4036f2cbdfb196b19bc0e3f06cf3d301e22..f3a0880e463b0617276978a5ec183e291796fdc2 100644 (file)
@@ -379,6 +379,7 @@ ltdeps.test \
 ltinstloc.test \
 ltlibobjs.test \
 ltlibsrc.test \
+ltorder.test \
 lzma.test \
 maintclean.test \
 make.test \
index 4cd51e78553212e6c37ca83f26801cad0a0ee7f3..8d416b0e3ec452f5c1a6bc8ba3275c4d872ce071 100644 (file)
@@ -531,6 +531,7 @@ ltdeps.test \
 ltinstloc.test \
 ltlibobjs.test \
 ltlibsrc.test \
+ltorder.test \
 lzma.test \
 maintclean.test \
 make.test \
diff --git a/tests/ltorder.test b/tests/ltorder.test
new file mode 100755 (executable)
index 0000000..9994008
--- /dev/null
@@ -0,0 +1,59 @@
+#!/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/>.
+
+# Test for correct installation order of nobase libtool libraries.
+
+required='libtoolize'
+. ./defs || Exit 1
+
+set -e
+
+cat >>configure.in <<'END'
+AC_PROG_CC
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat >Makefile.am <<'END'
+nobase_lib_LTLIBRARIES = liba1.la sub/liba2.la sub/liba3.la liba4.la liba5.la
+sub_liba2_la_LIBADD = liba1.la
+sub_liba3_la_LIBADD = sub/liba2.la
+liba4_la_LIBADD = sub/liba3.la
+liba5_la_LIBADD = liba4.la
+END
+
+mkdir sub
+echo 'int a1 () { return 1; }' >liba1.c
+echo 'extern int a1 (); int a2 () { return a1 (); }' >sub/liba2.c
+echo 'extern int a2 (); int a3 () { return a2 (); }' >sub/liba3.c
+echo 'extern int a3 (); int a4 () { return a3 (); }' >liba4.c
+echo 'extern int a4 (); int a5 () { return a4 (); }' >liba5.c
+
+libtoolize
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+
+./configure "--prefix=`pwd`/inst"
+
+$MAKE
+$MAKE install 2>stderr || { cat stderr >&2; Exit 1; }
+cat stderr >&2
+grep 'has not been installed' stderr && Exit 1
+
+$MAKE uninstall
+test `find inst -type f -print | wc -l` -eq 0
+: