#!/usr/bin/make -f

# generate documentation unless nodoc requested
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
DOCS = README.html README.txt
endif

NODE_ENV = NO_COLOR=1 NODE_PATH=debian/node_modules
NODE = $(NODE_ENV) node
ESLINT = $(NODE_ENV) eslint
MOCHA = $(NODE_ENV) mocha --no-timeout
MOCHA_TAP := $(MOCHA) --reporter tap
# normalize output with TAP where possible unless terse requested
ifeq (,$(filter terse,$(DEB_BUILD_OPTIONS)))
ESLINT += --format tap
MOCHA += --reporter tap
else
ESLINT += --format unix
MOCHA += --reporter dot --no-colors
endif

# Work around missing node modules
MOCHA_EXCLUDES += \
 tests/lib/configs/ts.js \
 tests/lib/configs/vue.js

# Work around misc. breakage
MOCHA_ISOLATE += \
 tests/lib/configs/es5.js \
 tests/lib/configs/eslint-plugin.js \
 tests/lib/configs/node.js

%:
	dh $@

%.html: %.md
	pandoc --from gfm-raw_html --to html --standalone --output $@ $<

%.txt: %.md
	pandoc --from gfm-raw_html --to plain --output $@ $<

override_dh_auto_clean:
	rm -rf debian/node_modules

override_dh_clean:
	dh_clean -- $(DOCS)

override_dh_auto_configure:
	mkdir -p debian/node_modules/@mysticatea
	ln --force --symbolic ../../.. debian/node_modules/@mysticatea/eslint-plugin

override_dh_auto_build: $(DOCS)
	$(NODE) scripts/generate-browser-globals
	$(NODE) scripts/generate-configs
	$(NODE) scripts/generate-rules
ifeq (,$(filter pkg.eslint.stage1,$(DEB_BUILD_PROFILES)))
	$(ESLINT) --fix lib/configs/_browser-globals.js lib/configs.js lib/rules.js
endif

# TODO: fix remaining test failures
override_dh_auto_test:
ifeq (,$(filter pkg.eslint.stage1,$(DEB_BUILD_PROFILES)))
	$(ESLINT) lib scripts tests
endif
	$(MOCHA) $(patsubst %,--exclude %,$(MOCHA_EXCLUDES) $(MOCHA_ISOLATE)) \
		"tests/lib/**/*.js"
	$(MOCHA_TAP) $(patsubst %,--exclude %,$(MOCHA_EXCLUDES)) \
		$(MOCHA_ISOLATE) \
		| debian/tap-todo \
		"'es5.js' should include existing rule 'multiline-comment-style'." \
		"'es5.js' should include existing rule 'no-misleading-character-class'." \
		"'\+eslint-plugin.js' should include existing rule '\@mysticatea/eslint-plugin/prefer-object-rule'." \
		"'\+eslint-plugin.js' should include existing rule '\@mysticatea/eslint-plugin/require-meta-docs-description'." \
		"'\+eslint-plugin.js' should include existing rule '\@mysticatea/eslint-plugin/require-meta-schema'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/callback-return'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/global-require'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/handle-callback-err'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-callback-literal'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-exports-assign'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-mixed-requires'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-new-require'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-path-concat'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-process-env'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-process-exit'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-restricted-import'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-restricted-require'." \
		"'\+node.js' should include existing rule '\@mysticatea/node/no-sync'."

override_dh_installdocs:
	dh_installdocs --all -- $(DOCS)
