Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation fails due to files given multiple times as arguments to the compiler - CppLibrary::vendor_bundle? is hardcoded, not $BUNDLE_PATH #69

Closed
hlovdal opened this issue Dec 30, 2018 · 13 comments
Labels
bug Something isn't working invalid This doesn't seem right rubygem Ruby code is affected

Comments

@hlovdal
Copy link
Contributor

hlovdal commented Dec 30, 2018

System

  • OS: Linux (Fedora 29)
  • ruby -v: ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
  • bundle -v: Bundler version 1.17.3
  • bundle info arduino_ci:
  * arduino_ci (0.1.14)
        Summary: Tools for building and unit testing Arduino libraries
        Homepage: http://github.com/ianfixes/arduino_ci
        Path: /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14
  • g++ -v:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.2.1 20181215 (Red Hat 8.2.1-6) (GCC) 
  • Arduino IDE version: 1.8.6
  • java -version:
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Issue Summary

I try to use arduino_ci as a unit test tool for local development, e.g. only on my machine, not in a github repo.

Something triggers arduino_ci to include some files twice, causing the compiler to fail because of duplicate definitions.

Arduino or Unit Test Code, Illustrating the Problem

I have created a minimal example to trigger this. Steps to reproduce:

$ mkdir /tmp/dummy
$ cd /tmp/dummy
$ cat > dummy.ino
void setup() {
}
void loop() {
}
$ mkdir test
$ cat > test/dummy.cpp
#include <ArduinoUnitTests.h>

unittest(dummy_test)
{
  assertEqual(4, 4);
}

unittest_main()
$ cat > Gemfile
source 'https://rubygems.org'
gem 'arduino_ci'
$ cat > .arduino-ci.yaml
compile:
  libraries: ~
  platforms:
    - uno

unittest:
  libraries: ~
  platforms:
    - uno
$ bundle install --path bundle_install
Fetching gem metadata from https://rubygems.org/............
Resolving dependencies...
Fetching os 1.0.0
Installing os 1.0.0
Fetching rubyzip 1.2.2
Installing rubyzip 1.2.2
Fetching arduino_ci 0.1.14
Installing arduino_ci 0.1.14
Using bundler 1.17.3
Bundle complete! 1 Gemfile dependency, 4 gems now installed.
Bundled gems are installed into `./bundle_install`
$

Then running arduino_ci fails:

$ bundle exec arduino_ci_remote.rb
Located Arduino binary...                  /home/download/arduino_ci_ide/arduino
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed at...                   /home/download/Arduino/libraries/dummy
The set of compilers (1) isn't empty...                                        ✓
Checking g++ version... 
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
    OFFLOAD_TARGET_NAMES=nvptx-none
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-redhat-linux
    Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
    Thread model: posix
    gcc version 8.2.1 20181215 (Red Hat 8.2.1-6) (GCC) 
...Checking g++ version                                                        ✓
libasan availability for g++...                                            false
Requested unittest platform 'uno' is defined in 'platforms' YML...             ✓
Using built-in board package...                                      arduino:avr
Installing board package arduino:avr...                                        ✓
Switching to board for uno (arduino:avr:uno)...                                ✓
Unit testing dummy.cpp with g++... 

Last command:  $ g++ -std=c++0x -o /tmp/dummy/unittest_dummy.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp /tmp/dummy/test/dummy.cpp

/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `delayMicroseconds(unsigned long)':
Godmode.cpp:(.text+0x8b): multiple definition of `delayMicroseconds(unsigned long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x8b): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o:(.bss+0x0): multiple definition of `godmode'; /tmp/ccwmzxNZ.o:(.bss+0x0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `GODMODE()':
Godmode.cpp:(.text+0x0): multiple definition of `GODMODE()'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `millis()':
Godmode.cpp:(.text+0xb): multiple definition of `millis()'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0xb): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `micros()':
Godmode.cpp:(.text+0x3d): multiple definition of `micros()'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x3d): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `delay(unsigned long)':
Godmode.cpp:(.text+0x57): multiple definition of `delay(unsigned long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x57): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `randomSeed(unsigned long)':
Godmode.cpp:(.text+0xb8): multiple definition of `randomSeed(unsigned long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0xb8): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `random(long)':
Godmode.cpp:(.text+0xdc): multiple definition of `random(long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0xdc): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `random(long, long)':
Godmode.cpp:(.text+0x134): multiple definition of `random(long, long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x134): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `digitalWrite(unsigned char, unsigned char)':
Godmode.cpp:(.text+0x170): multiple definition of `digitalWrite(unsigned char, unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x170): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `digitalRead(unsigned char)':
Godmode.cpp:(.text+0x1c9): multiple definition of `digitalRead(unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x1c9): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `analogWrite(unsigned char, int)':
Godmode.cpp:(.text+0x20c): multiple definition of `analogWrite(unsigned char, int)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x20c): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `analogRead(unsigned char)':
Godmode.cpp:(.text+0x25a): multiple definition of `analogRead(unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x25a): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `attachInterrupt(unsigned char, void (*)(), unsigned char)':
Godmode.cpp:(.text+0x29d): multiple definition of `attachInterrupt(unsigned char, void (*)(), unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x29d): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `detachInterrupt(unsigned char)':
Godmode.cpp:(.text+0x2f0): multiple definition of `detachInterrupt(unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x2f0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o:(.bss+0x122a0): multiple definition of `Serial'; /tmp/ccwmzxNZ.o:(.bss+0x122a0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o:(.bss+0x12320): multiple definition of `SPI'; /tmp/ccwmzxNZ.o:(.bss+0x12320): first defined here
/usr/bin/ld: /tmp/ccogA35M.o:(.bss+0x0): multiple definition of `Test::sRoot'; /tmp/ccoeb2Za.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
...Unit testing dummy.cpp with g++                                             ✗
Skipping libraries; no examples found in /home/download/Arduino/libraries/dummy... 
    /tmp/dummy/Gemfile
    /tmp/dummy/Gemfile.lock
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/arduino_ci_remote.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/arduino_ci_remote.rb.orig
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/ensure_arduino_installation.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/libasan.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/cache/arduino_ci-0.1.14.gem
    /tmp/dummy/bundle_install/ruby/2.5.0/cache/os-1.0.0.gem
    /tmp/dummy/bundle_install/ruby/2.5.0/cache/rubyzip-1.2.2.gem
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ArduinoDefines.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/AvrMath.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/HardwareSerial.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/PinHistory.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Print.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/SPI.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/SoftwareSerial.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Stream.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/WCharacter.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/WString.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/common.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/fuse.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io1200.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2313.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2323.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2333.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2343.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io43u32x.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io43u35x.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io4414.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io4433.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io4434.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io76c711.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io8515.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io8534.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io8535.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io86r401.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm161.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm216.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm2b.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm316.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm3b.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm81.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwmx.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90scr100.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5272.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5505.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5702m322.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5782.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5790.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5790n.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5791.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5795.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5831.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6285.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6286.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6289.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6612c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6613c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6614q.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6616c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6617c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa664251.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa8210.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa8510.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioat94k.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocan128.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocan32.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocan64.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocanxx.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom103.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1280.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1281.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1284.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1284p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1284rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128rfa1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom161.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom162.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom163.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168pb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hva.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hva2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hvb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hvbrevb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16m1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16u2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16u4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom2560.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom2561.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom2564rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom256rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3000.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom323.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom324a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom324p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom324pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom328.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom328p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3290.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3290a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3290pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32c1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32hvb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32hvbrevb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32m1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32u2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32u4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32u6.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom406.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48pb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom640.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom645.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6450.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6450a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6450p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom645a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom645p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom649.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6490.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6490a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6490p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom649a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom649p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64c1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64hve.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64hve2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64m1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8515.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8535.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88pb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8hva.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8u2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomx8.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomxx0_1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomxx4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomxxhva.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn10.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn11.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn12.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn13.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn13a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn15.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn1634.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn167.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn20.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn22.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn2313.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn2313a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn24.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn24a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn25.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn26.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn261.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn261a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn28.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn40.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn4313.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn43u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn44.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn441.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn44a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn45.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn461.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn461a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn48.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn828.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn84.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn841.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn84a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn85.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn861.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn861a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn87.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn88.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn9.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotnx4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotnx5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotnx61.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb1286.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb1287.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb162.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb646.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb647.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb82.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousbxx2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousbxx6_7.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a1u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128b1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128b3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16a4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16c4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16e5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3b.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3bu.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32a4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32c4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32e5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox384c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox384d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a1u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64b1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64b3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox8e5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/lock.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/pgmspace.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/portpins.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/version.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/xmega.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/binary.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/DeviceUsingBytes.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/ObservableDataStream.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/Queue.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/Table.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/Assertion.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/Compare.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/arduino_ci_remote.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/arduino_ci_remote.rb.orig
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/ensure_arduino_installation.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/libasan.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_linux.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_linux_builder.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_osx.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_windows.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader_linux.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader_osx.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader_windows.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_installation.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/ci_config.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/cpp_library.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/host.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/version.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/misc/default.yml
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/ChangeLog
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/Gemfile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/Gemfile.lock
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/LICENSE
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/README.rdoc
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/Rakefile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/VERSION
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/autotest/discover.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/lib/os.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/os.gemspec
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/linux_spec.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/os_spec.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/osx_spec.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/spec_helper.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/Rakefile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/TODO
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/central_directory.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/compressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/constants.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/crypto/encryption.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/crypto/null_encryption.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/crypto/traditional_encryption.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/decompressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/deflater.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/dos_time.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/entry.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/entry_set.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/errors.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/generic.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/ntfs.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/old_unix.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/universal_time.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/unix.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/zip64.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/zip64_placeholder.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/file.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/filesystem.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/inflater.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/input_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/ioextras/abstract_input_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/ioextras/abstract_output_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/ioextras.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/null_compressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/null_decompressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/null_input_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/output_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/pass_thru_compressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/pass_thru_decompressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/streamable_directory.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/streamable_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/version.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/example.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/example_filesystem.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/example_recursive.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/gtk_ruby_zip.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/qtzip.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/write_simple.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/zipfind.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/basic_zip_file_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/case_sensitivity_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/central_directory_entry_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/central_directory_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/crypto/null_encryption_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/crypto/traditional_encryption_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/WarnInvalidDate.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/file1.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/file1.txt.deflatedData
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/file2.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest/foo/bar/baz/foo.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest/foo.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest/food.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/gpbit3stored.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/mimetype
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/notzippedruby.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/ntfs.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/oddExtraField.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/Makefile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/absolute1.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/absolute2.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/dirsymlink.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/dirsymlink2a.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/dirsymlink2b.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/relative0.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/relative2.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/symlink.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/relative1.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/tuzovakaoff/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/tuzovakaoff/absolutepath.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/tuzovakaoff/symlink.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/rubycode.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/rubycode2.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/test.xls
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/testDirectory.bin
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/zip64-sample.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/zipWithDirs.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/zipWithEncryption.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/deflater_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/encryption_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/entry_set_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/entry_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/errors_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/extra_field_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_extract_directory_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_extract_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_permissions_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_split_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/dir_iterator_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/directory_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/file_mutating_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/file_nonmutating_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/file_stat_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/gentestfiles.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/inflater_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/input_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/ioextras/abstract_input_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/ioextras/abstract_output_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/ioextras/fake_io_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/local_entry_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/output_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/pass_thru_compressor_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/pass_thru_decompressor_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/path_traversal_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/samples/example_recursive_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/settings_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/test_helper.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/unicode_file_names_and_comments_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/zip64_full_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/zip64_support_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/specifications/arduino_ci-0.1.14.gemspec
    /tmp/dummy/bundle_install/ruby/2.5.0/specifications/os-1.0.0.gemspec
    /tmp/dummy/bundle_install/ruby/2.5.0/specifications/rubyzip-1.2.2.gemspec
    /tmp/dummy/dummy.ino
    /tmp/dummy/test/dummy.cpp
...Skipping libraries; no examples found in /home/download/Arduino/libraries/dummy 
Failures: 1
$

Breaking up the last command on separate lines makes it easy to see the duplicated files:

g++
-std=c++0x
-o
/tmp/dummy/unittest_dummy.cpp.bin
-DARDUINO=100
-D__AVR_ATmega328P__
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp
/tmp/dummy/test/dummy.cpp

Arduino Architecture(s) Affected

Only tested for Uno, but I assume this is generic.

@ianfixes ianfixes added bug Something isn't working unittest libs The assert / assure / unittest reporting apparatus is affected labels Dec 31, 2018
@ianfixes
Copy link
Collaborator

This seems like a strange bug, since the file list is taken from 3 places that should not overlap.

Can you try this patch? It should add some harmless command line options to break up the file listing and hopefully help isolate the code that's creating those duplicate entries:

diff --git a/lib/arduino_ci/cpp_library.rb b/lib/arduino_ci/cpp_library.rb
index 7df0e44..223f925 100644
--- a/lib/arduino_ci/cpp_library.rb
+++ b/lib/arduino_ci/cpp_library.rb
@@ -241,8 +241,11 @@ module ArduinoCI
     def test_args(aux_libraries, ci_gcc_config)
       # TODO: something with libraries?
       ret = include_args(aux_libraries)
+      ret += ["-DARDUINO_CI_cpp_files_arduino"]
       ret += cpp_files_arduino.map(&:to_s)
+      ret += ["-DARDUINO_CI_cpp_files_unittest"]
       ret += cpp_files_unittest.map(&:to_s)
+      ret += ["-DARDUINO_CI_cpp_files"]
       ret += cpp_files.map(&:to_s)
       unless ci_gcc_config.nil?
         cgc = ci_gcc_config

@ianfixes ianfixes added rubygem Ruby code is affected and removed unittest libs The assert / assure / unittest reporting apparatus is affected labels Dec 31, 2018
@hlovdal
Copy link
Contributor Author

hlovdal commented Jan 26, 2019

With that patch the last command becomes:

Last
command:
$
g++
-std=c++0x
-o
/tmp/dummy2/unittest_dummy.cpp.bin
-DARDUINO=100
-D__AVR_ATmega328P__
-I/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino
-I/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/unittest
-I/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino
-I/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/avr
-I/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/ci
-I/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/unittest
-DARDUINO_CI_cpp_files_arduino
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/Arduino.cpp
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/Godmode.cpp
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/stdlib.cpp
-DARDUINO_CI_cpp_files_unittest
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/unittest/ArduinoUnitTests.cpp
-DARDUINO_CI_cpp_files
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/Arduino.cpp
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/Godmode.cpp
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/arduino/stdlib.cpp
/tmp/dummy2/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/cpp/unittest/ArduinoUnitTests.cpp
/tmp/dummy2/test/dummy.cpp

hlovdal referenced this issue in hlovdal/arduino_ci Jan 26, 2019
When retesting the minimum scenario today
https://github.com/ianfixes/arduino_ci/issues/69#issuecomment-457851016
I used just

    gem install bundler

and there were no problems like there had been earlier. So things have
apparently been resolved and the version specific install workaround is
no longer needed.

I tested using a separate user starting with an empty home directory,
e.g. guarantied no old stale things being picked up.
hlovdal referenced this issue in hlovdal/arduino_ci Jan 26, 2019
When retesting the minimum scenario today
https://github.com/ianfixes/arduino_ci/issues/69#issuecomment-457851016
I used just

    gem install bundler

and there were no problems like there had been earlier. So things have
apparently been resolved and the version specific install workaround is
no longer needed.

I tested using a separate user starting with an empty home directory,
e.g. guaranteed no old stale things being picked up.
@ianfixes
Copy link
Collaborator

Aah interesting. I was in the middle of writing a long comment about how I couldn't figure out the problem but it just jumped out at me. If I'm reading this correctly, your library is installed at /tmp/dummy2 and the directory of gem dependencies happens to live inside it. So arduino_ci is finding and including itself.

I would have thought the bundle stuff would go into vendor/bundle (which I explicitly check for), but in this case it's going into bundle_install/ somehow. Did you explicitly do that? What OS are you on?

I'm going to have to fix CppLibrary::vendor_bundle?. Question for my future self and/or more knowledgable visitors: is there a way to get the master $BUNDLE_PATH instead of iterating over all bundle show --paths dirs?

@ianfixes ianfixes changed the title Compilation fails due to files given multiple times as arguments to the compiler Compilation fails due to files given multiple times as arguments to the compiler - CppLibrary::vendor_bundle? is hardcoded, not $BUNDLE_PATH Jan 28, 2019
@ianfixes
Copy link
Collaborator

ianfixes commented Jan 28, 2019

@hlovdal if/when you can verify that #98 fixes this, I'll merge that code. (Sorry if this is a duplicate message)

@hlovdal
Copy link
Contributor Author

hlovdal commented Jan 28, 2019

I can confirm that this solves the issue reported. With all the commands like previously, plus:

git clone https://github.com/ianfixes/arduino_ci/
cd arduino_ci/
git checkout 2019-01-28_skip_ci
cd ..
cp arduino_ci/lib/arduino_ci/* bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.17/lib/arduino_ci/.
rm -rf arduino_ci/

mkdir -p examples/dummy
cp dummy.ino examples/dummy/.
bundle exec arduino_ci_remote.rb 

this results in

Unit testing dummy.cpp with g++... 

TAP version 13
1..1
# Subtest: dummy_test
    ok 1 - assertEqual 4 == 4
    1..1
ok 1 - dummy_test
...Unit testing dummy.cpp with g++                                             ✓
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed at...                   /home/download/Arduino/libraries/dummy
example_path  = /home/download/Arduino/libraries/dummy/examples
examples  = ["dummy"]
proj_file  = /home/download/Arduino/libraries/dummy/examples/dummy/dummy.ino
Requested library example platform 'uno' is defined in 'platforms' YML...      ✓
Using built-in board package...                                      arduino:avr
Installing board package arduino:avr...                                        ✓
Setting compiler warning level...                                              ✓
Switching to board for uno (arduino:avr:uno)...                                ✓
Verifying dummy.ino...                                                         ✓
Failures: 0

@hlovdal
Copy link
Contributor Author

hlovdal commented Jan 30, 2019

Hm, while the change did fix the minimal example reported above which I tested, it breaks when I try to update my main project to 0.1.18. I bisected the change to be this Fix vendor_bundle? commit.

Forcing a print of the last command regardless of failure gives an opportunity to make a diff of the successful case using the parent commit of Fix vendor_bundle? and the failing one:

 g++
 -std=c++0x
 -o
 /share/hlovdal/arduino/sketchbook/proj1/unittest_cust_char_tests.cpp.bin
 -DARDUINO=100
 -D__AVR_ATmega328P__
 -I/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino
 -I/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest
--I/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/avr
--I/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/ci
--I/share/hlovdal/arduino/sketchbook/proj1/src
 -I/share/hlovdal/arduino/sketchbook/libraries/SmartLCD
 -DARDUINO_CI_cpp_files_arduino
 /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Arduino.cpp
 /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Godmode.cpp
 /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/stdlib.cpp
 -DARDUINO_CI_cpp_files_unittest
 /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest/ArduinoUnitTests.cpp
 -DARDUINO_CI_cpp_files
-/share/hlovdal/arduino/sketchbook/proj1/src/proj1_keys.cpp
-/share/hlovdal/arduino/sketchbook/proj1/src/proj1_lcd.cpp
-/share/hlovdal/arduino/sketchbook/proj1/src/cust_char.cpp
 -DUNIT_TEST
 -g
 /share/hlovdal/arduino/sketchbook/libraries/SmartLCD/SmartLCDI2C.cpp
 /share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp

@hlovdal
Copy link
Contributor Author

hlovdal commented Jan 30, 2019

Full compile output (filtered though the uniq command)

{:compilers=>["g++"], :libraries=>["SmartLCD"], :platforms=>["uno"]}
The set of compilers (1) isn't empty...                                        ✓
Checking g++ version... 
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
    OFFLOAD_TARGET_NAMES=nvptx-none
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-redhat-linux
    Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
    Thread model: posix
    gcc version 8.2.1 20181215 (Red Hat 8.2.1-6) (GCC) 
...Checking g++ version                                                        ✓
libasan availability for g++...                                            false
Requested unittest platform 'uno' is defined in 'platforms' YML...             ✓
Unit testing cust_char_tests.cpp with g++... 
bundle_info = {:out=>"/share/hlovdal/arduino/sketchbook/proj1/arduino_ci\n/home/hlovdal/.gem/ruby/gems/bundler-2.0.1/lib/gems/bundler-2.0.1\n/share/hlovdal/arduino/sketchbook/proj1/bundle_install/ruby/2.5.0/gems/os-1.0.0\n/share/hlovdal/arduino/sketchbook/proj1/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2\n", :err=>"", :success=>true}
bundle_paths = [#<Pathname:/share/hlovdal/arduino/sketchbook/proj1>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/bundle_install/ruby/2.5.0/gems>]
gem_path = /share/hlovdal/arduino/sketchbook/proj1
ARDUINO_HEADER_DIR = /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino
UNITTEST_HEADER_DIR = /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest
@base_dir = .
all = [#<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Arduino.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Godmode.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/stdlib.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest/ArduinoUnitTests.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/src/proj1_keys.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/src/proj1_lcd.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/src/cust_char.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/test/keypress_fsm.cpp>]
gem_path = /share/hlovdal/arduino/sketchbook/proj1
v = []
gem_path = /share/hlovdal/arduino/sketchbook/proj1

Last command:  $ g++ -std=c++0x -o /share/hlovdal/arduino/sketchbook/proj1/unittest_cust_char_tests.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -I/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino -I/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest -I/share/hlovdal/arduino/sketchbook/libraries/SmartLCD -DARDUINO_CI_cpp_files_arduino /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Arduino.cpp /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Godmode.cpp /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/stdlib.cpp -DARDUINO_CI_cpp_files_unittest /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest/ArduinoUnitTests.cpp -DARDUINO_CI_cpp_files -DUNIT_TEST -g /share/hlovdal/arduino/sketchbook/libraries/SmartLCD/SmartLCDI2C.cpp /share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp

/usr/bin/ld: /tmp/ccrfQOch.o: in function `test_cust_char_lookup_empty_string::task()':
/share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp:22: undefined reference to `proj1::cust_char_lookup(unsigned char const*)'
/usr/bin/ld: /tmp/ccrfQOch.o: in function `test_cust_char_lookup_ASCII_string::task()':
/share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp:34: undefined reference to `proj1::cust_char_lookup(unsigned char const*)'
/usr/bin/ld: /tmp/ccrfQOch.o: in function `test_cust_char_lookup_UTF8_string::task()':
/share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp:46: undefined reference to `proj1::cust_char_lookup(unsigned char const*)'
/usr/bin/ld: /tmp/ccrfQOch.o: in function `test_cust_char_lookup_unsupported_UTF8_character::task()':
/share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp:62: undefined reference to `proj1::cust_char_lookup(unsigned char const*)'
collect2: error: ld returned 1 exit status
...Unit testing cust_char_tests.cpp with g++                                   ✗
Unit testing keypress_fsm.cpp with g++... 
gem_path = /share/hlovdal/arduino/sketchbook/proj1
ARDUINO_HEADER_DIR = /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino
UNITTEST_HEADER_DIR = /share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest
@base_dir = .
all = [#<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Arduino.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/Godmode.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/arduino/stdlib.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/arduino_ci/cpp/unittest/ArduinoUnitTests.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/src/proj1_keys.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/src/proj1_lcd.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/src/cust_char.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/test/cust_char_tests.cpp>, #<Pathname:/share/hlovdal/arduino/sketchbook/proj1/test/keypress_fsm.cpp>]
gem_path = /share/hlovdal/arduino/sketchbook/proj1
v = []
gem_path = /share/hlovdal/arduino/sketchbook/proj1

...Unit testing keypress_fsm.cpp with g++                                      ✓
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed at...        /share/hlovdal/arduino/sketchbook/libraries/proj1
Requested library example platform 'uno' is defined in 'platforms' YML...      ✓
Using built-in board package...                                      arduino:avr
Installing board package arduino:avr...                                        ✓
Using pre-existing library...                                           SmartLCD
Setting compiler warning level...                                              ✓
Switching to board for uno (arduino:avr:uno)...                                ✓
Verifying empty.ino...                                                         ✓
Failures: 1

@hlovdal
Copy link
Contributor Author

hlovdal commented Jan 30, 2019

With the following debug changes:

commit 30a5b0b9ec845f43dc5b232a8f703b0686e2ea09
Author: Håkon Løvdal <kode@denkule.no>
Date:   Wed Jan 30 22:21:18 2019 +0100

    debug

diff --git a/lib/arduino_ci/cpp_library.rb b/lib/arduino_ci/cpp_library.rb
index dbff893..5ce59a0 100644
--- a/lib/arduino_ci/cpp_library.rb
+++ b/lib/arduino_ci/cpp_library.rb
@@ -58,6 +58,7 @@ module ArduinoCI
       return false unless base.exist?
 
       vendor_bundle_aliases = [base, base.realpath]
+      puts "vendor_bundle_aliases = #{vendor_bundle_aliases}"
 
       # we could do this but some rubies don't return an enumerator for ascend
       # path.ascend.any? { |part| vendor_bundle_aliases.include?(part) }
@@ -117,6 +118,10 @@ module ArduinoCI
     # @return [Array<Pathname>]
     def cpp_files
       puts "@base_dir = #{@base_dir}"
+      all = cpp_files_in(@base_dir)
+      puts "all = #{all}"
+      v = cpp_files_in(@base_dir).reject { |p| vendor_bundle?(p) }
+      puts "v = #{v}"
       cpp_files_in(@base_dir).reject { |p| vendor_bundle?(p) || in_tests_dir?(p) }
     end
 

commit 7b527931d6219185fef51d4e7843b4a8dfee7f62
Author: Håkon Løvdal <kode@denkule.no>
Date:   Sun Jan 27 15:05:35 2019 +0100

    Issue 96 more debug

diff --git a/lib/arduino_ci/cpp_library.rb b/lib/arduino_ci/cpp_library.rb
index 19d8889..dbff893 100644
--- a/lib/arduino_ci/cpp_library.rb
+++ b/lib/arduino_ci/cpp_library.rb
@@ -116,18 +116,21 @@ module ArduinoCI
     # CPP files that are part of the project library under test
     # @return [Array<Pathname>]
     def cpp_files
+      puts "@base_dir = #{@base_dir}"
       cpp_files_in(@base_dir).reject { |p| vendor_bundle?(p) || in_tests_dir?(p) }
     end
 
     # CPP files that are part of the arduino mock library we're providing
     # @return [Array<Pathname>]
     def cpp_files_arduino
+      puts "ARDUINO_HEADER_DIR = #{ARDUINO_HEADER_DIR}"
       cpp_files_in(ARDUINO_HEADER_DIR)
     end
 
     # CPP files that are part of the unit test library we're providing
     # @return [Array<Pathname>]
     def cpp_files_unittest
+      puts "UNITTEST_HEADER_DIR = #{UNITTEST_HEADER_DIR}"
       cpp_files_in(UNITTEST_HEADER_DIR)
     end
 

commit 8f5fdbe07fac6a8f1d28f574134c38a46c93b60e
Author: Håkon Løvdal <kode@denkule.no>
Date:   Sun Jan 27 15:04:39 2019 +0100

    Issue 69 debug
    
    https://github.com/ianfixes/arduino_ci/issues/69#issuecomment-450652373

diff --git a/lib/arduino_ci/cpp_library.rb b/lib/arduino_ci/cpp_library.rb
index f6f5833..19d8889 100644
--- a/lib/arduino_ci/cpp_library.rb
+++ b/lib/arduino_ci/cpp_library.rb
@@ -243,8 +243,11 @@ module ArduinoCI
     def test_args(aux_libraries, ci_gcc_config)
       # TODO: something with libraries?
       ret = include_args(aux_libraries)
+      ret += ["-DARDUINO_CI_cpp_files_arduino"]
       ret += cpp_files_arduino.map(&:to_s)
+      ret += ["-DARDUINO_CI_cpp_files_unittest"]
       ret += cpp_files_unittest.map(&:to_s)
+      ret += ["-DARDUINO_CI_cpp_files"]
       ret += cpp_files.map(&:to_s)
       unless ci_gcc_config.nil?
         cgc = ci_gcc_config

@ianfixes
Copy link
Collaborator

ianfixes commented Jan 31, 2019

Most recent gem is 0.1.19 although I don't think that update touches any of this. Are you saying that it worked in 90b3e68 but fails in ad731a1 (v0.1.18)?

Can you give me more hints on how to reproduce this behavior locally? I did the debug in a slightly different way, which you might prefer -- it embeds the path (and "real path", if symlinked) into the build args:

diff --git a/lib/arduino_ci/cpp_library.rb b/lib/arduino_ci/cpp_library.rb
index f6f5833..19d8889 100644
--- a/lib/arduino_ci/cpp_library.rb
+++ b/lib/arduino_ci/cpp_library.rb
@@ -243,8 +243,11 @@ module ArduinoCI
     def test_args(aux_libraries, ci_gcc_config)
       # TODO: something with libraries?
       ret = include_args(aux_libraries)
+      ret << "-DARDUINO_CI_cpp_files_arduino=#{ARDUINO_HEADER_DIR}:#{ARDUINO_HEADER_DIR.realpath}"
       ret += cpp_files_arduino.map(&:to_s)
+      ret << "-DARDUINO_CI_cpp_files_unittest=#{UNITTEST_HEADER_DIR}:#{UNITTEST_HEADER_DIR.realpath}"
       ret += cpp_files_unittest.map(&:to_s)
+      ret << "-DARDUINO_CI_cpp_files=#{@base_dir}:#{@base_dir.realpath}"
       ret += cpp_files.map(&:to_s)
       unless ci_gcc_config.nil?
         cgc = ci_gcc_config

@hlovdal
Copy link
Contributor Author

hlovdal commented Jan 31, 2019

No, I am saying it stops working in 90b3e68 and from then on. The newer code is much better at excluding itself, before I had to git rm -r SampleProjects and git rm -r spec/fake_library when using arduino_ci as a git submodule, but that is no longer required. Although it apparently excludes my source files as well...

Here is a minimal example to reproduce (this time with paste friendly commands):

mkdir /tmp/compiletest
cd /tmp/compiletest

cat > .arduino-ci.yaml << EOF
compile:
  libraries: ~
  platforms:
    - uno

unittest:
  libraries: ~
  platforms:
    - uno
EOF

cat > Gemfile << EOF
source 'https://rubygems.org'
gem 'arduino_ci', :path => "arduino_ci"
EOF

mkdir src
echo 'bool greater_than_five(int n);' > src/five.hpp

cat > src/five.cpp << EOF
#include "five.hpp"

bool greater_than_five(int n) {
        return n > 5;
}
EOF

mkdir test
cat > test/five_tests.cpp << EOF
#include <ArduinoUnitTests.h>

#include "../src/five.hpp"

unittest(one)
{
        assertFalse(greater_than_five(1));
}

unittest(ten)
{
        assertTrue(greater_than_five(10));
}

unittest_main()
EOF

git clone https://github.com/ianfixes/arduino_ci
cd arduino_ci
git am .../debug.patch # https://github.com/ianfixes/arduino_ci/issues/69#issuecomment-459180028
cd ..
bundle install --path vendor/bundle
bundle exec arduino_ci_remote.rb --skip-compilation

which produces

The set of compilers (1) isn't empty...                                        ✓
Checking g++ version... 
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
    OFFLOAD_TARGET_NAMES=nvptx-none
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-redhat-linux
    Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
    Thread model: posix
    gcc version 8.2.1 20181215 (Red Hat 8.2.1-6) (GCC) 
...Checking g++ version                                                        ✓
libasan availability for g++...                                            false
Requested unittest platform 'uno' is defined in 'platforms' YML...             ✓
Unit testing five_tests.cpp with g++... 

Last command:  $ g++ -std=c++0x -o /tmp/compiletest/unittest_five_tests.cpp.bin -DARDUINO=100
-D__AVR_ATmega328P__ -I/tmp/compiletest/arduino_ci/cpp/arduino -I/tmp/compiletest/arduino_ci/cpp/unittest
-DARDUINO_CI_cpp_files_arduino=/tmp/compiletest/arduino_ci/cpp/arduino:/tmp/compiletest/arduino_ci/cpp/arduino /tmp/compiletest/arduino_ci/cpp/arduino/Arduino.cpp /tmp/compiletest/arduino_ci/cpp/arduino/Godmode.cpp /tmp/compiletest/arduino_ci/cpp/arduino/stdlib.cpp 
-DARDUINO_CI_cpp_files_unittest=/tmp/compiletest/arduino_ci/cpp/unittest:/tmp/compiletest/arduino_ci/cpp/unittest /tmp/compiletest/arduino_ci/cpp/unittest/ArduinoUnitTests.cpp 
-DARDUINO_CI_cpp_files=.:/tmp/compiletest /tmp/compiletest/test/five_tests.cpp

/usr/bin/ld: /tmp/cctXTkoJ.o: in function `test_one::task()':
five_tests.cpp:(.text+0x17): undefined reference to `greater_than_five(int)'
/usr/bin/ld: /tmp/cctXTkoJ.o: in function `test_ten::task()':
five_tests.cpp:(.text+0x85): undefined reference to `greater_than_five(int)'
collect2: error: ld returned 1 exit status
...Unit testing five_tests.cpp with g++                                        ✗
Skipping compilation of examples...                as requested via command line
Failures: 1

@ianfixes
Copy link
Collaborator

ianfixes commented Feb 1, 2019

Oh, I see. You are downloading arduino_ci itself into your library's root directory. That seems like incorrect usage, and (more to the point) I'm not sure how I'd properly detect it in order to avoid it.

Your Gemfile should probably be formed like this:

cat > Gemfile << EOF
source 'https://rubygems.org'
gem 'arduino_ci', :path => "../arduino_ci"  # note navigation to parent directory
EOF

And the installation of arduino_ci should go like this:

mkdir test
cat > test/five_tests.cpp << EOF
  // blah blah blah
EOF

pushd ".."   # note navigation to parent directory
git clone https://github.com/ianfixes/arduino_ci
cd arduino_ci
git am .../debug.patch # https://github.com/ianfixes/arduino_ci/issues/69#issuecomment-459180028
popd   # now back in arduino library directory

bundle install --path vendor/bundle        # can also use "--deployment" instead of this
bundle exec arduino_ci_remote.rb --skip-compilation

Does that make sense?

@hlovdal
Copy link
Contributor Author

hlovdal commented Feb 4, 2019

Thanks. This makes sense. I have now restructured my project to have its content in a subdirectory in parallel with the arduino_ci submodule and it now works fine using latest master version (with some of my additional changes).

@ianfixes
Copy link
Collaborator

ianfixes commented Feb 6, 2019

Note to self: add to #114

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working invalid This doesn't seem right rubygem Ruby code is affected
Projects
None yet
Development

No branches or pull requests

2 participants