add support for Arduino software 1.0 while building
Esse commit está contido em:
@@ -0,0 +1,11 @@
|
||||
# -*- coding: utf-8; -*-
|
||||
|
||||
from nose.tools import assert_equal
|
||||
|
||||
|
||||
class TestVersion(object):
|
||||
def test_parsing(self):
|
||||
assert_equal(Version.parse('0022'), (0, 22))
|
||||
assert_equal(Version.parse('0022ubuntu0.1'), (0, 22))
|
||||
assert_equal(Version.parse('0022-macosx-20110822'), (0, 22))
|
||||
assert_equal(Version.parse('1.0'), (1, 0))
|
||||
+24
-19
@@ -11,6 +11,7 @@ from jinja2.runtime import StrictUndefined
|
||||
import ino.filters
|
||||
|
||||
from ino.commands.base import Command
|
||||
from ino.environment import Version
|
||||
from ino.filters import colorize
|
||||
from ino.utils import SpaceList, list_subdirs
|
||||
from ino.exc import Abort
|
||||
@@ -43,30 +44,29 @@ class Build(Command):
|
||||
self.e.add_arduino_dist_arg(parser)
|
||||
|
||||
def discover(self):
|
||||
self.e.find_arduino_dir('arduino_core_dir',
|
||||
['hardware', 'arduino', 'cores', 'arduino'],
|
||||
['WProgram.h'],
|
||||
'Arduino core library')
|
||||
|
||||
self.e.find_arduino_dir('arduino_libraries_dir', ['libraries'],
|
||||
human_name='Arduino standard libraries')
|
||||
|
||||
|
||||
self.e.find_arduino_file('version.txt', ['lib'],
|
||||
human_name='Arduino lib version file (version.txt)')
|
||||
|
||||
if 'arduino_lib_version' not in self.e:
|
||||
with open(self.e['version.txt']) as f:
|
||||
print 'Detecting Arduino software version ... ',
|
||||
version_string = f.read().strip()
|
||||
# Extract numeric part. String could be something like:
|
||||
# 0022
|
||||
# 0022ubuntu0.1
|
||||
# 0022-macosx-20110822
|
||||
# in any case we need just 0022 casted to int, i.e. 22
|
||||
version_int = int(re.split(r'\D', version_string)[0])
|
||||
self.e['arduino_lib_version'] = version_int
|
||||
print colorize("%s (%s)" % (version_int, version_string), 'green')
|
||||
v_string = f.read().strip()
|
||||
v = Version.parse(v_string)
|
||||
self.e['arduino_lib_version'] = v
|
||||
print colorize("%s (%s)" % (v, v_string), 'green')
|
||||
|
||||
self.e.find_arduino_dir('arduino_core_dir',
|
||||
['hardware', 'arduino', 'cores', 'arduino'],
|
||||
['Arduino.h'] if self.e.arduino_lib_version.major else 'WProgram.h',
|
||||
'Arduino core library')
|
||||
|
||||
self.e.find_arduino_dir('arduino_libraries_dir', ['libraries'],
|
||||
human_name='Arduino standard libraries')
|
||||
|
||||
if self.e.arduino_lib_version.major:
|
||||
self.e.find_arduino_dir('arduino_variants_dir',
|
||||
['hardware', 'arduino', 'variants'],
|
||||
human_name='Arduino variants directory')
|
||||
|
||||
self.e.find_tool('cc', ['avr-gcc'], human_name='avr-gcc')
|
||||
self.e.find_tool('cxx', ['avr-g++'], human_name='avr-g++')
|
||||
@@ -84,10 +84,15 @@ class Build(Command):
|
||||
'-Os',
|
||||
'-w',
|
||||
'-DF_CPU=' + board['build']['f_cpu'],
|
||||
'-DARDUINO=' + str(self.e['arduino_lib_version']),
|
||||
'-DARDUINO=' + str(self.e.arduino_lib_version.as_int()),
|
||||
'-I' + self.e['arduino_core_dir'],
|
||||
])
|
||||
|
||||
if self.e.arduino_lib_version.major:
|
||||
variant_dir = os.path.join(self.e.arduino_variants_dir,
|
||||
board['build']['variant'])
|
||||
self.e.cflags.append('-I' + variant_dir)
|
||||
|
||||
self.e['cxxflags'] = SpaceList(['-fno-exceptions'])
|
||||
self.e['elfflags'] = SpaceList(['-Os', '-Wl,--gc-sections', mcu])
|
||||
|
||||
|
||||
+33
-3
@@ -4,6 +4,7 @@ import os.path
|
||||
import itertools
|
||||
import argparse
|
||||
import pickle
|
||||
import re
|
||||
|
||||
try:
|
||||
from collections import OrderedDict
|
||||
@@ -11,11 +12,40 @@ except ImportError:
|
||||
# Python < 2.7
|
||||
from ordereddict import OrderedDict
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
from ino.filters import colorize
|
||||
from ino.utils import format_available_options
|
||||
from ino.exc import Abort
|
||||
|
||||
|
||||
class Version(namedtuple('Version', 'major minor')):
|
||||
|
||||
regex = re.compile(ur'^\d+(\.\d+)?')
|
||||
|
||||
@classmethod
|
||||
def parse(cls, s):
|
||||
# Version could have various forms
|
||||
# 0022
|
||||
# 0022ubuntu0.1
|
||||
# 0022-macosx-20110822
|
||||
# 1.0
|
||||
# We have to extract a 2-int-tuple (major, minor)
|
||||
match = cls.regex.match(s)
|
||||
if not match:
|
||||
raise Abort("Could not parse Arduino library version: %s" % s)
|
||||
v = match.group(0)
|
||||
if v.startswith('0'):
|
||||
return cls(0, int(v))
|
||||
return cls(*map(int, v.split('.')))
|
||||
|
||||
def as_int(self):
|
||||
return self.major * 100 + self.minor
|
||||
|
||||
def __str__(self):
|
||||
return '%s.%s' % self
|
||||
|
||||
|
||||
class Environment(dict):
|
||||
|
||||
templates_dir = os.path.join(os.path.dirname(__file__), 'templates')
|
||||
@@ -121,10 +151,10 @@ class Environment(dict):
|
||||
/usr/local/share/arduino/a/b/c
|
||||
/usr/share/arduino/a/b/c
|
||||
"""
|
||||
places = []
|
||||
if 'arduino_dist_dir' in self:
|
||||
places.append(self['arduino_dist_dir'])
|
||||
places.extend(self.arduino_dist_dir_guesses)
|
||||
places = [self['arduino_dist_dir']]
|
||||
else:
|
||||
places = self.arduino_dist_dir_guesses
|
||||
return [os.path.join(p, *dirname_parts) for p in places]
|
||||
|
||||
def board_models(self):
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# -*- coding: utf-8; -*-
|
||||
|
||||
from nose.tools import assert_equal
|
||||
|
||||
from ino.environment import Version
|
||||
|
||||
|
||||
class TestVersion(object):
|
||||
def test_parsing(self):
|
||||
assert_equal(Version.parse('0022'), (0, 22))
|
||||
assert_equal(Version.parse('0022ubuntu0.1'), (0, 22))
|
||||
assert_equal(Version.parse('0022-macosx-20110822'), (0, 22))
|
||||
assert_equal(Version.parse('1.0'), (1, 0))
|
||||
Referência em uma Nova Issue
Bloquear um usuário