#!/usr/bin/make -f
# -*- makefile -*-

#export DH_VERBOSE = 1

SPHINXOPTS := -E -N

export TMP_DIST-PACKAGES_FOLDER=$(CURDIR)/.pybuild/dist-packages/build

PYTHON_OPENTELEMETRY_PACKAGES=\
opentelemetry-api \
opentelemetry-proto \
opentelemetry-sdk \
opentelemetry-semantic-conventions \
$(NULL)

PYTHON_OPENTELEMETRY_EXPORTER_PACKAGES=\
opentelemetry-exporter-opencensus \
opentelemetry-exporter-otlp-proto-common \
opentelemetry-exporter-otlp-proto-grpc \
opentelemetry-exporter-otlp-proto-http \
opentelemetry-exporter-prometheus \
opentelemetry-exporter-zipkin-json \
opentelemetry-exporter-zipkin-proto-http \
$(NULL)

PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGES=\
opentelemetry-propagator-b3 \
opentelemetry-propagator-jaeger \
$(NULL)

PYTHON_OPENTELEMETRY_SHIM_PACKAGES=\
opentelemetry-opencensus-shim \
opentelemetry-opentracing-shim \
$(NULL)

%:
	dh $@

override_dh_clean:
	dh_clean
	rm -rf .pybuild
	find -type d -name ".mypy_cache" -exec rm -rf {} \; -prune

override_dh_auto_build:
	for PYTHON_OPENTELEMETRY_PACKAGE in $(PYTHON_OPENTELEMETRY_PACKAGES); do \
	    echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\
	    dh_auto_build --buildsystem=pybuild --sourcedirectory $${PYTHON_OPENTELEMETRY_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\
	done
	for PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE in $(PYTHON_OPENTELEMETRY_EXPORTER_PACKAGES); do \
	    echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	    dh_auto_build --buildsystem=pybuild --sourcedirectory exporter/$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}  -- --name=$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	done
	for PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE in $(PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGES); do \
	    echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\
	    dh_auto_build --buildsystem=pybuild --sourcedirectory propagator/$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\
	done
	for PYTHON_OPENTELEMETRY_SHIM_PACKAGE in $(PYTHON_OPENTELEMETRY_SHIM_PACKAGES); do \
	    echo "\n########\n# Building package $${PYTHON_OPENTELEMETRY_SHIM_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_SHIM_PACKAGE} ;\
	    dh_auto_build --buildsystem=pybuild --sourcedirectory shim/$${PYTHON_OPENTELEMETRY_SHIM_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_SHIM_PACKAGE} ;\
	done
	# To make sphinx.autodoc and also the tests find the various opentelemetry modules
	# we need to copy them into a folder we can use as PYTHONPATH then.
	# opencensus is still not available in the archive, see also README.source.
	mkdir .pybuild/dist-packages && \
	for FOLDER in `find .pybuild/cpython3_3.*_opentelemetry-*/ -maxdepth 1 -type d -name build`; do \
	    echo "Copy $${FOLDER} -> .pybuild/dist-packages" ;\
	    cp -a $${FOLDER} .pybuild/dist-packages ;\
	done
	# Copy the helper module 'test' for the tests into place.
	cp -a tests/opentelemetry-test-utils/src/opentelemetry/test $(TMP_DIST-PACKAGES_FOLDER)/opentelemetry

override_dh_auto_install:
	for PYTHON_OPENTELEMETRY_PACKAGE in $(PYTHON_OPENTELEMETRY_PACKAGES); do \
	    echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\
	    dh_auto_install --buildsystem=pybuild --sourcedirectory $${PYTHON_OPENTELEMETRY_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PACKAGE} ;\
	done
	for PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE in $(PYTHON_OPENTELEMETRY_EXPORTER_PACKAGES); do \
	    echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	    dh_auto_install --buildsystem=pybuild --sourcedirectory exporter/$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	done
	for PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE in $(PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGES); do \
	    echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\
	    dh_auto_install --buildsystem=pybuild --sourcedirectory propagator/$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_PROPAGATOR_PACKAGE} ;\
	done
	for PYTHON_OPENTELEMETRY_SHIM_PACKAGE in $(PYTHON_OPENTELEMETRY_SHIM_PACKAGES); do \
	    echo "\n########\n# Installing package $${PYTHON_OPENTELEMETRY_SHIM_PACKAGE}\n########" ;\
	    PYBUILD_NAME=$${PYTHON_OPENTELEMETRY_SHIM_PACKAGE} ;\
	    dh_auto_install --buildsystem=pybuild --sourcedirectory shim/$${PYTHON_OPENTELEMETRY_SHIM_PACKAGE} -- --name=$${PYTHON_OPENTELEMETRY_SHIM_PACKAGE} ;\
	done

override_dh_auto_test:
	for PYTHON_OPENTELEMETRY_PACKAGE in $(PYTHON_OPENTELEMETRY_PACKAGES); do \
	    echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_PACKAGE}\n#######################\n" ;\
	    cd $(CURDIR)/$${PYTHON_OPENTELEMETRY_PACKAGE} ;\
	    PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest ;\
	done
	for PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE in $(PYTHON_OPENTELEMETRY_EXPORTER_PACKAGES); do \
	    if [ "$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}" = "opentelemetry-exporter-opencensus" ]; then \
	        echo "\n#######################\n# Running tests for $${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}\n#######################\n" ;\
	        echo " ...skipped, missing a dependency!" ;\
	    elif [ "$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}" = "opentelemetry-exporter-otlp-proto-grpc" ]; then \
	        echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}\n#######################\n" ;\
	        cd $(CURDIR)/exporter/$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	        PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest --ignore tests/logs/test_otlp_logs_exporter.py \
	                                                                 --ignore tests/test_otlp_exporter_mixin.py \
	                                                                 --ignore tests/test_otlp_metrics_exporter.py \
	                                                                 --ignore tests/test_otlp_trace_exporter.py ;\
	    elif [ "$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}" = "opentelemetry-exporter-zipkin-json" ]; then \
	        echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}\n#######################\n" ;\
	        cd $(CURDIR)/exporter/$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	        PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest -k "not test_encode \
	                                                                 and not test_encode_local_endpoint_default \
	                                                                 and not test_encode_local_endpoint_explicits \
	                                                                 and not test_encode_max_tag_length_5 \
	                                                                 and not test_encode_max_tag_length_9 \
	                                                                 and not test_encode_max_tag_length_10 \
	                                                                 and not test_encode_max_tag_length_11 \
	                                                                 and not test_encode_max_tag_length_128" ;\
	    elif [ "$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}" = "opentelemetry-exporter-zipkin-proto-http" ]; then \
	        echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}\n#######################\n" ;\
	        cd $(CURDIR)/exporter/$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	        PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest -k "not test_encode \
	                                                                 and not test_encode_local_endpoint_default \
	                                                                 and not test_encode_local_endpoint_explicits \
	                                                                 and not test_encode_max_tag_length_5 \
	                                                                 and not test_encode_max_tag_length_9 \
	                                                                 and not test_encode_max_tag_length_10 \
	                                                                 and not test_encode_max_tag_length_11 \
	                                                                 and not test_encode_max_tag_length_128" ;\
	    else \
	        echo "\n#######################\n# Run tests for $${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE}\n#######################\n" ;\
	        cd $(CURDIR)/exporter/$${PYTHON_OPENTELEMETRY_EXPORTER_PACKAGE} ;\
	        PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) python3 -m pytest ;\
	    fi \
	done

override_dh_sphinxdoc:
ifeq (,$(findstring nodoc, $(DEB_BUILD_OPTIONS)))
	cd .pybuild && \
	PYTHONPATH=$(TMP_DIST-PACKAGES_FOLDER) && \
	export PYTHONPATH && \
	    python3 -m sphinx -b html $(SPHINXOPTS) ../docs $(CURDIR)/debian/python-opentelemetry-doc/usr/share/doc/python-opentelemetry-doc/html
	    rm $(CURDIR)/debian/python-opentelemetry-doc/usr/share/doc/python-opentelemetry-doc/html/.nojekyll
	dh_sphinxdoc
endif
