17750ad47SMarcel Moolenaar# $Id: install-new.mk,v 1.3 2012/03/24 18:25:49 sjg Exp $ 27750ad47SMarcel Moolenaar# 37750ad47SMarcel Moolenaar# @(#) Copyright (c) 2009, Simon J. Gerraty 47750ad47SMarcel Moolenaar# 57750ad47SMarcel Moolenaar# This file is provided in the hope that it will 67750ad47SMarcel Moolenaar# be of use. There is absolutely NO WARRANTY. 77750ad47SMarcel Moolenaar# Permission to copy, redistribute or otherwise 87750ad47SMarcel Moolenaar# use this file is hereby granted provided that 97750ad47SMarcel Moolenaar# the above copyright notice and this notice are 107750ad47SMarcel Moolenaar# left intact. 117750ad47SMarcel Moolenaar# 127750ad47SMarcel Moolenaar# Please send copies of changes and bug-fixes to: 137750ad47SMarcel Moolenaar# sjg@crufty.net 147750ad47SMarcel Moolenaar# 157750ad47SMarcel Moolenaar 167750ad47SMarcel Moolenaar.if !defined(InstallNew) 177750ad47SMarcel Moolenaar 187750ad47SMarcel Moolenaar# copy if src and target are different making a backup if desired 197750ad47SMarcel MoolenaarCmpCp= CmpCp() { \ 207750ad47SMarcel Moolenaar src=$$1 target=$$2 _bak=$$3; \ 217750ad47SMarcel Moolenaar if ! test -s $$target || ! cmp -s $$target $$src; then \ 227750ad47SMarcel Moolenaar trap "" 1 2 3 15; \ 237750ad47SMarcel Moolenaar if test -s $$target; then \ 247750ad47SMarcel Moolenaar if test "x$$_bak" != x; then \ 257750ad47SMarcel Moolenaar rm -f $$target$$_bak; \ 267750ad47SMarcel Moolenaar mv $$target $$target$$_bak; \ 277750ad47SMarcel Moolenaar else \ 287750ad47SMarcel Moolenaar rm -f $$target; \ 297750ad47SMarcel Moolenaar fi; \ 307750ad47SMarcel Moolenaar fi; \ 317750ad47SMarcel Moolenaar cp $$src $$target; \ 327750ad47SMarcel Moolenaar fi; } 337750ad47SMarcel Moolenaar 34249f51a4SBryan Drewery# Replace the file if they are different and make a backup if desired 35249f51a4SBryan DreweryCmpReplace= CmpReplace() { \ 36249f51a4SBryan Drewery src=$$1 target=$$2 _bak=$$3; \ 37249f51a4SBryan Drewery if ! test -s $$target || ! cmp -s $$target $$src; then \ 38249f51a4SBryan Drewery trap "" 1 2 3 15; \ 39249f51a4SBryan Drewery if test -s $$target; then \ 40249f51a4SBryan Drewery if test "x$$_bak" != x; then \ 41249f51a4SBryan Drewery rm -f $$target$$_bak; \ 42249f51a4SBryan Drewery cp -f $$target $$target$$_bak; \ 43249f51a4SBryan Drewery fi; \ 44249f51a4SBryan Drewery fi; \ 45249f51a4SBryan Drewery mv -f $$src $$target; \ 46249f51a4SBryan Drewery fi; } 47249f51a4SBryan Drewery 487750ad47SMarcel Moolenaar# If the .new file is different, we want it. 497750ad47SMarcel Moolenaar# Note: this function will work as is for *.new$RANDOM" 50249f51a4SBryan DreweryInstallNew= ${CmpReplace}; InstallNew() { \ 517750ad47SMarcel Moolenaar _t=-e; _bak=; \ 527750ad47SMarcel Moolenaar while :; do \ 537750ad47SMarcel Moolenaar case "$$1" in \ 547750ad47SMarcel Moolenaar -?) _t=$$1; shift;; \ 557750ad47SMarcel Moolenaar --bak) _bak=$$2; shift 2;; \ 567750ad47SMarcel Moolenaar *) break;; \ 577750ad47SMarcel Moolenaar esac; \ 587750ad47SMarcel Moolenaar done; \ 597750ad47SMarcel Moolenaar for new in "$$@"; do \ 607750ad47SMarcel Moolenaar if test $$_t $$new; then \ 617750ad47SMarcel Moolenaar target=`expr $$new : '\(.*\).new'`; \ 62249f51a4SBryan Drewery CmpReplace $$new $$target $$_bak; \ 637750ad47SMarcel Moolenaar fi; \ 647750ad47SMarcel Moolenaar rm -f $$new; \ 657750ad47SMarcel Moolenaar done; :; } 667750ad47SMarcel Moolenaar 677750ad47SMarcel Moolenaar.endif 68