xref: /freebsd/share/mk/install-new.mk (revision d0b2dbfa)
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