]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
Faster install for libtool outputs.
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Sat, 13 Sep 2008 07:32:13 +0000 (09:32 +0200)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Sat, 13 Sep 2008 07:32:13 +0000 (09:32 +0200)
* lib/am/ltlib.am (install-%DIR%LTLIBRARIES): Invoke `libtool
--mode=install' with multiple libraries at once.
(%DIR%LTLIBRARIES_INSTALL): No need to use install_sh any more.
* lib/am/progs.am (install-%DIR%PROGRAMS): Likewise, remove much
of the libtool special-casing by invoking it for multiple
programs at once.

Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
ChangeLog
lib/am/ltlib.am
lib/am/progs.am

index 6cdaa973c4e0d3312b3ca5a388d853132723fe07..8dfc89318f285177ffeb93a281d5d0936cf7a584 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-09-13  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+       Faster install for libtool outputs.
+       * lib/am/ltlib.am (install-%DIR%LTLIBRARIES): Invoke `libtool
+       --mode=install' with multiple libraries at once.
+       (%DIR%LTLIBRARIES_INSTALL): No need to use install_sh any more.
+       * lib/am/progs.am (install-%DIR%PROGRAMS): Likewise, remove much
+       of the libtool special-casing by invoking it for multiple
+       programs at once.
+
 2008-09-07  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        Fast install and uninstall for SCRIPTS.
index 3637ea05dcaf7d38ef7faebbbc711278de224ca2..7afc657af9e23946d8e612760b379cabc6615b7c 100644 (file)
@@ -25,29 +25,50 @@ endif %?INSTALL%
 
 if %?INSTALL%
 am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
-%DIR%LTLIBRARIES_INSTALL = %BASE?$(INSTALL):$(install_sh) -c%
+%DIR%LTLIBRARIES_INSTALL = $(INSTALL)
 .PHONY install-%EXEC?exec:data%-am: install-%DIR%LTLIBRARIES
 install-%DIR%LTLIBRARIES: $(%DIR%_LTLIBRARIES)
        @$(NORMAL_INSTALL)
        test -z "$(%NDIR%dir)" || $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)"
+if %?BASE%
 ## Funny invocation because Makefile variable can be empty, leading to
 ## a syntax error in sh.
-       @list='$(%DIR%_LTLIBRARIES)'; for p in $$list; do \
+       @list='$(%DIR%_LTLIBRARIES)'; list2=; for p in $$list; do \
          if test -f $$p; then \
-## Compute basename of source file.  Unless this is a nobase_ target, we
-## want to install 'python/foo.py' as '$(DESTDIR)$(%NDIR%dir)/foo.yo',
-## not '$(DESTDIR)$(%NDIR%dir)/python/foo.yo'.
-           %BASE?$(am__strip_dir):f=$$p;% \
+           list2="$$list2 $$p"; \
+         else :; fi; \
+       done; \
+       test -z "$$list2" || { \
 ## 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) '$$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" || exit $$?; \
-         else :; fi; \
+?LIBTOOL?        echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(%NDIR%dir)'"; \
+?LIBTOOL?        $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(%NDIR%dir)"; \
+?!LIBTOOL?       echo " $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$list '$(DESTDIR)$(%NDIR%dir)'"; \
+?!LIBTOOL?       $(%DIR%LTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$list "$(DESTDIR)$(%NDIR%dir)"; \
+       }
+else !%?BASE%
+       @list='$(%DIR%_LTLIBRARIES)'; $(am__nobase_list) | \
+       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 "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 $$?; \
+         }; \
        done
+endif !%?BASE%
 endif %?INSTALL%
 
 
index 2a7778caa1312eab13b474d07735476928bc9a2e..28505cf84573c506e6066f68a5ff7940007517a9 100644 (file)
@@ -46,36 +46,30 @@ install-%DIR%PROGRAMS: $(%DIR%_PROGRAMS)
 ?!BASE?            -e 's|[^/]*$$||; s|^$$|.|' \
            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
        sed 'N;N;N;s,\n, ,g' | \
-## Note that we explicitly set the libtool mode.  This avoids any
-## lossage if the install program doesn't have a name that libtool
-## expects.
-?LIBTOOL?      while read p pbase dir f; do \
-?LIBTOOL??!BASE?         if test "$$dir" != .; then f=$$dir/$$f; \
-?LIBTOOL??!BASE?           echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
-?LIBTOOL??!BASE?           $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
-?LIBTOOL??!BASE?         else :; fi; \
-?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 $$?; \
-?LIBTOOL?      done
 ## The following awk script turns that into one line containing directories
 ## and then lines of `target_name_or_directory sources...'.
-?!LIBTOOL?     $(AWK) 'BEGIN { files["."] = ""; dirs["."] = "" } { \
-?!LIBTOOL?       if ($$2 == $$4) tgt = $$3; else tgt = $$3 "/" $$4; \
-?!LIBTOOL?       files[tgt] = files[tgt] " " $$1; dirs[$$3] = 1 } \
-?!LIBTOOL?       END { d=""; for (dir in dirs) d = d " " dir; print d; \
-?!LIBTOOL?             for (dir in files) print dir, files[dir] }' | { \
-?!LIBTOOL?     read dirs; \
-?!LIBTOOL??!BASE?      for dir in $$dirs; do test . = $$dir || { \
-?!LIBTOOL??!BASE?        echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
-?!LIBTOOL??!BASE?        $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
-?!LIBTOOL??!BASE?      }; done; \
-?!LIBTOOL?     while read dir files; do \
-?!LIBTOOL?       if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-?!LIBTOOL?       test -z "$$files" || { \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = "" } { \
+         if ($$2 == $$4) tgt = $$3; else tgt = $$3 "/" $$4; \
+         files[tgt] = files[tgt] " " $$1; dirs[$$3] = 1 } \
+         END { d=""; for (dir in dirs) d = d " " dir; print d; \
+               for (dir in files) print dir, files[dir] }' | { \
+       read dirs; \
+?!BASE?        for dir in $$dirs; do test . = $$dir || { \
+?!BASE?          echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)/$$dir'"; \
+?!BASE?          $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)/$$dir" || exit $$?; \
+?!BASE?        }; done; \
+       while read dir files; do \
+         if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+         test -z "$$files" || { \
 ?!LIBTOOL?         echo " $(INSTALL_PROGRAM_ENV) $(%DIR%PROGRAMS_INSTALL) $$files '$(DESTDIR)$(%NDIR%dir)$$dir'"; \
 ?!LIBTOOL?         $(INSTALL_PROGRAM_ENV) $(%DIR%PROGRAMS_INSTALL) $$files "$(DESTDIR)$(%NDIR%dir)$$dir" || exit $$?; \
-?!LIBTOOL?       }; \
-?!LIBTOOL?     done; }
+## Note that we explicitly set the libtool mode.  This avoids any
+## 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) $$files '$(DESTDIR)$(%NDIR%dir)$$dir'"; \
+?LIBTOOL?        $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(%DIR%PROGRAMS_INSTALL) $$files "$(DESTDIR)$(%NDIR%dir)$$dir" || exit $$?; \
+         }; \
+       done; }
 endif %?INSTALL%