package/fakedate: fix finding the right date executable

Currently, we look for the actual date be easrching form the end of the
PATH, and keeping the last-found date that occurs after the wrapper.

However, in some cases, the wrapper will be the last item in the PATH.
This is the cae when users already have the HOST_DIR/bin at the end of
their PATH, à-la:  PATH="${PATH}:/path/to/buildroot/output/host/bin"

In this case, we would not find any matching date.

The issue is that Buildroot adds HOST_DIR/bin at the beginning of the
PATH, so the real date will be to be found after the HOST_DIR that is
early in the PATH, but before the HOST_DIR that is at the end.

We fix the issue by searching the PATH as it is expecte to be searched,
shoud Buildroot had not added its date wrapper: we use the first date
executable that is found in the PATH, starting from the beginning, that
is after our wrapper, abd that is not the wrapper itself.

Signed-off-by: Ignacy Gawędzki <ignacy.gawedzki@green-communications.fr>
[yann.morin.1998@free.fr:
  - iterate in order from first-to-last
  - stop on the first occurence
  - handle the case where no date was found
  - extend and expand the commit log
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
This commit is contained in:
Ignacy Gawędzki 2021-12-15 18:34:32 +01:00 committed by Yann E. MORIN
parent 64843258ce
commit cd9c604c96

View file

@ -18,16 +18,23 @@
# Copyright (C) 2016 Jérôme Pouiller <jezz@sysmic.org>
#
DATE_BIN=false
# Do not call any 'date' before us in the PATH, or that would create
# an infinite recursion.
for date in $(which -a date |tac); do
found=false
for date in $(which -a date); do
if [ "${date}" -ef "$0" ]; then
found=true
elif ${found}; then
DATE_BIN="${date}"
break
fi
DATE_BIN="${date}"
done
if [ -z "${DATE_BIN}" ]; then
printf 'fakedate: no real date found in PATH after "%s"\n' "${0}" >&2
exit 1
fi
if [ -n "$SOURCE_DATE_EPOCH" ]; then
FORCE_EPOCH=1
for i in "$@"; do