]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/mk/install-new.mk
Import Annapurna Labs Alpine HAL to sys/contrib/
[FreeBSD/FreeBSD.git] / share / mk / install-new.mk
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
20 CmpCp= 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"
37 InstallNew= ${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