From cd9c604c96480819c053811432b7c36073ad785e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ignacy=20Gaw=C4=99dzki?= Date: Wed, 15 Dec 2021 18:34:32 +0100 Subject: [PATCH] package/fakedate: fix finding the right date executable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 [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 --- package/fakedate/fakedate | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/package/fakedate/fakedate b/package/fakedate/fakedate index 9bef113357..7ebbf1f0da 100755 --- a/package/fakedate/fakedate +++ b/package/fakedate/fakedate @@ -18,16 +18,23 @@ # Copyright (C) 2016 Jérôme Pouiller # -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