profile := dev target = $(shell rustc -vV | grep host | awk '{print $$2}') architectures := x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu app_name := map deploy_host := deploy@build.r.bdr.sh deploy_path := /srv/http/build.r.bdr.sh/$(app_name)-linux install_path := /usr/local/bin/$(app_name) flatpak_cargo_generator := $(HOME)/projects/vendor/flatpak-builder-tools/cargo define sign_and_deploy @./scripts/sign.sh "$(1)" "$(channel)" "$(architecture)" rsync -avz $(1) $(deploy_host):$(deploy_path) rsync -avz $(1).minisig $(deploy_host):$(deploy_path) endef default: build set_rust: rustup default stable prepare: ifneq ($(skip_prepare),1) rustup target add $(target) endif # Build ######################################################################## build: compile_translations prepare @$(eval target_dir := ./target/$(target)/$(profile)/map) cargo build --profile $(profile) --target $(target) # Code Quality ################################################################# test: cargo test coverage: cargo tarpaulin format: cargo fmt && cargo clippy --fix lint: cargo fmt -- --check && cargo clippy # Internationalization / Localization ########################################## find_translatable_files: @find ./ -not -path '*/.*' -type f -name "*.rs" -exec grep -l "tr!(\"\|gettext" {} \; | sort > po/POTFILES extract_strings: find_translatable_files @xgettext --files-from=po/POTFILES --output=po/systems.tranquil.Map.pot --from-code=UTF-8 --add-comments --keyword='tr!' po_files := $(wildcard po/*.po) mo_files := $(patsubst po/%.po,po/%/LC_MESSAGES/systems.tranquil.Map.mo,$(po_files)) compile_translations: $(mo_files) po/%/LC_MESSAGES/systems.tranquil.Map.mo: po/%.po @mkdir -p $(dir $@) msgfmt $< -o $@ # Packaging #################################################################### package: $(architectures) release: rpm tar deb @$(eval filename := $(app_name)-$(target)-$(channel)) update_flatpak_dependencies: cd $(flatpak_cargo_generator) && `poetry env activate` && python3 flatpak-cargo-generator.py $(CURDIR)/Cargo.lock -o $(CURDIR)/build-aux/cargo-sources.json && deactivate flatpak: update_flatpak_dependencies @flatpak-builder --force-clean --user --install-deps-from=flathub --repo=repo --install builddir ./build-aux/systems.tranquil.Map.yml deb: build ifeq ($(findstring linux,$(target)),linux) @$(eval filename := $(app_name)-$(target)-$(channel)) cargo deb --profile $(profile) --target $(target) mv target/$(target)/debian/*.deb $(filename).deb @$(call sign_and_deploy,$(filename).deb) endif rpm: build ifeq ($(findstring linux,$(target)),linux) @$(eval filename := $(app_name)-$(target)-$(channel)) cargo generate-rpm --profile $(profile) --target $(target) mv target/$(target)/generate-rpm/*.rpm $(filename).rpm @$(call sign_and_deploy,$(filename).rpm) endif tar: build @$(eval filename := $(app_name)-$(target)-$(channel)) tar -czvf $(filename).tar.gz -C target/$(target)/$(profile)/ $(app_name) @$(call sign_and_deploy,$(filename).tar.gz) # Distribution ################################################################# install: build @cp target/$(target)/$(profile)/ $(install_path) # CI ########################################################################### ci: lint coverage ifeq ($(GIT_REF),refs/heads/main) $(MAKE) -e profile=release -e channel=unstable package else ifneq (,$(findstring refs/tags/,$(GIT_REF))) $(MAKE) -e profile=release -e channel=$(subst refs/tags/,,$(GIT_REF)) package endif $(architectures): ifneq ($(channel),) $(MAKE) -e channel=$(channel) -e target=$@ release else $(MAKE) -e target=$@ build endif .PHONY: default build $(architectures) rpm package prepare set_rust ci release test coverage format flatpak update_flatpak_dependencies extract_strings find_translatable_files compile_translations