mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-02-11 01:42:17 +02:00
Fix du and ls to conform to the POSIX getenv spec, which says you can’t modify strings returned by getenv unless you put the string there directly, or used putenv. This portability bug was found by strict C23 checking using qualifier-generic functions. * bootstrap.conf (gnulib_modules): Add xmemdup0. Sort. * src/du.c (main): * src/ls.c (decode_switches): Don’t modify the string that getenv returns. Instead, use xmemdup0 if needed, and include xmemdup0.h.
463 lines
8.4 KiB
Bash
463 lines
8.4 KiB
Bash
# Bootstrap configuration. -*- sh -*-
|
|
|
|
# Copyright (C) 2006-2025 Free Software Foundation, Inc.
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
|
|
# We don't need these modules.
|
|
avoided_gnulib_modules='
|
|
--avoid=canonicalize-lgpl
|
|
--avoid=dummy
|
|
--avoid=mbuiter
|
|
--avoid=mbuiterf
|
|
'
|
|
|
|
# gnulib modules used by this package.
|
|
gnulib_modules="
|
|
$avoided_gnulib_modules
|
|
acl
|
|
acl-permissions
|
|
alignalloc
|
|
alignasof
|
|
alloca
|
|
announce-gen
|
|
areadlink-with-size
|
|
areadlinkat-with-size
|
|
argmatch
|
|
argv-iter
|
|
assert
|
|
assert-h
|
|
assure
|
|
attribute
|
|
autobuild
|
|
backup-rename
|
|
backupfile
|
|
base32
|
|
base64
|
|
bool
|
|
btoc32
|
|
buffer-lcm
|
|
c-strcase
|
|
c32iscntrl
|
|
c32isspace
|
|
c32width
|
|
canon-host
|
|
canonicalize
|
|
chmodat
|
|
chown
|
|
chownat
|
|
cl-strtod
|
|
cl-strtold
|
|
closein
|
|
closeout
|
|
config-h
|
|
configmake
|
|
copy-file-range
|
|
cpu-supports
|
|
crc-x86_64
|
|
crypto/md5
|
|
crypto/sha1
|
|
crypto/sha256
|
|
crypto/sha3
|
|
crypto/sha512
|
|
crypto/sm3
|
|
cycle-check
|
|
d-ino
|
|
d-type
|
|
di-set
|
|
dirfd
|
|
dirname
|
|
do-release-commit-and-tag
|
|
dtimespec-bound
|
|
dtoastr
|
|
dup2
|
|
endian
|
|
environ
|
|
error
|
|
euidaccess
|
|
exclude
|
|
exitfail
|
|
explicit_bzero
|
|
faccessat
|
|
fadvise
|
|
fchdir
|
|
fchmodat
|
|
fclose
|
|
fcntl
|
|
fcntl-safer
|
|
fd-reopen
|
|
fdatasync
|
|
fdopen
|
|
fdutimensat
|
|
file-has-acl
|
|
file-type
|
|
fileblocks
|
|
filemode
|
|
filenamecat
|
|
filevercmp
|
|
findprog-in
|
|
flexmember
|
|
fnmatch-gnu
|
|
fopen-safer
|
|
fprintftime
|
|
fpurge
|
|
free-posix
|
|
freopen
|
|
freopen-safer
|
|
fseeko
|
|
fstatat
|
|
fsusage
|
|
fsync
|
|
ftoastr
|
|
ftruncate
|
|
fts
|
|
full-read
|
|
full-write
|
|
gethrxtime
|
|
getline
|
|
getloadavg
|
|
getlogin
|
|
getndelim2
|
|
getopt-gnu
|
|
getpagesize
|
|
gettext-h
|
|
gettime
|
|
gettime-res
|
|
git-version-gen
|
|
gitlog-to-changelog
|
|
gnu-web-doc-update
|
|
gnumakefile
|
|
gnupload
|
|
hard-locale
|
|
hash
|
|
hashcode-file-inode
|
|
heap
|
|
host-os
|
|
human
|
|
idcache
|
|
idx
|
|
ignore-value
|
|
inttostr
|
|
inttypes-h
|
|
isapipe
|
|
isatty
|
|
isblank
|
|
issymlink
|
|
issymlinkat
|
|
largefile
|
|
lchmod
|
|
ldtoastr
|
|
lib-ignore
|
|
libgmp
|
|
linebuffer
|
|
link
|
|
link-follow
|
|
linkat
|
|
long-options
|
|
lstat
|
|
maintainer-makefile
|
|
malloc-gnu
|
|
manywarnings
|
|
mbbuf
|
|
mbrlen
|
|
mbrtoc32
|
|
mbrtowc
|
|
mbs_endswith
|
|
mbschr
|
|
mbslen
|
|
mbsstr
|
|
mbswidth
|
|
mbszero
|
|
mcel-prefer
|
|
memcasecmp
|
|
memchr
|
|
memcmp2
|
|
mempcpy
|
|
memrchr
|
|
minmax
|
|
mkancesdirs
|
|
mkdir
|
|
mkdir-p
|
|
mkdirat
|
|
mkfifo
|
|
mkfifoat
|
|
mknod
|
|
mkostemp
|
|
mkstemp
|
|
mktime
|
|
modechange
|
|
mountlist
|
|
mpsort
|
|
nproc
|
|
nstrftime
|
|
nullptr
|
|
obstack
|
|
open
|
|
openat-safer
|
|
parse-datetime
|
|
parse-datetime2
|
|
pathmax
|
|
perl
|
|
physmem
|
|
pipe-posix
|
|
pipe2
|
|
posix-shell
|
|
posix_spawn
|
|
posix_spawn_file_actions_addclose
|
|
posix_spawn_file_actions_adddup2
|
|
posix_spawn_file_actions_destroy
|
|
posix_spawn_file_actions_init
|
|
posix_spawnattr_destroy
|
|
posix_spawnattr_init
|
|
posix_spawnattr_setflags
|
|
posix_spawnattr_setsigdefault
|
|
posix_spawnp
|
|
posixtm
|
|
posixver
|
|
priv-set
|
|
progname
|
|
propername-lite
|
|
pthread-cond
|
|
pthread-mutex
|
|
pthread-thread
|
|
pthread_sigmask
|
|
putenv-gnu
|
|
quote
|
|
quotearg
|
|
randint
|
|
randperm
|
|
rawmemchr
|
|
read-file
|
|
readtokens
|
|
readtokens0
|
|
readutmp
|
|
regex
|
|
remove
|
|
renameat
|
|
renameatu
|
|
rmdir
|
|
root-dev-ino
|
|
safe-read
|
|
same
|
|
save-cwd
|
|
savedir
|
|
savewd
|
|
select
|
|
selinux-at
|
|
setenv
|
|
settime
|
|
sig2str
|
|
sigaction
|
|
skipchars
|
|
smack
|
|
ssize_t
|
|
stat-macros
|
|
stat-size
|
|
stat-time
|
|
stdc_leading_zeros
|
|
stdc_trailing_zeros
|
|
stdckdint-h
|
|
stdcountof-h
|
|
stddef-h
|
|
stdlib-safer
|
|
stpcpy
|
|
str_endswith
|
|
strdup-posix
|
|
stringeq
|
|
strnlen
|
|
strnumcmp
|
|
strsignal
|
|
strtoimax
|
|
strtoumax
|
|
symlinkat
|
|
sys_ioctl-h
|
|
sys_resource-h
|
|
sys_stat-h
|
|
sys_types-h
|
|
sys_wait-h
|
|
targetdir
|
|
tempname
|
|
termios-h
|
|
time_rz
|
|
timer-time
|
|
timespec
|
|
tmpdir
|
|
uname
|
|
unicodeio
|
|
unistd-safer
|
|
unlink-busy
|
|
unlinkat
|
|
unlinkdir
|
|
unlocked-io
|
|
unsetenv
|
|
update-copyright
|
|
useless-if-before-free
|
|
userspec
|
|
utimecmp
|
|
utimens
|
|
utimensat
|
|
vasprintf-posix
|
|
vc-list-files
|
|
verify
|
|
verror
|
|
version-etc-fsf
|
|
winsz-ioctl
|
|
winsz-termios
|
|
write-any-file
|
|
xalignalloc
|
|
xalloc
|
|
xbinary-io
|
|
xdectoint
|
|
xfts
|
|
xgetcwd
|
|
xgetgroups
|
|
xgethostname
|
|
xmemcoll
|
|
xmemdup0
|
|
xnanosleep
|
|
xprintf
|
|
xprintf-posix
|
|
xreadlink
|
|
xsetenv
|
|
xstrtod
|
|
xstrtoimax
|
|
xstrtol
|
|
xstrtol-error
|
|
xstrtold
|
|
xstrtoumax
|
|
xvasprintf
|
|
year2038-recommended
|
|
yesno
|
|
"
|
|
|
|
# Other locale categories that need message catalogs.
|
|
EXTRA_LOCALE_CATEGORIES=LC_TIME
|
|
|
|
# Additional xgettext options to use. Use "\\\newline" to break lines.
|
|
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
|
|
--flag=asnprintf:3:c-format\\\
|
|
--flag=asprintf:2:c-format\\\
|
|
--flag=error:3:c-format\\\
|
|
--flag=error_at_line:5:c-format\\\
|
|
--flag=vasnprintf:3:c-format\\\
|
|
--flag=vasprintf:2:c-format\\\
|
|
--flag=verror:3:c-format\\\
|
|
--flag=verror_at_line:5:c-format\\\
|
|
--flag=wrapf:1:c-format\\\
|
|
--flag=xasprintf:1:c-format\\\
|
|
--flag=xfprintf:2:c-format\\\
|
|
--flag=xprintf:1:c-format\\\
|
|
--from-code=UTF-8\\\
|
|
'
|
|
|
|
# Append these, since we use the propername-lite module.
|
|
see_manual='"This is a proper name. See the gettext manual, section Names."'
|
|
see_manual=\'"$see_manual"\'
|
|
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
|
|
--keyword=proper_name:1,'"$see_manual"'\\\
|
|
--keyword=proper_name_lite:1,'"$see_manual"'\\\
|
|
'
|
|
|
|
gnulib_tool_option_extras="--tests-base=gnulib-tests --with-tests --symlink\
|
|
--makefile-name=gnulib.mk --automake-subdir
|
|
"
|
|
|
|
# Build prerequisites
|
|
buildreq="\
|
|
autoconf 2.64
|
|
automake 1.11.2
|
|
autopoint 0.19.2
|
|
bison -
|
|
gettext 0.19.2
|
|
git 1.5.5
|
|
gperf -
|
|
gzip -
|
|
m4 -
|
|
makeinfo 6.1
|
|
texi2pdf 6.1
|
|
patch -
|
|
perl 5.5
|
|
tar -
|
|
wget -
|
|
xz -
|
|
"
|
|
|
|
bootstrap_post_import_hook ()
|
|
{
|
|
# Automake requires that ChangeLog exist.
|
|
touch ChangeLog || return 1
|
|
# List of coreutils programs. See heading comments in the invoked
|
|
# script for more info. Keep this in sync with the rules in
|
|
(m4f=m4/cu-progs.m4 mkf=src/cu-progs.mk tmp=cu-progs.tmp \
|
|
&& rm -f $m4f $mkf $tmp-1 $tmp-2 \
|
|
&& build-aux/gen-lists-of-programs.sh --autoconf >$tmp-1 \
|
|
&& build-aux/gen-lists-of-programs.sh --automake >$tmp-2 \
|
|
&& chmod a-w $tmp-1 $tmp-2 \
|
|
&& mv -f $tmp-1 $m4f && mv -f $tmp-2 $mkf)
|
|
|
|
# If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]" appears
|
|
# in configure.ac, remove a file unnecessarily imported by autopoint.
|
|
if grep '^[ ]*AM_GNU_GETTEXT(\[*external]*[,)]' \
|
|
configure.ac >/dev/null 2>&1; then
|
|
rm -f m4/longlong.m4
|
|
fi
|
|
|
|
# Regenerate src/single-binary.mk
|
|
(mkf=src/single-binary.mk tmp=single-binary.tmp \
|
|
&& rm -f $mkf $tmp \
|
|
&& build-aux/gen-single-binary.sh src/local.mk >$tmp \
|
|
&& chmod a-w $tmp \
|
|
&& mv -f $tmp $mkf)
|
|
|
|
# Copy tests/init.sh from Gnulib.
|
|
$gnulib_tool --copy-file tests/init.sh
|
|
}
|
|
|
|
|
|
bootstrap_epilogue()
|
|
{
|
|
# Since this is a "GNU" package, replace this line
|
|
# if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null \
|
|
# | grep -v 'libtool:' >/dev/null; then
|
|
# with this:
|
|
# if true; then
|
|
# Why? That pipeline searches all files in $(top_srcdir), and if you
|
|
# happen to have large files (or apparently large sparse files), the
|
|
# first grep may well run out of memory.
|
|
perl -pi -e 's/if LC_ALL=C grep .GNU .PACKAGE.*; then/if true; then/' \
|
|
po/Makefile.in.in
|
|
|
|
# Add dummy 'install-html' target, required for packages using
|
|
# non-recursive makefiles with older gettext.
|
|
# See https://bugs.gnu.org/25690
|
|
if ! grep -w 'install-html' po/Makefile.in.in ; then
|
|
printf 'install-%s:;\n' dvi ps pdf html >> po/Makefile.in.in
|
|
fi
|
|
|
|
# Install our git hooks, as long as "cp" accepts the --backup option,
|
|
# so that we can back up any existing files.
|
|
case $(cp --help) in *--backup*) backup=1;; *) backup=0;; esac
|
|
if test $backup = 1; then
|
|
hooks=$(cd scripts/git-hooks && git ls-files)
|
|
for f in $hooks; do
|
|
# If it is identical, skip it.
|
|
cmp scripts/git-hooks/$f .git/hooks/$f > /dev/null \
|
|
&& continue
|
|
cp --backup=numbered scripts/git-hooks/$f .git/hooks
|
|
chmod a-w .git/hooks/$f
|
|
done
|
|
fi
|
|
}
|