SHELL := /bin/sh

connectionString=postgres://postgres:1234@localhost:5432/postgres

params := $(connectionString)

MODULES := $(WRKDIR)/node_modules
PG := $(MODULES)/pg

node-command := xargs -n 1 -I file node file $(params)

.PHONY : test test-connection test-integration bench test-native \
	build/default/binding.node jshint upgrade-pg publish

all:
	npm install

build:
	node-gyp rebuild

help:
	@echo "make prepare-test-db [connectionString=postgres://<your connection string>]"
	@echo "make test-all [connectionString=postgres://<your connection string>]"

test: test-unit

test-all: jshint prepare-test-db test-unit test-integration test-native test-binary

test-travis: test-all upgrade-pg
	@make test-all connectionString=postgres://postgres@localhost:5433/postgres

upgrade-pg:
	@chmod 755 script/travis-pg-9.2-install.sh
	@./script/travis-pg-9.2-install.sh

bench:
	@find benchmark -name "*-bench.js" | $(node-command)

build/default/binding.node:
	@node-gyp rebuild

test-unit:
	@find $(PG)/test/unit -name "*-tests.js" | $(node-command)

test-connection:
	@echo "***Testing connection***"
	@node $(PG)/script/test-connection.js $(params)

test-connection-binary:
	@echo "***Testing binary connection***"
	@node $(PG)/script/test-connection.js $(params) binary

test-native:
	@echo "***Testing native bindings***"
	@find $(PG)/test/native -name "*-tests.js" | $(node-command)
	@find $(PG)/test/integration -name "*-tests.js" | $(node-command) native

test-integration: test-connection
	@echo "***Testing Pure Javascript***"
	@find $(PG)/test/integration -name "*-tests.js" | $(node-command)

test-binary: test-connection-binary
	@echo "***Testing Pure Javascript (binary)***"
	@find $(PG)/test/integration -name "*-tests.js" | $(node-command) binary

prepare-test-db:
	@echo "***Preparing the database for tests***"
	@find $(PG)/script/create-test-tables.js | $(node-command) down
	@find $(PG)/script/create-test-tables.js  | $(node-command)

jshint:
	@test -s $(MODULES)/jshint/bin/jshint || { echo "Please run: 'cd \`make show=WRKDIR\`; npm install jshint; cd -'"; exit 1; }
	@echo "***Starting jshint***"
	@$(MODULES)/jshint/bin/jshint $(PG)/lib

publish:
	@rm -r build || (exit 0)
	@npm publish
