Hi, Tom G. Christensen wrote: > I found another regression from this patch series. > > On Solaris 2.6 test-getloadavg now fails to link: > gcc -std=gnu99 -g -O2 -L/usr/tgcware/lib -Wl,-R,/usr/tgcware/lib -o > test-getloadavg test-getloadavg.o ../gllib/libgnu > .a -lkvm -lelf -lm -lm -lm -lm -lm -lm > Undefined first referenced > symbol in file > kstat_close ../gllib/libgnu.a(getloadavg.o) > kstat_lookup ../gllib/libgnu.a(getloadavg.o) > kstat_read ../gllib/libgnu.a(getloadavg.o) > kstat_open ../gllib/libgnu.a(getloadavg.o) > kstat_data_lookup ../gllib/libgnu.a(getloadavg.o) > ld: fatal: Symbol referencing errors. No output written to test-getloadavg > > The problem is that '-lkstat' is missing from GETLOADAVG_LIBS. > The cause for that is gl_PREREQ_GETLOADAVG nolonger being called from > inside gl_GETLOADAVG where GETLOADAVG_LIBS is being determined, but after.
Well spotted! I don't reproduce the link error, because '-lkstat' ends up in LIBS instead of GETLOADAVG_LIBS: S["GETLOADAVG_LIBS"]="-lkvm -lelf " S["LIBS"]="-lkstat " But we don't want to fill up LIBS, because only those executables that need getloadavg() ought to be linked against libkstat. I'm committing this fix, that reverts to the previous situation: S["GETLOADAVG_LIBS"]="-lkstat -lkvm -lelf " S["LIBS"]="" 2011-06-18 Bruno Haible <br...@clisp.org> getloadavg: Don't clobber LIBS. Regression from previous commit. * m4/getloadavg.m4 (gl_PREREQ_GETLOADAVG): Move tests that use AC_CHECK_LIB from here... (gl_GETLOADAVG): ... to here, inside the experiment with LIBS. (gl_GETLOADAVG, gl_PREREQ_GETLOADAVG): Rename gl_have_func to gl_func_getloadavg_done. Reported by Tom G. Christensen <t...@jupiterrise.com>. --- m4/getloadavg.m4.orig Sat Jun 18 18:28:58 2011 +++ m4/getloadavg.m4 Sat Jun 18 17:57:41 2011 @@ -26,34 +26,51 @@ # NetBSD >= 0.9, OpenBSD >= 2.0, Solaris >= 7. HAVE_GETLOADAVG=1 AC_CHECK_FUNC([getloadavg], [], - [gl_have_func=no + [gl_func_getloadavg_done=no # Some systems with -lutil have (and need) -lkvm as well, some do not. # On Solaris, -lkvm requires nlist from -lelf, so check that first # to get the right answer into the cache. # For kstat on solaris, we need to test for libelf and libkvm to force the # definition of SVR4 below. - if test $gl_have_func = no; then + if test $gl_func_getloadavg_done = no; then AC_CHECK_LIB([elf], [elf_begin], [LIBS="-lelf $LIBS"]) AC_CHECK_LIB([kvm], [kvm_open], [LIBS="-lkvm $LIBS"]) # Check for the 4.4BSD definition of getloadavg. AC_CHECK_LIB([util], [getloadavg], - [LIBS="-lutil $LIBS" gl_have_func=yes]) + [LIBS="-lutil $LIBS" gl_func_getloadavg_done=yes]) fi - if test $gl_have_func = no; then + if test $gl_func_getloadavg_done = no; then # There is a commonly available library for RS/6000 AIX. # Since it is not a standard part of AIX, it might be installed locally. gl_getloadavg_LIBS=$LIBS LIBS="-L/usr/local/lib $LIBS" AC_CHECK_LIB([getloadavg], [getloadavg], - [LIBS="-lgetloadavg $LIBS" gl_have_func=yes], + [LIBS="-lgetloadavg $LIBS" gl_func_getloadavg_done=yes], [LIBS=$gl_getloadavg_LIBS]) fi # Set up the replacement function if necessary. - if test $gl_have_func = no; then + if test $gl_func_getloadavg_done = no; then HAVE_GETLOADAVG=0 + + # Solaris has libkstat which does not require root. + AC_CHECK_LIB([kstat], [kstat_open]) + test $ac_cv_lib_kstat_kstat_open = yes && gl_func_getloadavg_done=yes + + # AIX has libperfstat which does not require root + if test $gl_func_getloadavg_done = no; then + AC_CHECK_LIB([perfstat], [perfstat_cpu_total]) + test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_func_getloadavg_done=yes + fi + + if test $gl_func_getloadavg_done = no; then + AC_CHECK_HEADER([sys/dg_sys_info.h], + [gl_func_getloadavg_done=yes + AC_DEFINE([DGUX], [1], [Define to 1 for DGUX with <sys/dg_sys_info.h>.]) + AC_CHECK_LIB([dgc], [dg_sys_info])]) + fi fi]) if test "x$gl_save_LIBS" = x; then @@ -88,52 +105,35 @@ [ # Figure out what our getloadavg.c needs. -# Solaris has libkstat which does not require root. -AC_CHECK_LIB([kstat], [kstat_open]) -test $ac_cv_lib_kstat_kstat_open = yes && gl_have_func=yes - # On HPUX9, an unprivileged user can get load averages this way. -if test $gl_have_func = no; then - AC_CHECK_FUNCS([pstat_getdynamic], [gl_have_func=yes]) -fi - -# AIX has libperfstat which does not require root -if test $gl_have_func = no; then - AC_CHECK_LIB([perfstat], [perfstat_cpu_total]) - test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_have_func=yes -fi - -if test $gl_have_func = no; then - AC_CHECK_HEADER([sys/dg_sys_info.h], - [gl_have_func=yes - AC_DEFINE([DGUX], [1], [Define to 1 for DGUX with <sys/dg_sys_info.h>.]) - AC_CHECK_LIB([dgc], [dg_sys_info])]) +if test $gl_func_getloadavg_done = no; then + AC_CHECK_FUNCS([pstat_getdynamic], [gl_func_getloadavg_done=yes]) fi # We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it # uses stabs), but it is still SVR4. We cannot check for <elf.h> because # Irix 4.0.5F has the header but not the library. -if test $gl_have_func = no && test "$ac_cv_lib_elf_elf_begin" = yes \ +if test $gl_func_getloadavg_done = no && test "$ac_cv_lib_elf_elf_begin" = yes \ && test "$ac_cv_lib_kvm_kvm_open" = yes; then - gl_have_func=yes + gl_func_getloadavg_done=yes AC_DEFINE([SVR4], [1], [Define to 1 on System V Release 4.]) fi -if test $gl_have_func = no; then +if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([inq_stats/cpustats.h], - [gl_have_func=yes + [gl_func_getloadavg_done=yes AC_DEFINE([UMAX], [1], [Define to 1 for Encore UMAX.]) AC_DEFINE([UMAX4_3], [1], [Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h> instead of <sys/cpustats.h>.])]) fi -if test $gl_have_func = no; then +if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([sys/cpustats.h], - [gl_have_func=yes; AC_DEFINE([UMAX])]) + [gl_func_getloadavg_done=yes; AC_DEFINE([UMAX])]) fi -if test $gl_have_func = no; then +if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADERS([mach/mach.h]) fi -- In memoriam Mona Mahmudnizhad <http://en.wikipedia.org/wiki/Mona_Mahmudnizhad>