@@ -19,6 +19,16 @@ import (
19
19
"time"
20
20
)
21
21
22
+ func createSymLink (symlink string , file string ) {
23
+
24
+ os .Remove (symlink )
25
+
26
+ err := os .Symlink (file , symlink )
27
+ if err != nil {
28
+ log .Fatal (err )
29
+ }
30
+ }
31
+
22
32
// Unzip will decompress a zip archive, moving all files and folders
23
33
// within the zip file (parameter 1) to an output directory (parameter 2).
24
34
func unzip (src string , dest string ) ([]string , error ) {
@@ -128,7 +138,7 @@ func printDownloadPercent(done chan int64, path string, total int64) {
128
138
size = 1
129
139
}
130
140
131
- var percent float64 = float64 (size ) / float64 (total ) * 100
141
+ var percent = float64 (size ) / float64 (total ) * 100
132
142
133
143
// We use `\033[2K\r` to avoid carriage return, it will print above previous.
134
144
fmt .Printf ("\033 [2K\r %.0f %% / 100 %%" , percent )
@@ -154,6 +164,7 @@ func downloadFile(filepath string, url string) error {
154
164
os .Exit (0 )
155
165
}
156
166
}
167
+
157
168
start := time .Now ()
158
169
159
170
// Create the file
@@ -242,45 +253,85 @@ func main() {
242
253
}
243
254
244
255
var platform = "undefined"
245
- var downloadURL = ""
256
+ var downloadShareLibraryURL = ""
257
+ var endMessage = ""
246
258
247
259
// Retrieve the OS and set variable to retrieve correct flutter embedder
248
260
switch runtime .GOOS {
249
261
case "darwin" :
250
262
platform = "darwin-x64"
251
- downloadURL = fmt .Sprintf ("https://storage.googleapis.com/flutter_infra/flutter/%s/%s/FlutterEmbedder.framework.zip" , hashResponse .Items [0 ].Sha , platform )
263
+ downloadShareLibraryURL = fmt .Sprintf ("https://storage.googleapis.com/flutter_infra/flutter/%s/%s/FlutterEmbedder.framework.zip" , hashResponse .Items [0 ].Sha , platform )
264
+ endMessage = "export CGO_LDFLAGS=\" -F${PWD} -Wl,-rpath,@executable_path\" "
252
265
253
266
case "linux" :
254
267
platform = "linux-x64"
255
- downloadURL = fmt .Sprintf ("https://storage.googleapis.com/flutter_infra/flutter/%s/%s/%s-embedder" , hashResponse .Items [0 ].Sha , platform , platform )
268
+ downloadShareLibraryURL = fmt .Sprintf ("https://storage.googleapis.com/flutter_infra/flutter/%s/%s/%s-embedder" , hashResponse .Items [0 ].Sha , platform , platform )
269
+ endMessage = "export CGO_LDFLAGS=\" -L${PWD}\" "
256
270
257
271
case "windows" :
258
272
platform = "windows-x64"
259
- downloadURL = fmt .Sprintf ("https://storage.googleapis.com/flutter_infra/flutter/%s/%s/%s-embedder" , hashResponse .Items [0 ].Sha , platform , platform )
273
+ downloadShareLibraryURL = fmt .Sprintf ("https://storage.googleapis.com/flutter_infra/flutter/%s/%s/%s-embedder" , hashResponse .Items [0 ].Sha , platform , platform )
274
+ endMessage = "set CGO_LDFLAGS=-L%cd%"
260
275
261
276
default :
262
277
log .Fatal ("OS not supported" )
263
278
}
264
279
265
- err3 := downloadFile (dir + "/.build/temp.zip" , downloadURL )
280
+ downloadIcudtlURL := fmt .Sprintf ("https://storage.googleapis.com/flutter_infra/flutter/%s/%s/artifacts.zip" , hashResponse .Items [0 ].Sha , platform )
281
+
282
+ err3 := downloadFile (dir + "/.build/temp.zip" , downloadShareLibraryURL )
266
283
if err3 != nil {
267
284
log .Fatal (err3 )
268
285
} else {
269
286
fmt .Printf ("Downloaded embedder for %s platform, matching version : %s\n " , platform , hashResponse .Items [0 ].Sha )
270
287
}
271
288
289
+ err4 := downloadFile (dir + "/.build/artifacts.zip" , downloadIcudtlURL )
290
+ if err != nil {
291
+ log .Fatal (err4 )
292
+ } else {
293
+ fmt .Printf ("Downloaded artifact for %s platform.\n " , platform )
294
+ }
295
+
272
296
_ , err = unzip (".build/temp.zip" , dir + "/.build/" )
273
297
if err != nil {
274
298
log .Fatal (err )
275
299
}
276
300
301
+ _ , err = unzip (".build/artifacts.zip" , dir + "/.build/artifacts/" )
302
+ if err != nil {
303
+ log .Fatal (err )
304
+ }
305
+
306
+ err = os .Rename (".build/artifacts/icudtl.dat" , dir + "/icudtl.dat" )
307
+ if err != nil {
308
+ log .Fatal (err )
309
+ }
310
+
277
311
switch platform {
278
312
case "darwin-x64" :
279
- _ , err = unzip (".build/FlutterEmbedder.framework.zip" , dir + "/FlutterEmbedder.framework" )
313
+ _ , err = unzip (dir + "/.build/FlutterEmbedder.framework.zip" , dir + "/.build/FlutterEmbedder.framework/" )
314
+ if err != nil {
315
+ log .Fatal (err )
316
+ }
317
+
318
+ os .RemoveAll (dir + "/FlutterEmbedder.framework" )
319
+
320
+ err := os .Rename (dir + "/.build/FlutterEmbedder.framework/" , dir + "/FlutterEmbedder.framework/" )
280
321
if err != nil {
281
322
log .Fatal (err )
282
323
}
283
324
325
+ createSymLink (dir + "/FlutterEmbedder.framework/Versions/Current" , dir + "/FlutterEmbedder.framework/Versions/A" )
326
+
327
+ createSymLink (dir + "/FlutterEmbedder.framework/FlutterEmbedder" , dir + "/FlutterEmbedder.framework/Versions/Current/FlutterEmbedder" )
328
+
329
+ createSymLink (dir + "/FlutterEmbedder.framework/Headers" , dir + "/FlutterEmbedder.framework/Versions/Current/Headers" )
330
+
331
+ createSymLink (dir + "/FlutterEmbedder.framework/Modules" , dir + "/FlutterEmbedder.framework/Versions/Current/Modules" )
332
+
333
+ createSymLink (dir + "/FlutterEmbedder.framework/Resources" , dir + "/FlutterEmbedder.framework/Versions/Current/Resources" )
334
+
284
335
case "linux-x64" :
285
336
err := os .Rename (".build/libflutter_engine.so" , dir + "/libflutter_engine.so" )
286
337
if err != nil {
@@ -296,6 +347,8 @@ func main() {
296
347
}
297
348
fmt .Printf ("Unzipped files and moved them to correct repository.\n " )
298
349
299
- fmt .Printf ("Done.\n " )
350
+ fmt .Printf ("\n To let know the CGO compiler where to look for the share library, Please run:\n \t " )
351
+ fmt .Printf ("%s\n " , endMessage )
300
352
353
+ fmt .Printf ("Done.\n " )
301
354
}
0 commit comments