diff --git a/internal/crosscompile/crosscompile.go b/internal/crosscompile/crosscompile.go index bb475105..e716434f 100644 --- a/internal/crosscompile/crosscompile.go +++ b/internal/crosscompile/crosscompile.go @@ -180,14 +180,8 @@ func use(goos, goarch string, wasiThreads bool) (export Export, err error) { // If not exists in LLGoROOT, download and use cached wasiSdkRoot if _, err = os.Stat(wasiSdkRoot); err != nil { sdkDir := filepath.Join(cacheDir(), llvm.GetTargetTriple(goos, goarch)) - if _, err = os.Stat(sdkDir); err != nil { - if !errors.Is(err, fs.ErrNotExist) { - return - } - - if wasiSdkRoot, err = downloadAndExtract(wasiSdkUrl, sdkDir); err != nil { - return - } + if wasiSdkRoot, err = checkDownloadAndExtract(wasiSdkUrl, sdkDir); err != nil { + return } } // WASI-SDK configuration diff --git a/internal/crosscompile/fetch.go b/internal/crosscompile/fetch.go index 72dd166d..64f1ae83 100644 --- a/internal/crosscompile/fetch.go +++ b/internal/crosscompile/fetch.go @@ -12,36 +12,36 @@ import ( "strings" ) -func downloadAndExtract(url, dir string) (wasiSdkRoot string, err error) { - if _, err = os.Stat(dir); err == nil { +func checkDownloadAndExtract(url, dir string) (wasiSdkRoot string, err error) { + if _, err = os.Stat(dir); err != nil { os.RemoveAll(dir) - } - tempDir := dir + ".temp" - os.RemoveAll(tempDir) - if err := os.MkdirAll(tempDir, 0755); err != nil { - return "", fmt.Errorf("failed to create temporary directory: %w", err) - } + tempDir := dir + ".temp" + os.RemoveAll(tempDir) + if err := os.MkdirAll(tempDir, 0755); err != nil { + return "", fmt.Errorf("failed to create temporary directory: %w", err) + } - urlPath := strings.Split(url, "/") - filename := urlPath[len(urlPath)-1] - localFile := filepath.Join(tempDir, filename) - if err = downloadFile(url, localFile); err != nil { - return "", fmt.Errorf("failed to download file: %w", err) - } - defer os.Remove(localFile) + urlPath := strings.Split(url, "/") + filename := urlPath[len(urlPath)-1] + localFile := filepath.Join(tempDir, filename) + if err = downloadFile(url, localFile); err != nil { + return "", fmt.Errorf("failed to download file: %w", err) + } + defer os.Remove(localFile) - if strings.HasSuffix(filename, ".tar.gz") || strings.HasSuffix(filename, ".tgz") { - err = extractTarGz(localFile, tempDir) - } else if strings.HasSuffix(filename, ".tar.xz") { - err = extractTarXz(localFile, tempDir) - } else { - return "", fmt.Errorf("unsupported archive format: %s", filename) - } - if err != nil { - return "", fmt.Errorf("failed to extract archive: %w", err) - } - if err = os.Rename(tempDir, dir); err != nil { - return "", fmt.Errorf("failed to rename directory: %w", err) + if strings.HasSuffix(filename, ".tar.gz") || strings.HasSuffix(filename, ".tgz") { + err = extractTarGz(localFile, tempDir) + } else if strings.HasSuffix(filename, ".tar.xz") { + err = extractTarXz(localFile, tempDir) + } else { + return "", fmt.Errorf("unsupported archive format: %s", filename) + } + if err != nil { + return "", fmt.Errorf("failed to extract archive: %w", err) + } + if err = os.Rename(tempDir, dir); err != nil { + return "", fmt.Errorf("failed to rename directory: %w", err) + } } wasiSdkRoot = filepath.Join(dir, "wasi-sdk-25.0-x86_64-macos") return