1# $FreeBSD$ 2# $Id: install-new.mk,v 1.3 2012/03/24 18:25:49 sjg Exp $ 3# 4# @(#) Copyright (c) 2009, Simon J. Gerraty 5# 6# This file is provided in the hope that it will 7# be of use. There is absolutely NO WARRANTY. 8# Permission to copy, redistribute or otherwise 9# use this file is hereby granted provided that 10# the above copyright notice and this notice are 11# left intact. 12# 13# Please send copies of changes and bug-fixes to: 14# sjg@crufty.net 15# 16 17.if !defined(InstallNew) 18 19# copy if src and target are different making a backup if desired 20CmpCp= CmpCp() { \ 21 src=$$1 target=$$2 _bak=$$3; \ 22 if ! test -s $$target || ! cmp -s $$target $$src; then \ 23 trap "" 1 2 3 15; \ 24 if test -s $$target; then \ 25 if test "x$$_bak" != x; then \ 26 rm -f $$target$$_bak; \ 27 mv $$target $$target$$_bak; \ 28 else \ 29 rm -f $$target; \ 30 fi; \ 31 fi; \ 32 cp $$src $$target; \ 33 fi; } 34 35# If the .new file is different, we want it. 36# Note: this function will work as is for *.new$RANDOM" 37InstallNew= ${CmpCp}; InstallNew() { \ 38 _t=-e; _bak=; \ 39 while :; do \ 40 case "$$1" in \ 41 -?) _t=$$1; shift;; \ 42 --bak) _bak=$$2; shift 2;; \ 43 *) break;; \ 44 esac; \ 45 done; \ 46 for new in "$$@"; do \ 47 if test $$_t $$new; then \ 48 target=`expr $$new : '\(.*\).new'`; \ 49 CmpCp $$new $$target $$_bak; \ 50 fi; \ 51 rm -f $$new; \ 52 done; :; } 53 54.endif 55