Mon Feb 19 13:00:10 2018 UTC ()
mk/internal/locking.mk: improve documentation for "make help"


(rillig)
diff -r1.9 -r1.10 pkgsrc/mk/internal/locking.mk

cvs diff -r1.9 -r1.10 pkgsrc/mk/internal/Attic/locking.mk (switch to unified diff)

--- pkgsrc/mk/internal/Attic/locking.mk 2007/03/16 20:41:44 1.9
+++ pkgsrc/mk/internal/Attic/locking.mk 2018/02/19 13:00:10 1.10
@@ -1,168 +1,168 @@ @@ -1,168 +1,168 @@
1# $NetBSD: locking.mk,v 1.9 2007/03/16 20:41:44 rillig Exp $ 1# $NetBSD: locking.mk,v 1.10 2018/02/19 13:00:10 rillig Exp $
2# 2#
3# User-settable variables: 3# User-settable variables:
4# 4#
5# WRKDIR_LOCKTYPE 5# WRKDIR_LOCKTYPE
6# The type of locking used for WRKDIR. 6# The type of locking used for WRKDIR.
7# 7#
8# Possible values: none once sleep 8# Possible values: none once sleep
9# Default value: none 9# Default value: none
10# Recommended: once 10# Recommended: once
11# 11#
12# LOCALBASE_LOCKTYPE 12# LOCALBASE_LOCKTYPE
13# The type of locking used for LOCALBASE. 13# The type of locking used for LOCALBASE.
14# 14#
15# Possible values: none once sleep 15# Possible values: none once sleep
16# Default value: none 16# Default value: none
17# Recommended: sleep 17# Recommended: sleep
18# 18#
19# See also: PKGSRC_LOCKTYPE. 19# See also: PKGSRC_LOCKTYPE.
20# 20# Keywords: lock locking parallel
21 21
22# This file provides the following .USE targets: 22# This file provides the following .USE targets:
23# 23#
24# acquire-lock 24# acquire-lock
25# Acquires a coarse-grained lock in WRKDIR. 25# Acquires a coarse-grained lock in WRKDIR.
26# 26#
27# release-lock 27# release-lock
28# Releases the lock in WRKDIR. 28# Releases the lock in WRKDIR.
29# 29#
30# acquire-localbase-lock 30# acquire-localbase-lock
31# Acquires a coarse-grained lock in LOCALBASE. 31# Acquires a coarse-grained lock in LOCALBASE.
32# 32#
33# release-localbase-lock 33# release-localbase-lock
34# Releases the lock in LOCALBASE. 34# Releases the lock in LOCALBASE.
35# 35#
36 36
37WRKDIR_LOCKTYPE?= ${PKGSRC_LOCKTYPE} 37WRKDIR_LOCKTYPE?= ${PKGSRC_LOCKTYPE}
38LOCALBASE_LOCKTYPE?= ${PKGSRC_LOCKTYPE} 38LOCALBASE_LOCKTYPE?= ${PKGSRC_LOCKTYPE}
39 39
40_WRKDIR_LOCKFILE= ${WRKDIR}/.lockfile 40_WRKDIR_LOCKFILE= ${WRKDIR}/.lockfile
41_LOCALBASE_LOCKFILE= ${LOCALBASE}/.lockfile 41_LOCALBASE_LOCKFILE= ${LOCALBASE}/.lockfile
42_LOCKVARS= WRKDIR_LOCKTYPE LOCALBASE_LOCKTYPE 42_LOCKVARS= WRKDIR_LOCKTYPE LOCALBASE_LOCKTYPE
43 43
44# 44#
45# Sanity checks. 45# Sanity checks.
46# 46#
47 47
48.for v in ${_LOCKVARS} 48.for v in ${_LOCKVARS}
49_OK= no 49_OK= no
50. for t in none once sleep 50. for t in none once sleep
51. if ${${v}} == "${t}" 51. if ${${v}} == "${t}"
52_OK= yes 52_OK= yes
53. endif 53. endif
54. endfor 54. endfor
55. if ${_OK} != "yes" 55. if ${_OK} != "yes"
56PKG_FAIL_REASON+= "[locking.mk] ${v} must be one of { none once sleep }, not ${${v}}." 56PKG_FAIL_REASON+= "[locking.mk] ${v} must be one of { none once sleep }, not ${${v}}."
57. endif 57. endif
58.endfor 58.endfor
59 59
60# 60#
61# Needed tools. 61# Needed tools.
62# 62#
63 63
64.for v in ${_LOCKVARS} 64.for v in ${_LOCKVARS}
65. if ${${v}} != "none" 65. if ${${v}} != "none"
66USE_TOOLS+= shlock 66USE_TOOLS+= shlock
67. endif 67. endif
68. if ${${v}} == "sleep" 68. if ${${v}} == "sleep"
69USE_TOOLS+= sleep 69USE_TOOLS+= sleep
70. endif 70. endif
71.endfor 71.endfor
72 72
73# 73#
74# The commands. 74# The commands.
75# 75#
76 76
77_CHECK_IF_SHLOCK_IS_AVAILABLE_CMD= \ 77_CHECK_IF_SHLOCK_IS_AVAILABLE_CMD= \
78 [ "${PKGPATH}" != "pkgtools/shlock" ] || exit 0; \ 78 [ "${PKGPATH}" != "pkgtools/shlock" ] || exit 0; \
79 [ -x ${SHLOCK:Q}"" ] || { \ 79 [ -x ${SHLOCK:Q}"" ] || { \
80 ${ERROR_MSG} "[locking.mk] shlock is not installed."; \ 80 ${ERROR_MSG} "[locking.mk] shlock is not installed."; \
81 ${ERROR_MSG} "[locking.mk] Please \"(cd ../../pkgtools/shlock && ${MAKE} install)\"."; \ 81 ${ERROR_MSG} "[locking.mk] Please \"(cd ../../pkgtools/shlock && ${MAKE} install)\"."; \
82 exit 1; \ 82 exit 1; \
83 } 83 }
84 84
85_ACQUIRE_LOCK_CMD= \ 85_ACQUIRE_LOCK_CMD= \
86 ${_CHECK_IF_SHLOCK_IS_AVAILABLE_CMD}; \ 86 ${_CHECK_IF_SHLOCK_IS_AVAILABLE_CMD}; \
87 ppid=`${PS} -p $$$$ -o ppid | ${AWK} 'NR == 2 { print $$1 }'`; \ 87 ppid=`${PS} -p $$$$ -o ppid | ${AWK} 'NR == 2 { print $$1 }'`; \
88 if [ -z "$$ppid" ]; then \ 88 if [ -z "$$ppid" ]; then \
89 ${ERROR_MSG} "No parent process ID found."; \ 89 ${ERROR_MSG} "No parent process ID found."; \
90 exit 1; \ 90 exit 1; \
91 fi; \ 91 fi; \
92 while :; do \ 92 while :; do \
93 if [ -f /var/run/dmesg.boot -a -f "$$lockfile" ]; then \ 93 if [ -f /var/run/dmesg.boot -a -f "$$lockfile" ]; then \
94 rebooted=`${FIND} /var/run/dmesg.boot -newer "$$lockfile" -print`; \ 94 rebooted=`${FIND} /var/run/dmesg.boot -newer "$$lockfile" -print`; \
95 if [ "$$rebooted" ]; then \ 95 if [ "$$rebooted" ]; then \
96 ${STEP_MSG} "Removing stale $$lockfile"; \ 96 ${STEP_MSG} "Removing stale $$lockfile"; \
97 ${RM} -f "$$lockfile"; \ 97 ${RM} -f "$$lockfile"; \
98 fi; \ 98 fi; \
99 fi; \ 99 fi; \
100 lockdir=`echo "$$lockfile" | sed "s,/[^/]*\$$,,"`; \ 100 lockdir=`echo "$$lockfile" | sed "s,/[^/]*\$$,,"`; \
101 ${MKDIR} "$$lockdir"; \ 101 ${MKDIR} "$$lockdir"; \
102 if ${SHLOCK} -f "$$lockfile" -p "$$ppid"; then \ 102 if ${SHLOCK} -f "$$lockfile" -p "$$ppid"; then \
103 break; \ 103 break; \
104 fi; \ 104 fi; \
105 lockpid=`${CAT} "$$lockfile"`; \ 105 lockpid=`${CAT} "$$lockfile"`; \
106 case "$$locktype" in \ 106 case "$$locktype" in \
107 once) ${FAIL_MSG} "Lock ${.TARGET} is held by pid $$lockpid" ;; \ 107 once) ${FAIL_MSG} "Lock ${.TARGET} is held by pid $$lockpid" ;; \
108 sleep) ${STEP_MSG} "Lock ${.TARGET} is held by pid $$lockpid"; \ 108 sleep) ${STEP_MSG} "Lock ${.TARGET} is held by pid $$lockpid"; \
109 ${SLEEP} ${PKGSRC_SLEEPSECS}; \ 109 ${SLEEP} ${PKGSRC_SLEEPSECS}; \
110 ;; \ 110 ;; \
111 esac; \ 111 esac; \
112 done; 112 done;
113.if defined(PKG_VERBOSE) 113.if defined(PKG_VERBOSE)
114_ACQUIRE_LOCK_CMD+= \ 114_ACQUIRE_LOCK_CMD+= \
115 lockpid=`${CAT} "$$lockfile"`; \ 115 lockpid=`${CAT} "$$lockfile"`; \
116 ${STEP_MSG} "Lock $$lockfile acquired for \`\`${.TARGET:S/^acquire-//:S/-lock$//}'' on behalf of process $$lockpid"; 116 ${STEP_MSG} "Lock $$lockfile acquired for \`\`${.TARGET:S/^acquire-//:S/-lock$//}'' on behalf of process $$lockpid";
117.endif 117.endif
118 118
119_RELEASE_LOCK_CMD= # nothing 119_RELEASE_LOCK_CMD= # nothing
120.if defined(PKG_VERBOSE) 120.if defined(PKG_VERBOSE)
121_RELEASE_LOCK_CMD+= \ 121_RELEASE_LOCK_CMD+= \
122 lockpid=`${CAT} "$$lockfile"`; \ 122 lockpid=`${CAT} "$$lockfile"`; \
123 ${STEP_MSG} "Lock $$lockfile released for \`\`${.TARGET:S/^release-//:S/-lock$//}'' on behalf of process $$lockpid"; 123 ${STEP_MSG} "Lock $$lockfile released for \`\`${.TARGET:S/^release-//:S/-lock$//}'' on behalf of process $$lockpid";
124.endif 124.endif
125_RELEASE_LOCK_CMD+= \ 125_RELEASE_LOCK_CMD+= \
126 ${RM} -f "$$lockfile" 126 ${RM} -f "$$lockfile"
127 127
128# 128#
129# The targets. 129# The targets.
130# 130#
131 131
132.PHONY: acquire-lock release-lock 132.PHONY: acquire-lock release-lock
133.PHONY: acquire-localbase-lock release-localbase-lock 133.PHONY: acquire-localbase-lock release-localbase-lock
134 134
135.if ${LOCALBASE_LOCKTYPE} == "none" 135.if ${LOCALBASE_LOCKTYPE} == "none"
136acquire-localbase-lock release-localbase-lock: .USE 136acquire-localbase-lock release-localbase-lock: .USE
137 @${DO_NADA} 137 @${DO_NADA}
138.else 138.else
139acquire-localbase-lock: .USE 139acquire-localbase-lock: .USE
140 ${RUN} \ 140 ${RUN} \
141 lockfile=${_LOCALBASE_LOCKFILE}; \ 141 lockfile=${_LOCALBASE_LOCKFILE}; \
142 locktype=${LOCALBASE_LOCKTYPE}; \ 142 locktype=${LOCALBASE_LOCKTYPE}; \
143 ${_ACQUIRE_LOCK_CMD} 143 ${_ACQUIRE_LOCK_CMD}
144 144
145release-localbase-lock: .USE 145release-localbase-lock: .USE
146 ${RUN} \ 146 ${RUN} \
147 lockfile=${_LOCALBASE_LOCKFILE}; \ 147 lockfile=${_LOCALBASE_LOCKFILE}; \
148 locktype=${LOCALBASE_LOCKTYPE}; \ 148 locktype=${LOCALBASE_LOCKTYPE}; \
149 ${_RELEASE_LOCK_CMD} 149 ${_RELEASE_LOCK_CMD}
150.endif 150.endif
151 151
152.if ${WRKDIR_LOCKTYPE} == "none" 152.if ${WRKDIR_LOCKTYPE} == "none"
153acquire-lock release-lock: .USE 153acquire-lock release-lock: .USE
154 @${DO_NADA} 154 @${DO_NADA}
155.else 155.else
156acquire-lock: .USE 156acquire-lock: .USE
157 ${RUN} \ 157 ${RUN} \
158 lockfile=${_WRKDIR_LOCKFILE}; \ 158 lockfile=${_WRKDIR_LOCKFILE}; \
159 locktype=${WRKDIR_LOCKTYPE}; \ 159 locktype=${WRKDIR_LOCKTYPE}; \
160 ${_ACQUIRE_LOCK_CMD} 160 ${_ACQUIRE_LOCK_CMD}
161 161
162release-lock: .USE 162release-lock: .USE
163 ${RUN} \ 163 ${RUN} \
164 lockfile=${_WRKDIR_LOCKFILE}; \ 164 lockfile=${_WRKDIR_LOCKFILE}; \
165 locktype=${WRKDIR_LOCKTYPE}; \ 165 locktype=${WRKDIR_LOCKTYPE}; \
166 ${_RELEASE_LOCK_CMD} 166 ${_RELEASE_LOCK_CMD}
167 167
168.endif 168.endif