To: vim_dev@googlegroups.com Subject: Patch 7.3.050 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.3.050 Problem: The link script is clumsy. Solution: Use the --as-needed linker option if available. (Kirill A. Shutemov) Files: src/Makefile, src/auto/configure, src/config.mk.in, src/configure.in, src/link.sh *** ../vim-7.3.049/src/Makefile 2010-10-27 16:49:41.000000000 +0200 --- src/Makefile 2010-11-03 22:26:45.000000000 +0100 *************** *** 1700,1706 **** $(CCC) version.c -o objects/version.o @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \ -o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \ ! MAKE="$(MAKE)" sh $(srcdir)/link.sh xxd/xxd$(EXEEXT): xxd/xxd.c cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \ --- 1700,1707 ---- $(CCC) version.c -o objects/version.o @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \ -o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \ ! MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \ ! sh $(srcdir)/link.sh xxd/xxd$(EXEEXT): xxd/xxd.c cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \ *** ../vim-7.3.049/src/auto/configure 2010-11-03 21:59:23.000000000 +0100 --- src/auto/configure 2010-11-03 22:28:03.000000000 +0100 *************** *** 593,598 **** --- 593,599 ---- ac_subst_vars='LTLIBOBJS LIBOBJS + LINK_AS_NEEDED DEPEND_CFLAGS_FILTER MAKEMO MSGFMT *************** *** 12404,12409 **** --- 12405,12427 ---- fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5 + $as_echo_n "checking linker --as-needed support... " >&6; } + LINK_AS_NEEDED= + # Check if linker supports --as-needed and --no-as-needed options + if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then + LDFLAGS="$LDFLAGS -Wl,--as-needed" + LINK_AS_NEEDED=yes + fi + if test "$LINK_AS_NEEDED" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + $as_echo "no" >&6; } + fi + + ac_config_files="$ac_config_files auto/config.mk:config.mk.in" cat >confcache <<\_ACEOF *** ../vim-7.3.049/src/config.mk.in 2010-08-15 21:57:28.000000000 +0200 --- src/config.mk.in 2010-11-03 22:26:24.000000000 +0100 *************** *** 30,35 **** --- 30,36 ---- CPP = @CPP@ CPP_MM = @CPP_MM@ DEPEND_CFLAGS_FILTER = @DEPEND_CFLAGS_FILTER@ + LINK_AS_NEEDED = @LINK_AS_NEEDED@ X_CFLAGS = @X_CFLAGS@ X_LIBS_DIR = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ *** ../vim-7.3.049/src/configure.in 2010-11-03 21:59:23.000000000 +0100 --- src/configure.in 2010-11-03 22:26:16.000000000 +0100 *************** *** 3527,3532 **** --- 3527,3549 ---- fi AC_SUBST(DEPEND_CFLAGS_FILTER) + dnl link.sh tries to avoid overlinking in a hackish way. + dnl At least GNU ld supports --as-needed which provides the same functionality + dnl at linker level. Let's use it. + AC_MSG_CHECKING(linker --as-needed support) + LINK_AS_NEEDED= + # Check if linker supports --as-needed and --no-as-needed options + if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then + LDFLAGS="$LDFLAGS -Wl,--as-needed" + LINK_AS_NEEDED=yes + fi + if test "$LINK_AS_NEEDED" = yes; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + AC_SUBST(LINK_AS_NEEDED) + dnl write output files AC_OUTPUT(auto/config.mk:config.mk.in) *** ../vim-7.3.049/src/link.sh 2010-08-15 21:57:25.000000000 +0200 --- src/link.sh 2010-11-03 22:26:08.000000000 +0100 *************** *** 5,11 **** # libraries when they exist, but this doesn't mean they are needed for Vim. # # Author: Bram Moolenaar ! # Last change: 2006 Sep 26 # License: Public domain # # Warning: This fails miserably if the linker doesn't return an error code! --- 5,11 ---- # libraries when they exist, but this doesn't mean they are needed for Vim. # # Author: Bram Moolenaar ! # Last change: 2010 Nov 03 # License: Public domain # # Warning: This fails miserably if the linker doesn't return an error code! *************** *** 16,26 **** echo "$LINK " >link.cmd exit_value=0 # # If auto/link.sed already exists, use it. We assume a previous run of # link.sh has found the correct set of libraries. # - if test -f auto/link.sed; then echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now." echo "link.sh: If linking fails, try deleting the auto/link.sed file." echo "link.sh: If this fails too, try creating an empty auto/link.sed file." --- 16,38 ---- echo "$LINK " >link.cmd exit_value=0 + if test "$LINK_AS_NEEDED" = yes; then + echo "link.sh: \$LINK_AS_NEEDED set to 'yes': invoking linker directly." + cat link.cmd + if sh link.cmd; then + exit_value=0 + echo "link.sh: Linked fine" + else + exit_value=$? + echo "link.sh: Linking failed" + fi + else + if test -f auto/link.sed; then + # # If auto/link.sed already exists, use it. We assume a previous run of # link.sh has found the correct set of libraries. # echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now." echo "link.sh: If linking fails, try deleting the auto/link.sed file." echo "link.sh: If this fails too, try creating an empty auto/link.sed file." *************** *** 124,129 **** --- 136,143 ---- fi fi + fi + # # cleanup # *** ../vim-7.3.049/src/version.c 2010-11-03 21:59:23.000000000 +0100 --- src/version.c 2010-11-03 22:30:17.000000000 +0100 *************** *** 716,717 **** --- 716,719 ---- { /* Add new patch number below this line */ + /**/ + 50, /**/ -- Save the plankton - eat a whale. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ download, build and distribute -- http://www.A-A-P.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///