pcbjam/scripts/prepare.sh

120 lines
2.9 KiB
Shell
Raw Normal View History

#!/bin/bash
#
# KiCad Wasm Port - Prepare Script
#
# This script applies patches to the KiCad source code to enable
# building with optional dependencies disabled.
#
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
KICAD_DIR="$PROJECT_ROOT/kicad"
PATCHES_DIR="$PROJECT_ROOT/patches"
echo "=== KiCad Wasm Port - Prepare ==="
echo "Project root: $PROJECT_ROOT"
echo "KiCad source: $KICAD_DIR"
echo ""
# Check if kicad submodule is initialized
if [ ! -f "$KICAD_DIR/CMakeLists.txt" ]; then
echo "Error: KiCad submodule not initialized."
echo "Run: git submodule update --init --recursive"
exit 1
fi
# Check if patches directory exists
if [ ! -d "$PATCHES_DIR" ]; then
echo "Error: Patches directory not found: $PATCHES_DIR"
exit 1
fi
# Function to check if a patch is already applied
patch_already_applied() {
local patch_file="$1"
# Try to reverse-apply the patch (dry run)
# If it succeeds, the patch is already applied
cd "$KICAD_DIR"
if git apply --reverse --check "$patch_file" 2>/dev/null; then
return 0
else
return 1
fi
}
# Function to apply a patch
apply_patch() {
local patch_file="$1"
local patch_name="$(basename "$patch_file")"
echo "Checking patch: $patch_name"
if patch_already_applied "$patch_file"; then
echo " -> Already applied, skipping"
return 0
fi
echo " -> Applying..."
cd "$KICAD_DIR"
# Try to apply the patch
if git apply --check "$patch_file" 2>/dev/null; then
git apply "$patch_file"
echo " -> Success"
else
echo " -> Warning: Patch may not apply cleanly, trying with -3 (three-way merge)"
if git apply -3 "$patch_file" 2>/dev/null; then
echo " -> Success with three-way merge"
else
echo " -> Error: Patch failed to apply"
echo " You may need to manually resolve conflicts or update the patch"
return 1
fi
fi
}
# Apply all patches in order
echo "Applying patches..."
echo ""
patch_count=0
patch_failed=0
for patch_file in "$PATCHES_DIR"/*.patch; do
if [ -f "$patch_file" ]; then
if apply_patch "$patch_file"; then
((patch_count++))
else
((patch_failed++))
fi
echo ""
fi
done
echo "=== Summary ==="
echo "Patches applied: $patch_count"
echo "Patches failed: $patch_failed"
if [ $patch_failed -gt 0 ]; then
echo ""
echo "Some patches failed to apply. Please check the errors above."
exit 1
fi
echo ""
echo "=== Next Steps ==="
echo ""
echo "Build with optional dependencies disabled:"
echo ""
echo " mkdir build && cd build"
echo " cmake ../kicad \\"
echo " -DKICAD_USE_CURL=OFF \\"
echo " -DKICAD_USE_GIT=OFF \\"
echo " -DKICAD_USE_OCC=OFF \\"
echo " -DKICAD_USE_NGSPICE=OFF \\"
echo " -DCMAKE_PREFIX_PATH=\"\$(pwd)/../stubs/include\""
echo " make -j\$(nproc)"
echo ""
echo "Done!"