diff --git a/res/validate.py b/res/validate.py new file mode 100644 index 0000000..52ebbc7 --- /dev/null +++ b/res/validate.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- + +import sys +import os +import shutil +import subprocess +from pprint import pprint + +# ------------------------------------------------------------------------------ + +rootDir = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..')) +logsDir = os.path.join(rootDir, 'logs') +resDir = os.path.join(rootDir, 'res') +srcDir = os.path.join(rootDir, 'src') + +# ------------------------------------------------------------------------------ + +class Arduino: + if sys.platform == 'darwin': + binary = '/Applications/Arduino.app/Contents/MacOS/JavaApplicationStub' + home = os.path.expanduser('~/Documents/Arduino') + elif sys.platform == 'win32': + binary = 'arduino.exe' + home = os.path.expanduser('~/My Documents/Arduino') + elif sys.platform == 'linux': + binary = 'arduino' + home = os.path.expanduser('~/Arduino') + else: + print('Unsupported platform %s' % str(sys.platform)) + sys.exit(1) + + libraryDir = os.path.join(home, 'libraries') + + boards = { + 'Uno': 'arduino:avr:uno', + 'Leonardo': 'arduino:avr:leonardo', + 'Mega': 'arduino:avr:mega', + } + + def checkReturnCode(code): + if code == 0: + return True + if code == 1: + print("Operation failed.") + if code == 2: + print("File not found") + if code == 3: + print("Invalid argument") + return False + + def verify(sketch, board): + return Arduino.checkReturnCode(subprocess.call([ + Arduino.binary, + '--verify', sketch, + '--board', board, + #'--verbose-build', + ])) + +# ------------------------------------------------------------------------------ + +class ArduinoMidiLibrary: + def __init__(self): + self.path = os.path.join(Arduino.libraryDir, 'MIDI') + self.sources = self.getSources() + self.resources = self.getResources() + + def getSources(self): + sources = dict() + for root, dirs, files in os.walk(srcDir): + for name, ext in [os.path.splitext(f) for f in files]: + if ext in ('.cpp', '.hpp', '.h'): + source = os.path.join(root, name + ext) + dest = os.path.join(self.path, os.path.relpath(source, srcDir)) + sources[source] = dest + return sources + + def getResources(self): + return { + os.path.join(resDir, 'keywords.txt'): os.path.join(self.path, 'keywords.txt'), + os.path.join(resDir, 'examples/'): os.path.join(self.path, 'examples/'), + } + + def install(self): + payloads = dict(list(self.sources.items()) + list(self.resources.items())) + for s,d in payloads.items(): + if not os.path.exists(os.path.dirname(d)): + os.makedirs(os.path.dirname(d)) + if os.path.isfile(s): + shutil.copy2(s, d) + elif os.path.isdir(s): + if os.path.exists(d): + shutil.rmtree(d) + shutil.copytree(s, d) + + def getInstalledExamples(self): + exDir = os.path.join(self.path, 'examples') + return [os.path.join(exDir, x, x + '.ino') for x in os.listdir(exDir)] + + def validate(self): + for boardName, boardId in Arduino.boards.items(): + # Validate examples + print('Validation for Arduino %s' % boardName) + for example in self.getInstalledExamples(): + Arduino.verify(example, boardId) + +# ------------------------------------------------------------------------------ + +def main(): + lib = ArduinoMidiLibrary() + lib.install() + lib.validate() + +# ------------------------------------------------------------------------------ + +if __name__ == '__main__': + main() diff --git a/res/validate.sh b/res/validate.sh deleted file mode 100644 index bb05194..0000000 --- a/res/validate.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh - -cd "`dirname "${0}"`" - -root="`pwd`/.." -logsDir="$root/logs" -libDir="$HOME/Documents/Arduino/libraries/MIDI" -arduino="/Applications/Arduino.app/Contents/MacOS/JavaApplicationStub" - -# ------------------------------------------------------------------------------ - -function cleanup -{ - # Parameter: - # $1: working directory - mkdir -p "$1" - rm -rf "$/*" -} - -function installTo -{ - # Parameter: - # $1: install directory - cp -rf "$root/src/*" "$1/" - cp -rf "$root/res/examples" "$1/" - cp -rf "$root/res/keywords.txt" "$1/" -} - -function verify -{ - # Parameter: - # $1: path to .ino file - # $2: board option - "$arduino" \ - --verify "$1" \ - --verbose-build \ - #--board arduino:avr:leonardo -} - -function checkExamples -{ - cwd=`pwd` - cd "$libDir/examples" - for d in *; - do - verify "$libDir/examples/$d/$d.ino" \ - > "$logsDir/$d.build.log" \ - 2> "$logsDir/$d.build.err.log" - done - cd "$cwd" -} - -# ------------------------------------------------------------------------------ -# Main - -#cleanup "$libDir" -#installTo "$libDir" - -checkExamples