@@ -303,17 +303,61 @@ export async function installPackage(packageName: string, packageSpec: string, i
303
303
}
304
304
305
305
// Download and install
306
- const installedFiles = await downloadPackage ( domain , version , os , architecture , installPath )
306
+ try {
307
+ const installedFiles = await downloadPackage ( domain , version , os , architecture , installPath )
307
308
308
- // Create common library symlinks for better compatibility
309
- const packageDir = path . join ( installPath , domain , `v${ version } ` )
310
- await createLibrarySymlinks ( packageDir , domain )
309
+ // Create common library symlinks for better compatibility
310
+ const packageDir = path . join ( installPath , domain , `v${ version } ` )
311
+ await createLibrarySymlinks ( packageDir , domain )
311
312
312
- if ( config . verbose ) {
313
- console . log ( `Successfully installed ${ domain } v${ version } ` )
313
+ if ( config . verbose ) {
314
+ console . log ( `Successfully installed ${ domain } v${ version } ` )
315
+ }
316
+
317
+ return installedFiles
314
318
}
319
+ catch ( error ) {
320
+ // Special fallback for gnu.org/binutils - try lower version if 2.45.0 fails
321
+ if ( domain === 'gnu.org/binutils' && version === '2.45.0' ) {
322
+ const fallbackVersions = [ '2.44.0' , '2.43.0' , '2.42.0' ]
323
+
324
+ for ( const fallbackVersion of fallbackVersions ) {
325
+ if ( config . verbose ) {
326
+ console . warn ( `⚠️ Version ${ version } not available, trying fallback version ${ fallbackVersion } ` )
327
+ }
328
+
329
+ try {
330
+ const installedFiles = await downloadPackage ( domain , fallbackVersion , os , architecture , installPath )
331
+
332
+ // Create common library symlinks for better compatibility
333
+ const packageDir = path . join ( installPath , domain , `v${ fallbackVersion } ` )
334
+ await createLibrarySymlinks ( packageDir , domain )
315
335
316
- return installedFiles
336
+ if ( config . verbose ) {
337
+ console . log ( `✅ Successfully installed ${ domain } v${ fallbackVersion } (fallback from v${ version } )` )
338
+ }
339
+
340
+ return installedFiles
341
+ }
342
+ catch {
343
+ if ( config . verbose ) {
344
+ console . warn ( `⚠️ Fallback version ${ fallbackVersion } also failed, trying next...` )
345
+ }
346
+ continue
347
+ }
348
+ }
349
+
350
+ // If all fallback versions failed
351
+ if ( config . verbose ) {
352
+ console . error ( `❌ All versions failed for ${ domain } : ${ version } , ${ fallbackVersions . join ( ', ' ) } ` )
353
+ console . error ( ` Original error: ${ error instanceof Error ? error . message : String ( error ) } ` )
354
+ }
355
+ throw error // Re-throw the original error
356
+ }
357
+
358
+ // Re-throw the original error for other packages
359
+ throw error
360
+ }
317
361
}
318
362
319
363
/**
0 commit comments