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"
|
|
;;
|
|
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 Animation.lua NinePatch.lua ImageRenderer.lua ImageScaler.lua ImageCache.lua"
|
|
;;
|
|
default)
|
|
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 Animation.lua NinePatch.lua ImageRenderer.lua ImageScaler.lua ImageCache.lua Theme.lua Blur.lua GestureRecognizer.lua"
|
|
;;
|
|
full)
|
|
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 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"
|