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 <[email protected]> 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)
