From 4cc3e2bf861ba04e3924e337b9ac5d3e8d21eb02 Mon Sep 17 00:00:00 2001 From: UMTS at Teleco Date: Sun, 8 Mar 2026 15:09:27 +0100 Subject: sexy --- Makefile | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 Makefile (limited to 'Makefile') diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f023892 --- /dev/null +++ b/Makefile @@ -0,0 +1,220 @@ +# hoardom makefile +# supports: make, make install, make deb, make pkg, make clean + +NAME := hoardom +VERSION := $(shell grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/') +DESCRIPTION := Domain hoarding made less painful +MAINTAINER := crt + +PREFIX ?= /usr/local +BINDIR := $(PREFIX)/bin +DATADIR := $(PREFIX)/share +APPDIR := $(DATADIR)/applications +ICONDIR := $(DATADIR)/icons/hicolor/256x256/apps +ICON_FILE := dist/AppIcon.ico + +CARGO ?= cargo +CARGO_FLAGS ?= + +BUILDDIR := target/release +BINARY := $(BUILDDIR)/$(NAME) +GUI_BINARY := $(BUILDDIR)/$(NAME)-app + +# packaging scratch dirs +PKG_ROOT := target/pkg-root +DEB_ROOT := target/deb-root +MAC_ROOT := target/mac-root +MAC_APP := target/mac-root/$(NAME).app + +# ---- build ---- + +.PHONY: all build release debug clean install uninstall deb pkg app + +all: release + +release: + $(CARGO) build --release $(CARGO_FLAGS) + +debug: + $(CARGO) build $(CARGO_FLAGS) + +# build the gui wrapper (requires gui feature) +app: release + $(CARGO) build --release --features gui $(CARGO_FLAGS) + +# ---- install (linux / mac) ---- + +install: release + @echo "installing $(NAME) to $(DESTDIR)$(BINDIR)" + install -d $(DESTDIR)$(BINDIR) + install -m 755 $(BINARY) $(DESTDIR)$(BINDIR)/$(NAME) + @# install gui wrapper too if it was built + @if [ -f $(GUI_BINARY) ]; then \ + install -m 755 $(GUI_BINARY) $(DESTDIR)$(BINDIR)/$(NAME)-app; \ + fi +ifeq ($(shell uname), Darwin) + @echo "installing macOS app bundle" + install -d $(DESTDIR)/Applications + $(MAKE) _mac_app APP_DEST=$(DESTDIR)/Applications +else + @echo "installing desktop file" + install -d $(DESTDIR)$(APPDIR) + install -m 644 dist/$(NAME).desktop $(DESTDIR)$(APPDIR)/$(NAME).desktop + install -d $(DESTDIR)$(ICONDIR) + install -m 644 $(ICON_FILE) $(DESTDIR)$(ICONDIR)/$(NAME).ico +endif + @echo "done, $(NAME) is ready to go" + +uninstall: + rm -f $(DESTDIR)$(BINDIR)/$(NAME) + rm -f $(DESTDIR)$(BINDIR)/$(NAME)-app + rm -f $(DESTDIR)$(APPDIR)/$(NAME).desktop + rm -f $(DESTDIR)$(ICONDIR)/$(NAME).ico +ifeq ($(shell uname), Darwin) + rm -rf $(DESTDIR)/Applications/$(NAME).app +endif + @echo "uninstalled" + +# ---- debian .deb package ---- + +deb: release + @echo "building deb package v$(VERSION)" + rm -rf $(DEB_ROOT) + + # binary + install -d $(DEB_ROOT)/usr/bin + install -m 755 $(BINARY) $(DEB_ROOT)/usr/bin/$(NAME) + + # desktop file + icon + install -d $(DEB_ROOT)/usr/share/applications + install -m 644 dist/$(NAME).desktop $(DEB_ROOT)/usr/share/applications/$(NAME).desktop + install -d $(DEB_ROOT)/usr/share/icons/hicolor/256x256/apps + install -m 644 $(ICON_FILE) $(DEB_ROOT)/usr/share/icons/hicolor/256x256/apps/$(NAME).ico + + # control file + install -d $(DEB_ROOT)/DEBIAN + printf 'Package: $(NAME)\n\ +Version: $(VERSION)\n\ +Section: utils\n\ +Priority: optional\n\ +Architecture: $(shell dpkg --print-architecture 2>/dev/null || echo amd64)\n\ +Maintainer: $(MAINTAINER)\n\ +Description: $(DESCRIPTION)\n\ + TUI and CLI tool for searching domain availability across TLD lists.\n\ + Includes favorites, scratchpad, export, and custom list support.\n' > $(DEB_ROOT)/DEBIAN/control + + dpkg-deb --build --root-owner-group $(DEB_ROOT) target/$(NAME)_$(VERSION)_$(shell dpkg --print-architecture 2>/dev/null || echo amd64).deb + @echo "deb built: target/$(NAME)_$(VERSION)_*.deb" + +# ---- macOS .pkg package ---- + +pkg: app + @echo "building macOS pkg v$(VERSION)" + rm -rf $(PKG_ROOT) $(MAC_ROOT) + + # cli binary package + install -d $(PKG_ROOT)/cli$(PREFIX)/bin + install -m 755 $(BINARY) $(PKG_ROOT)/cli$(PREFIX)/bin/$(NAME) + + pkgbuild \ + --root $(PKG_ROOT)/cli \ + --identifier ch.teleco.$(NAME).cli \ + --version $(VERSION) \ + --install-location / \ + target/$(NAME)-cli.pkg + + # app bundle package + install -d $(PKG_ROOT)/app + $(MAKE) _mac_app APP_DEST=$(PKG_ROOT)/app + + pkgbuild \ + --component $(PKG_ROOT)/app/$(NAME).app \ + --identifier ch.teleco.$(NAME).app \ + --version $(VERSION) \ + --install-location /Applications \ + target/$(NAME)-app.pkg + + # distribution xml so the installer actually has permission to write to /Applications + printf '\n\ +\n\ + $(NAME) $(VERSION)\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + #$(NAME)-cli.pkg\n\ + #$(NAME)-app.pkg\n\ +\n' > $(PKG_ROOT)/distribution.xml + + productbuild \ + --distribution $(PKG_ROOT)/distribution.xml \ + --package-path target \ + target/$(NAME)-$(VERSION).pkg + rm -f target/$(NAME)-cli.pkg target/$(NAME)-app.pkg + rm -rf $(PKG_ROOT) + @echo "pkg built: target/$(NAME)-$(VERSION).pkg" + +# ---- internal: macOS .app bundle ---- + +_mac_app: + @test -n "$(APP_DEST)" || (echo "APP_DEST not set" && exit 1) + install -d $(APP_DEST)/$(NAME).app/Contents/MacOS + install -d $(APP_DEST)/$(NAME).app/Contents/Resources + + # gui wrapper as the executable (or shell launcher as fallback) + @if [ -f $(GUI_BINARY) ]; then \ + echo "using native gui wrapper"; \ + install -m 755 $(GUI_BINARY) $(APP_DEST)/$(NAME).app/Contents/MacOS/$(NAME)-app; \ + else \ + echo "gui wrapper not built, using shell launcher fallback"; \ + install -m 755 dist/mac-launcher.sh $(APP_DEST)/$(NAME).app/Contents/MacOS/$(NAME)-app; \ + fi + + # the actual tui binary (gui wrapper spawns this, shell launcher also needs it) + install -m 755 $(BINARY) $(APP_DEST)/$(NAME).app/Contents/MacOS/$(NAME) + + # Info.plist + printf '\n\ +\n\ +\n\ +\n\ + CFBundleExecutable\n\ + $(NAME)-app\n\ + CFBundleIdentifier\n\ + ch.teleco.$(NAME)\n\ + CFBundleName\n\ + $(NAME)\n\ + CFBundleDisplayName\n\ + hoardom\n\ + CFBundleVersion\n\ + $(VERSION)\n\ + CFBundleShortVersionString\n\ + $(VERSION)\n\ + CFBundlePackageType\n\ + APPL\n\ + CFBundleIconFile\n\ + icon.icns\n\ + LSMinimumSystemVersion\n\ + 10.12\n\ + NSHighResolutionCapable\n\ + \n\ +\n\ +\n' > $(APP_DEST)/$(NAME).app/Contents/Info.plist + + # app icon + cp dist/AppIcon.icns $(APP_DEST)/$(NAME).app/Contents/Resources/icon.icns + +# ---- clean ---- + +clean: + $(CARGO) clean + rm -rf $(PKG_ROOT) $(DEB_ROOT) $(MAC_ROOT) + rm -f target/$(NAME)_*.deb target/$(NAME)-*.pkg -- cgit v1.2.3-70-g09d2