Files
ApfelTeeSaft ca2a6d93a6 Add Multi Platform Support
MacOS and Linux Support
Refined Build Setup
2025-08-01 10:07:32 +02:00

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"