-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathMakefile
More file actions
170 lines (146 loc) · 5.09 KB
/
Copy pathMakefile
File metadata and controls
170 lines (146 loc) · 5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# Ekphos Makefile
# A lightweight, terminal-based markdown research tool
BINARY_NAME := ekphos
VERSION := 0.20.10
BUILD_DIR := target
RELEASE_DIR := $(BUILD_DIR)/release
DEBUG_DIR := $(BUILD_DIR)/debug
# Installation directories
PREFIX ?= /usr/local
BINDIR := $(PREFIX)/bin
MANDIR := $(PREFIX)/share/man/man1
COMPLETIONS_DIR := $(PREFIX)/share/bash-completion/completions
# Platform detection
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
PLATFORM := macos
endif
ifeq ($(UNAME_S),Linux)
PLATFORM := linux
endif
.PHONY: all build release debug clean install uninstall help test check fmt lint run
# Default target
all: release
# Build release version
release:
@echo "Building release version..."
cargo build --release
@echo "Binary available at $(RELEASE_DIR)/$(BINARY_NAME)"
# Build debug version
debug:
@echo "Building debug version..."
cargo build
@echo "Binary available at $(DEBUG_DIR)/$(BINARY_NAME)"
# Alias for release
build: release
# Run the application
run:
cargo run
# Run in release mode
run-release:
cargo run --release
# Run tests
test:
cargo test
# Check code without building
check:
cargo check
# Format code
fmt:
cargo fmt
# Format check (CI)
fmt-check:
cargo fmt -- --check
# Lint with clippy
lint:
cargo clippy -- -D warnings
# Clean build artifacts
clean:
cargo clean
@echo "Cleaned build artifacts"
# Install binary to system
install: release
@echo "Installing $(BINARY_NAME) to $(BINDIR)..."
@mkdir -p $(BINDIR)
@cp $(RELEASE_DIR)/$(BINARY_NAME) $(BINDIR)/$(BINARY_NAME)
@chmod 755 $(BINDIR)/$(BINARY_NAME)
@echo "Installation complete!"
@echo "Run '$(BINARY_NAME)' to start"
# Uninstall binary from system
uninstall:
@echo "Uninstalling $(BINARY_NAME)..."
@rm -f $(BINDIR)/$(BINARY_NAME)
@echo "Uninstallation complete!"
# Install for current user only
install-user: release
@echo "Installing $(BINARY_NAME) to ~/.local/bin..."
@mkdir -p ~/.local/bin
@cp $(RELEASE_DIR)/$(BINARY_NAME) ~/.local/bin/$(BINARY_NAME)
@chmod 755 ~/.local/bin/$(BINARY_NAME)
@echo "Installation complete!"
@echo "Make sure ~/.local/bin is in your PATH"
# Uninstall from user directory
uninstall-user:
@rm -f ~/.local/bin/$(BINARY_NAME)
@echo "Uninstalled from ~/.local/bin"
# Create distribution tarball
dist: release
@echo "Creating distribution tarball..."
@mkdir -p dist
@tar -czvf dist/$(BINARY_NAME)-$(VERSION)-$(PLATFORM)-$(shell uname -m).tar.gz \
-C $(RELEASE_DIR) $(BINARY_NAME)
@echo "Distribution tarball created at dist/"
# Package for Debian/Ubuntu (.deb)
deb: release
@echo "Creating .deb package..."
@mkdir -p pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN
@mkdir -p pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/usr/bin
@cp $(RELEASE_DIR)/$(BINARY_NAME) pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/usr/bin/
@echo "Package: $(BINARY_NAME)" > pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN/control
@echo "Version: $(VERSION)" >> pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN/control
@echo "Section: utils" >> pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN/control
@echo "Priority: optional" >> pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN/control
@echo "Architecture: amd64" >> pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN/control
@echo "Maintainer: Ekphos Contributors" >> pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN/control
@echo "Description: Ekphos - A lightweight terminal-based markdown research tool" >> pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64/DEBIAN/control
@dpkg-deb --build pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64
@mv pkg/deb/$(BINARY_NAME)_$(VERSION)_amd64.deb dist/ 2>/dev/null || true
@echo "Package created at dist/$(BINARY_NAME)_$(VERSION)_amd64.deb"
# Package for RPM-based distros
rpm: release
@echo "Creating .rpm package requires rpmbuild..."
@echo "Use 'cargo install cargo-rpm' and 'cargo rpm build' instead"
# Show help
help:
@echo "Ekphos - A lightweight terminal-based markdown research tool"
@echo ""
@echo "Usage: make [target]"
@echo ""
@echo "Targets:"
@echo " all Build release version (default)"
@echo " release Build optimized release binary"
@echo " debug Build debug binary"
@echo " build Alias for release"
@echo " run Run in debug mode"
@echo " run-release Run in release mode"
@echo " test Run tests"
@echo " check Check code without building"
@echo " fmt Format code with rustfmt"
@echo " lint Lint code with clippy"
@echo " clean Remove build artifacts"
@echo " install Install to $(BINDIR) (requires sudo)"
@echo " uninstall Remove from $(BINDIR) (requires sudo)"
@echo " install-user Install to ~/.local/bin"
@echo " uninstall-user Remove from ~/.local/bin"
@echo " dist Create distribution tarball"
@echo " deb Create .deb package"
@echo " help Show this help message"
@echo ""
@echo "Variables:"
@echo " PREFIX Installation prefix (default: /usr/local)"
@echo ""
@echo "Examples:"
@echo " make # Build release"
@echo " make install # Install system-wide"
@echo " sudo make install # Install with root"
@echo " make PREFIX=~/.local install # Install to home"