summaryrefslogtreecommitdiff
path: root/build-aux/gen-lists-of-programs.sh
diff options
context:
space:
mode:
authorStefano Lattarini <stefano.lattarini@gmail.com>2012-09-01 01:46:39 +0200
committerJim Meyering <meyering@redhat.com>2012-09-01 21:25:13 +0200
commit4f2e62ba9fd482375fdc085de71a5c947741d140 (patch)
treed2af441afdd32f8f1167dab183ace72bbaeec2d6 /build-aux/gen-lists-of-programs.sh
parent1aaa8af9296c5bc7a05047f0114c9be7b3fdfea5 (diff)
downloadcoreutils-4f2e62ba9fd482375fdc085de71a5c947741d140.tar.xz
build: refactor how lists of coreutils programs are defined
This is in preparation of future changes. Still, this patch leaves the build system in a better shape; true, with more indirections, but also with less convoluted and brittle hacks. Unfortunately, this commit also makes some rebuild rules incomplete; that will son be fixed by follow-up patches. * build-aux/gen-lists-of-programs.sh: New, generates autoconf and automake input fragments that define "lists" of all coreutils programs, with further distinctions about how and when these programs should be built (by default; if the system is capable enough; only if the user asks for them explicitly). This is useful to avoid duplicating the definitions of these lists among several files (at least 'configure.ac' 'src/Makefile.am'); such duplication had proved a source of inconsistencies and bugs in the past. And the pre-existing way to avoid such duplication, as implemented in 'configure.ac' before this patch, was overly complex and brittle. * Makefile.am (EXTRA_DIST): Distribute the new script. * bootstrap.conf (bootstrap_post_import_hook): Run the new script to generate 'm4/cu-progs.m4' and 'src/cu-progs.mk'. * .gitignore: Ignore those files. * configure.ac: Include 'm4/cu-progs.m4', and decidedly simplify most of the program lists definition and processing accordingly. * src/Makefile.am: Similarly include 'src/cu-progs.mk', containing definition of variables $(default__progs), $(no_install__progs) and $(build_if_possible__progs). Accordingly ... (no_install__progs, build_if_possible__progs): ... remove. (EXTRA_DIST): Adjust definition. Adjust a comment.
Diffstat (limited to 'build-aux/gen-lists-of-programs.sh')
-rwxr-xr-xbuild-aux/gen-lists-of-programs.sh185
1 files changed, 185 insertions, 0 deletions
diff --git a/build-aux/gen-lists-of-programs.sh b/build-aux/gen-lists-of-programs.sh
new file mode 100755
index 000000000..2db0745bc
--- /dev/null
+++ b/build-aux/gen-lists-of-programs.sh
@@ -0,0 +1,185 @@
+#!/bin/sh
+# Generate lists of all coreutils programs, to be fed both to Autoconf
+# and Automake, and with further distinctions about how and when these
+# programs should be built. This is useful to avoid duplicating the
+# definitions of these list among several files ('configure.ac' and
+# 'src/Makefile.am' at least); such duplication had proved a source of
+# inconsistencies and bugs in the past.
+
+set -u
+set -e
+
+# These are the names of programs that are neither built nor installed
+# by default. This list is *not* intended for programs like 'who',
+# 'nice', 'chroot', etc., that are built only when certain requisite
+# system features are detected.
+# If you would like to install programs from this list anyway, say A and B,
+# use "--enable-install-program=A,B" when invoking configure.
+disabled_by_default_progs='
+ arch
+ hostname
+'
+
+# Programs that can be built only when certain requisite system
+# features are detected. These prerequisites will be looked for
+# at configure runtime.
+build_if_possible_progs='
+ chroot
+ df
+ hostid
+ libstdbuf.so
+ nice
+ pinky
+ stdbuf
+ stty
+ uptime
+ users
+ who
+'
+
+# All the other programs, to be built by default, and that should
+# be buildable without problems on any target system.
+normal_progs='
+ [
+ base64
+ basename
+ cat
+ chcon
+ chgrp
+ chmod
+ chown
+ cksum
+ comm
+ cp
+ csplit
+ cut
+ date
+ dd
+ dir
+ dircolors
+ dirname
+ du
+ echo
+ env
+ expand
+ expr
+ factor
+ false
+ fmt
+ fold
+ ginstall
+ groups
+ head
+ id
+ join
+ kill
+ link
+ ln
+ logname
+ ls
+ md5sum
+ mkdir
+ mkfifo
+ mknod
+ mktemp
+ mv
+ nl
+ nproc
+ nohup
+ od
+ paste
+ pathchk
+ pr
+ printenv
+ printf
+ ptx
+ pwd
+ readlink
+ realpath
+ rm
+ rmdir
+ runcon
+ seq
+ sha1sum
+ sha224sum
+ sha256sum
+ sha384sum
+ sha512sum
+ shred
+ shuf
+ sleep
+ sort
+ split
+ stat
+ sum
+ sync
+ tac
+ tail
+ tee
+ test
+ timeout
+ touch
+ tr
+ true
+ truncate
+ tsort
+ tty
+ uname
+ unexpand
+ uniq
+ unlink
+ vdir
+ wc
+ whoami
+ yes
+'
+
+me=`echo "$0" | sed 's,.*/,,'`
+msg="Automatically generated by $me. DO NOT EDIT BY HAND!"
+
+case $#,$1 in
+ 1,--autoconf|1,--for-autoconf)
+ echo "dnl $msg"
+ for p in $normal_progs; do
+ test x"$p" = x"[" && p='@<:@'
+ echo "gl_ADD_PROG([optional_bin_progs], [$p])"
+ done
+ # Extra 'echo' to normalize whitespace.
+ echo "no_install_progs_default='`echo $disabled_by_default_progs`'"
+ sed 's/^ *//' <<END
+ # Given the name of a variable containing a space-separated
+ # list of install-by-default programs and the actual list
+ # do-not-install-by-default programs, modify the former variable
+ # to reflect any "do-install" and "don't-install" requests.
+ # That is, add any program specified via --enable-install-program,
+ # and remove any program specified via --enable-no-install-program.
+ # Note how the second argument below is a literal, with ","
+ # separators. That is required due to the way the macro works,
+ # and since the corresponding ./configure option argument is
+ # comma-separated on input.
+ gl_INCLUDE_EXCLUDE_PROG([optional_bin_progs], [`\
+ echo $disabled_by_default_progs \
+ | sed 's/ /,/g'`])
+END
+ ;;
+ 1,--automake|1,--for-automake)
+ echo "## $msg"
+ echo no_install__progs =
+ for p in $disabled_by_default_progs; do
+ echo no_install__progs += $p
+ done
+ echo build_if_possible__progs =
+ for p in $build_if_possible_progs; do
+ echo build_if_possible__progs += $p
+ done
+ echo default__progs =
+ for p in $normal_progs; do
+ echo default__progs += $p
+ done
+ ;;
+ *)
+ echo "$0: invalid usage" >&2; exit 2
+ ;;
+esac
+
+exit 0