Merge branch 'next' into fix-tests-windows
This commit is contained in:
commit
c1ebea1b7c
|
@ -1,6 +0,0 @@
|
||||||
((nil . ((indent-tabs-mode . nil)
|
|
||||||
(tab-width . 8)
|
|
||||||
(fill-column . 80)))
|
|
||||||
(js-mode . ((js-indent-level . 2)
|
|
||||||
(indent-tabs-mode . nil)
|
|
||||||
)))
|
|
|
@ -1,9 +0,0 @@
|
||||||
[submodule "deps/javascriptlint"]
|
|
||||||
path = deps/javascriptlint
|
|
||||||
url = https://github.com/davepacheco/javascriptlint
|
|
||||||
[submodule "deps/jsstyle"]
|
|
||||||
path = deps/jsstyle
|
|
||||||
url = https://github.com/davepacheco/jsstyle
|
|
||||||
[submodule "deps/restdown"]
|
|
||||||
path = deps/restdown
|
|
||||||
url = https://github.com/trentm/restdown
|
|
58
Makefile
58
Makefile
|
@ -1,58 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright (c) 2012, Joyent, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# Makefile: basic Makefile for template API service
|
|
||||||
#
|
|
||||||
# This Makefile is a template for new repos. It contains only repo-specific
|
|
||||||
# logic and uses included makefiles to supply common targets (javascriptlint,
|
|
||||||
# jsstyle, restdown, etc.), which are used by other repos as well. You may well
|
|
||||||
# need to rewrite most of this file, but you shouldn't need to touch the
|
|
||||||
# included makefiles.
|
|
||||||
#
|
|
||||||
# If you find yourself adding support for new targets that could be useful for
|
|
||||||
# other projects too, you should add these to the original versions of the
|
|
||||||
# included Makefiles (in eng.git) so that other teams can use them too.
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Tools
|
|
||||||
#
|
|
||||||
NPM := npm
|
|
||||||
TAP := ./node_modules/.bin/tap
|
|
||||||
|
|
||||||
#
|
|
||||||
# Files
|
|
||||||
#
|
|
||||||
DOC_FILES := $(shell find docs -name '*.md' -printf '%f\n')
|
|
||||||
RESTDOWN_FLAGS := -b docs/branding/
|
|
||||||
JS_FILES := $(shell find lib test -name '*.js') $(shell find bin -name 'ldapjs-*')
|
|
||||||
JSL_CONF_NODE = tools/jsl.node.conf
|
|
||||||
JSL_FILES_NODE = $(JS_FILES)
|
|
||||||
JSSTYLE_FILES = $(JS_FILES)
|
|
||||||
JSSTYLE_FLAGS = -f tools/jsstyle.conf
|
|
||||||
|
|
||||||
CLEAN_FILES += node_modules coverage $(SHRINKWRAP) cscope.files
|
|
||||||
|
|
||||||
include ./tools/mk/Makefile.defs
|
|
||||||
|
|
||||||
# Repo-specific targets
|
|
||||||
#
|
|
||||||
.PHONY: all
|
|
||||||
all: $(TAP) $(REPO_DEPS)
|
|
||||||
$(NPM) rebuild
|
|
||||||
|
|
||||||
$(TAP): | $(NPM_EXEC)
|
|
||||||
$(NPM) install
|
|
||||||
|
|
||||||
CLEAN_FILES += $(TAP) ./node_modules/tap
|
|
||||||
|
|
||||||
.PHONY: test
|
|
||||||
test: $(TAP)
|
|
||||||
$(NPM) test
|
|
||||||
|
|
||||||
.PHONY: cover
|
|
||||||
cover: test
|
|
||||||
$(NPM) run report
|
|
||||||
|
|
||||||
include ./tools/mk/Makefile.deps
|
|
||||||
include ./tools/mk/Makefile.targ
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit e1bd0abfd424811af469d1ece3af131d95443924
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit d75b7ca8308be17c80e2b120f2a01d4a0c20d8a8
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 34a843cfce0ff988bf5073706882722a61036786
|
|
|
@ -1,139 +0,0 @@
|
||||||
#
|
|
||||||
# Configuration File for JavaScript Lint
|
|
||||||
#
|
|
||||||
# This configuration file can be used to lint a collection of scripts, or to enable
|
|
||||||
# or disable warnings for scripts that are linted via the command line.
|
|
||||||
#
|
|
||||||
|
|
||||||
### Warnings
|
|
||||||
# Enable or disable warnings based on requirements.
|
|
||||||
# Use "+WarningName" to display or "-WarningName" to suppress.
|
|
||||||
#
|
|
||||||
+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent
|
|
||||||
+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity
|
|
||||||
+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement
|
|
||||||
+anon_no_return_value # anonymous function does not always return value
|
|
||||||
+assign_to_function_call # assignment to a function call
|
|
||||||
-block_without_braces # block statement without curly braces
|
|
||||||
+comma_separated_stmts # multiple statements separated by commas (use semicolons?)
|
|
||||||
+comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==)
|
|
||||||
+default_not_at_end # the default case is not at the end of the switch statement
|
|
||||||
+dup_option_explicit # duplicate "option explicit" control comment
|
|
||||||
+duplicate_case_in_switch # duplicate case in switch statement
|
|
||||||
+duplicate_formal # duplicate formal argument {name}
|
|
||||||
+empty_statement # empty statement or extra semicolon
|
|
||||||
+identifier_hides_another # identifer {name} hides an identifier in a parent scope
|
|
||||||
-inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement
|
|
||||||
+incorrect_version # Expected /*jsl:content-type*/ control comment. The script was parsed with the wrong version.
|
|
||||||
+invalid_fallthru # unexpected "fallthru" control comment
|
|
||||||
+invalid_pass # unexpected "pass" control comment
|
|
||||||
+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax
|
|
||||||
+leading_decimal_point # leading decimal point may indicate a number or an object member
|
|
||||||
+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax
|
|
||||||
+meaningless_block # meaningless block; curly braces have no impact
|
|
||||||
+mismatch_ctrl_comments # mismatched control comment; "ignore" and "end" control comments must have a one-to-one correspondence
|
|
||||||
+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma
|
|
||||||
+missing_break # missing break statement
|
|
||||||
+missing_break_for_last_case # missing break statement for last case in switch
|
|
||||||
+missing_default_case # missing default case in switch statement
|
|
||||||
+missing_option_explicit # the "option explicit" control comment is missing
|
|
||||||
+missing_semicolon # missing semicolon
|
|
||||||
+missing_semicolon_for_lambda # missing semicolon for lambda assignment
|
|
||||||
+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs
|
|
||||||
+nested_comment # nested comment
|
|
||||||
+no_return_value # function {name} does not always return a value
|
|
||||||
+octal_number # leading zeros make an octal number
|
|
||||||
+parseint_missing_radix # parseInt missing radix parameter
|
|
||||||
+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag
|
|
||||||
+redeclared_var # redeclaration of {name}
|
|
||||||
+trailing_comma_in_array # extra comma is not recommended in array initializers
|
|
||||||
+trailing_decimal_point # trailing decimal point may indicate a number or an object member
|
|
||||||
+undeclared_identifier # undeclared identifier: {name}
|
|
||||||
+unreachable_code # unreachable code
|
|
||||||
-unreferenced_argument # argument declared but never referenced: {name}
|
|
||||||
-unreferenced_function # function is declared but never referenced: {name}
|
|
||||||
+unreferenced_variable # variable is declared but never referenced: {name}
|
|
||||||
+unsupported_version # JavaScript {version} is not supported
|
|
||||||
+use_of_label # use of label
|
|
||||||
+useless_assign # useless assignment
|
|
||||||
+useless_comparison # useless comparison; comparing identical expressions
|
|
||||||
-useless_quotes # the quotation marks are unnecessary
|
|
||||||
+useless_void # use of the void type may be unnecessary (void is always undefined)
|
|
||||||
+var_hides_arg # variable {name} hides argument
|
|
||||||
+want_assign_or_call # expected an assignment or function call
|
|
||||||
+with_statement # with statement hides undeclared variables; use temporary variable instead
|
|
||||||
-identifier_hides_another
|
|
||||||
|
|
||||||
### Output format
|
|
||||||
# Customize the format of the error message.
|
|
||||||
# __FILE__ indicates current file path
|
|
||||||
# __FILENAME__ indicates current file name
|
|
||||||
# __LINE__ indicates current line
|
|
||||||
# __COL__ indicates current column
|
|
||||||
# __ERROR__ indicates error message (__ERROR_PREFIX__: __ERROR_MSG__)
|
|
||||||
# __ERROR_NAME__ indicates error name (used in configuration file)
|
|
||||||
# __ERROR_PREFIX__ indicates error prefix
|
|
||||||
# __ERROR_MSG__ indicates error message
|
|
||||||
#
|
|
||||||
# For machine-friendly output, the output format can be prefixed with
|
|
||||||
# "encode:". If specified, all items will be encoded with C-slashes.
|
|
||||||
#
|
|
||||||
# Visual Studio syntax (default):
|
|
||||||
+output-format __FILE__(__LINE__): __ERROR__
|
|
||||||
# Alternative syntax:
|
|
||||||
#+output-format __FILE__:__LINE__: __ERROR__
|
|
||||||
|
|
||||||
|
|
||||||
### Context
|
|
||||||
# Show the in-line position of the error.
|
|
||||||
# Use "+context" to display or "-context" to suppress.
|
|
||||||
#
|
|
||||||
+context
|
|
||||||
|
|
||||||
|
|
||||||
### Control Comments
|
|
||||||
# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for
|
|
||||||
# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is
|
|
||||||
# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason,
|
|
||||||
# although legacy control comments are enabled by default for backward compatibility.
|
|
||||||
#
|
|
||||||
-legacy_control_comments
|
|
||||||
|
|
||||||
|
|
||||||
### Defining identifiers
|
|
||||||
# By default, "option explicit" is enabled on a per-file basis.
|
|
||||||
# To enable this for all files, use "+always_use_option_explicit"
|
|
||||||
-always_use_option_explicit
|
|
||||||
|
|
||||||
# Define certain identifiers of which the lint is not aware.
|
|
||||||
# (Use this in conjunction with the "undeclared identifier" warning.)
|
|
||||||
#
|
|
||||||
# Common uses for webpages might be:
|
|
||||||
+define __dirname
|
|
||||||
+define clearInterval
|
|
||||||
+define clearTimeout
|
|
||||||
+define console
|
|
||||||
+define exports
|
|
||||||
+define global
|
|
||||||
+define module
|
|
||||||
+define process
|
|
||||||
+define require
|
|
||||||
+define setInterval
|
|
||||||
+define setImmediate
|
|
||||||
+define setTimeout
|
|
||||||
+define Buffer
|
|
||||||
+define JSON
|
|
||||||
+define Math
|
|
||||||
|
|
||||||
### JavaScript Version
|
|
||||||
# To change the default JavaScript version:
|
|
||||||
#+default-type text/javascript;version=1.5
|
|
||||||
#+default-type text/javascript;e4x=1
|
|
||||||
|
|
||||||
### Files
|
|
||||||
# Specify which files to lint
|
|
||||||
# Use "+recurse" to enable recursion (disabled by default).
|
|
||||||
# To add a set of files, use "+process FileName", "+process Folder\Path\*.js",
|
|
||||||
# or "+process Folder\Path\*.htm".
|
|
||||||
#
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
indent=2
|
|
||||||
doxygen
|
|
||||||
unparenthesized-return=0
|
|
||||||
blank-after-start-comment=0
|
|
|
@ -1,43 +0,0 @@
|
||||||
# -*- mode: makefile -*-
|
|
||||||
#
|
|
||||||
# Copyright (c) 2012, Joyent, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# Makefile.defs: common defines.
|
|
||||||
#
|
|
||||||
# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped
|
|
||||||
# into other repos as-is without requiring any modifications. If you find
|
|
||||||
# yourself changing this file, you should instead update the original copy in
|
|
||||||
# eng.git and then update your repo to use the new version.
|
|
||||||
#
|
|
||||||
# This makefile defines some useful defines. Include it at the top of
|
|
||||||
# your Makefile.
|
|
||||||
#
|
|
||||||
# Definitions in this Makefile:
|
|
||||||
#
|
|
||||||
# TOP The absolute path to the project directory. The top dir.
|
|
||||||
# BRANCH The current git branch.
|
|
||||||
# TIMESTAMP The timestamp for the build. This can be set via
|
|
||||||
# the TIMESTAMP envvar (used by MG-based builds).
|
|
||||||
# STAMP A build stamp to use in built package names.
|
|
||||||
#
|
|
||||||
|
|
||||||
TOP := $(shell pwd)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Mountain Gorilla-spec'd versioning.
|
|
||||||
# See "Package Versioning" in MG's README.md:
|
|
||||||
# <https://mo.joyent.com/mountain-gorilla/blob/master/README.md#L139-200>
|
|
||||||
#
|
|
||||||
# Need GNU awk for multi-char arg to "-F".
|
|
||||||
_AWK := $(shell (which gawk >/dev/null && echo gawk) \
|
|
||||||
|| (which nawk >/dev/null && echo nawk) \
|
|
||||||
|| echo awk)
|
|
||||||
BRANCH := $(shell git symbolic-ref HEAD | $(_AWK) -F/ '{print $$3}')
|
|
||||||
ifeq ($(TIMESTAMP),)
|
|
||||||
TIMESTAMP := $(shell date -u "+%Y%m%dT%H%M%SZ")
|
|
||||||
endif
|
|
||||||
_GITDESCRIBE := g$(shell git describe --all --long --dirty | $(_AWK) -F'-g' '{print $$NF}')
|
|
||||||
STAMP := $(BRANCH)-$(TIMESTAMP)-$(_GITDESCRIBE)
|
|
||||||
|
|
||||||
# node-gyp will print build info useful for debugging with V=1
|
|
||||||
export V=1
|
|
|
@ -1,44 +0,0 @@
|
||||||
# -*- mode: makefile -*-
|
|
||||||
#
|
|
||||||
# Copyright (c) 2012, Joyent, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# Makefile.deps: Makefile for including common tools as dependencies
|
|
||||||
#
|
|
||||||
# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped
|
|
||||||
# into other repos as-is without requiring any modifications. If you find
|
|
||||||
# yourself changing this file, you should instead update the original copy in
|
|
||||||
# eng.git and then update your repo to use the new version.
|
|
||||||
#
|
|
||||||
# This file is separate from Makefile.targ so that teams can choose
|
|
||||||
# independently whether to use the common targets in Makefile.targ and the
|
|
||||||
# common tools here.
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# javascriptlint
|
|
||||||
#
|
|
||||||
JSL_EXEC ?= deps/javascriptlint/build/install/jsl
|
|
||||||
JSL ?= $(JSL_EXEC)
|
|
||||||
|
|
||||||
$(JSL_EXEC): | deps/javascriptlint/.git
|
|
||||||
cd deps/javascriptlint && make install
|
|
||||||
|
|
||||||
distclean::
|
|
||||||
if [[ -f deps/javascriptlint/Makefile ]]; then \
|
|
||||||
cd deps/javascriptlint && make clean; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
#
|
|
||||||
# jsstyle
|
|
||||||
#
|
|
||||||
JSSTYLE_EXEC ?= deps/jsstyle/jsstyle
|
|
||||||
JSSTYLE ?= $(JSSTYLE_EXEC)
|
|
||||||
|
|
||||||
$(JSSTYLE_EXEC): | deps/jsstyle/.git
|
|
||||||
|
|
||||||
#
|
|
||||||
# restdown
|
|
||||||
#
|
|
||||||
RESTDOWN_EXEC ?= deps/restdown/bin/restdown
|
|
||||||
RESTDOWN ?= python $(RESTDOWN_EXEC)
|
|
||||||
$(RESTDOWN_EXEC): | deps/restdown/.git
|
|
|
@ -1,291 +0,0 @@
|
||||||
# -*- mode: makefile -*-
|
|
||||||
#
|
|
||||||
# Copyright (c) 2012, Joyent, Inc. All rights reserved.
|
|
||||||
#
|
|
||||||
# Makefile.targ: common targets.
|
|
||||||
#
|
|
||||||
# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped
|
|
||||||
# into other repos as-is without requiring any modifications. If you find
|
|
||||||
# yourself changing this file, you should instead update the original copy in
|
|
||||||
# eng.git and then update your repo to use the new version.
|
|
||||||
#
|
|
||||||
# This Makefile defines several useful targets and rules. You can use it by
|
|
||||||
# including it from a Makefile that specifies some of the variables below.
|
|
||||||
#
|
|
||||||
# Targets defined in this Makefile:
|
|
||||||
#
|
|
||||||
# check Checks JavaScript files for lint and style
|
|
||||||
# Checks bash scripts for syntax
|
|
||||||
# Checks SMF manifests for validity against the SMF DTD
|
|
||||||
#
|
|
||||||
# clean Removes built files
|
|
||||||
#
|
|
||||||
# docs Builds restdown documentation in docs/
|
|
||||||
#
|
|
||||||
# prepush Depends on "check" and "test"
|
|
||||||
#
|
|
||||||
# test Does nothing (you should override this)
|
|
||||||
#
|
|
||||||
# xref Generates cscope (source cross-reference index)
|
|
||||||
#
|
|
||||||
# For details on what these targets are supposed to do, see the Joyent
|
|
||||||
# Engineering Guide.
|
|
||||||
#
|
|
||||||
# To make use of these targets, you'll need to set some of these variables. Any
|
|
||||||
# variables left unset will simply not be used.
|
|
||||||
#
|
|
||||||
# BASH_FILES Bash scripts to check for syntax
|
|
||||||
# (paths relative to top-level Makefile)
|
|
||||||
#
|
|
||||||
# CLEAN_FILES Files to remove as part of the "clean" target. Note
|
|
||||||
# that files generated by targets in this Makefile are
|
|
||||||
# automatically included in CLEAN_FILES. These include
|
|
||||||
# restdown-generated HTML and JSON files.
|
|
||||||
#
|
|
||||||
# DOC_FILES Restdown (documentation source) files. These are
|
|
||||||
# assumed to be contained in "docs/", and must NOT
|
|
||||||
# contain the "docs/" prefix.
|
|
||||||
#
|
|
||||||
# JSL_CONF_NODE Specify JavaScriptLint configuration files
|
|
||||||
# JSL_CONF_WEB (paths relative to top-level Makefile)
|
|
||||||
#
|
|
||||||
# Node.js and Web configuration files are separate
|
|
||||||
# because you'll usually want different global variable
|
|
||||||
# configurations. If no file is specified, none is given
|
|
||||||
# to jsl, which causes it to use a default configuration,
|
|
||||||
# which probably isn't what you want.
|
|
||||||
#
|
|
||||||
# JSL_FILES_NODE JavaScript files to check with Node config file.
|
|
||||||
# JSL_FILES_WEB JavaScript files to check with Web config file.
|
|
||||||
#
|
|
||||||
# You can also override these variables:
|
|
||||||
#
|
|
||||||
# BASH Path to bash (default: bash)
|
|
||||||
#
|
|
||||||
# CSCOPE_DIRS Directories to search for source files for the cscope
|
|
||||||
# index. (default: ".")
|
|
||||||
#
|
|
||||||
# JSL Path to JavaScriptLint (default: "jsl")
|
|
||||||
#
|
|
||||||
# JSL_FLAGS_NODE Additional flags to pass through to JSL
|
|
||||||
# JSL_FLAGS_WEB
|
|
||||||
# JSL_FLAGS
|
|
||||||
#
|
|
||||||
# JSSTYLE Path to jsstyle (default: jsstyle)
|
|
||||||
#
|
|
||||||
# JSSTYLE_FLAGS Additional flags to pass through to jsstyle
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Defaults for the various tools we use.
|
|
||||||
#
|
|
||||||
BASH ?= bash
|
|
||||||
BASHSTYLE ?= tools/bashstyle
|
|
||||||
CP ?= cp
|
|
||||||
CSCOPE ?= cscope
|
|
||||||
CSCOPE_DIRS ?= .
|
|
||||||
JSL ?= jsl
|
|
||||||
JSSTYLE ?= jsstyle
|
|
||||||
MKDIR ?= mkdir -p
|
|
||||||
MV ?= mv
|
|
||||||
RESTDOWN_FLAGS ?=
|
|
||||||
RMTREE ?= rm -rf
|
|
||||||
JSL_FLAGS ?= --nologo --nosummary
|
|
||||||
|
|
||||||
ifeq ($(shell uname -s),SunOS)
|
|
||||||
TAR ?= gtar
|
|
||||||
else
|
|
||||||
TAR ?= tar
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Defaults for other fixed values.
|
|
||||||
#
|
|
||||||
BUILD = build
|
|
||||||
DISTCLEAN_FILES += $(BUILD)
|
|
||||||
DOC_BUILD = $(BUILD)/docs/public
|
|
||||||
|
|
||||||
#
|
|
||||||
# Configure JSL_FLAGS_{NODE,WEB} based on JSL_CONF_{NODE,WEB}.
|
|
||||||
#
|
|
||||||
ifneq ($(origin JSL_CONF_NODE), undefined)
|
|
||||||
JSL_FLAGS_NODE += --conf=$(JSL_CONF_NODE)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(origin JSL_CONF_WEB), undefined)
|
|
||||||
JSL_FLAGS_WEB += --conf=$(JSL_CONF_WEB)
|
|
||||||
endif
|
|
||||||
|
|
||||||
#
|
|
||||||
# Targets. For descriptions on what these are supposed to do, see the
|
|
||||||
# Joyent Engineering Guide.
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Instruct make to keep around temporary files. We have rules below that
|
|
||||||
# automatically update git submodules as needed, but they employ a deps/*/.git
|
|
||||||
# temporary file. Without this directive, make tries to remove these .git
|
|
||||||
# directories after the build has completed.
|
|
||||||
#
|
|
||||||
.SECONDARY: $($(wildcard deps/*):%=%/.git)
|
|
||||||
|
|
||||||
#
|
|
||||||
# This rule enables other rules that use files from a git submodule to have
|
|
||||||
# those files depend on deps/module/.git and have "make" automatically check
|
|
||||||
# out the submodule as needed.
|
|
||||||
#
|
|
||||||
deps/%/.git:
|
|
||||||
git submodule update --init deps/$*
|
|
||||||
|
|
||||||
#
|
|
||||||
# These recipes make heavy use of dynamically-created phony targets. The parent
|
|
||||||
# Makefile defines a list of input files like BASH_FILES. We then say that each
|
|
||||||
# of these files depends on a fake target called filename.bashchk, and then we
|
|
||||||
# define a pattern rule for those targets that runs bash in check-syntax-only
|
|
||||||
# mode. This mechanism has the nice properties that if you specify zero files,
|
|
||||||
# the rule becomes a noop (unlike a single rule to check all bash files, which
|
|
||||||
# would invoke bash with zero files), and you can check individual files from
|
|
||||||
# the command line with "make filename.bashchk".
|
|
||||||
#
|
|
||||||
.PHONY: check-bash
|
|
||||||
check-bash: $(BASH_FILES:%=%.bashchk) $(BASH_FILES:%=%.bashstyle)
|
|
||||||
|
|
||||||
%.bashchk: %
|
|
||||||
$(BASH) -n $^
|
|
||||||
|
|
||||||
%.bashstyle: %
|
|
||||||
$(BASHSTYLE) $^
|
|
||||||
|
|
||||||
#
|
|
||||||
# The above approach can be slow when there are many files to check because it
|
|
||||||
# requires that "make" invoke the check tool once for each file, rather than
|
|
||||||
# passing in several files at once. For the JavaScript check targets, we define
|
|
||||||
# a variable for the target itself *only if* the list of input files is
|
|
||||||
# non-empty. This avoids invoking the tool if there are no files to check.
|
|
||||||
#
|
|
||||||
JSL_NODE_TARGET = $(if $(JSL_FILES_NODE), check-jsl-node)
|
|
||||||
.PHONY: check-jsl-node
|
|
||||||
check-jsl-node: $(JSL_EXEC)
|
|
||||||
$(JSL) $(JSL_FLAGS) $(JSL_FLAGS_NODE) $(JSL_FILES_NODE)
|
|
||||||
|
|
||||||
JSL_WEB_TARGET = $(if $(JSL_FILES_WEB), check-jsl-web)
|
|
||||||
.PHONY: check-jsl-web
|
|
||||||
check-jsl-web: $(JSL_EXEC)
|
|
||||||
$(JSL) $(JSL_FLAGS) $(JSL_FLAGS_WEB) $(JSL_FILES_WEB)
|
|
||||||
|
|
||||||
.PHONY: check-jsl
|
|
||||||
check-jsl: $(JSL_NODE_TARGET) $(JSL_WEB_TARGET)
|
|
||||||
|
|
||||||
JSSTYLE_TARGET = $(if $(JSSTYLE_FILES), check-jsstyle)
|
|
||||||
.PHONY: check-jsstyle
|
|
||||||
check-jsstyle: $(JSSTYLE_EXEC)
|
|
||||||
$(JSSTYLE) $(JSSTYLE_FLAGS) $(JSSTYLE_FILES)
|
|
||||||
|
|
||||||
.PHONY: check
|
|
||||||
check: check-jsl $(JSSTYLE_TARGET) check-bash
|
|
||||||
@echo check ok
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean::
|
|
||||||
-$(RMTREE) $(CLEAN_FILES)
|
|
||||||
|
|
||||||
.PHONY: distclean
|
|
||||||
distclean:: clean
|
|
||||||
-$(RMTREE) $(DISTCLEAN_FILES)
|
|
||||||
|
|
||||||
CSCOPE_FILES = cscope.in.out cscope.out cscope.po.out
|
|
||||||
CLEAN_FILES += $(CSCOPE_FILES)
|
|
||||||
|
|
||||||
.PHONY: xref
|
|
||||||
xref: cscope.files
|
|
||||||
$(CSCOPE) -bqR
|
|
||||||
|
|
||||||
.PHONY: cscope.files
|
|
||||||
cscope.files:
|
|
||||||
find $(CSCOPE_DIRS) -name '*.c' -o -name '*.h' -o -name '*.cc' \
|
|
||||||
-o -name '*.js' -o -name '*.s' -o -name '*.cpp' > $@
|
|
||||||
|
|
||||||
#
|
|
||||||
# The "docs" target is complicated because we do several things here:
|
|
||||||
#
|
|
||||||
# (1) Use restdown to build HTML and JSON files from each of DOC_FILES.
|
|
||||||
#
|
|
||||||
# (2) Copy these files into $(DOC_BUILD) (build/docs/public), which
|
|
||||||
# functions as a complete copy of the documentation that could be
|
|
||||||
# mirrored or served over HTTP.
|
|
||||||
#
|
|
||||||
# (3) Then copy any directories and media from docs/media into
|
|
||||||
# $(DOC_BUILD)/media. This allows projects to include their own media,
|
|
||||||
# including files that will override same-named files provided by
|
|
||||||
# restdown.
|
|
||||||
#
|
|
||||||
# Step (3) is the surprisingly complex part: in order to do this, we need to
|
|
||||||
# identify the subdirectories in docs/media, recreate them in
|
|
||||||
# $(DOC_BUILD)/media, then do the same with the files.
|
|
||||||
#
|
|
||||||
DOC_MEDIA_DIRS := $(shell find docs/media -type d 2>/dev/null | grep -v "^docs/media$$")
|
|
||||||
DOC_MEDIA_DIRS := $(DOC_MEDIA_DIRS:docs/media/%=%)
|
|
||||||
DOC_MEDIA_DIRS_BUILD := $(DOC_MEDIA_DIRS:%=$(DOC_BUILD)/media/%)
|
|
||||||
|
|
||||||
DOC_MEDIA_FILES := $(shell find docs/media -type f 2>/dev/null)
|
|
||||||
DOC_MEDIA_FILES := $(DOC_MEDIA_FILES:docs/media/%=%)
|
|
||||||
DOC_MEDIA_FILES_BUILD := $(DOC_MEDIA_FILES:%=$(DOC_BUILD)/media/%)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Like the other targets, "docs" just depends on the final files we want to
|
|
||||||
# create in $(DOC_BUILD), leveraging other targets and recipes to define how
|
|
||||||
# to get there.
|
|
||||||
#
|
|
||||||
.PHONY: docs
|
|
||||||
docs: \
|
|
||||||
$(DOC_FILES:%.md=$(DOC_BUILD)/%.html) \
|
|
||||||
$(DOC_FILES:%.md=$(DOC_BUILD)/%.json) \
|
|
||||||
$(DOC_MEDIA_FILES_BUILD)
|
|
||||||
|
|
||||||
#
|
|
||||||
# We keep the intermediate files so that the next build can see whether the
|
|
||||||
# files in DOC_BUILD are up to date.
|
|
||||||
#
|
|
||||||
.PRECIOUS: \
|
|
||||||
$(DOC_FILES:%.md=docs/%.html) \
|
|
||||||
$(DOC_FILES:%.md=docs/%json)
|
|
||||||
|
|
||||||
#
|
|
||||||
# We do clean those intermediate files, as well as all of DOC_BUILD.
|
|
||||||
#
|
|
||||||
CLEAN_FILES += \
|
|
||||||
$(DOC_BUILD) \
|
|
||||||
$(DOC_FILES:%.md=docs/%.html) \
|
|
||||||
$(DOC_FILES:%.md=docs/%.json)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Before installing the files, we must make sure the directories exist. The |
|
|
||||||
# syntax tells make that the dependency need only exist, not be up to date.
|
|
||||||
# Otherwise, it might try to rebuild spuriously because the directory itself
|
|
||||||
# appears out of date.
|
|
||||||
#
|
|
||||||
$(DOC_MEDIA_FILES_BUILD): | $(DOC_MEDIA_DIRS_BUILD)
|
|
||||||
|
|
||||||
$(DOC_BUILD)/%: docs/% | $(DOC_BUILD)
|
|
||||||
$(CP) $< $@
|
|
||||||
|
|
||||||
docs/%.json docs/%.html: docs/%.md | $(DOC_BUILD) $(RESTDOWN_EXEC)
|
|
||||||
$(RESTDOWN) $(RESTDOWN_FLAGS) -m $(DOC_BUILD) $<
|
|
||||||
|
|
||||||
$(DOC_BUILD):
|
|
||||||
$(MKDIR) $@
|
|
||||||
|
|
||||||
$(DOC_MEDIA_DIRS_BUILD):
|
|
||||||
$(MKDIR) $@
|
|
||||||
|
|
||||||
#
|
|
||||||
# The default "test" target does nothing. This should usually be overridden by
|
|
||||||
# the parent Makefile. It's included here so we can define "prepush" without
|
|
||||||
# requiring the repo to define "test".
|
|
||||||
#
|
|
||||||
.PHONY: test
|
|
||||||
test:
|
|
||||||
|
|
||||||
.PHONY: prepush
|
|
||||||
prepush: check test
|
|
Loading…
Reference in New Issue