--- /dev/null
+BUILD_CLEAN=false
+BUILD_ARGS= install --dev
+TEST_ARGS= --strict --coverage-text
+
+.PHONY: all clean
+.SUFFIXES:
+
+all: clean $(REPORT)
+ $(SAY) "Result: $$(cat $(REPORT))"
+
+clean: $(CONFIG_REPORT)
+ if $(BUILD_CLEAN); \
+ then \
+ cd $(BUILD_DIR) && \
+ rm -rf vendor; \
+ fi;
+
+$(REPORT): $(TEST_REPORT)
+ @( \
+ TESTS_PASSED=$$(grep -Pc '^ok \d+' < $(TEST_REPORT)); \
+ TESTS_FAILED=$$(grep -Pc '^not ok \d+' < $(TEST_REPORT)); \
+ \
+ printf "%d/%d" $$TESTS_PASSED $$TESTS_FAILED >$@; \
+ if test -s "$(LAST_REPORT)"; then \
+ LAST_PASSED=$$(grep -Pc '^ok \d+' < $(LAST_REPORT)); \
+ LAST_FAILED=$$(grep -Pc '^not ok \d+' < $(LAST_REPORT)); \
+ DIFF_PASSED=$$(bc <<<"$$TESTS_PASSED - $$LAST_PASSED"); \
+ DIFF_FAILED=$$(bc <<<"$$TESTS_FAILED - $$LAST_FAILED"); \
+ printf " %+d/%+d" $$DIFF_PASSED $$DIFF_FAILED >>$@; \
+ fi; \
+ printf "\n" >>$@; \
+ )
+
+$(TEST_REPORT): $(BUILD_REPORT)
+ $(SAY) "Running unit tests..."
+ cd $(BUILD_DIR) && \
+ phpunit --tap $(TEST_ARGS) . >../$@
+
+$(BUILD_REPORT): $(CONFIG_REPORT) $(BUILD_DIR)/composer.lock
+ $(SAY) "Installing dependencies..."
+ cd $(BUILD_DIR) && \
+ ./composer.phar -n --no-ansi $(QUIET_FLAG) $(VERBOSE_FLAG) $(BUILD_ARGS) \
+ >../$@
+
+$(CONFIG_REPORT): $(BUILD_DIR)/composer.json $(BUILD_DIR)/composer.phar
+ touch $(CONFIG_REPORT)
+
+$(BUILD_DIR)/composer.phar:
+ $(SAY) "Orchestrating composer..."
+ @cd $(BUILD_DIR) && ( \
+ COMPOSER=$$(command -v composer); \
+ if test $$? -eq 0; \
+ then \
+ ln -s $$COMPOSER composer.phar; \
+ else \
+ curl $(SILENT_FLAG) -S http://getcomposer.org/installer | php; \
+ fi; \
+ ) >>$(CONFIG_REPORT)
+
+$(BUILD_DIR)/composer.json: $(BRANCH_DIR)/composer.json
+ rsync $(QUIET_FLAG) $(VERBOSE_FLAG) -a --delete $(BRANCH_DIR)/ $(BUILD_DIR)/ \
+ >> $(CONFIG_REPORT)
+
+$(BUILD_DIR)/composer.lock: $(BUILD_DIR)/composer.json $(BUILD_DIR)/composer.phar
+
+# vim: noet