mirror of
https://github.com/gustavosett/Windows-11-Clipboard-History-For-Linux
synced 2026-04-25 17:15:35 +02:00
270 lines
10 KiB
Makefile
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)"
|