1a34d5fb1SAntonio Huete Jimenez# $Id: install-new.mk,v 1.4 2020/08/19 17:51:53 sjg Exp $ 25f1e34d9SAlexandre Perrin# 35f1e34d9SAlexandre Perrin# @(#) Copyright (c) 2009, Simon J. Gerraty 45f1e34d9SAlexandre Perrin# 55f1e34d9SAlexandre Perrin# This file is provided in the hope that it will 65f1e34d9SAlexandre Perrin# be of use. There is absolutely NO WARRANTY. 75f1e34d9SAlexandre Perrin# Permission to copy, redistribute or otherwise 85f1e34d9SAlexandre Perrin# use this file is hereby granted provided that 95f1e34d9SAlexandre Perrin# the above copyright notice and this notice are 105f1e34d9SAlexandre Perrin# left intact. 115f1e34d9SAlexandre Perrin# 125f1e34d9SAlexandre Perrin# Please send copies of changes and bug-fixes to: 135f1e34d9SAlexandre Perrin# sjg@crufty.net 145f1e34d9SAlexandre Perrin# 155f1e34d9SAlexandre Perrin 165f1e34d9SAlexandre Perrin.if !defined(InstallNew) 175f1e34d9SAlexandre Perrin 185f1e34d9SAlexandre Perrin# copy if src and target are different making a backup if desired 195f1e34d9SAlexandre PerrinCmpCp= CmpCp() { \ 205f1e34d9SAlexandre Perrin src=$$1 target=$$2 _bak=$$3; \ 215f1e34d9SAlexandre Perrin if ! test -s $$target || ! cmp -s $$target $$src; then \ 225f1e34d9SAlexandre Perrin trap "" 1 2 3 15; \ 235f1e34d9SAlexandre Perrin if test -s $$target; then \ 245f1e34d9SAlexandre Perrin if test "x$$_bak" != x; then \ 255f1e34d9SAlexandre Perrin rm -f $$target$$_bak; \ 265f1e34d9SAlexandre Perrin mv $$target $$target$$_bak; \ 275f1e34d9SAlexandre Perrin else \ 285f1e34d9SAlexandre Perrin rm -f $$target; \ 295f1e34d9SAlexandre Perrin fi; \ 305f1e34d9SAlexandre Perrin fi; \ 315f1e34d9SAlexandre Perrin cp $$src $$target; \ 325f1e34d9SAlexandre Perrin fi; } 335f1e34d9SAlexandre Perrin 345f1e34d9SAlexandre Perrin# If the .new file is different, we want it. 355f1e34d9SAlexandre Perrin# Note: this function will work as is for *.new$RANDOM" 365f1e34d9SAlexandre PerrinInstallNew= ${CmpCp}; InstallNew() { \ 375f1e34d9SAlexandre Perrin _t=-e; _bak=; \ 385f1e34d9SAlexandre Perrin while :; do \ 395f1e34d9SAlexandre Perrin case "$$1" in \ 405f1e34d9SAlexandre Perrin -?) _t=$$1; shift;; \ 415f1e34d9SAlexandre Perrin --bak) _bak=$$2; shift 2;; \ 425f1e34d9SAlexandre Perrin *) break;; \ 435f1e34d9SAlexandre Perrin esac; \ 445f1e34d9SAlexandre Perrin done; \ 455f1e34d9SAlexandre Perrin for new in "$$@"; do \ 465f1e34d9SAlexandre Perrin if test $$_t $$new; then \ 475f1e34d9SAlexandre Perrin target=`expr $$new : '\(.*\).new'`; \ 485f1e34d9SAlexandre Perrin CmpCp $$new $$target $$_bak; \ 495f1e34d9SAlexandre Perrin fi; \ 505f1e34d9SAlexandre Perrin rm -f $$new; \ 515f1e34d9SAlexandre Perrin done; :; } 525f1e34d9SAlexandre Perrin 535f1e34d9SAlexandre Perrin.endif 54