| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.050 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| 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 |
| |
| |
| |
| |
| |
| *** 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)" \ |
| |
| |
| |
| *** 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 |
| |
| |
| |
| *** 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@ |
| |
| |
| |
| *** 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) |
| |
| |
| |
| |
| *** 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 |
| # |
| |
| |
| |
| *** 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 /// |