90 lines
2.9 KiB
Bash
Executable File
90 lines
2.9 KiB
Bash
Executable File
#!/bin/zsh
|
|
|
|
set -e
|
|
# Color codes for output
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
GREEN='\033[0;32m'
|
|
NC='\033[0m' # No Color
|
|
|
|
function fix_file_rpaths() {
|
|
local file_path="$1"
|
|
echo -e "${YELLOW}Fixing RPATHs in file: $file_path...${NC}"
|
|
python3 "$FIX_RPATH_SCRIPT" "$file_path"
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "${RED}Error: RPATH fix script failed for file: $file_path${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}RPATHs fixed for file: $file_path${NC}"
|
|
}
|
|
|
|
export -f fix_file_rpaths
|
|
|
|
echo -e "${YELLOW}"
|
|
echo "========================================================================="
|
|
echo " TEMPORARY WHEEL REPAIR WORKAROUND"
|
|
echo "========================================================================="
|
|
echo -e "${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}WARNING:${NC} This script applies a temporary patch to fix"
|
|
echo "a known issue with meson-python that causes duplicate RPATH entries in"
|
|
echo "built Python wheels on macOS, preventing module imports."
|
|
echo ""
|
|
echo "This workaround will:"
|
|
echo " 1. Unzip the wheel file"
|
|
echo " 2. Locate the extension modules"
|
|
echo " 3. Remove duplicate RPATH entries using install_name_tool"
|
|
echo " 4. Resign the wheel if necessary"
|
|
echo " 5. Repackage the wheel file"
|
|
echo ""
|
|
|
|
FIX_RPATH_SCRIPT="../../build-python/fix_rpaths.py"
|
|
|
|
# get the wheel directory to scan through
|
|
WHEEL_DIR="$1"
|
|
if [ -z "$WHEEL_DIR" ]; then
|
|
echo -e "${RED}Error: No wheel directory specified.${NC}"
|
|
echo "Usage: $0 /path/to/wheel_directory"
|
|
exit 1
|
|
fi
|
|
|
|
REPAIRED_WHEELS_DIR="repaired_wheels"
|
|
mkdir -p "$REPAIRED_WHEELS_DIR"
|
|
|
|
REPAIRED_DELOCATED_WHEELS_DIR="${REPAIRED_WHEELS_DIR}/delocated"
|
|
|
|
# Scal all files ending in .whl and not starting with a dot
|
|
for WHEEL_PATH in "$WHEEL_DIR"/*.whl; do
|
|
if [ ! -f "$WHEEL_PATH" ]; then
|
|
echo -e "${YELLOW}No wheel files found in directory: $WHEEL_DIR${NC}"
|
|
exit 0
|
|
fi
|
|
echo ""
|
|
echo -e "${GREEN}Processing wheel: $WHEEL_PATH${NC}"
|
|
|
|
WHEEL_NAME=$(basename "$WHEEL_PATH")
|
|
TEMP_DIR=$(mktemp -d)
|
|
|
|
echo -e "${GREEN}Step 1: Unzipping wheel...${NC}"
|
|
python -m wheel unpack "$WHEEL_PATH" -d "$TEMP_DIR"
|
|
|
|
echo -e "${GREEN}Step 2: Locating extension modules...${NC}"
|
|
while IFS= read -r -d '' so_file; do
|
|
echo "Found library: $so_file"
|
|
fix_file_rpaths "$so_file"
|
|
done < <(find "$TEMP_DIR" -name "*.so" -print0)
|
|
|
|
echo -e "${GREEN}Step 4: Repackaging wheel...${NC}"
|
|
python -m wheel pack "$TEMP_DIR/gridfire-0.7.4rc2" -d "$REPAIRED_WHEELS_DIR"
|
|
|
|
REPAIRED_WHEEL_PATH="${REPAIRED_WHEELS_DIR}/${WHEEL_NAME}"
|
|
|
|
echo -e "${GREEN}Step 5: Delocating wheel...${NC}"
|
|
# Ensure delocate is installed
|
|
pip install delocate
|
|
delocate-wheel -w "$REPAIRED_DELOCATED_WHEELS_DIR" "$REPAIRED_WHEEL_PATH"
|
|
|
|
echo -e "${GREEN}Repaired wheel saved to: ${REPAIRED_DELOCATED_WHEELS_DIR}/${WHEEL_NAME}${NC}"
|
|
# Clean up temporary directory
|
|
rm -rf "$TEMP_DIR"
|
|
done |