bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

clean up library dependencies


From: Eric Blake
Subject: clean up library dependencies
Date: Fri, 9 Oct 2009 20:46:38 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

While playing with utimensat, I realized that the use of gettime() requires 
$(LIB_CLOCK_GETTIME) in order to compile on some platforms (in this case, 
developing on cygwin spoiled me, since clock_gettime() is part of -lc).  Since 
I'm teaching utimens about UTIME_NOW, which means a use of gettime(), this will 
impact all clients of utimens.  But I had a tough time seeing whether any 
additional coreutils needed to add this dependency, not to mention that there 
was no obvious order in app names.  OK to apply this refactoring, which preps 
all programs to start with $(LDADD), making it easier to use += $(LIB_foo) one 
library at a time?

For each library chunk, the comment lists something to grep for; any time we 
add a new gnulib module that adds another library dependency, it should be 
easier to grep for anyone that uses that function, and update the library 
section accordingly.

The diff may be hard to read, so I've also pasted the current state post-patch.


From: Eric Blake <address@hidden>
Date: Fri, 9 Oct 2009 13:57:56 -0600
Subject: [PATCH] maint: improve additional library tracking

* src/Makefile.am (LDADD): Refactor, to make per-library additions
to individual programs easier to maintain.
---
 src/Makefile.am |  244 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 178 insertions(+), 66 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 0c70914..af401d8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -87,99 +87,211 @@ nodist_libver_a_SOURCES = version.c version.h
 # replacement functions defined in libcoreutils.a.
 LDADD = libver.a ../lib/libcoreutils.a $(LIBINTL) ../lib/libcoreutils.a

+# First, list all programs, to make listing per-program libraries easier.
+# See [ below.
+arch_LDADD = $(LDADD)
+base64_LDADD = $(LDADD)
+basename_LDADD = $(LDADD)
 cat_LDADD = $(LDADD)
+chcon_LDADD = $(LDADD)
+chgrp_LDADD = $(LDADD)
+chmod_LDADD = $(LDADD)
+chown_LDADD = $(LDADD)
+chroot_LDADD = $(LDADD)
+cksum_LDADD = $(LDADD)
+comm_LDADD = $(LDADD)
+cp_LDADD = $(LDADD)
+csplit_LDADD = $(LDADD)
+cut_LDADD = $(LDADD)
+date_LDADD = $(LDADD)
+dd_LDADD = $(LDADD)
 df_LDADD = $(LDADD)
+# See dir_LDADD below
+dircolors_LDADD = $(LDADD)
+dirname_LDADD = $(LDADD)
 du_LDADD = $(LDADD)
+echo_LDADD = $(LDADD)
+env_LDADD = $(LDADD)
+expand_LDADD = $(LDADD)
+expr_LDADD = $(LDADD)
+factor_LDADD = $(LDADD)
+false_LDADD = $(LDADD)
+fmt_LDADD = $(LDADD)
+fold_LDADD = $(LDADD)
 getlimits_LDADD = $(LDADD)
+ginstall_LDADD = $(LDADD)
+groups_LDADD = $(LDADD)
+head_LDADD = $(LDADD)
+hostid_LDADD = $(LDADD)
+hostname_LDADD = $(LDADD)
+id_LDADD = $(LDADD)
+join_LDADD = $(LDADD)
+kill_LDADD = $(LDADD)
+link_LDADD = $(LDADD)
+ln_LDADD = $(LDADD)
+logname_LDADD = $(LDADD)
+ls_LDADD = $(LDADD)
+md5sum_LDADD = $(LDADD)
+mkdir_LDADD = $(LDADD)
+mkfifo_LDADD = $(LDADD)
+mknod_LDADD = $(LDADD)
+mktemp_LDADD = $(LDADD)
+mv_LDADD = $(LDADD)
+nice_LDADD = $(LDADD)
+nl_LDADD = $(LDADD)
+nohup_LDADD = $(LDADD)
+od_LDADD = $(LDADD)
+paste_LDADD = $(LDADD)
+pathchk_LDADD = $(LDADD)
+pinky_LDADD = $(LDADD)
+pr_LDADD = $(LDADD)
+printenv_LDADD = $(LDADD)
+printf_LDADD = $(LDADD)
 ptx_LDADD = $(LDADD)
+pwd_LDADD = $(LDADD)
+readlink_LDADD = $(LDADD)
+rm_LDADD = $(LDADD)
+rmdir_LDADD = $(LDADD)
+runcon_LDADD = $(LDADD)
+seq_LDADD = $(LDADD)
+setuidgid_LDADD = $(LDADD)
+sha1sum_LDADD = $(LDADD)
+sha224sum_LDADD = $(LDADD)
+sha256sum_LDADD = $(LDADD)
+sha384sum_LDADD = $(LDADD)
+sha512sum_LDADD = $(LDADD)
+shred_LDADD = $(LDADD)
+shuf_LDADD = $(LDADD)
+sleep_LDADD = $(LDADD)
+sort_LDADD = $(LDADD)
 split_LDADD = $(LDADD)
-stdbuf_LDADD = $(LDADD)
+stat_LDADD = $(LDADD)
+stty_LDADD = $(LDADD)
+su_LDADD = $(LDADD)
+sum_LDADD = $(LDADD)
+sync_LDADD = $(LDADD)
+tac_LDADD = $(LDADD)
+tail_LDADD = $(LDADD)
+tee_LDADD = $(LDADD)
+test_LDADD = $(LDADD)
 timeout_LDADD = $(LDADD)
+touch_LDADD = $(LDADD)
+tr_LDADD = $(LDADD)
+true_LDADD = $(LDADD)
 truncate_LDADD = $(LDADD)
-
-# for eaccess in lib/euidaccess.c.
-chcon_LDADD = $(LDADD) $(LIB_SELINUX)
-cp_LDADD = $(LDADD) $(LIB_EACCESS) $(LIB_SELINUX)
-ginstall_LDADD = $(LDADD) $(LIB_EACCESS) $(LIB_SELINUX)
-mkdir_LDADD = $(LDADD) $(LIB_SELINUX)
-mkfifo_LDADD = $(LDADD) $(LIB_SELINUX)
-mknod_LDADD = $(LDADD) $(LIB_SELINUX)
-mv_LDADD = $(LDADD) $(LIB_EACCESS) $(LIB_SELINUX)
-runcon_LDADD = $(LDADD) $(LIB_SELINUX)
-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) $(LIB_SELINUX) $(LIB_CAP)
-id_LDADD = $(LDADD) $(LIB_SELINUX)
-ls_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX) $(LIB_CAP)
-mktemp_LDADD = $(LDADD) $(LIB_GETHRXTIME)
-pr_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
-shred_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC)
-shuf_LDADD = $(LDADD) $(LIB_GETHRXTIME)
-tac_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
-vdir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX) $(LIB_CAP)
-
-## 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 pow in lib/strtod.c.
-seq_LDADD = $(LDADD) $(POW_LIB)
-
-# 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)
+tsort_LDADD = $(LDADD)
+tty_LDADD = $(LDADD)
+uname_LDADD = $(LDADD)
+unexpand_LDADD = $(LDADD)
+uniq_LDADD = $(LDADD)
+unlink_LDADD = $(LDADD)
+uptime_LDADD = $(LDADD)
+users_LDADD = $(LDADD)
+# See vdir_LDADD below
+wc_LDADD = $(LDADD)
+who_LDADD = $(LDADD)
+whoami_LDADD = $(LDADD)
+yes_LDADD = $(LDADD)
+
+# Synonyms
+__LDADD = $(test_LDADD) # Automake transliterates '[' to '_'.
+dir_LDADD = $(ls_LDADD)
+vdir_LDADD = $(ls_LDADD)
+
+# Shared files
+copy_LDADD =
+cp_LDADD += $(copy_LDADD)
+ginstall_LDADD += $(copy_LDADD)
+mv_LDADD += $(copy_LDADD)
+
+remove_LDADD =
+mv_LDADD += $(remove_LDADD)
+rm_LDADD += $(remove_LDADD)
+
+# for eaccess, euidaccess
+copy_LDADD += $(LIB_EACCESS)
+remove_LDADD += $(LIB_EACCESS)
+test_LDADD += $(LIB_EACCESS)
+
+# for selinux use
+chcon_LDADD += $(LIB_SELINUX)
+copy_LDADD += $(LIB_SELINUX)
+ginstall_LDADD += $(LIB_SELINUX)
+id_LDADD += $(LIB_SELINUX)
+ls_LDADD += $(LIB_SELINUX)
+mkdir_LDADD += $(LIB_SELINUX)
+mkfifo_LDADD += $(LIB_SELINUX)
+mknod_LDADD += $(LIB_SELINUX)
+runcon_LDADD += $(LIB_SELINUX)
+stat_LDADD += $(LIB_SELINUX)
+
+# for gettime, settime, utimecmp, utimens
+copy_LDADD += $(LIB_CLOCK_GETTIME)
+date_LDADD += $(LIB_CLOCK_GETTIME)
+ginstall_LDADD += $(LIB_CLOCK_GETTIME)
+ls_LDADD += $(LIB_CLOCK_GETTIME)
+pr_LDADD += $(LIB_CLOCK_GETTIME)
+touch_LDADD += $(LIB_CLOCK_GETTIME)
+
+# for gethrxtime, randint, randread, gen_tempname
+dd_LDADD += $(LIB_GETHRXTIME)
+mktemp_LDADD += $(LIB_GETHRXTIME)
+shred_LDADD += $(LIB_GETHRXTIME)
+shuf_LDADD += $(LIB_GETHRXTIME)
+sort_LDADD += $(LIB_GETHRXTIME)
+
+# for cap_get_file
+ls_LDADD += $(LIB_CAP)
+
+# for fdatasync
+dd_LDADD += $(LIB_FDATASYNC)
+shred_LDADD += $(LIB_FDATASYNC)
+
+# for strtod, strtold
+printf_LDADD += $(POW_LIB)
+seq_LDADD += $(POW_LIB)
+sleep_LDADD += $(POW_LIB)
+sort_LDADD += $(POW_LIB)
+tail_LDADD += $(POW_LIB)
+uptime_LDADD += $(POW_LIB)
+
+# for xnanosleep
+sleep_LDADD += $(LIB_NANOSLEEP)
+tail_LDADD += $(LIB_NANOSLEEP)

 # for various GMP functions
-expr_LDADD = $(LDADD) $(LIB_GMP)
-
-# for various GMP functions
-factor_LDADD = $(LDADD) $(LIB_GMP)
-
-sleep_LDADD = $(nanosec_libs)
-tail_LDADD = $(nanosec_libs)
+expr_LDADD += $(LIB_GMP)
+factor_LDADD += $(LIB_GMP)

-# If necessary, add -lm to resolve use of pow in lib/strtod.c.
-uptime_LDADD = $(LDADD) $(POW_LIB) $(GETLOADAVG_LIBS)
+# for getloadavg
+uptime_LDADD += $(GETLOADAVG_LIBS)

-su_LDADD = $(LDADD) $(LIB_CRYPT)
+# for crypt
+su_LDADD += $(LIB_CRYPT)

+# for various ACL functions
+copy_LDADD += $(LIB_ACL)
 dir_LDADD += $(LIB_ACL)
-ls_LDADD += $(LIB_ACL)
-vdir_LDADD += $(LIB_ACL)
-cp_LDADD += $(LIB_ACL) $(LIB_XATTR)
-mv_LDADD += $(LIB_ACL) $(LIB_XATTR)
-ginstall_LDADD += $(LIB_ACL) $(LIB_XATTR)

-stat_LDADD = $(LDADD) $(LIB_SELINUX)
+# for various xattr functions
+copy_LDADD += $(LIB_XATTR)

-# Append $(LIBICONV) to each program that uses proper_name_utf8.
+# for print_unicode_char, proper_name_utf8
 cat_LDADD += $(LIBICONV)
 cp_LDADD += $(LIBICONV)
 df_LDADD += $(LIBICONV)
 du_LDADD += $(LIBICONV)
 getlimits_LDADD += $(LIBICONV)
+printf_LDADD += $(LIBICONV)
 ptx_LDADD += $(LIBICONV)
 split_LDADD += $(LIBICONV)
 stdbuf_LDADD += $(LIBICONV)
 timeout_LDADD += $(LIBICONV)
 truncate_LDADD += $(LIBICONV)

-# programs that use getaddrinfo (e.g., via canon_host)
-pinky_LDADD = $(LDADD) $(GETADDRINFO_LIB)
-who_LDADD = $(LDADD) $(GETADDRINFO_LIB)
+# for canon_host
+pinky_LDADD += $(GETADDRINFO_LIB)
+who_LDADD += $(GETADDRINFO_LIB)

 $(PROGRAMS): ../lib/libcoreutils.a

-- 
1.6.4.2






# First, list all programs, to make listing per-program libraries easier.
# See [ below.
arch_LDADD = $(LDADD)
base64_LDADD = $(LDADD)
basename_LDADD = $(LDADD)
cat_LDADD = $(LDADD)
chcon_LDADD = $(LDADD)
chgrp_LDADD = $(LDADD)
chmod_LDADD = $(LDADD)
chown_LDADD = $(LDADD)
chroot_LDADD = $(LDADD)
cksum_LDADD = $(LDADD)
comm_LDADD = $(LDADD)
cp_LDADD = $(LDADD)
csplit_LDADD = $(LDADD)
cut_LDADD = $(LDADD)
date_LDADD = $(LDADD)
dd_LDADD = $(LDADD)
df_LDADD = $(LDADD)
# See dir_LDADD below
dircolors_LDADD = $(LDADD)
dirname_LDADD = $(LDADD)
du_LDADD = $(LDADD)
echo_LDADD = $(LDADD)
env_LDADD = $(LDADD)
expand_LDADD = $(LDADD)
expr_LDADD = $(LDADD)
factor_LDADD = $(LDADD)
false_LDADD = $(LDADD)
fmt_LDADD = $(LDADD)
fold_LDADD = $(LDADD)
getlimits_LDADD = $(LDADD)
ginstall_LDADD = $(LDADD)
groups_LDADD = $(LDADD)
head_LDADD = $(LDADD)
hostid_LDADD = $(LDADD)
hostname_LDADD = $(LDADD)
id_LDADD = $(LDADD)
join_LDADD = $(LDADD)
kill_LDADD = $(LDADD)
link_LDADD = $(LDADD)
ln_LDADD = $(LDADD)
logname_LDADD = $(LDADD)
ls_LDADD = $(LDADD)
md5sum_LDADD = $(LDADD)
mkdir_LDADD = $(LDADD)
mkfifo_LDADD = $(LDADD)
mknod_LDADD = $(LDADD)
mktemp_LDADD = $(LDADD)
mv_LDADD = $(LDADD)
nice_LDADD = $(LDADD)
nl_LDADD = $(LDADD)
nohup_LDADD = $(LDADD)
od_LDADD = $(LDADD)
paste_LDADD = $(LDADD)
pathchk_LDADD = $(LDADD)
pinky_LDADD = $(LDADD)
pr_LDADD = $(LDADD)
printenv_LDADD = $(LDADD)
printf_LDADD = $(LDADD)
ptx_LDADD = $(LDADD)
pwd_LDADD = $(LDADD)
readlink_LDADD = $(LDADD)
rm_LDADD = $(LDADD)
rmdir_LDADD = $(LDADD)
runcon_LDADD = $(LDADD)
seq_LDADD = $(LDADD)
setuidgid_LDADD = $(LDADD)
sha1sum_LDADD = $(LDADD)
sha224sum_LDADD = $(LDADD)
sha256sum_LDADD = $(LDADD)
sha384sum_LDADD = $(LDADD)
sha512sum_LDADD = $(LDADD)
shred_LDADD = $(LDADD)
shuf_LDADD = $(LDADD)
sleep_LDADD = $(LDADD)
sort_LDADD = $(LDADD)
split_LDADD = $(LDADD)
stat_LDADD = $(LDADD)
stty_LDADD = $(LDADD)
su_LDADD = $(LDADD)
sum_LDADD = $(LDADD)
sync_LDADD = $(LDADD)
tac_LDADD = $(LDADD)
tail_LDADD = $(LDADD)
tee_LDADD = $(LDADD)
test_LDADD = $(LDADD)
timeout_LDADD = $(LDADD)
touch_LDADD = $(LDADD)
tr_LDADD = $(LDADD)
true_LDADD = $(LDADD)
truncate_LDADD = $(LDADD)
tsort_LDADD = $(LDADD)
tty_LDADD = $(LDADD)
uname_LDADD = $(LDADD)
unexpand_LDADD = $(LDADD)
uniq_LDADD = $(LDADD)
unlink_LDADD = $(LDADD)
uptime_LDADD = $(LDADD)
users_LDADD = $(LDADD)
# See vdir_LDADD below
wc_LDADD = $(LDADD)
who_LDADD = $(LDADD)
whoami_LDADD = $(LDADD)
yes_LDADD = $(LDADD)

# Synonyms
__LDADD = $(test_LDADD) # Automake transliterates '[' to '_'.
dir_LDADD = $(ls_LDADD)
vdir_LDADD = $(ls_LDADD)

# Shared files
copy_LDADD =
cp_LDADD += $(copy_LDADD)
ginstall_LDADD += $(copy_LDADD)
mv_LDADD += $(copy_LDADD)

remove_LDADD =
mv_LDADD += $(remove_LDADD)
rm_LDADD += $(remove_LDADD)

# for eaccess, euidaccess
copy_LDADD += $(LIB_EACCESS)
remove_LDADD += $(LIB_EACCESS)
test_LDADD += $(LIB_EACCESS)

# for selinux use
chcon_LDADD += $(LIB_SELINUX)
copy_LDADD += $(LIB_SELINUX)
ginstall_LDADD += $(LIB_SELINUX)
id_LDADD += $(LIB_SELINUX)
ls_LDADD += $(LIB_SELINUX)
mkdir_LDADD += $(LIB_SELINUX)
mkfifo_LDADD += $(LIB_SELINUX)
mknod_LDADD += $(LIB_SELINUX)
runcon_LDADD += $(LIB_SELINUX)
stat_LDADD += $(LIB_SELINUX)

# for gettime, settime, utimecmp, utimens
copy_LDADD += $(LIB_CLOCK_GETTIME)
date_LDADD += $(LIB_CLOCK_GETTIME)
ginstall_LDADD += $(LIB_CLOCK_GETTIME)
ls_LDADD += $(LIB_CLOCK_GETTIME)
pr_LDADD += $(LIB_CLOCK_GETTIME)
touch_LDADD += $(LIB_CLOCK_GETTIME)

# for gethrxtime, randint, randread, gen_tempname
dd_LDADD += $(LIB_GETHRXTIME)
mktemp_LDADD += $(LIB_GETHRXTIME)
shred_LDADD += $(LIB_GETHRXTIME)
shuf_LDADD += $(LIB_GETHRXTIME)
sort_LDADD += $(LIB_GETHRXTIME)

# for cap_get_file
ls_LDADD += $(LIB_CAP)

# for fdatasync
dd_LDADD += $(LIB_FDATASYNC)
shred_LDADD += $(LIB_FDATASYNC)

# for strtod, strtold
printf_LDADD += $(POW_LIB)
seq_LDADD += $(POW_LIB)
sleep_LDADD += $(POW_LIB)
sort_LDADD += $(POW_LIB)
tail_LDADD += $(POW_LIB)
uptime_LDADD += $(POW_LIB)

# for xnanosleep
sleep_LDADD += $(LIB_NANOSLEEP)
tail_LDADD += $(LIB_NANOSLEEP)

# for various GMP functions
expr_LDADD += $(LIB_GMP)
factor_LDADD += $(LIB_GMP)

# for getloadavg
uptime_LDADD += $(GETLOADAVG_LIBS)

# for crypt
su_LDADD += $(LIB_CRYPT)

# for various ACL functions
copy_LDADD += $(LIB_ACL)
dir_LDADD += $(LIB_ACL)

# for various xattr functions
copy_LDADD += $(LIB_XATTR)

# for print_unicode_char, proper_name_utf8
cat_LDADD += $(LIBICONV)
cp_LDADD += $(LIBICONV)
df_LDADD += $(LIBICONV)
du_LDADD += $(LIBICONV)
getlimits_LDADD += $(LIBICONV)
printf_LDADD += $(LIBICONV)
ptx_LDADD += $(LIBICONV)
split_LDADD += $(LIBICONV)
stdbuf_LDADD += $(LIBICONV)
timeout_LDADD += $(LIBICONV)
truncate_LDADD += $(LIBICONV)

# for canon_host
pinky_LDADD += $(GETADDRINFO_LIB)
who_LDADD += $(GETADDRINFO_LIB)







reply via email to

[Prev in Thread] Current Thread [Next in Thread]