# Makefile for mail2couch project # Builds both Go and Rust implementations with distinct binary names .PHONY: all build build-go build-rust clean test help install # Default target all: build # Build both implementations build: build-go build-rust # Build Go implementation as mail2couch-go build-go: @echo "Building Go implementation..." cd go && go build -o mail2couch-go . @echo "✅ Built: go/mail2couch-go" # Build Rust implementation as mail2couch-rs build-rust: @echo "Building Rust implementation..." cd rust && cargo build --release @echo "✅ Built: rust/target/release/mail2couch-rs" # Build optimized release versions build-release: build-go-release build-rust-release # Build optimized Go release build-go-release: @echo "Building optimized Go release..." cd go && go build -ldflags="-s -w" -o mail2couch-go . @echo "✅ Built optimized: go/mail2couch-go" # Build optimized Rust release (already built with --release above) build-rust-release: build-rust # Install binaries to /usr/local/bin (requires sudo) install: build-release @echo "Installing binaries to /usr/local/bin..." sudo cp go/mail2couch-go /usr/local/bin/ sudo cp rust/target/release/mail2couch-rs /usr/local/bin/ sudo chmod +x /usr/local/bin/mail2couch-go sudo chmod +x /usr/local/bin/mail2couch-rs @echo "✅ Installed mail2couch-go and mail2couch-rs" # Run tests for both implementations test: test-go test-rust # Test Go implementation test-go: @echo "Running Go tests..." cd go && go test ./... # Test Rust implementation test-rust: @echo "Running Rust tests..." cd rust && cargo test # Clean build artifacts clean: @echo "Cleaning build artifacts..." cd go && rm -f mail2couch-go mail2couch cd rust && cargo clean @echo "✅ Cleaned build artifacts" # Check code formatting and linting check: check-go check-rust # Check Go code check-go: @echo "Checking Go code..." cd go && go fmt ./... cd go && go vet ./... # Check Rust code check-rust: @echo "Checking Rust code..." cd rust && cargo fmt --check cd rust && cargo clippy -- -D warnings # Fix code formatting fmt: fmt-go fmt-rust # Format Go code fmt-go: @echo "Formatting Go code..." cd go && go fmt ./... # Format Rust code fmt-rust: @echo "Formatting Rust code..." cd rust && cargo fmt # Show help help: @echo "Available targets:" @echo " all - Build both implementations (default)" @echo " build - Build both implementations" @echo " build-go - Build Go implementation (mail2couch-go)" @echo " build-rust - Build Rust implementation (mail2couch-rs)" @echo " build-release - Build optimized release versions" @echo " install - Install binaries to /usr/local/bin (requires sudo)" @echo " test - Run tests for both implementations" @echo " test-go - Run Go tests" @echo " test-rust - Run Rust tests" @echo " clean - Clean build artifacts" @echo " check - Check code formatting and linting" @echo " fmt - Format code" @echo " help - Show this help message" @echo "" @echo "Output binaries:" @echo " go/mail2couch-go - Go implementation" @echo " rust/target/release/mail2couch-rs - Rust implementation" # Development convenience targets dev-go: build-go ./go/mail2couch-go --help dev-rust: build-rust ./rust/target/release/mail2couch-rs --help