Name: js-handler/node_modules/restify/node_modules/verror/Makefile.targ 
1:
# -*- mode: makefile -*-
2:
#
3:
# Copyright (c) 2012, Joyent, Inc. All rights reserved.
4:
#
5:
# Makefile.targ: common targets.
6:
#
7:
# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped
8:
# into other repos as-is without requiring any modifications. If you find
9:
# yourself changing this file, you should instead update the original copy in
10:
# eng.git and then update your repo to use the new version.
11:
#
12:
# This Makefile defines several useful targets and rules. You can use it by
13:
# including it from a Makefile that specifies some of the variables below.
14:
#
15:
# Targets defined in this Makefile:
16:
#
17:
#  check  Checks JavaScript files for lint and style
18:
#    Checks bash scripts for syntax
19:
#    Checks SMF manifests for validity against the SMF DTD
20:
#
21:
#  clean  Removes built files
22:
#
23:
#  docs  Builds restdown documentation in docs/
24:
#
25:
#  prepush  Depends on "check" and "test"
26:
#
27:
#  test  Does nothing (you should override this)
28:
#
29:
#  xref  Generates cscope (source cross-reference index)
30:
#
31:
# For details on what these targets are supposed to do, see the Joyent
32:
# Engineering Guide.
33:
#
34:
# To make use of these targets, you'll need to set some of these variables. Any
35:
# variables left unset will simply not be used.
36:
#
37:
#  BASH_FILES  Bash scripts to check for syntax
38:
#      (paths relative to top-level Makefile)
39:
#
40:
#  CLEAN_FILES  Files to remove as part of the "clean" target.  Note
41:
#      that files generated by targets in this Makefile are
42:
#      automatically included in CLEAN_FILES.  These include
43:
#      restdown-generated HTML and JSON files.
44:
#
45:
#  DOC_FILES  Restdown (documentation source) files. These are
46:
#      assumed to be contained in "docs/", and must NOT
47:
#      contain the "docs/" prefix.
48:
#
49:
#  JSL_CONF_NODE  Specify JavaScriptLint configuration files
50:
#  JSL_CONF_WEB  (paths relative to top-level Makefile)
51:
#
52:
#      Node.js and Web configuration files are separate
53:
#      because you'll usually want different global variable
54:
#      configurations.  If no file is specified, none is given
55:
#      to jsl, which causes it to use a default configuration,
56:
#      which probably isn't what you want.
57:
#
58:
#  JSL_FILES_NODE  JavaScript files to check with Node config file.
59:
#  JSL_FILES_WEB  JavaScript files to check with Web config file.
60:
#
61:
# You can also override these variables:
62:
#
63:
#  BASH    Path to bash (default: bash)
64:
#
65:
#  CSCOPE_DIRS  Directories to search for source files for the cscope
66:
#      index. (default: ".")
67:
#
68:
#  JSL    Path to JavaScriptLint (default: "jsl")
69:
#
70:
#  JSL_FLAGS_NODE  Additional flags to pass through to JSL
71:
#  JSL_FLAGS_WEB
72:
#  JSL_FLAGS
73:
#
74:
#  JSSTYLE    Path to jsstyle (default: jsstyle)
75:
#
76:
#  JSSTYLE_FLAGS  Additional flags to pass through to jsstyle
77:
#
78:
 
79:
#
80:
# Defaults for the various tools we use.
81:
#
82:
BASH    ?= bash
83:
BASHSTYLE  ?= tools/bashstyle
84:
CP    ?= cp
85:
CSCOPE    ?= cscope
86:
CSCOPE_DIRS  ?= .
87:
JSL    ?= jsl
88:
JSSTYLE    ?= jsstyle
89:
MKDIR    ?= mkdir -p
90:
MV    ?= mv
91:
RESTDOWN_FLAGS  ?=
92:
RMTREE    ?= rm -rf
93:
JSL_FLAGS    ?= --nologo --nosummary
94:
 
95:
ifeq ($(shell uname -s),SunOS)
96:
  TAR  ?= gtar
97:
else
98:
  TAR  ?= tar
99:
endif
100:
 
101:
 
102:
#
103:
# Defaults for other fixed values.
104:
#
105:
BUILD    = build
106:
DISTCLEAN_FILES += $(BUILD)
107:
DOC_BUILD  = $(BUILD)/docs/public
108:
 
109:
#
110:
# Configure JSL_FLAGS_{NODE,WEB} based on JSL_CONF_{NODE,WEB}.
111:
#
112:
ifneq ($(origin JSL_CONF_NODE), undefined)
113:
  JSL_FLAGS_NODE += --conf=$(JSL_CONF_NODE)
114:
endif
115:
 
116:
ifneq ($(origin JSL_CONF_WEB), undefined)
117:
  JSL_FLAGS_WEB += --conf=$(JSL_CONF_WEB)
118:
endif
119:
 
120:
#
121:
# Targets. For descriptions on what these are supposed to do, see the
122:
# Joyent Engineering Guide.
123:
#
124:
 
125:
#
126:
# Instruct make to keep around temporary files. We have rules below that
127:
# automatically update git submodules as needed, but they employ a deps/*/.git
128:
# temporary file. Without this directive, make tries to remove these .git
129:
# directories after the build has completed.
130:
#
131:
.SECONDARY: $($(wildcard deps/*):%=%/.git)
132:
 
133:
#
134:
# This rule enables other rules that use files from a git submodule to have
135:
# those files depend on deps/module/.git and have "make" automatically check
136:
# out the submodule as needed.
137:
#
138:
deps/%/.git:
139:
  git submodule update --init deps/$*
140:
 
141:
#
142:
# These recipes make heavy use of dynamically-created phony targets. The parent
143:
# Makefile defines a list of input files like BASH_FILES. We then say that each
144:
# of these files depends on a fake target called filename.bashchk, and then we
145:
# define a pattern rule for those targets that runs bash in check-syntax-only
146:
# mode. This mechanism has the nice properties that if you specify zero files,
147:
# the rule becomes a noop (unlike a single rule to check all bash files, which
148:
# would invoke bash with zero files), and you can check individual files from
149:
# the command line with "make filename.bashchk".
150:
#
151:
.PHONY: check-bash
152:
check-bash: $(BASH_FILES:%=%.bashchk) $(BASH_FILES:%=%.bashstyle)
153:
 
154:
%.bashchk: %
155:
  $(BASH) -n $^
156:
 
157:
%.bashstyle: %
158:
  $(BASHSTYLE) $^
159:
 
160:
.PHONY: check-jsl check-jsl-node check-jsl-web
161:
check-jsl: check-jsl-node check-jsl-web
162:
 
163:
check-jsl-node: $(JSL_FILES_NODE:%=%.jslnodechk)
164:
 
165:
check-jsl-web: $(JSL_FILES_WEB:%=%.jslwebchk)
166:
 
167:
%.jslnodechk: % $(JSL_EXEC)
168:
  $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_NODE) $<
169:
 
170:
%.jslwebchk: % $(JSL_EXEC)
171:
  $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_WEB) $<
172:
 
173:
.PHONY: check-jsstyle
174:
check-jsstyle: $(JSSTYLE_FILES:%=%.jsstylechk)
175:
 
176:
%.jsstylechk: % $(JSSTYLE_EXEC)
177:
  $(JSSTYLE) $(JSSTYLE_FLAGS) $<
178:
 
179:
.PHONY: check
180:
check: check-jsl check-jsstyle check-bash
181:
  @echo check ok
182:
 
183:
.PHONY: clean
184:
clean::
185:
  -$(RMTREE) $(CLEAN_FILES)
186:
 
187:
.PHONY: distclean
188:
distclean:: clean
189:
  -$(RMTREE) $(DISTCLEAN_FILES)
190:
 
191:
CSCOPE_FILES = cscope.in.out cscope.out cscope.po.out
192:
CLEAN_FILES += $(CSCOPE_FILES)
193:
 
194:
.PHONY: xref
195:
xref: cscope.files
196:
  $(CSCOPE) -bqR
197:
 
198:
.PHONY: cscope.files
199:
cscope.files:
200:
  find $(CSCOPE_DIRS) -name '*.c' -o -name '*.h' -o -name '*.cc' \
201:
      -o -name '*.js' -o -name '*.s' -o -name '*.cpp' > [email protected]
202:
 
203:
#
204:
# The "docs" target is complicated because we do several things here:
205:
#
206:
#    (1) Use restdown to build HTML and JSON files from each of DOC_FILES.
207:
#
208:
#    (2) Copy these files into $(DOC_BUILD) (build/docs/public), which
209:
#        functions as a complete copy of the documentation that could be
210:
#        mirrored or served over HTTP.
211:
#
212:
#    (3) Then copy any directories and media from docs/media into
213:
#        $(DOC_BUILD)/media. This allows projects to include their own media,
214:
#        including files that will override same-named files provided by
215:
#        restdown.
216:
#
217:
# Step (3) is the surprisingly complex part: in order to do this, we need to
218:
# identify the subdirectories in docs/media, recreate them in
219:
# $(DOC_BUILD)/media, then do the same with the files.
220:
#
221:
DOC_MEDIA_DIRS := $(shell find docs/media -type d 2>/dev/null | grep -v "^docs/media$$")
222:
DOC_MEDIA_DIRS := $(DOC_MEDIA_DIRS:docs/media/%=%)
223:
DOC_MEDIA_DIRS_BUILD := $(DOC_MEDIA_DIRS:%=$(DOC_BUILD)/media/%)
224:
 
225:
DOC_MEDIA_FILES := $(shell find docs/media -type f 2>/dev/null)
226:
DOC_MEDIA_FILES := $(DOC_MEDIA_FILES:docs/media/%=%)
227:
DOC_MEDIA_FILES_BUILD := $(DOC_MEDIA_FILES:%=$(DOC_BUILD)/media/%)
228:
 
229:
#
230:
# Like the other targets, "docs" just depends on the final files we want to
231:
# create in $(DOC_BUILD), leveraging other targets and recipes to define how
232:
# to get there.
233:
#
234:
.PHONY: docs
235:
docs:              \
236:
    $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.html)    \
237:
    $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.json)    \
238:
    $(DOC_MEDIA_FILES_BUILD)
239:
 
240:
#
241:
# We keep the intermediate files so that the next build can see whether the
242:
# files in DOC_BUILD are up to date.
243:
#
244:
.PRECIOUS:          \
245:
    $(DOC_FILES:%.restdown=docs/%.html)    \
246:
    $(DOC_FILES:%.restdown=docs/%json)
247:
 
248:
#
249:
# We do clean those intermediate files, as well as all of DOC_BUILD.
250:
#
251:
CLEAN_FILES +=          \
252:
    $(DOC_BUILD)        \
253:
    $(DOC_FILES:%.restdown=docs/%.html)    \
254:
    $(DOC_FILES:%.restdown=docs/%.json)
255:
 
256:
#
257:
# Before installing the files, we must make sure the directories exist. The |
258:
# syntax tells make that the dependency need only exist, not be up to date.
259:
# Otherwise, it might try to rebuild spuriously because the directory itself
260:
# appears out of date.
261:
#
262:
$(DOC_MEDIA_FILES_BUILD): | $(DOC_MEDIA_DIRS_BUILD)
263:
 
264:
$(DOC_BUILD)/%: docs/% | $(DOC_BUILD)
265:
  $(CP) $< [email protected]
266:
 
267:
docs/%.json docs/%.html: docs/%.restdown | $(DOC_BUILD) $(RESTDOWN_EXEC)
268:
  $(RESTDOWN) $(RESTDOWN_FLAGS) -m $(DOC_BUILD) $<
269:
 
270:
$(DOC_BUILD):
271:
  $(MKDIR) [email protected]
272:
 
273:
$(DOC_MEDIA_DIRS_BUILD):
274:
  $(MKDIR) [email protected]
275:
 
276:
#
277:
# The default "test" target does nothing. This should usually be overridden by
278:
# the parent Makefile. It's included here so we can define "prepush" without
279:
# requiring the repo to define "test".
280:
#
281:
.PHONY: test
282:
test:
283:
 
284:
.PHONY: prepush
285:
prepush: check test