Package: arduino-core
Version: 0022+dfsg-3
Severity: important

The newest version of avr-libc in Debian has broken compiling with
arduino-core (and probably arduino as well).  avr-libc 1.7.1 shipped
with a bug in the delay.h header because it did not include math.h
rendering any program which doesn't include math.h before the
util/delay.h header uncompilable.   I will report this bug against
avr-libc 1.7.1-1 in order to have this fixed, but 1.7.1 also
introduces another bug when using the wiring.h library included in
Arduino, because math.h includes a definition of round which conflicts
with the wiring.h declaration at line 74 of
/usr/share/arduino/hardware/arduino/cores/arduino/wiring.h

The bug manifests itself initially as a compliation error and can be
reproduced through:

mkdir ~/tmp_arduino_bug
cd ~/tmp_arduino_bug
cat > Makefile <<'!====EOF====!'
ARDUINO_DIR = /usr/share/arduino

TARGET       = Blink
#ARDUINO_LIBS = LiquidCrystal

MCU          = atmega168
F_CPU        = 16000000
ARDUINO_PORT = /dev/ttyUSB*

AVRDUDE_ARD_PROGRAMMER = arduino
AVRDUDE_ARD_BAUDRATE   = 57600
#AVRDUDE_ARD_EXTRAOPTS  = -F

include /usr/share/arduino/Arduino.mk
!====EOF====!
cp /usr/share/arduino/examples/1.Basics/Blink/Blink.pde .
make

which produces this output on unstable:
/usr/share/arduino/Arduino.mk:405: build-cli/depends.mk: No such file or 
directory
mkdir build-cli
echo \#include \"WProgram.h\" > build-cli/Blink.cpp
cat  Blink.pde >> build-cli/Blink.cpp
/usr/bin/avr-g++ -MM -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -f
cat build-cli/Blink.d > build-cli/depends.mk
rm build-cli/Blink.cpp
echo \#include \"WProgram.h\" > build-cli/Blink.cpp
cat  Blink.pde >> build-cli/Blink.cpp
/usr/bin/avr-g++ -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -fn
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -st
/usr/bin/avr-g++ -c -mmcu=atmega168 -DF_CPU=16000000 -I. 
-I/usr/share/arduino/hardware/arduino/cores/arduino  -g -Os -w -Wall 
-ffunction-sections -fdata-sections -fn
In file included from 
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/delay.h:37:0,
                 from 
/usr/share/arduino/hardware/arduino/cores/arduino/wiring_private.h:30,
                 from 
/usr/share/arduino/hardware/arduino/cores/arduino/HardwareSerial.cpp:28:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h: In function ‘void 
_delay_ms(double)’:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:149:42: error: ‘fabs’ 
was not declared in this scope
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:149:43: error: ‘ceil’ 
was not declared in this scope
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h: In function ‘void 
_delay_us(double)’:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:226:42: error: ‘fabs’ 
was not declared in this scope
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:226:43: error: ‘ceil’ 
was not declared in this scope
make: *** [build-cli/HardwareSerial.o] Error 1

After fixing the bug in avr-libc, the error changes to:

In file included from 
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:44:0,
                 from 
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/delay.h:37,
                 from 
/usr/share/arduino/hardware/arduino/cores/arduino/wiring_private.h:30,
                 from 
/usr/share/arduino/hardware/arduino/cores/arduino/WInterrupts.c:34:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/math.h:426:15: error: expected 
identifier or ‘(’ before ‘double’
/usr/lib/gcc/avr/4.5.3/../../../avr/include/math.h:426:15: error: expected ‘)’ 
before ‘>=’ token

which is caused by the macro definition of round() in wiring.h:
#define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))

commenting out this line fixes this final compliation error and the program 
compiles, uploads and correctly works on the Arduino that I have.

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.39-2-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages arduino-core depends on:
ii  avr-libc                      1:1.7.1-1  Standard C library for Atmel AVR d
ii  avrdude                       5.10-3     software for programming Atmel AVR
ii  gcc                           4:4.6.1-2  GNU C compiler
ii  gcc-avr                       1:4.5.3-1  The GNU C compiler (cross compiler

arduino-core recommends no packages.

arduino-core suggests no packages.

-- no debconf information

This email and any files transmitted with it are confidential and intended 
solely for the use of the individual or entity to whom they are addressed.  If 
you are not the named addressee, you should not disseminate, distribute or copy 
this email. Please notify the sender immediately by email if you have received 
this email by mistake and delete this email from your system. If you are not 
the intended recipient, you are notified that disclosing, copying, distributing 
or taking any action in reliance on the contents of this information is 
strictly prohibited.

Within the United States, sale of the Recon Scout to non-Federal and 
non-military entities is limited to state and local police and firefighters 
eligible for licensing under 47 C.F.R. § 90.20(a)(1) of the FCC Rules, and 
security personnel in Critical Infrastructure Industries as defined in  the FCC 
 Rules, 47 C.F.R. § 90.7.  Operation of this product by non-federal and 
non-military entities requires an FCC license. These FCC Rules do not apply to 
sales made outside the United States.



--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to