From e8ec58ac1815722b8c311ad2cc629e54e593019c Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Sat, 20 Sep 2008 12:30:48 +0200 Subject: [PATCH] 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. Signed-off-by: Ralf Wildenhues --- ChangeLog | 15 ++++++++++++ lib/am/ltlib.am | 21 ++++++++++------- tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/ltorder.test | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 9 deletions(-) create mode 100755 tests/ltorder.test diff --git a/ChangeLog b/ChangeLog index ba25fcdca..364b3fd52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,20 @@ 2008-09-20 Ralf Wildenhues + 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 diff --git a/lib/am/ltlib.am b/lib/am/ltlib.am index 7afc657af..c6d731de3 100644 --- a/lib/am/ltlib.am +++ b/lib/am/ltlib.am @@ -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% diff --git a/tests/Makefile.am b/tests/Makefile.am index 4445c4036..f3a0880e4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -379,6 +379,7 @@ ltdeps.test \ ltinstloc.test \ ltlibobjs.test \ ltlibsrc.test \ +ltorder.test \ lzma.test \ maintclean.test \ make.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 4cd51e785..8d416b0e3 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -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 index 000000000..999400806 --- /dev/null +++ b/tests/ltorder.test @@ -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 . + +# 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 +: -- 2.47.2