#!/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>
#

# Do not call any 'date' before us in the PATH, or that would create
# an infinite recursion.
found=false
for date in $(which -a date); do
    if [ "${date}" -ef "$0" ]; then
        found=true
    elif ${found}; then
        DATE_BIN="${date}"
        break
    fi
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
        # 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 "$@"
