From 1aa9d3a2ab9bcd03f58efc95dc0077a82088fe61 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 18 Aug 2015 21:29:59 +0200 Subject: [PATCH] build: make ci test addons in test/addons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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: https://github.com/nodejs/node/pull/2428 Reviewed-By: Johan Bergström Reviewed-By: Rod Vagg --- Makefile | 41 +++++++++++++++++++++++++++++++---------- test/addons/.gitignore | 2 ++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 671a6f1222..bccdc9afa0 100644 --- a/Makefile +++ b/Makefile @@ -99,19 +99,39 @@ 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 @@ -119,8 +139,9 @@ test-all: test-build test/gc/node_modules/weak/build/Release/weakref.node 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 diff --git a/test/addons/.gitignore b/test/addons/.gitignore index ff6b007943..bde1cf3ab9 100644 --- a/test/addons/.gitignore +++ b/test/addons/.gitignore @@ -1,3 +1,5 @@ +.buildstamp +.docbuildstamp Makefile *.Makefile *.mk