[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bug-gnulib] new module lib-ignore; new section build_lib in MODULES
From: |
Paul Eggert |
Subject: |
Re: [bug-gnulib] new module lib-ignore; new section build_lib in MODULES.html |
Date: |
Wed, 11 Jan 2006 10:28:55 -0800 |
User-agent: |
Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) |
Ralf Wildenhues <address@hidden> 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)
- new module lib-ignore; new section build_lib in MODULES.html, Paul Eggert, 2006/01/09
- Re: [bug-gnulib] new module lib-ignore; new section build_lib in MODULES.html, Bruno Haible, 2006/01/11
- Re: [bug-gnulib] new module lib-ignore; new section build_lib in MODULES.html, Paul Eggert, 2006/01/11
- Re: [bug-gnulib] Re: [bug-gnulib] new module lib-ignore; new section build_lib in MODULES.html, Bruno Haible, 2006/01/12
- Re: [bug-gnulib] new module lib-ignore; new section build_lib in MODULES.html, Ralf Wildenhues, 2006/01/13
- Re: new module lib-ignore; new section build_lib in MODULES.html, Paul Eggert, 2006/01/18
- Re: new module lib-ignore; new section build_lib in MODULES.html, Ralf Wildenhues, 2006/01/18
- Re: new module lib-ignore; new section build_lib in MODULES.html, Bruno Haible, 2006/01/18
- Re: new module lib-ignore; new section build_lib in MODULES.html, Ralf Wildenhues, 2006/01/18