Files
FlexLove/scripts/create-profile-packages.sh
Michael Freno 502eeb1e11 calc module
2025-12-07 00:56:55 -05:00

232 lines
7.5 KiB
Bash
Executable File

#!/bin/bash
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}FlexLöve Profile Package Builder${NC}"
echo ""
# Debug: Show current directory and verify files exist
echo -e "${YELLOW}Working directory: $(pwd)${NC}"
if [ ! -f "FlexLove.lua" ]; then
echo -e "${RED}Error: FlexLove.lua not found in current directory${NC}"
echo "Contents of current directory:"
ls -la
exit 1
fi
if [ ! -d "modules" ]; then
echo -e "${RED}Error: modules/ directory not found${NC}"
echo "Contents of current directory:"
ls -la
exit 1
fi
VERSION=$(grep -m 1 "_VERSION" FlexLove.lua | awk -F'"' '{print $2}')
if [ -z "$VERSION" ]; then
echo -e "${RED}Error: Could not extract version from FlexLove.lua${NC}"
exit 1
fi
echo -e "${GREEN}Version detected: ${VERSION}${NC}"
# Create releases directory if it doesn't exist
RELEASE_DIR="releases"
if [ ! -d "$RELEASE_DIR" ]; then
echo -e "${YELLOW}Creating releases directory...${NC}"
mkdir -p "$RELEASE_DIR"
fi
# Function to get profile description
get_description() {
case "$1" in
minimal) echo "Core modules only - smallest bundle size (~60%)" ;;
slim) echo "Minimal + Animation and Image support (~80%)" ;;
default) echo "Slim + Theme and Blur (~95%)" ;;
full) echo "All modules including debugging tools (100%)" ;;
esac
}
# Function to get modules for a profile
get_modules() {
case "$1" in
minimal)
echo "utils.lua Units.lua Context.lua StateManager.lua ErrorHandler.lua Color.lua InputEvent.lua TextEditor.lua LayoutEngine.lua Renderer.lua EventHandler.lua ScrollManager.lua Element.lua RoundedRect.lua Grid.lua ModuleLoader.lua types.lua FFI.lua UTF8.lua"
;;
slim)
echo "utils.lua Units.lua Context.lua StateManager.lua ErrorHandler.lua Color.lua InputEvent.lua TextEditor.lua LayoutEngine.lua Renderer.lua EventHandler.lua ScrollManager.lua Element.lua RoundedRect.lua Grid.lua ModuleLoader.lua types.lua FFI.lua UTF8.lua Animation.lua NinePatch.lua ImageRenderer.lua ImageScaler.lua ImageCache.lua"
;;
default)
echo "utils.lua Units.lua Calc.lua Context.lua StateManager.lua ErrorHandler.lua Color.lua InputEvent.lua TextEditor.lua LayoutEngine.lua Renderer.lua EventHandler.lua ScrollManager.lua Element.lua RoundedRect.lua Grid.lua ModuleLoader.lua types.lua FFI.lua UTF8.lua Animation.lua NinePatch.lua ImageRenderer.lua ImageScaler.lua ImageCache.lua Theme.lua Blur.lua GestureRecognizer.lua"
;;
full)
echo "utils.lua Units.lua Calc.lua Context.lua StateManager.lua ErrorHandler.lua Color.lua InputEvent.lua TextEditor.lua LayoutEngine.lua Renderer.lua EventHandler.lua ScrollManager.lua Element.lua RoundedRect.lua Grid.lua ModuleLoader.lua types.lua FFI.lua UTF8.lua Animation.lua NinePatch.lua ImageRenderer.lua ImageScaler.lua ImageCache.lua Theme.lua Blur.lua GestureRecognizer.lua Performance.lua MemoryScanner.lua"
;;
esac
}
# Build each profile
for profile in minimal slim default full; do
echo ""
echo -e "${YELLOW}Building ${profile} profile...${NC}"
description=$(get_description "$profile")
echo -e "${BLUE}${description}${NC}"
OUTPUT_FILE="${RELEASE_DIR}/flexlove-${profile}-v${VERSION}.zip"
CHECKSUM_FILE="${OUTPUT_FILE}.sha256"
# Remove existing files
if [ -f "$OUTPUT_FILE" ] || [ -f "$CHECKSUM_FILE" ]; then
echo -e "${YELLOW}Removing existing files...${NC}"
[ -f "$OUTPUT_FILE" ] && rm "$OUTPUT_FILE"
[ -f "$CHECKSUM_FILE" ] && rm "$CHECKSUM_FILE"
fi
# Create temp directory
TEMP_DIR=$(mktemp -d)
BUILD_DIR="${TEMP_DIR}/flexlove"
echo " → Creating build directory: $BUILD_DIR"
mkdir -p "$BUILD_DIR/modules" || {
echo -e "${RED}Error: Failed to create build directory${NC}"
exit 1
}
echo " → Copying FlexLove.lua"
cp FlexLove.lua "$BUILD_DIR/"
echo " → Copying LICENSE"
cp LICENSE "$BUILD_DIR/"
echo " → Creating README.md"
# Create profile-specific README
profile_upper=$(echo "${profile}" | awk '{print toupper(substr($0,1,1)) tolower(substr($0,2))}')
cat > "$BUILD_DIR/README.md" << EOF
# FlexLöve v${VERSION} - ${profile_upper} Profile
${description}
This package contains the **${profile}** build profile of FlexLöve.
## Installation
\`\`\`bash
unzip flexlove-${profile}-v${VERSION}.zip
cp -r flexlove/modules ./
cp flexlove/FlexLove.lua ./
\`\`\`
## What's Included
- **FlexLove.lua** - Main library file
- **modules/** - ${profile_upper} profile modules
- **LICENSE** - MIT License
## Requirements
- LÖVE2D 11.0 or higher
## Documentation
📚 [View Full Documentation](https://mikefreno.github.io/FlexLove/)
## Build Profile
This is the **${profile}** profile. Other profiles available:
- **minimal** - Core functionality only (~60%)
- **slim** - Adds animations and image support (~80%)
- **default** - Adds themes and blur effects (~95%)
- **full** - All modules including debugging tools (100%)
Visit the [releases page](https://github.com/mikefreno/FlexLove/releases) to download other profiles.
## License
MIT License - see LICENSE file for details.
EOF
# Copy only the modules for this profile
echo " → Copying modules for ${profile} profile"
module_list=$(get_modules "$profile")
module_count=0
for module in $module_list; do
if [ -f "modules/$module" ]; then
cp "modules/$module" "$BUILD_DIR/modules/" || {
echo -e "${RED}Error: Failed to copy modules/$module${NC}"
exit 1
}
module_count=$((module_count + 1))
else
echo -e "${RED}Error: Module not found: modules/$module${NC}"
echo "Available modules:"
ls -la modules/ || echo "modules/ directory not found"
exit 1
fi
done
echo " Copied ${module_count} modules"
# Copy themes for default and full profiles
if [ "$profile" == "default" ] || [ "$profile" == "full" ]; then
echo " → Copying themes/"
mkdir -p "$BUILD_DIR/themes"
# Copy README
if [ -f "themes/README.md" ]; then
cp "themes/README.md" "$BUILD_DIR/themes/"
fi
# Copy theme files as .example.lua
if [ -f "themes/metal.lua" ]; then
cp "themes/metal.lua" "$BUILD_DIR/themes/metal.example.lua"
fi
if [ -f "themes/space.lua" ]; then
cp "themes/space.lua" "$BUILD_DIR/themes/space.example.lua"
fi
fi
# Create zip archive
echo " → Creating zip archive"
ABS_OUTPUT_FILE="$(cd "$(dirname "$OUTPUT_FILE")" && pwd)/$(basename "$OUTPUT_FILE")"
cd "$TEMP_DIR"
zip -r -q "flexlove-${profile}-v${VERSION}.zip" flexlove/
mv "flexlove-${profile}-v${VERSION}.zip" "$ABS_OUTPUT_FILE"
cd - > /dev/null
# Generate checksum
echo " → Generating SHA256 checksum"
cd "$RELEASE_DIR"
shasum -a 256 "flexlove-${profile}-v${VERSION}.zip" > "flexlove-${profile}-v${VERSION}.zip.sha256"
cd - > /dev/null
# Cleanup
rm -rf "$TEMP_DIR"
# Report
FILE_SIZE=$(du -h "$OUTPUT_FILE" | cut -f1)
CHECKSUM=$(cat "$CHECKSUM_FILE" | cut -d ' ' -f 1)
echo -e "${GREEN}${profile} profile created${NC}"
echo -e " ${BLUE}File:${NC} $OUTPUT_FILE"
echo -e " ${BLUE}Size:${NC} $FILE_SIZE"
echo -e " ${BLUE}Modules:${NC} ${module_count}"
echo -e " ${BLUE}SHA256:${NC} ${CHECKSUM:0:16}..."
done
echo ""
echo -e "${GREEN}✓ All profile packages created successfully!${NC}"
echo ""
echo -e "${BLUE}Created packages:${NC}"
for profile in minimal slim default full; do
FILE_SIZE=$(du -h "${RELEASE_DIR}/flexlove-${profile}-v${VERSION}.zip" | cut -f1)
echo " - flexlove-${profile}-v${VERSION}.zip (${FILE_SIZE})"
done
echo ""
echo -e "${YELLOW}Verify checksums:${NC}"
echo " cd releases && shasum -a 256 -c flexlove-*-v${VERSION}.zip.sha256"