232 lines
7.5 KiB
Bash
Executable File
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"
|