]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/bmake/mk/install-new.mk
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / bmake / mk / install-new.mk
1 # $Id: install-new.mk,v 1.3 2012/03/24 18:25:49 sjg Exp $
2 #
3 #       @(#) Copyright (c) 2009, Simon J. Gerraty
4 #
5 #       This file is provided in the hope that it will
6 #       be of use.  There is absolutely NO WARRANTY.
7 #       Permission to copy, redistribute or otherwise
8 #       use this file is hereby granted provided that 
9 #       the above copyright notice and this notice are
10 #       left intact. 
11 #      
12 #       Please send copies of changes and bug-fixes to:
13 #       sjg@crufty.net
14 #
15
16 .if !defined(InstallNew)
17
18 # copy if src and target are different making a backup if desired
19 CmpCp= CmpCp() { \
20         src=$$1 target=$$2 _bak=$$3; \
21         if ! test -s $$target || ! cmp -s $$target $$src; then \
22                 trap "" 1 2 3 15; \
23                 if test -s $$target; then \
24                         if test "x$$_bak" != x; then \
25                                 rm -f $$target$$_bak; \
26                                 mv $$target $$target$$_bak; \
27                         else \
28                                 rm -f $$target; \
29                         fi; \
30                 fi; \
31                 cp $$src $$target; \
32         fi; }
33
34 # If the .new file is different, we want it.
35 # Note: this function will work as is for *.new$RANDOM"
36 InstallNew= ${CmpCp}; InstallNew() { \
37         _t=-e; _bak=; \
38         while :; do \
39                 case "$$1" in \
40                 -?) _t=$$1; shift;; \
41                 --bak) _bak=$$2; shift 2;; \
42                 *) break;; \
43                 esac; \
44         done; \
45         for new in "$$@"; do \
46                 if test $$_t $$new; then \
47                         target=`expr $$new : '\(.*\).new'`; \
48                         CmpCp $$new $$target $$_bak; \
49                 fi; \
50                 rm -f $$new; \
51         done; :; }
52
53 .endif