Skip to content

Commit e264a37

Browse files
committed
fix(ios):Improve iOS dependency fix script with fallback mechanism and better error handling
1 parent 8231f3c commit e264a37

File tree

1 file changed

+114
-62
lines changed

1 file changed

+114
-62
lines changed

openlist-lib/scripts/fix_ios_dependencies.sh

Lines changed: 114 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,45 @@ fi
2626

2727
echo "Found rclone version: $RCLONE_VERSION"
2828

29+
# Function to create minimal local rclone (backup method)
30+
create_minimal_rclone() {
31+
echo "Using backup method: creating minimal local rclone module..."
32+
33+
LOCAL_RCLONE_DIR="./local_rclone"
34+
rm -rf "$LOCAL_RCLONE_DIR" 2>/dev/null || true
35+
36+
# Create the directory structure
37+
mkdir -p "$LOCAL_RCLONE_DIR/lib/buildinfo"
38+
39+
# Create a minimal go.mod for the local rclone
40+
cat > "$LOCAL_RCLONE_DIR/go.mod" << 'GOMOD_EOF'
41+
module github.com/rclone/rclone
42+
43+
go 1.19
44+
GOMOD_EOF
45+
46+
# Create the patched osversion.go file
47+
cat > "$LOCAL_RCLONE_DIR/lib/buildinfo/osversion.go" << 'OSVERSION_EOF'
48+
//go:build !windows
49+
50+
package buildinfo
51+
52+
// GetOSVersion returns OS version, kernel and bitness
53+
func GetOSVersion() (osVersion, osKernel string) {
54+
return
55+
}
56+
OSVERSION_EOF
57+
58+
# Add replace directive to use local copy
59+
echo "Adding replace directive to use local rclone copy..."
60+
go mod edit -replace github.com/rclone/rclone="./local_rclone"
61+
62+
return 0
63+
}
64+
65+
# Try primary method first
66+
echo "Attempting primary method: patching existing rclone..."
67+
2968
# Download dependencies to get the source
3069
echo "Downloading dependencies..."
3170
go mod download
@@ -41,79 +80,92 @@ if [ -z "$RCLONE_PATH" ]; then
4180
fi
4281

4382
if [ -z "$RCLONE_PATH" ]; then
44-
echo "Could not locate rclone source directory, skipping patch"
45-
exit 0
46-
fi
47-
48-
echo "Found rclone source at: $RCLONE_PATH"
49-
50-
# Path to the problematic file
51-
OSVERSION_FILE="$RCLONE_PATH/lib/buildinfo/osversion.go"
52-
53-
if [ ! -f "$OSVERSION_FILE" ]; then
54-
echo "osversion.go file not found at: $OSVERSION_FILE"
55-
echo "Checking if file exists with different structure..."
56-
find "$RCLONE_PATH" -name "osversion.go" -type f 2>/dev/null || echo "No osversion.go found in rclone source"
57-
exit 0
58-
fi
59-
60-
echo "Found osversion.go at: $OSVERSION_FILE"
61-
62-
# Check if file is writable (some module caches are read-only)
63-
if [ ! -w "$OSVERSION_FILE" ]; then
64-
echo "File is not writable, creating local copy..."
65-
66-
# Create local copy of rclone module
67-
LOCAL_RCLONE_DIR="./local_rclone"
68-
mkdir -p "$LOCAL_RCLONE_DIR"
69-
70-
echo "Copying rclone source to local directory..."
71-
cp -r "$RCLONE_PATH"/* "$LOCAL_RCLONE_DIR/" 2>/dev/null || {
72-
echo "Failed to copy rclone source, skipping patch"
73-
exit 0
74-
}
83+
echo "Could not locate rclone source directory, using backup method..."
84+
create_minimal_rclone
85+
else
86+
echo "Found rclone source at: $RCLONE_PATH"
7587

76-
# Update the file path to local copy
77-
OSVERSION_FILE="$LOCAL_RCLONE_DIR/lib/buildinfo/osversion.go"
88+
# Path to the problematic file
89+
OSVERSION_FILE="$RCLONE_PATH/lib/buildinfo/osversion.go"
7890

79-
# Add replace directive to use local copy
80-
echo "Adding replace directive to use local rclone copy..."
81-
go mod edit -replace github.com/rclone/rclone="./local_rclone"
82-
else
83-
echo "File is writable, patching in place..."
84-
chmod +w "$OSVERSION_FILE" 2>/dev/null || true
91+
if [ ! -f "$OSVERSION_FILE" ]; then
92+
echo "osversion.go file not found, using backup method..."
93+
create_minimal_rclone
94+
else
95+
echo "Found osversion.go at: $OSVERSION_FILE"
96+
97+
# Try to patch the existing file
98+
LOCAL_RCLONE_DIR="./local_rclone"
99+
rm -rf "$LOCAL_RCLONE_DIR" 2>/dev/null || true
100+
mkdir -p "$LOCAL_RCLONE_DIR"
101+
102+
echo "Copying rclone source to local directory..."
103+
if cp -r "$RCLONE_PATH"/* "$LOCAL_RCLONE_DIR/" 2>/dev/null; then
104+
# Fix permissions on the copied files
105+
echo "Fixing permissions on copied files..."
106+
find "$LOCAL_RCLONE_DIR" -type f -exec chmod u+w {} \; 2>/dev/null || true
107+
find "$LOCAL_RCLONE_DIR" -type d -exec chmod u+w {} \; 2>/dev/null || true
108+
109+
# Update the file path to local copy
110+
OSVERSION_FILE="$LOCAL_RCLONE_DIR/lib/buildinfo/osversion.go"
111+
112+
# Try to patch the file
113+
if [ -f "$OSVERSION_FILE" ] && [ -w "$OSVERSION_FILE" ]; then
114+
echo "Patching osversion.go for iOS compatibility..."
115+
116+
# Create the patch content
117+
cat > "$OSVERSION_FILE" << 'PATCH_EOF'
118+
//go:build !windows
119+
120+
package buildinfo
121+
122+
// GetOSVersion returns OS version, kernel and bitness
123+
func GetOSVersion() (osVersion, osKernel string) {
124+
return
125+
}
126+
PATCH_EOF
127+
128+
# Add replace directive to use local copy
129+
echo "Adding replace directive to use local rclone copy..."
130+
go mod edit -replace github.com/rclone/rclone="./local_rclone"
131+
else
132+
echo "Cannot write to copied file, using backup method..."
133+
create_minimal_rclone
134+
fi
135+
else
136+
echo "Failed to copy rclone source, using backup method..."
137+
create_minimal_rclone
138+
fi
139+
fi
85140
fi
86141

87-
# Backup original file
88-
echo "Backing up original osversion.go..."
89-
cp "$OSVERSION_FILE" "$OSVERSION_FILE.backup" 2>/dev/null || echo "Could not create backup"
90-
91-
# Replace the file content with iOS-compatible version using echo
92-
echo "Patching osversion.go for iOS compatibility..."
93-
94-
echo "//go:build !windows" > "$OSVERSION_FILE"
95-
echo "" >> "$OSVERSION_FILE"
96-
echo "package buildinfo" >> "$OSVERSION_FILE"
97-
echo "" >> "$OSVERSION_FILE"
98-
echo "// GetOSVersion returns OS version, kernel and bitness" >> "$OSVERSION_FILE"
99-
echo "func GetOSVersion() (osVersion, osKernel string) {" >> "$OSVERSION_FILE"
100-
echo " return" >> "$OSVERSION_FILE"
101-
echo "}" >> "$OSVERSION_FILE"
102-
103-
echo "Successfully patched osversion.go"
104-
105142
# Verify the patch
106-
if [ -f "$OSVERSION_FILE" ]; then
107-
echo "Verifying patch..."
108-
echo "New file content:"
109-
cat "$OSVERSION_FILE"
143+
echo "Verifying patch..."
144+
FINAL_OSVERSION_FILE="./local_rclone/lib/buildinfo/osversion.go"
145+
146+
if [ -f "$FINAL_OSVERSION_FILE" ]; then
147+
echo "✅ Patched osversion.go found"
148+
echo "Content:"
149+
cat "$FINAL_OSVERSION_FILE"
110150
echo ""
151+
152+
# Check if the patch was applied correctly
153+
if grep -q "host.PlatformInformation\|host.KernelVersion\|host.KernelArch" "$FINAL_OSVERSION_FILE"; then
154+
echo "❌ WARNING: File still contains problematic host function calls!"
155+
echo "Patch may not have been applied correctly."
156+
exit 1
157+
else
158+
echo "✅ Patch applied successfully - no problematic host function calls found"
159+
fi
160+
else
161+
echo "❌ Failed to create patched osversion.go"
162+
exit 1
111163
fi
112164

113165
# Clean and rebuild to apply changes
114166
echo "Cleaning and rebuilding module with patched rclone..."
115167
go mod tidy
116168
go mod download
117169

118-
echo "iOS dependency fix completed by patching rclone source"
170+
echo "iOS dependency fix completed by patching rclone source"
119171
echo "The problematic gopsutil calls in rclone have been disabled for iOS builds"

0 commit comments

Comments
 (0)