#!/usr/bin/make -f

export CARGO = /usr/share/cargo/bin/cargo
export CARGO_VENDOR_DIR = rust-vendor
export CARGO_HOME = $(CURDIR)/debian/cargo_home
DEB_VERSION_UPSTREAM = $(shell dpkg-parsechangelog -S Version | cut -d- -f1)
VENDOR_TARBALL = uv-full_$(DEB_VERSION_UPSTREAM).orig-$(CARGO_VENDOR_DIR).tar.xz
CARGO_TARGET_DIR = $(CURDIR)/target

# For LP builds
export DEB_BUILD_MAINT_OPTIONS = optimize=-lto
export CARGO_PROFILE_RELEASE_LTO = thin

include /usr/share/rustc/architecture.mk
export DEB_HOST_RUST_TYPE DEB_HOST_GNU_TYPE

# Fix jemalloc page size for architectures that use 64KB pages
ifeq ($(DEB_HOST_ARCH),arm64)
    export JEMALLOC_SYS_WITH_LG_PAGE = 16
endif
ifeq ($(DEB_HOST_ARCH),ppc64el)
    export JEMALLOC_SYS_WITH_LG_PAGE = 16
endif

%:
	dh $@ --buildsystem=cargo

vendor-tarball-sanity-check:
	if [ -f ../$(VENDOR_TARBALL) ]; then \
		echo "Vendor tarball already exists, aborting."; \
		exit 1; \
	fi

vendor-deps:
	if QUILT_PATCHES=debian/patches quilt applied | grep vendor-remove-unused-deps ; then \
		echo "Detecting patch on vendor dir applied, aborting."; \
		exit 1; \
	fi
	rm -rf $(CARGO_VENDOR_DIR)
	env -i PATH=$(PATH) cargo-vendor-filterer \
		--all-features \
		--versioned-dirs \
        --platform 'x86_64-unknown-linux-gnu' \
        --platform 'aarch64-unknown-linux-gnu' \
        --platform 'i686-unknown-linux-gnu' \
        --platform 'armv7-unknown-linux-gnueabihf' \
        --platform 'powerpc64le-unknown-linux-gnu' \
        --platform 'powerpc-unknown-linux-gnu' \
        --platform 's390x-unknown-linux-gnu' \
        --platform 'riscv64gc-unknown-linux-gnu' \
        --platform 'riscv64a23-unknown-linux-gnu' \
		--exclude-crate-path="*#test" \
		--exclude-crate-path="*#tests" \
		--exclude-crate-path="*#test*data" \
		$(CARGO_VENDOR_DIR)

	# Remove the non-free JSON license text shipped by the spdx crate.
	find $(CARGO_VENDOR_DIR) \
		-path '*/src/text/licenses/JSON' \
		-delete

	# Remove the checksum files to allow us to patch the crates to remove extraneous dependencies
	for crate in $(CARGO_VENDOR_DIR)/*; do \
		sed -i 's/^{"files":.*"package":"\([a-z0-9]\+\)"}$$/{"files":{},"package":"\1"}/' $$crate/.cargo-checksum.json; \
	done
	# Cleanup temp files
	rm -rf $(CARGO_HOME)

vendor-tarball: vendor-tarball-sanity-check vendor-deps
	tar --sort=name --mtime=@0 --owner=0 --group=0 --numeric-owner --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime -caf ../$(VENDOR_TARBALL) $(CARGO_VENDOR_DIR)

override_dh_auto_configure:
	# Configure cargo to use the local vendor directory
	mkdir -p $(CARGO_HOME)
	sed -e 's|@VENDOR_DIR@|$(CURDIR)/$(CARGO_VENDOR_DIR)|g' \
		-e 's|@GNU_TYPE@|$(DEB_HOST_GNU_TYPE)|g' \
		debian/cargo-config.toml.in > $(CARGO_HOME)/config.toml

override_dh_auto_build:
	$(CARGO) build --release --offline

override_dh_auto_install:
	# Install binaries
	install -d debian/uv/usr/bin
	install -m 755 $(CARGO_TARGET_DIR)/$(DEB_HOST_RUST_TYPE)/release/uv debian/uv/usr/bin/uv
	install -m 755 $(CARGO_TARGET_DIR)/$(DEB_HOST_RUST_TYPE)/release/uvx debian/uv/usr/bin/uvx

	# Create Debian completion directories
	install -d debian/uv/usr/share/bash-completion/completions
	install -d debian/uv/usr/share/zsh/vendor-completions
	install -d debian/uv/usr/share/fish/vendor_completions.d

	# Generate shell completions for uv
	debian/uv/usr/bin/uv generate-shell-completion bash > debian/uv/usr/share/bash-completion/completions/uv
	debian/uv/usr/bin/uv generate-shell-completion zsh > debian/uv/usr/share/zsh/vendor-completions/_uv
	debian/uv/usr/bin/uv generate-shell-completion fish > debian/uv/usr/share/fish/vendor_completions.d/uv.fish

	# Generate shell completions for uvx
	debian/uv/usr/bin/uvx --generate-shell-completion bash > debian/uv/usr/share/bash-completion/completions/uvx
	debian/uv/usr/bin/uvx --generate-shell-completion zsh > debian/uv/usr/share/zsh/vendor-completions/_uvx
	debian/uv/usr/bin/uvx --generate-shell-completion fish > debian/uv/usr/share/fish/vendor_completions.d/uvx.fish

override_dh_installman:
	# Generate manpages using help2man
	help2man --no-info --name="An extremely fast Python package installer and resolver" \
		--version-string="$(DEB_VERSION_UPSTREAM)" \
		debian/uv/usr/bin/uv > debian/uv.1
	help2man --no-info --name="Run commands in isolated Python environments" \
		--version-string="$(DEB_VERSION_UPSTREAM)" \
		debian/uv/usr/bin/uvx > debian/uvx.1
	dh_installman

override_dh_auto_test:
	@echo "Skipping tests for now"

override_dh_clean:
	dh_clean -XCargo.toml.orig
	rm -rf $(CARGO_HOME) $(CARGO_TARGET_DIR)
