xref: /dragonfly/contrib/bmake/mk/install-new.mk (revision a34d5fb1)
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