#!/bin/bash
# vim: set sw=4 expandtab:
#
# 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Copyright (C) 2016 Jérôme Pouiller <jezz@sysmic.org>
#

DATE_BIN=false
# Do not call `date' directly since it will produce an infinite recursion.
# Instead, find path of true `date' binary.
for P in `echo $PATH | tr ':' ' '`; do
    if [ -x "$P/date" ]; then
        if ! [ "$P/date" -ef "$0" ]; then
            DATE_BIN="$P/date"
            break;
        fi
    fi
done

if [ -n "$SOURCE_DATE_EPOCH" ]; then
    FORCE_EPOCH=1
    for i in "$@"; do
        # Use of --date, --file and --reference (and their short option counter
        # parts) is incompatible with SOURCE_DATE_EPOCH.
        # -u and -R are the only short options without argument. So they could
        # appear between '-' and option we want to match.
        if echo "$i" | grep -qE '^-([uR]*d|-date|[uR]*f|-file|[uR]*r|--reference)'; then
            FORCE_EPOCH=0
            break;
        fi
    done
    if [ $FORCE_EPOCH -eq 1 ]; then
        echo "date: Warning: using \$SOURCE_DATE_EPOCH instead of true time" >&2
        ARGS="-d @$SOURCE_DATE_EPOCH"
    fi
fi

exec $DATE_BIN $ARGS "$@"
