Ralf Wildenhues <[EMAIL PROTECTED]> writes: > Similarly, `-zignore' is linker dependent.
Yes. If some linkers need some other option to do that, we'll need to add it to lib-ignore.m4. But in the meantime the existing code should produce working executables, even with those linkers, since it doesn't use -zignore unless that makes a difference in the ldd output. > And if I know anything about how autotools-using build systems > expect link flags and libraries, then you're not supposed to put > `-lrt' in LDFLAGS, but in LIBS. Yes, that's what the lib-ignore code does; it puts -lm into LIBS in order to test -zignore. > Furthermore, the test looks completely bogus to me, testing a basically > empty program: how is that going to *reliably* record the need of librt > for a real program? It works reliably on Solaris, for -lm. It also works on Debian GNU/Linux, in that it discovers that -zignore isn't needed there. If it breaks on some other platform then I'd like to know about it, and I'd like to fix it. > why doesn't gnulib allow to separate LDADD per module then, as a > refinement? gnulib already does that, with variables like LIB_CLOCK_GETTIME. But the problem is maintaining the list of LDADDs. At the end of this message is an extract from coreutils/src/Makefile.am. This list is maintained by hand, and it's error-prone. For example, with coreutils 5.93 "ldd who" has the following output on my Solaris 8 host (64-bit): libnsl.so.1 => /usr/lib/64/libnsl.so.1 libsocket.so.1 => /usr/lib/64/libsocket.so.1 libc.so.1 => /usr/lib/64/libc.so.1 libdl.so.1 => /usr/lib/64/libdl.so.1 libmp.so.2 => /usr/lib/64/libmp.so.2 /usr/platform/SUNW,Ultra-4/lib/sparcv9/libc_psr.so.1 I think only libc and libdl are needed; the rest aren't. This could be worked around by further editing the Makefile gorp below, but it's much better to have the linker figure it out. ----- # Sometimes, the expansion of $(LIBINTL) includes -lc which may # include modules defining variables like `optind', so libcoreutils.a # must precede $(LIBINTL) in order to ensure we use GNU getopt. # But libcoreutils.a must also follow $(LIBINTL), since libintl uses # replacement functions defined in libcoreutils.a. LDADD = ../lib/libcoreutils.a $(LIBINTL) ../lib/libcoreutils.a # for eaccess in lib/euidaccess.c. cp_LDADD = $(LDADD) $(LIB_EACCESS) ginstall_LDADD = $(LDADD) $(LIB_EACCESS) mv_LDADD = $(LDADD) $(LIB_EACCESS) pathchk_LDADD = $(LDADD) $(LIB_EACCESS) rm_LDADD = $(LDADD) $(LIB_EACCESS) test_LDADD = $(LDADD) $(LIB_EACCESS) # This is for the '[' program. Automake transliterates '[' to '_'. __LDADD = $(LDADD) $(LIB_EACCESS) # for clock_gettime and fdatasync dd_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC) dir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) ls_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) pr_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) shred_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC) vdir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) ## If necessary, add -lm to resolve use of pow in lib/strtod.c. sort_LDADD = $(LDADD) $(POW_LIB) $(LIB_GETHRXTIME) # for get_date and gettime date_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) touch_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) # If necessary, add -lm to resolve use of pow in lib/strtod.c. # If necessary, add -liconv to resolve use of iconv in lib/unicodeio.c. printf_LDADD = $(LDADD) $(POW_LIB) $(LIBICONV) # If necessary, add -lm to resolve use of floor, rint, modf. seq_LDADD = $(LDADD) $(SEQ_LIBM) # If necessary, add libraries to resolve the `pow' reference in lib/strtod.c # and the `nanosleep' reference in lib/xnanosleep.c. nanosec_libs = $(LDADD) $(POW_LIB) $(LIB_NANOSLEEP) sleep_LDADD = $(nanosec_libs) tail_LDADD = $(nanosec_libs) uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS) su_LDADD = $(LDADD) $(LIB_CRYPT) dir_LDADD += $(LIB_ACL) ls_LDADD += $(LIB_ACL) vdir_LDADD += $(LIB_ACL) cp_LDADD += $(LIB_ACL) mv_LDADD += $(LIB_ACL) ginstall_LDADD += $(LIB_ACL) _______________________________________________ bug-gnulib mailing list bug-gnulib@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gnulib