Skip to content

Commit

Permalink
build: make ci test addons in test/addons
Browse files Browse the repository at this point in the history
Make `make test-addons` part of the `make test-ci` target.

Use order-only prerequisites to make generating and building the add-ons
concurrency-safe when $JOBS > 1 and fudge the dependency on $(NODE_EXE)
so that add-ons are only rebuilt when needed instead of all the time.

PR-URL: #2428
Reviewed-By: Johan Bergström <bugs@bergstroem.nu>
Reviewed-By: Rod Vagg <rod@vagg.org>
  • Loading branch information
bnoordhuis authored and rvagg committed Aug 26, 2015
1 parent 3f453b2 commit 944174b
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 10 deletions.
41 changes: 31 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -99,28 +99,49 @@ test/gc/node_modules/weak/build/Release/weakref.node: $(NODE_EXE)
--directory="$(shell pwd)/test/gc/node_modules/weak" \
--nodedir="$(shell pwd)"

build-addons: $(NODE_EXE)
rm -rf test/addons/doc-*/
# Implicitly depends on $(NODE_EXE), see the build-addons rule for rationale.
test/addons/.docbuildstamp: doc/api/addons.markdown
$(RM) -r test/addons/doc-*/
$(NODE) tools/doc/addon-verify.js
$(foreach dir, \
$(sort $(dir $(wildcard test/addons/*/*.gyp))), \
$(NODE) deps/npm/node_modules/node-gyp/bin/node-gyp rebuild \
--directory="$(shell pwd)/$(dir)" \
--nodedir="$(shell pwd)" && ) echo "build done"
touch $@

ADDONS_BINDING_GYPS := \
$(filter-out test/addons/doc-*/binding.gyp, \
$(wildcard test/addons/*/binding.gyp))

# Implicitly depends on $(NODE_EXE), see the build-addons rule for rationale.
test/addons/.buildstamp: $(ADDONS_BINDING_GYPS) | test/addons/.docbuildstamp
# Cannot use $(wildcard test/addons/*/) here, it's evaluated before
# embedded addons have been generated from the documentation.
for dirname in test/addons/*/; do \
$(NODE) deps/npm/node_modules/node-gyp/bin/node-gyp rebuild \
--directory="$$PWD/$$dirname" \
--nodedir="$$PWD"; \
done
touch $@

# .buildstamp and .docbuildstamp need $(NODE_EXE) but cannot depend on it
# directly because it calls make recursively. The parent make cannot know
# if the subprocess touched anything so it pessimistically assumes that
# .buildstamp and .docbuildstamp are out of date and need a rebuild.
# Just goes to show that recursive make really is harmful...
# TODO(bnoordhuis) Force rebuild after gyp or node-gyp update.
build-addons: $(NODE_EXE) test/addons/.buildstamp

test-gc: all test/gc/node_modules/weak/build/Release/weakref.node
$(PYTHON) tools/test.py --mode=release gc

test-build: all build-addons
test-build: | all build-addons

test-all: test-build test/gc/node_modules/weak/build/Release/weakref.node
$(PYTHON) tools/test.py --mode=debug,release

test-all-valgrind: test-build
$(PYTHON) tools/test.py --mode=debug,release --valgrind

test-ci:
$(PYTHON) tools/test.py -p tap --logfile test.tap --mode=release message parallel sequential
test-ci: | build-addons
$(PYTHON) tools/test.py -p tap --logfile test.tap --mode=release \
addons message parallel sequential

test-release: test-build
$(PYTHON) tools/test.py --mode=release
Expand Down
2 changes: 2 additions & 0 deletions test/addons/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.buildstamp
.docbuildstamp
Makefile
*.Makefile
*.mk
Expand Down

0 comments on commit 944174b

Please sign in to comment.