[pacman-dev] [PATCH] Add "-Wl,--as-needed" to libalpm LDFLAGS.

Allan McRae allan at archlinux.org
Sat Mar 19 19:29:31 EDT 2011


On 20/03/11 06:28, Lukas Fleischer wrote:
> Also includes a Debian patch (from #347650) that makes libtool play
> nicely with "-Wl,--as-needed".
>
> Signed-off-by: Lukas Fleischer<archlinux at cryptocrack.de>
> ---
>   lib/libalpm/Makefile.am |    2 +-
>   ltmain.sh               |   14 ++++++++++++++
>   2 files changed, 15 insertions(+), 1 deletions(-)
>
> diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am
> index 1bda571..4c329b8 100644
> --- a/lib/libalpm/Makefile.am
> +++ b/lib/libalpm/Makefile.am
> @@ -52,7 +52,7 @@ libalpm_la_SOURCES += \
>   	md5.h md5.c
>   endif
>
> -libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)
> +libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO) -Wl,--as-needed

This part is not needed.   With the changes below the build obeys the 
given LDFLAGS.   Unless of course we want to make this the default.


>   libalpm_la_LIBADD = $(LTLIBINTL)
>
>   # vim:set ts=2 sw=2 noet:
> diff --git a/ltmain.sh b/ltmain.sh
> index 6c02b18..4e98c79 100755
> --- a/ltmain.sh
> +++ b/ltmain.sh
> @@ -5790,6 +5790,11 @@ func_mode_link ()
>   	arg=$func_stripname_result
>   	;;
>
> +      -Wl,--as-needed|-Wl,--no-as-needed)
> +	deplibs="$deplibs $arg"
> +	continue
> +	;;
> +
>         -Wl,*)
>   	func_stripname '-Wl,' '' "$arg"
>   	args=$func_stripname_result
> @@ -6150,6 +6155,15 @@ func_mode_link ()
>   	lib=
>   	found=no
>   	case $deplib in
> +	-Wl,--as-needed|-Wl,--no-as-needed)
> +	  if test "$linkmode,$pass" = "prog,link"; then
> +	    compile_deplibs="$deplib $compile_deplibs"
> +	    finalize_deplibs="$deplib $finalize_deplibs"
> +	  else
> +	    deplibs="$deplib $deplibs"
> +	  fi
> +	  continue
> +	  ;;
>   	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
>   	  if test "$linkmode,$pass" = "prog,link"; then
>   	    compile_deplibs="$deplib $compile_deplibs"

This hack will do until libtool gets it fixed.   Just to clarify what 
the issues is here, libtool likes to reorder arguments that you pass to 
it.  That puts -Wl,--as-needed after all the -lfoo statements which 
stops it working.   And this is a hack as it requires -Wl,--as-needed to 
be separately specified  (-Wl,--as-needed,--something-else will not 
work).  But this fix is in widespread use while we wait for the proper 
fix so I will give it an ack.

Allan


More information about the pacman-dev mailing list