@@ -479,21 +479,30 @@ def main():
479479 # Inject boards.local.txt if requested
480480 if COPY_BOARDS_LOCAL_TXT and boards_local_txt :
481481 try :
482+ local_app_data_dir = os .environ .get ('HOME' , '' )
483+ data_dir = None
484+ if os .path .exists (os .path .join (local_app_data_dir , 'Arduino' )):
485+ data_dir = os .path .join (local_app_data_dir , 'Arduino' )
486+ elif os .path .exists (os .path .join (local_app_data_dir , '.arduino15' )):
487+ data_dir = os .path .join (local_app_data_dir , '.arduino15' )
488+ elif os .path .exists (os .path .join (local_app_data_dir , '.arduino' )):
489+ data_dir = os .path .join (local_app_data_dir , '.arduino' )
490+
482491 # Get arduino-cli data directory
483492 import json
484- config_output = subprocess .check_output (["arduino-cli" , "config" , "dump" , "--format" , "json" ]).decode ()
493+ if data_dir :
494+ config_output = subprocess .check_output (["arduino-cli" , "config" , "dump" , "--format" , "json" , "--config-dir" , data_dir ]).decode ()
495+ else :
496+ config_output = subprocess .check_output (["arduino-cli" , "config" , "dump" , "--format" , "json" ]).decode ()
485497 config = json .loads (config_output )
486498 ColorPrint .print_info (f"Using arduino-cli config: { config_output .strip ()} " )
487499
488500 # Extract data directory, with fallback to default
489- data_dir = config .get ("directories" , {}).get ("data" , "" )
501+ data_dir = config .get ("directories" , {}).get ("data" , data_dir )
490502 if not data_dir :
491- ColorPrint .print_warn ("No data directory found in arduino-cli config, using fallback locations." )
492- # Fallback to common default locations
493- if os .name == 'nt' : # Windows
494- data_dir = os .path .join (os .environ .get ('LOCALAPPDATA' , '' ), 'Arduino15' )
495- else : # Linux/macOS
496- data_dir = os .path .join (os .environ .get ('HOME' , '' ), '.arduino15' )
503+ ColorPrint .print_warn ("No valid data directory found, cannot copy boards.local.txt" )
504+ continue
505+
497506 ColorPrint .print_info (f"Using data directory: { data_dir } " )
498507
499508 # Parse platform vendor and architecture from core_fqbn (e.g., "adafruit:samd")
@@ -507,8 +516,10 @@ def main():
507516
508517 ColorPrint .print_info (f"Using vendor: { vendor } , architecture: { architecture } " )
509518
510- # Construct base platform path
511- platform_base = os .path .join (data_dir , "packages" , vendor , "hardware" , architecture )
519+ # Construct base platform path, fall back to architecture if vendor rebadged BSP.
520+ platform_base = os .path .join (data_dir , "packages" , vendor , "hardware" , architecture ) if \
521+ os .path .exists (os .path .join (data_dir , "packages" , vendor , "hardware" , architecture )) else \
522+ os .path .join (data_dir , "packages" , architecture , "hardware" , architecture )
512523
513524 # Find the latest version directory
514525 if os .path .exists (platform_base ):
0 commit comments