-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
93 lines (83 loc) · 2.85 KB
/
Copy pathMakefile
File metadata and controls
93 lines (83 loc) · 2.85 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
.PHONY: build clean install uninstall install-local test help
# Binary name
BINARY_NAME=worktree
BUILD_DIR=build
INSTALL_PATH=/usr/local/bin
LOCAL_INSTALL_PATH=$(HOME)/.local/bin
# Build the binary
build:
@echo "Building $(BINARY_NAME)..."
@mkdir -p $(BUILD_DIR)
@go build -o $(BUILD_DIR)/$(BINARY_NAME) main.go
@echo "✅ Built $(BUILD_DIR)/$(BINARY_NAME)"
# Clean build artifacts
clean:
@echo "Cleaning build artifacts..."
@rm -rf $(BUILD_DIR)
@echo "✅ Cleaned"
# Install globally (requires sudo - run: sudo make install)
install: build
@echo "Installing $(BINARY_NAME) to $(INSTALL_PATH)..."
@if [ -w $(INSTALL_PATH) ] || [ "$$(id -u)" = "0" ]; then \
cp $(BUILD_DIR)/$(BINARY_NAME) $(INSTALL_PATH)/; \
ln -sf $(INSTALL_PATH)/$(BINARY_NAME) $(INSTALL_PATH)/wt; \
echo "✅ Installed! You can now use 'worktree' and 'wt' from anywhere"; \
else \
echo "⚠️ Permission denied. Run with sudo:"; \
echo " sudo make install"; \
echo ""; \
echo "Or install locally (no sudo needed):"; \
echo " make install-local"; \
exit 1; \
fi
# Install locally to ~/.local/bin (no sudo needed)
install-local: build
@echo "Installing $(BINARY_NAME) to $(LOCAL_INSTALL_PATH)..."
@mkdir -p $(LOCAL_INSTALL_PATH)
@cp $(BUILD_DIR)/$(BINARY_NAME) $(LOCAL_INSTALL_PATH)/
@ln -sf $(LOCAL_INSTALL_PATH)/$(BINARY_NAME) $(LOCAL_INSTALL_PATH)/wt
@echo "✅ Installed to $(LOCAL_INSTALL_PATH)"
@echo ""
@echo "Make sure $(LOCAL_INSTALL_PATH) is in your PATH:"
@echo ' export PATH="$$HOME/.local/bin:$$PATH"'
# Uninstall
uninstall:
@echo "Removing $(BINARY_NAME) from $(INSTALL_PATH)..."
@if [ -w $(INSTALL_PATH) ] || [ "$$(id -u)" = "0" ]; then \
rm -f $(INSTALL_PATH)/$(BINARY_NAME); \
rm -f $(INSTALL_PATH)/wt; \
echo "✅ Uninstalled"; \
else \
echo "⚠️ Permission denied. Run with sudo:"; \
echo " sudo make uninstall"; \
exit 1; \
fi
# Uninstall local version
uninstall-local:
@echo "Removing $(BINARY_NAME) from $(LOCAL_INSTALL_PATH)..."
@rm -f $(LOCAL_INSTALL_PATH)/$(BINARY_NAME)
@rm -f $(LOCAL_INSTALL_PATH)/wt
@echo "✅ Uninstalled from $(LOCAL_INSTALL_PATH)"
# Run tests
test:
@echo "Running tests..."
@go test ./...
# Show help
help:
@echo "Available commands:"
@echo " build - Build the binary to $(BUILD_DIR)/$(BINARY_NAME)"
@echo " install - Install globally to $(INSTALL_PATH) (may need sudo)"
@echo " install-local - Install to $(LOCAL_INSTALL_PATH) (no sudo needed)"
@echo " uninstall - Remove from $(INSTALL_PATH) (may need sudo)"
@echo " uninstall-local- Remove from $(LOCAL_INSTALL_PATH)"
@echo " clean - Remove build artifacts"
@echo " test - Run tests"
@echo " help - Show this help"
@echo ""
@echo "Quick install (no password required):"
@echo " make install-local"
@echo ""
@echo "System-wide install:"
@echo " sudo make install"
# Default target
all: build