#! /bin/sh # Copyright (C) 2011-2013 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 2, 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 . # Sanity check for the automake testsuite: the 'is_newest' subroutine. . test-init.sh plan_ 21 # I'm a lazy typist. Y () { command_ok_ "is_newest $*" is_newest "$@"; } N () { command_ok_ "not is_newest $*" not is_newest "$@"; } # A simple "touch -r" might not work, since on some file systems, and/or # with some 'touch' versions, it might truncate the timestamp (or even # rounded it upwards maybe). So the first (apparently redundant) 'touch' # invocation below ensures that the timestamp gets "normalized" in a way # that allows it to be correctly copied by the second 'touch' invocation. copy_timestamp () { touch -r "$1" "$1" && touch -r "$1" "$2" } : > a $sleep : > b : > c stat a b c || : # For debugging. Y c a Y b a N a b Y c b Y c c Y c a b c copy_timestamp c d stat c d || : # For debugging. Y c d # Should work on directories too, both empty and not-empty. An older # implementation of 'is_newest' failed if the first argument was a # directory containing files newer than itself (see automake bug#9147). mkdir u x touch x/foo $sleep touch x/foo $sleep mkdir v y touch y/foo $sleep touch y/foo stat u v x y x/foo y/foo || : # For debugging. for older in u x; do for newer in v y; do Y $newer $older N $older $newer done done Y x/foo x N x x/foo copy_timestamp x u Y x u Y u x # A couple of mild "stress" tests. Y y x u v Y y u x/foo a b c :