From a43aa761cdb3fd1051dad474fccf9e500a0d49ea Mon Sep 17 00:00:00 2001 From: Clint Adams Date: Thu, 19 Apr 2001 14:45:41 +0000 Subject: 14033: reduce unnecessary library linking for modules and main binary --- ChangeLog | 8 ++++++++ Config/defs.mk.in | 8 ++++++++ Src/Makefile.in | 4 ++-- Src/Modules/cap.mdd | 2 ++ Src/Modules/termcap.mdd | 2 ++ Src/Modules/terminfo.mdd | 2 ++ Src/mkmakemod.sh | 25 +++++++++++++++++++++++-- Src/zsh.mdd | 2 ++ acconfig.h | 6 ++++++ aczsh.m4 | 24 ++++++++++++++++++++++++ configure.in | 35 ++++++++++++++++++++++++++++++----- 11 files changed, 109 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index efb734586..effe65d7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-04-19 Clint Adams + + * 14033: acconfig.h, aczsh.m4, configure.in, Config/defs.mk.in, + Src/Makefile.in, Src/mkmakemod.sh, Src/zsh.mdd, + Src/Modules/cap.mdd, Src/Modules/termcap.mdd, + Src/Modules/terminfo.mdd: only link modules and main binary + against needed libraries. + 2001-04-19 Sven Wischnowsky * 14028: Src/Zle/complete.mdd: use the right path patterns for diff --git a/Config/defs.mk.in b/Config/defs.mk.in index 138dea059..eb0d6a5e1 100644 --- a/Config/defs.mk.in +++ b/Config/defs.mk.in @@ -63,6 +63,14 @@ DLLD = @DLLD@ EXPOPT = @EXPOPT@ IMPOPT = @IMPOPT@ +# extra libraries +LIBS_M = @LIBS_M@ +LIBS_CAP = @LIBS_CAP@ +LIBS_SOCKET = @LIBS_SOCKET@ +LIBS_TERMCAP = @LIBS_TERMCAP@ +LIBS_TERMINFO = @LIBS_TERMINFO@ +LIBS_YP = @LIBS_YP@ + # utilities AWK = @AWK@ YODL = @YODL@ diff --git a/Src/Makefile.in b/Src/Makefile.in index faa10cbfe..5126a2b7c 100644 --- a/Src/Makefile.in +++ b/Src/Makefile.in @@ -82,11 +82,11 @@ EXTRAZSHOBJS = @EXTRAZSHOBJS@ zsh$(EXEEXT): $(@L@IBZSH) $(@L@STMP) $(MAIN_OBJS) zsh.export $(EXTRAZSHOBJS) rm -f $@ - $(@L@DRUNPATH) $(LINK) $(MAIN_OBJS) $(EXTRAZSHOBJS) $(@L@LIST) $(ZSH_@E@XPORT) $(@L@IBZSH) $(LIBS) + $(@L@DRUNPATH) $(LINK) $(MAIN_OBJS) $(EXTRAZSHOBJS) $(@L@LIST) $(ZSH_@E@XPORT) $(@L@IBZSH) $(LIBS_M) $(LIBS_TERMCAP) $(LIBS_YP) $(LIBS) $(LIBZSH): $(LIBOBJS) $(NSTMP) rm -f $@ - $(DLLINK) $(LIBOBJS) $(NLIST) $(LIBS) + $(DLLINK) $(LIBOBJS) $(NLIST) $(LIBS_M) $(LIBS_TERMCAP) $(LIBS) zsh.res.o: $(sdir)/zsh.rc $(sdir)/zsh.ico windres -O coff --include-dir $(sdir) -i $(sdir)/zsh.rc -o zsh.res.o diff --git a/Src/Modules/cap.mdd b/Src/Modules/cap.mdd index 4e7ee7216..0393f7f38 100644 --- a/Src/Modules/cap.mdd +++ b/Src/Modules/cap.mdd @@ -5,3 +5,5 @@ load=no autobins="cap getcap setcap" objects="cap.o" + +extralibs="cap" diff --git a/Src/Modules/termcap.mdd b/Src/Modules/termcap.mdd index 17d07aa03..4c33f5690 100644 --- a/Src/Modules/termcap.mdd +++ b/Src/Modules/termcap.mdd @@ -15,3 +15,5 @@ load=yes autobins="echotc" objects="termcap.o" + +extralibs="termcap" diff --git a/Src/Modules/terminfo.mdd b/Src/Modules/terminfo.mdd index da79e9768..0eca9ddfb 100644 --- a/Src/Modules/terminfo.mdd +++ b/Src/Modules/terminfo.mdd @@ -16,3 +16,5 @@ autobins="echoti" autoparams="terminfo" objects="terminfo.o" + +extralibs="terminfo" diff --git a/Src/mkmakemod.sh b/Src/mkmakemod.sh index e80e65819..bb1891e2f 100644 --- a/Src/mkmakemod.sh +++ b/Src/mkmakemod.sh @@ -27,6 +27,7 @@ # autoprefixconds like autoinfixconds, but for prefix condition codes # autoparams parameters defined by the module, for autoloading # automathfuncs math functions defined by the module, for autoloading +# extralibs libraries specific to this module (default none) # objects .o files making up this module (*must* be defined) # proto .syms files for this module (default generated from $objects) # headers extra headers for this module (default none) @@ -190,7 +191,8 @@ if $first_stage; then unset name moddeps nozshdep alwayslink hasexport unset autobins autoinfixconds autoprefixconds autoparams automathfuncs - unset objects proto headers hdrdeps otherincs + unset extralibs objects proto headers hdrdeps otherincs + unset EXTRALIBS . $top_srcdir/$the_subdir/${mddname}.mdd q_name=`echo $name | sed 's,Q,Qq,g;s,_,Qu,g;s,/,Qs,g'` test -n "${moddeps+set}" || moddeps= @@ -199,6 +201,24 @@ if $first_stage; then proto=`echo $objects '' | sed 's,\.o ,.syms ,g'` dobjects=`echo $objects '' | sed 's,\.o ,..o ,g'` + + for lib in $extralibs; do + case $lib in + m) EXTRALIBS="$EXTRALIBS \$(LIBS_M)" + ;; + cap) EXTRALIBS="$EXTRALIBS \$(LIBS_CAP)" + ;; + socket) EXTRALIBS="$EXTRALIBS \$(LIBS_SOCKET)" + ;; + termcap) EXTRALIBS="$EXTRALIBS \$(LIBS_TERMCAP)" + ;; + terminfo) EXTRALIBS="$EXTRALIBS \$(LIBS_TERMINFO)" + ;; + yp) EXTRALIBS="$EXTRALIBS \$(LIBS_YP)" + ;; + esac + done + modhdeps= mododeps= exportdeps= @@ -302,6 +322,7 @@ if $first_stage; then echo "NXPIMP_${mddname} =" echo "LINKMODS_${mddname} = $mododeps" echo "NOLINKMODS_${mddname} = " + echo "EXTRALIBS_${mddname} = $EXTRALIBS" echo echo "proto.${mddname}: \$(EPRO_${mddname})" echo "\$(SYMS_${mddname}): \$(PROTODEPS)" @@ -328,7 +349,7 @@ if $first_stage; then echo echo "${mddname}.\$(DL_EXT): \$(MODDOBJS_${mddname}) ${mddname}.export $exportdeps \$(@LINKMODS@_${mddname})" echo ' rm -f $@' - echo " \$(DLLINK) \$(@E@XPIMP_$mddname) \$(@E@NTRYOPT) \$(MODDOBJS_${mddname}) \$(@LINKMODS@_${mddname}) \$(LIBS) " + echo " \$(DLLINK) \$(@E@XPIMP_$mddname) \$(@E@NTRYOPT) \$(MODDOBJS_${mddname}) \$(@LINKMODS@_${mddname}) $EXTRALIBS \$(LIBS)" echo fi echo "${mddname}.mdhi: ${mddname}.mdhs \$(INCS_${mddname})" diff --git a/Src/zsh.mdd b/Src/zsh.mdd index e2b7b91b5..2accfda10 100644 --- a/Src/zsh.mdd +++ b/Src/zsh.mdd @@ -17,6 +17,8 @@ signames.o string.o subst.o text.o utils.o watch.o" headers="../config.h system.h zsh.h sigcount.h signals.h \ prototypes.h hashtable.h ztype.h" +extralibs="m termcap yp" + :<<\Make @CONFIG_MK@ diff --git a/acconfig.h b/acconfig.h index e28bbc587..b1fc133d0 100644 --- a/acconfig.h +++ b/acconfig.h @@ -317,3 +317,9 @@ /* Define if you have the terminfo strnames symbol. */ #undef HAVE_STRNAMES + +/* Define if you have the cap library. */ +#undef HAVE_LIBCAP + +/* Define if you have the socket library. */ +#undef HAVE_LIBSOCKET diff --git a/aczsh.m4 b/aczsh.m4 index 45334b6dc..aa16bffd0 100644 --- a/aczsh.m4 +++ b/aczsh.m4 @@ -683,3 +683,27 @@ AC_DEFUN(zsh_COMPILE_FLAGS, then LIBS="$4" else LIBS="$enable_libs" fi)]) + +dnl zsh_SEARCH_LIBS(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND +dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]]) +dnl Search for a library defining FUNC, if it's not already available. + +AC_DEFUN(zsh_SEARCH_LIBS, +[AC_PREREQ([2.13]) +AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1], +[ac_func_search_save_LIBS="$LIBS" +ac_cv_search_$1="no" +AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"]) +test "$ac_cv_search_$1" = "no" && for i in $2; do +LIBS="-l$i $5 $ac_func_search_save_LIBS" +AC_TRY_LINK_FUNC([$1], +[ac_cv_search_$1="-l$i" +break]) +done +LIBS="$ac_func_search_save_LIBS"]) +if test "$ac_cv_search_$1" != "no"; then + test "$ac_cv_search_$1" = "none required" || ZS_LIBS="$ac_cv_search_$1" + $3 +else : + $4 +fi]) diff --git a/configure.in b/configure.in index 8e9f58629..f751b8834 100644 --- a/configure.in +++ b/configure.in @@ -504,7 +504,7 @@ dnl On ReliantUNIX -lc better be the last library, else funny things dnl may happen. AC_CHECK_LIB(c, printf, [LIBS="$LIBS -lc"]) -AC_CHECK_LIB(m, pow) +AC_CHECK_LIB(m, pow, [LIBS_M="-lm"]) dnl Prefer BSD termcap library to SysV curses library, except on certain dnl SYSV-derived systems. @@ -514,7 +514,12 @@ case "$host_os" in *) termcap_curses_order="termcap curses ncurses" ;; esac -AC_SEARCH_LIBS(tgetent, [$termcap_curses_order]) +zsh_SEARCH_LIBS(tgetent, [$termcap_curses_order]) +LIBS_TERMCAP=$ZS_LIBS + +zsh_SEARCH_LIBS(tigetstr, [$termcap_curses_order]) +LIBS_TERMINFO=$ZS_LIBS + AC_MSG_CHECKING(if boolcodes is available) AC_TRY_COMPILE([#include #include ], [char **test = boolcodes;], @@ -549,7 +554,8 @@ AC_MSG_RESULT($strnames) dnl Some systems (Solaris 2.x, Linux Redhat 5.x) require dnl libnsl (Network Services Library) to find yp_all -AC_SEARCH_LIBS(yp_all, nsl) +zsh_SEARCH_LIBS(yp_all, nsl) +LIBS_YP=$ZS_LIBS dnl I am told that told that unicos reqire these for nis_list if test `echo $host_os | sed 's/^\(unicos\).*/\1/'` = unicos; then @@ -560,9 +566,11 @@ if test "x$dynamic" = xyes; then AC_CHECK_LIB(dl, dlopen) fi -AC_CHECK_LIB(cap, cap_get_proc) +AC_CHECK_LIB(cap, cap_get_proc, [LIBS_CAP="-lcap" +AC_DEFINE(HAVE_LIBCAP)]) -AC_CHECK_LIB(socket, socket) +AC_CHECK_LIB(socket, socket, [LIBS_SOCKET="-lsocket" +AC_DEFINE(HAVE_LIBSOCKET)]) dnl --------------------- dnl CHECK TERMCAP LIBRARY @@ -831,6 +839,9 @@ dnl --------------- dnl need to integrate this function dnl AC_FUNC_STRFTIME +SAVELIBS=$LIBS +LIBS="$LIBS_TERMCAP $LIBS_TERMINFO $LIBS" + AC_CHECK_FUNCS(strftime difftime gettimeofday \ select poll \ readlink lstat lchown faccessx fchdir ftruncate \ @@ -887,6 +898,8 @@ if test $zsh_cv_func_tgetent_accepts_null = yes; then AC_DEFINE(TGETENT_ACCEPTS_NULL) fi +LIBS=$SAVELIBS + AC_FUNC_MMAP if test x$ac_cv_func_mmap_fixed_mapped = xyes; then AC_CHECK_FUNCS(munmap msync) @@ -1675,10 +1688,16 @@ if test "x$dynamic" = xyes; then test "$zsh_cv_shared_environ" = yes || dynamic=no dnl test "$zsh_cv_sys_dynamic_broken" = no || dynamic=no if test "$ac_cv_func_tgetent" = yes; then + SAVELIBS=$LIBS + LIBS="$LIBS_TERMCAP $LIBS" zsh_SHARED_FUNCTION([tgetent]) + LIBS=$SAVELIBS fi if test "$ac_cv_func_tigetstr" = yes; then + SAVELIBS=$LIBS + LIBS="$LIBS_TERMINFO $LIBS" zsh_SHARED_FUNCTION([tigetstr]) + LIBS=$SAVELIBS fi fi @@ -1752,6 +1771,12 @@ AC_SUBST(MOD_EXPORT)dnl AC_SUBST(MOD_IMPORT_VARIABLE)dnl AC_SUBST(MOD_IMPORT_FUNCTION)dnl AC_SUBST(EXTRAZSHOBJS)dnl +AC_SUBST(LIBS_M)dnl +AC_SUBST(LIBS_CAP)dnl +AC_SUBST(LIBS_SOCKET)dnl +AC_SUBST(LIBS_TERMCAP)dnl +AC_SUBST(LIBS_TERMINFO)dnl +AC_SUBST(LIBS_YP)dnl # Generate config.modules. We look for *.mdd files in first and second # level subdirectories. Any existing line not containing 'auto=y' will be -- cgit 1.4.1