#!/usr/bin/make -f
DEB_DESTDIR := $(CURDIR)/debian/tmp
STUB_BINARIES := rustc cargo cargo-clippy cargo-fmt cargo-miri clippy-driver rust-gdb rust-lldb rls rust-analyzer rustdoc rustfmt
SH_COMPLETIONS_FULL := bash zsh
SH_COMPLETIONS_MIN := fish elvish
# create some temporary directories for rustup
# they are needed during the shell completion generation
export RUSTUP_HOME = $(CURDIR)/target/rustup

%:
	dh $@ --buildsystem cargo --with bash-completion

override_dh_auto_install-arch:
	dh_auto_install -O--buildsystem=cargo -- -F no-self-update
	# rename rustup-init to rustup so that rustup will not be in the
	# onboarding tutorial mode
	install -d $(DEB_DESTDIR)/usr/bin/
	mv $(CURDIR)/debian/rustup/usr/bin/rustup-init $(DEB_DESTDIR)/usr/bin/rustup
	# make symbolic links for all the Rust tools
	$(foreach b,$(STUB_BINARIES),ln -sf rustup $(DEB_DESTDIR)/usr/bin/$(b);)
	# generate shell completions
	$(foreach p,rustup cargo,\
	$(foreach s,$(SH_COMPLETIONS_FULL),\
		$(DEB_DESTDIR)/usr/bin/rustup completions $(s) $(p) > $(DEB_DESTDIR)/$(p).$(s);)\
	)
	# for other shells, only rustup completion is supported
	$(foreach s,$(SH_COMPLETIONS_MIN),\
		$(DEB_DESTDIR)/usr/bin/rustup completions $(s) rustup > $(DEB_DESTDIR)/rustup.$(s);)
	# install completions for non-bash shells
	install -d $(DEB_DESTDIR)/usr/share/zsh/vendor-completions/ \
		$(DEB_DESTDIR)/usr/share/fish/vendor_completions.d/ \
		$(DEB_DESTDIR)/usr/share/elvish/lib
	mv $(DEB_DESTDIR)/rustup.zsh $(DEB_DESTDIR)/usr/share/zsh/vendor-completions/_rustup
	mv $(DEB_DESTDIR)/cargo.zsh $(DEB_DESTDIR)/usr/share/zsh/vendor-completions/_cargo
	mv $(DEB_DESTDIR)/*.fish $(DEB_DESTDIR)/usr/share/fish/vendor_completions.d/
	mv $(DEB_DESTDIR)/rustup.elvish $(DEB_DESTDIR)/usr/share/elvish/lib/rustup.elv

refresh: clean Cargo.toml
	$(CURDIR)/debian/refresh.sh
