add support for Arduino software 1.0 while building

Esse commit está contido em:
Victor Nakoryakov
2011-12-08 20:29:38 +04:00
commit e57a3f5dce
5 arquivos alterados com 81 adições e 22 exclusões
+11
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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
Ver Arquivo
@@ -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):
Ver Arquivo
+13
Ver Arquivo
@@ -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))