blob: e360d39677a5eee8a38326af7ed0dfdebdc90a6d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# $NetBSD: subst.mk,v 1.1 2003/08/27 11:24:37 jlam Exp $
#
# This Makefile fragment implements a general text replacement facility
# for different classes of files in ${WRKSRC}. For each class of files,
# a target <class>-subst is created to perform the text replacement.
#
# The following variables are used:
#
# SUBST_STAGE.<class>
# "stage" at which we do the text replacement, e.g. pre-configure,
# post-build, etc.
#
# SUBST_MESSAGE.<class>
# message to display, noting what is being substituted
#
# SUBST_FILES.<class>
# files on which to run the substitution; these are relative to
# ${WRKSRC}
#
# SUBST_SED.<class>
# sed(1) substitution expression to run on the specified files
ECHO_SUBST_MSG?= ${ECHO}
# _SUBST_IS_TEXT_FILE returns 0 if $${file} is a text file.
_SUBST_IS_TEXT_FILE?= \
${FILE_CMD} $${file} | ${EGREP} "(shell script|text)" >/dev/null 2>&1
.for _class_ in ${SUBST_CLASSES}
_SUBST_COOKIE.${_class_}= ${WRKDIR}/.subst_${_class_}_done
SUBST_TARGETS+= subst-${_class_}
_SUBST_TARGETS.${_class_}= subst-${_class_}-message
_SUBST_TARGETS.${_class_}+= ${_SUBST_COOKIE.${_class_}}
_SUBST_TARGETS.${_class_}+= subst-${_class_}-cookie
.ORDER: ${_SUBST_TARGETS.${_class_}}
.if defined(SUBST_STAGE.${_class_})
${SUBST_STAGE.${_class_}}: subst-${_class_}
.endif
.PHONY: subst-${_class_}
subst-${_class_}: ${_SUBST_TARGETS.${_class_}}
.PHONY: subst-${_class_}-message
subst-${_class_}-message:
${_PKG_SILENT}${_PKG_DEBUG} \
${ECHO_SUBST_MSG} "=> ${SUBST_MESSAGE.${_class_}}"
.PHONY: subst-${_class_}-cookie
subst-${_class_}-cookie:
${_PKG_SILENT}${_PKG_DEBUG} \
${TOUCH} ${TOUCH_FLAGS} ${_SUBST_COOKIE.${_class_}}
${_SUBST_COOKIE.${_class_}}:
. if !empty(SUBST_SED.${_class_})
${_PKG_SILENT}${_PKG_DEBUG} \
cd ${WRKSRC}; \
files="${SUBST_FILES.${_class_}}"; \
case "$$files" in \
"") ;; \
*) for file in $${files}; do \
if ${_SUBST_IS_TEXT_FILE}; then \
${MV} -f $$file $$file.subst.sav; \
${SED} ${SUBST_SED.${_class_}} \
$$file.subst.sav > $$file; \
if [ -x $$file.subst.sav ]; then \
${CHMOD} +x $$file; \
fi; \
if ${CMP} -s $$file.subst.sav $$file; then \
${MV} -f $$file.subst.sav $$file; \
else \
${ECHO} $$file >> ${.TARGET}; \
fi; \
fi; \
done ;; \
esac
. endif
.endfor
|