## # Script to install (if they do not exist) the Arduino library, Time library, # Red Bear Library, and Nordic library. ## import os, subprocess, struct import urllib.request, urllib.error, urllib.parse, urllib.parse import SCons.Errors import shutil Import('env') target_os = env.get('TARGET_OS') src_dir = env.get('SRC_DIR') SConscript(src_dir + '/build_common/tools/UnpackAll.py') SConscript(src_dir + '/build_common/external_libs.scons') # Download if target_os == 'arduino': arduino_home = env.get('ARDUINO_HOME') if not arduino_home: print('Creating ARDUINO_HOME for Arduino lib') print(''' ******************************************************************************* * Arduino root directory isn't set, you can set enviornment variable * * ARDUINO_HOME or add it in command line as follows (Only set if your * * version has fixes applied as depicted below. Press ctrl+c now if you * * wish to manually set ARDUINO_HOME.): * * # scons ARDUINO_HOME= ... * ******************************************************************************* ''') arduinolib_dir = src_dir + '/extlibs/arduino/arduino-1.5.8' if not os.path.exists(arduinolib_dir): from sys import platform as _platform if _platform == "linux" or _platform == "linux2": archType = 8 * struct.calcsize("P") print('On %s-bit machine.' % (archType)) if archType == 32: arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-linux32.tgz' arduinolib_url = 'http://arduino.cc/download.php?f=/arduino-1.5.8-linux32.tgz' else: arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-linux64.tgz' arduinolib_url = 'http://arduino.cc/download.php?f=/arduino-1.5.8-linux64.tgz' elif _platform == "darwin": arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-macosx.zip' arduinolib_url = 'http://arduino.cc/download.php?f=/arduino-1.5.8-macosx.zip' elif _platform == "win32": arduinolib_zip_file = src_dir + '/extlibs/arduino/arduino-1.5.8-windows.zip' arduinolib_url = src_dir + 'http://arduino.cc/download.php?f=/arduino-1.5.8-windows.zip' # If the zip file is not already present, download it if not os.path.exists(arduinolib_zip_file): arduinolib_zip = env.Download(arduinolib_zip_file, arduinolib_url) else: arduinolib_zip = arduinolib_zip_file # Unzip the lib print('Unzipping arduino lib...') env.UnpackAll(arduinolib_dir, arduinolib_zip) print('Unzipping arduino lib complete') # Remove downloaded file os.remove(arduinolib_zip_file) else: arduinolib_dir = env.get('ARDUINO_HOME') timelib_dir = arduinolib_dir + '/libraries/Time' if not os.path.exists(timelib_dir): if WhereIs('dos2unix') is not None: timelib_zip_file = src_dir + '/extlibs/arduino/Time.zip' timelib_url = 'http://playground.arduino.cc/uploads/Code/Time.zip' # Install Arduino Time library # If the zip file is not already present, download it os.mkdir(timelib_dir) os.chdir(timelib_dir) if not os.path.exists(timelib_zip_file): timelib_zip = env.Download(timelib_zip_file, timelib_url) else: timelib_zip = timelib_zip_file # Unzip the lib print('Unzipping Arduino Time lib...') env.UnpackAll(timelib_dir + '/Time', timelib_zip) # Apply patches to ARDUINO_HOME directory. os.chdir(arduinolib_dir) print('Patching Arduino libraries...') os.system("find ./libraries/Time/Time/DateStrings.cpp -type f -exec dos2unix {} \;") os.system("patch -p1 < " + src_dir + "/resource/csdk/connectivity/lib/arduino/arduino_libraries.patch --directory=" + arduinolib_dir) # Remove downloaded file os.remove(timelib_zip_file) else: print('Please manually install package dos2unix. The build process will end now. Your Action Required: Install package manually, then restart build process.') print('You may likely retrieve this package as follows:') print(' sudo apt-get install dos2unix') print(' or') print(' sudo yum install dos2unix') exit(1) redbearlib_dir = arduinolib_dir + '/libraries/RBL_nRF8001' if not os.path.exists(redbearlib_dir): if WhereIs('dos2unix') is not None: redbearlib_zip_file = src_dir + '/extlibs/arduino/25643e7b1b7da3740406325a471e3faa4b948747.zip' redbearlib_url = 'https://github.com/RedBearLab/nRF8001/archive/25643e7b1b7da3740406325a471e3faa4b948747.zip' if not os.path.exists(redbearlib_zip_file): redbearlib_zip = env.Download(redbearlib_zip_file, redbearlib_url) else: redbearlib_zip = redbearlib_zip_file # Unzip the lib print('Unzipping Red Bear lib...') os.chdir(arduinolib_dir + '/libraries') env.UnpackAll(redbearlib_dir, redbearlib_zip) # Because the way Red Bear lib is distributed... All Red Bear source files must be moved up a few directories. shutil.move('nRF8001-25643e7b1b7da3740406325a471e3faa4b948747/Arduino/libraries/RBL_nRF8001/', '.') shutil.rmtree('nRF8001-25643e7b1b7da3740406325a471e3faa4b948747') # Apply Red Bear patches print('Patching Red Bear library...') os.chdir(arduinolib_dir + '/libraries/RBL_nRF8001/') os.system("find . -type f -exec dos2unix {} \;") os.system("patch -p1 < " + src_dir + "/resource/csdk/connectivity/lib/arduino/RBL_nRF8001.patch") # Remove downloaded file os.remove(redbearlib_zip_file) else: print('Please manually install package dos2unix. The build process will end now. Your Action Required: Install package manually, then restart build process.') print('You may likely retrieve this package as follows:') print(' sudo apt-get install dos2unix') print(' or') print(' sudo yum install dos2unix') exit(1) nordiclib_dir = arduinolib_dir + '/libraries/BLE' if not os.path.exists(nordiclib_dir): if WhereIs('dos2unix') is not None: nordiclib_zip_file = src_dir + '/extlibs/arduino/ble-sdk-arduino-0.9.5.beta.zip' nordiclib_url = 'https://github.com/NordicSemiconductor/ble-sdk-arduino/archive/0.9.5.beta.zip' if not os.path.exists(nordiclib_zip_file): nordiclib_zip = env.Download(nordiclib_zip_file, nordiclib_url) else: nordiclib_zip = nordiclib_zip_file # Unzip the lib print('Unzipping Nordic lib...') os.chdir(arduinolib_dir + '/libraries') env.UnpackAll(nordiclib_dir, nordiclib_zip) # Because the way Nordic lib is distributed... All Nordic source files must be moved up a few directories. shutil.move('ble-sdk-arduino-0.9.5.beta/libraries/BLE/', '.') shutil.rmtree('ble-sdk-arduino-0.9.5.beta') # Apply Nordic lib patches print('Patching Nordic library...') os.chdir(arduinolib_dir + '/libraries/BLE/') os.system("find . -type f -exec dos2unix {} \;") os.system("patch -p1 < " + src_dir + "/resource/csdk/connectivity/lib/arduino/arduino_due_ble.patch") # Remove downloaded file os.remove(nordiclib_zip_file) else: print('Please manually install package dos2unix. The build process will end now. Your Action Required: Install package manually, then restart build process.') print('You may likely retrieve this package as follows:') print(' sudo apt-get install dos2unix') print(' or') print(' sudo yum install dos2unix') exit(1) # Set the ARDUINO_HOME env.Replace(ARDUINO_HOME = arduinolib_dir) print('ARDUINO_HOME = ' + env.get('ARDUINO_HOME'))