Files
Windows-11-Clipboard-Histor…/Makefile
2025-12-11 02:05:01 -03:00

270 lines
10 KiB
Makefile

# Windows 11 Clipboard History For Linux - Makefile
# Cross-distro build and install for Ubuntu, Debian, Fedora, and Arch Linux
SHELL := /bin/bash
APP_NAME := win11-clipboard-history
VERSION := 1.0.0
PREFIX ?= /usr/local
BINDIR := $(PREFIX)/bin
DATADIR := $(PREFIX)/share
DESTDIR ?=
# Detect distro
DISTRO := $(shell \
if [ -f /etc/os-release ]; then \
. /etc/os-release && echo $$ID; \
elif [ -f /etc/debian_version ]; then \
echo "debian"; \
elif [ -f /etc/fedora-release ]; then \
echo "fedora"; \
elif [ -f /etc/arch-release ]; then \
echo "arch"; \
else \
echo "unknown"; \
fi)
# Colors for pretty output
CYAN := \033[0;36m
GREEN := \033[0;32m
YELLOW := \033[0;33m
RED := \033[0;31m
RESET := \033[0m
.PHONY: all help deps deps-ubuntu deps-debian deps-fedora deps-arch \
rust node check-deps dev build install uninstall clean run \
lint format test
all: build
help:
@echo -e "$(CYAN)╔════════════════════════════════════════════════════════════════╗$(RESET)"
@echo -e "$(CYAN)║ Windows 11 Clipboard History For Linux - Build Commands ║$(RESET)"
@echo -e "$(CYAN)╚════════════════════════════════════════════════════════════════╝$(RESET)"
@echo ""
@echo -e "$(GREEN)Setup:$(RESET)"
@echo " make deps - Install system dependencies (auto-detect distro)"
@echo " make deps-ubuntu - Install dependencies for Ubuntu"
@echo " make deps-debian - Install dependencies for Debian"
@echo " make deps-fedora - Install dependencies for Fedora"
@echo " make deps-arch - Install dependencies for Arch Linux"
@echo " make rust - Install Rust via rustup"
@echo " make node - Install Node.js via nvm"
@echo ""
@echo -e "$(GREEN)Development:$(RESET)"
@echo " make dev - Run in development mode (hot reload)"
@echo " make run - Run the development version (clean env)"
@echo " make build - Build production release"
@echo " make lint - Run linters"
@echo " make format - Format code"
@echo ""
@echo -e "$(GREEN)Installation:$(RESET)"
@echo " make install - Install to system (requires sudo)"
@echo " make uninstall - Remove from system (requires sudo)"
@echo ""
@echo -e "$(GREEN)Maintenance:$(RESET)"
@echo " make clean - Remove build artifacts"
@echo " make check-deps - Verify all dependencies are installed"
@echo ""
@echo -e "$(YELLOW)Detected distro: $(DISTRO)$(RESET)"
# ============================================================================
# Dependencies
# ============================================================================
deps:
@echo -e "$(CYAN)Detected distribution: $(DISTRO)$(RESET)"
ifeq ($(DISTRO),ubuntu)
@$(MAKE) deps-ubuntu
else ifeq ($(DISTRO),debian)
@$(MAKE) deps-debian
else ifeq ($(DISTRO),fedora)
@$(MAKE) deps-fedora
else ifeq ($(DISTRO),arch)
@$(MAKE) deps-arch
else ifeq ($(DISTRO),manjaro)
@$(MAKE) deps-arch
else ifeq ($(DISTRO),endeavouros)
@$(MAKE) deps-arch
else ifeq ($(DISTRO),linuxmint)
@$(MAKE) deps-ubuntu
else ifeq ($(DISTRO),pop)
@$(MAKE) deps-ubuntu
else
@echo -e "$(RED)Unknown distribution: $(DISTRO)$(RESET)"
@echo "Please install dependencies manually. See README.md"
@exit 1
endif
deps-ubuntu deps-debian:
@echo -e "$(CYAN)Installing dependencies for Ubuntu/Debian...$(RESET)"
sudo apt update
sudo apt install -y \
libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
libxdo-dev \
libgtk-3-dev \
libglib2.0-dev \
pkg-config
@echo -e "$(GREEN)✓ Dependencies installed successfully$(RESET)"
deps-fedora:
@echo -e "$(CYAN)Installing dependencies for Fedora...$(RESET)"
sudo dnf install -y \
webkit2gtk4.1-devel \
openssl-devel \
curl \
wget \
file \
libappindicator-gtk3-devel \
librsvg2-devel \
libxdo-devel \
gtk3-devel \
glib2-devel \
pkg-config \
@development-tools
@echo -e "$(GREEN)✓ Dependencies installed successfully$(RESET)"
deps-arch:
@echo -e "$(CYAN)Installing dependencies for Arch Linux...$(RESET)"
sudo pacman -Syu --needed --noconfirm \
webkit2gtk-4.1 \
base-devel \
curl \
wget \
file \
openssl \
libappindicator-gtk3 \
librsvg \
xdotool \
gtk3 \
glib2 \
pkgconf
@echo -e "$(GREEN)✓ Dependencies installed successfully$(RESET)"
rust:
@echo -e "$(CYAN)Installing Rust via rustup...$(RESET)"
@if command -v rustc &> /dev/null; then \
echo -e "$(YELLOW)Rust is already installed: $$(rustc --version)$(RESET)"; \
else \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y; \
echo -e "$(GREEN)✓ Rust installed. Run 'source ~/.cargo/env' to update PATH$(RESET)"; \
fi
node:
@echo -e "$(CYAN)Installing Node.js via nvm...$(RESET)"
@if command -v node &> /dev/null; then \
echo -e "$(YELLOW)Node.js is already installed: $$(node --version)$(RESET)"; \
else \
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash; \
export NVM_DIR="$$HOME/.nvm"; \
[ -s "$$NVM_DIR/nvm.sh" ] && \. "$$NVM_DIR/nvm.sh"; \
nvm install 20; \
echo -e "$(GREEN)✓ Node.js installed$(RESET)"; \
fi
check-deps:
@echo -e "$(CYAN)Checking dependencies...$(RESET)"
@echo ""
@echo "System tools:"
@command -v rustc &> /dev/null && echo -e " $(GREEN)$(RESET) Rust: $$(rustc --version)" || echo -e " $(RED)$(RESET) Rust: not found"
@command -v cargo &> /dev/null && echo -e " $(GREEN)$(RESET) Cargo: $$(cargo --version)" || echo -e " $(RED)$(RESET) Cargo: not found"
@command -v node &> /dev/null && echo -e " $(GREEN)$(RESET) Node.js: $$(node --version)" || echo -e " $(RED)$(RESET) Node.js: not found"
@command -v npm &> /dev/null && echo -e " $(GREEN)$(RESET) npm: $$(npm --version)" || echo -e " $(RED)$(RESET) npm: not found"
@echo ""
@echo "Libraries:"
@pkg-config --exists webkit2gtk-4.1 2>/dev/null && echo -e " $(GREEN)$(RESET) webkit2gtk-4.1" || echo -e " $(RED)$(RESET) webkit2gtk-4.1"
@pkg-config --exists gtk+-3.0 2>/dev/null && echo -e " $(GREEN)$(RESET) gtk+-3.0" || echo -e " $(RED)$(RESET) gtk+-3.0"
@pkg-config --exists glib-2.0 2>/dev/null && echo -e " $(GREEN)$(RESET) glib-2.0" || echo -e " $(RED)$(RESET) glib-2.0"
@pkg-config --exists openssl 2>/dev/null && echo -e " $(GREEN)$(RESET) openssl" || echo -e " $(RED)$(RESET) openssl"
@echo ""
# ============================================================================
# Development
# ============================================================================
dev: node_modules
@echo -e "$(CYAN)Starting development server...$(RESET)"
@./scripts/run-dev.sh
run: node_modules
@echo -e "$(CYAN)Running with clean environment...$(RESET)"
@./scripts/run-dev.sh
node_modules: package.json
@echo -e "$(CYAN)Installing npm dependencies...$(RESET)"
npm install
@touch node_modules
# ============================================================================
# Build
# ============================================================================
build: node_modules
@echo -e "$(CYAN)Building production release...$(RESET)"
npm run tauri:build
@echo -e "$(GREEN)✓ Build complete!$(RESET)"
@echo -e "$(YELLOW)Packages available in: src-tauri/target/release/bundle/$(RESET)"
# ============================================================================
# Install / Uninstall
# ============================================================================
install: build
@echo -e "$(CYAN)Installing $(APP_NAME)...$(RESET)"
install -Dm755 src-tauri/target/release/$(APP_NAME) $(DESTDIR)$(BINDIR)/$(APP_NAME)
install -Dm644 src-tauri/icons/128x128.png $(DESTDIR)$(DATADIR)/icons/hicolor/128x128/apps/$(APP_NAME).png
install -Dm644 src-tauri/icons/icon.png $(DESTDIR)$(DATADIR)/icons/hicolor/256x256/apps/$(APP_NAME).png
@# Create desktop entry
@mkdir -p $(DESTDIR)$(DATADIR)/applications
@echo "[Desktop Entry]" > $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Name=Clipboard History" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Comment=Windows 11-style Clipboard History Manager" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Exec=$(BINDIR)/$(APP_NAME)" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Icon=$(APP_NAME)" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Terminal=false" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Type=Application" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Categories=Utility;" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "Keywords=clipboard;history;paste;copy;" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo "StartupWMClass=$(APP_NAME)" >> $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo -e "$(GREEN)✓ Installed successfully$(RESET)"
@echo -e "$(YELLOW)You may need to log out and back in for the desktop entry to appear$(RESET)"
uninstall:
@echo -e "$(CYAN)Uninstalling $(APP_NAME)...$(RESET)"
rm -f $(DESTDIR)$(BINDIR)/$(APP_NAME)
rm -f $(DESTDIR)$(DATADIR)/icons/hicolor/128x128/apps/$(APP_NAME).png
rm -f $(DESTDIR)$(DATADIR)/icons/hicolor/256x256/apps/$(APP_NAME).png
rm -f $(DESTDIR)$(DATADIR)/applications/$(APP_NAME).desktop
@echo -e "$(GREEN)✓ Uninstalled successfully$(RESET)"
# ============================================================================
# Code Quality
# ============================================================================
lint:
@echo -e "$(CYAN)Running linters...$(RESET)"
npm run lint
cd src-tauri && cargo clippy -- -D warnings
format:
@echo -e "$(CYAN)Formatting code...$(RESET)"
npm run format
cd src-tauri && cargo fmt
# ============================================================================
# Clean
# ============================================================================
clean:
@echo -e "$(CYAN)Cleaning build artifacts...$(RESET)"
rm -rf node_modules
rm -rf dist
rm -rf src-tauri/target
@echo -e "$(GREEN)✓ Cleaned$(RESET)"