mirror of
https://github.com/ApfelTeeSaft/SplitNotes.git
synced 2026-08-26 19:33:39 +00:00
191 lines
5.8 KiB
Makefile
191 lines
5.8 KiB
Makefile
# Makefile for SplitNotes cross-platform builds
|
|
|
|
# Variables
|
|
PYTHON := python3
|
|
PIP := pip3
|
|
APP_NAME := SplitNotes
|
|
VERSION := 1.0.0
|
|
|
|
# Default target
|
|
.PHONY: help
|
|
help:
|
|
@echo "SplitNotes Build System"
|
|
@echo "======================"
|
|
@echo ""
|
|
@echo "Available targets:"
|
|
@echo " setup - Install build dependencies"
|
|
@echo " run - Run from source"
|
|
@echo " clean - Clean build artifacts"
|
|
@echo " build-windows - Build Windows executable"
|
|
@echo " build-macos - Build macOS application"
|
|
@echo " build-linux - Build Linux executable"
|
|
@echo " build-all - Build for all platforms (if tools available)"
|
|
@echo " package-linux - Create Linux package structure"
|
|
@echo " test - Run basic tests"
|
|
@echo " lint - Run code linting"
|
|
@echo " format - Format code with black"
|
|
@echo ""
|
|
|
|
# Setup development environment
|
|
.PHONY: setup
|
|
setup:
|
|
@echo "Setting up development environment..."
|
|
$(PIP) install --upgrade pip
|
|
@echo "Basic setup complete."
|
|
@echo ""
|
|
@echo "For building, install platform-specific tools:"
|
|
@echo " Windows: pip install cx_Freeze py2exe"
|
|
@echo " macOS: pip install py2app"
|
|
@echo " Linux: pip install cx_Freeze"
|
|
|
|
# Run from source
|
|
.PHONY: run
|
|
run:
|
|
@echo "Running SplitNotes from source..."
|
|
$(PYTHON) main_window.py
|
|
|
|
# Clean build artifacts
|
|
.PHONY: clean
|
|
clean:
|
|
@echo "Cleaning build artifacts..."
|
|
rm -rf build/
|
|
rm -rf dist/
|
|
rm -rf *.egg-info/
|
|
rm -rf __pycache__/
|
|
rm -rf resources/__pycache__/
|
|
find . -name "*.pyc" -delete
|
|
find . -name "*.pyo" -delete
|
|
@echo "Clean complete."
|
|
|
|
# Build Windows executable
|
|
.PHONY: build-windows
|
|
build-windows:
|
|
@echo "Building Windows executable..."
|
|
@if command -v python >/dev/null 2>&1; then \
|
|
python setup_windows.py build; \
|
|
else \
|
|
echo "Error: Python not found. Install Python for Windows."; \
|
|
exit 1; \
|
|
fi
|
|
@echo "Windows build complete. Check build/ directory."
|
|
|
|
# Build macOS application
|
|
.PHONY: build-macos
|
|
build-macos:
|
|
@echo "Building macOS application..."
|
|
@if [ "$$(uname)" = "Darwin" ]; then \
|
|
$(PYTHON) setup_mac.py py2app; \
|
|
echo "macOS build complete. Check dist/ directory."; \
|
|
else \
|
|
echo "Error: macOS build must be run on macOS."; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# Build Linux executable
|
|
.PHONY: build-linux
|
|
build-linux:
|
|
@echo "Building Linux executable..."
|
|
$(PYTHON) setup_linux.py build
|
|
@echo "Linux build complete. Check build/ directory."
|
|
|
|
# Create Linux package structure
|
|
.PHONY: package-linux
|
|
package-linux: build-linux
|
|
@echo "Creating Linux package..."
|
|
$(PYTHON) setup_linux.py package
|
|
@echo "Linux package complete."
|
|
|
|
# Build for all platforms (if tools are available)
|
|
.PHONY: build-all
|
|
build-all:
|
|
@echo "Building for all available platforms..."
|
|
@if command -v python >/dev/null 2>&1 && python -c "import cx_Freeze" 2>/dev/null; then \
|
|
echo "Building Windows..."; \
|
|
make build-windows; \
|
|
else \
|
|
echo "Skipping Windows build (cx_Freeze not available)"; \
|
|
fi
|
|
@if [ "$$(uname)" = "Darwin" ] && $(PYTHON) -c "import py2app" 2>/dev/null; then \
|
|
echo "Building macOS..."; \
|
|
make build-macos; \
|
|
else \
|
|
echo "Skipping macOS build (not on macOS or py2app not available)"; \
|
|
fi
|
|
@if $(PYTHON) -c "import cx_Freeze" 2>/dev/null; then \
|
|
echo "Building Linux..."; \
|
|
make build-linux; \
|
|
else \
|
|
echo "Skipping Linux build (cx_Freeze not available)"; \
|
|
fi
|
|
|
|
# Basic functionality test
|
|
.PHONY: test
|
|
test:
|
|
@echo "Running basic tests..."
|
|
@echo "Testing imports..."
|
|
$(PYTHON) -c "import config; import ls_connection; import note_reader; import setting_handler; print('All modules imported successfully')"
|
|
@echo "Testing configuration..."
|
|
$(PYTHON) -c "import config; print(f'App: {config.APP_NAME} v{config.APP_VERSION}')"
|
|
@echo "Testing note parsing..."
|
|
@echo "Test note 1\n\nTest note 2" > test_notes.txt
|
|
$(PYTHON) -c "import note_reader; notes = note_reader.get_notes('test_notes.txt', 'new_line'); print(f'Parsed {len(notes)} notes')"
|
|
rm -f test_notes.txt
|
|
@echo "Basic tests passed."
|
|
|
|
# Code linting (if flake8 is available)
|
|
.PHONY: lint
|
|
lint:
|
|
@if $(PYTHON) -c "import flake8" 2>/dev/null; then \
|
|
echo "Running flake8 linting..."; \
|
|
$(PYTHON) -m flake8 *.py --max-line-length=100 --ignore=E501,W503; \
|
|
else \
|
|
echo "flake8 not available. Install with: pip install flake8"; \
|
|
fi
|
|
|
|
# Code formatting (if black is available)
|
|
.PHONY: format
|
|
format:
|
|
@if $(PYTHON) -c "import black" 2>/dev/null; then \
|
|
echo "Formatting code with black..."; \
|
|
$(PYTHON) -m black *.py --line-length=100; \
|
|
else \
|
|
echo "black not available. Install with: pip install black"; \
|
|
fi
|
|
|
|
# Create resources directory with placeholder files
|
|
.PHONY: setup-resources
|
|
setup-resources:
|
|
@echo "Setting up resources directory..."
|
|
@mkdir -p resources
|
|
@if [ ! -f resources/green.png ]; then \
|
|
echo "Creating placeholder green.png..."; \
|
|
touch resources/green.png; \
|
|
fi
|
|
@if [ ! -f resources/red.png ]; then \
|
|
echo "Creating placeholder red.png..."; \
|
|
touch resources/red.png; \
|
|
fi
|
|
@if [ ! -f resources/settings_icon.png ]; then \
|
|
echo "Creating placeholder settings_icon.png..."; \
|
|
touch resources/settings_icon.png; \
|
|
fi
|
|
@echo "Resources directory ready. Replace placeholder files with actual icons."
|
|
|
|
# Development server (just runs the app)
|
|
.PHONY: dev
|
|
dev: run
|
|
|
|
# Show system information
|
|
.PHONY: info
|
|
info:
|
|
@echo "System Information:"
|
|
@echo "=================="
|
|
@echo "OS: $$(uname -s)"
|
|
@echo "Architecture: $$(uname -m)"
|
|
@echo "Python: $$($(PYTHON) --version)"
|
|
@echo "Python Path: $$(which $(PYTHON))"
|
|
@echo ""
|
|
@echo "Python Modules:"
|
|
@$(PYTHON) -c "import sys; print('tkinter:', 'available' if 'tkinter' in sys.modules or __import__('tkinter') else 'missing')" 2>/dev/null || echo "tkinter: missing"
|
|
@$(PYTHON) -c "import socket; print('socket: available')" 2>/dev/null || echo "socket: missing"
|
|
@$(PYTHON) -c "import threading; print('threading: available')" 2>/dev/null || echo "threading: missing"
|