2626
2727echo " 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
3069echo " Downloading dependencies..."
3170go mod download
@@ -41,79 +80,92 @@ if [ -z "$RCLONE_PATH" ]; then
4180fi
4281
4382if [ -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
85140fi
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
111163fi
112164
113165# Clean and rebuild to apply changes
114166echo " Cleaning and rebuilding module with patched rclone..."
115167go mod tidy
116168go mod download
117169
118- echo " iOS dependency fix completed by patching rclone source"
170+ echo " ✅ iOS dependency fix completed by patching rclone source"
119171echo " The problematic gopsutil calls in rclone have been disabled for iOS builds"
0 commit comments