help:
	@echo "test             run test"
	@echo "publish          publish to PyPI"
	@echo "publish_test     publish to TestPyPI"
	@echo "docs_html        make html docs"
	@echo "docs_serve       serve docs"
	@echo "gen_data         gen pinyin data"
	@echo "gen_pinyin_dict  gen single hanzi pinyin dict"
	@echo "gen_phrases_dict gen phrase hanzi pinyin dict"
	@echo "lint             run lint"
	@echo "clean - remove all build, test, coverage and Python artifacts"
	@echo "clean-build - remove build artifacts"
	@echo "clean-pyc - remove Python file artifacts"
	@echo "clean-test - remove test and coverage artifacts"

.PHONY: test
test: lint
	@echo "run test"
	make testonly

.PHONY: testonly
testonly: doctest
	py.test --random-order --cov pypinyin tests/ pypinyin/

.PHONY: doctest
doctest:
	for f in $(shell find pypinyin -name '*.py' |grep -v __ ); do python -m doctest $$f; done

.PHONY: publish
publish: clean
	@echo "publish to pypi"
	uv build
	twine upload dist/*

.PHONY: publish_test
publish_test: clean
	@echo "publish to test pypi"
	uv build
	twine upload --repository test dist/*

.PHONY: docs_html
docs_html:
	cd docs && make html

.PHONY: docs_serve
docs_serve: docs_html
	cd docs/_build/html && python -m http.server

.PHONY: gen_data
gen_data: sync_submodule gen_pinyin_dict gen_phrases_dict

.PHONY: gen_pinyin_dict
gen_pinyin_dict: sync_submodule
	python gen_pinyin_dict.py pinyin-data/pinyin.txt pypinyin/legacy/pinyin_dict.py
	$(MAKE) to_json source=pypinyin/legacy/pinyin_dict.py var=pinyin_dict dst=pypinyin/pinyin_dict.json

.PHONY: gen_phrases_dict
gen_phrases_dict: sync_submodule
	python gen_phrases_dict.py phrase-pinyin-data/pinyin.txt pypinyin/legacy/phrases_dict.py
	$(MAKE) to_json source=pypinyin/legacy/phrases_dict.py var=phrases_dict dst=pypinyin/phrases_dict.json


.PHONY: to_json
to_json:
	python -c 'import json; exec(open("$(source)").read()); json.dump($(var), open("$(dst)", "w"), ensure_ascii=False, sort_keys=True, indent="")'

.PHONY: sync_submodule
sync_submodule:
	git submodule init
	git submodule update

.PHONY: lint
lint:
	pre-commit run --all-files
	mypy --strict pypinyin

clean: clean-build clean-pyc clean-test

clean-build:
	rm -fr build/
	rm -fr dist/
	rm -fr .eggs/
	find . -name '*.egg-info' -exec rm -fr {} +
	find . -name '*.egg' -exec rm -f {} +

clean-pyc:
	find . -name '*.pyc' -exec rm -f {} +
	find . -name '*.pyo' -exec rm -f {} +
	find . -name '*~' -exec rm -f {} +
	find . -name '__pycache__' -exec rm -fr {} +

clean-test:
	rm -fr .tox/
	rm -f .coverage
	rm -fr htmlcov/

rebase_master:
	git fetch origin && git rebase origin/master

merge_dev:
	git merge --no-ff origin/develop

bump_patch:
	bumpversion --verbose patch

bump_minor:
	bumpversion --verbose minor

start_next:
	git push && git push --tags && git checkout develop && git rebase master && git push
