Giter Site home page Giter Site logo

arduino-ci / arduino_ci Goto Github PK

View Code? Open in Web Editor NEW
110.0 9.0 34.0 2.31 MB

Unit testing and Continuous Integration (CI) for Arduino libraries, from a Ruby gem

License: Apache License 2.0

Ruby 0.82% Shell 0.01% C++ 0.89% C 98.27%
arduino ci unit-testing-framework

arduino_ci's Introduction

ArduinoCI Ruby gem (arduino_ci)

Gem Version Documentation Gitter GitHub Marketplace

Arduino CI tests Arduino libraries; it was created to enable better collaboration among Arduino library maintainers and contributors, by enabling automated code checks to be performed as part of a pull request process.

  • enables running unit tests against the library without hardware present
  • provides a system of mocks that allow fine-grained control over the hardware inputs, including the system's clock
  • verifies compilation of any example sketches included in the library
  • can test a wide range of arduino boards with different hardware options available
  • can be run both locally and as part of CI (GitHub Actions, TravisCI, Appveyor, etc.)
  • runs on multiple platforms -- any platform that supports the Arduino IDE
  • provides detailed analysis of segfaults in compilers that support such debugging features

Note: for running tests in response to GitHub events, an Arduino CI GitHub Action is available for your convenience. This method of running arduino_ci is driven by Docker, which may also serve your local testing needs (as it does not require a ruby environment to be installed).

Arduino CI works on multiple platforms, which should enable your CI system of choice to leverage it for testing.

Platform CI Status
OSX OSX Build Status
Linux Linux Build Status
Windows Windows Build status

Quick Start

This project has the following dependencies:

  • ruby 2.5 or higher
  • A compiler like g++ (on OSX, clang works; on Cygwin, use the mingw-gcc-c++ package)
  • python (if using a board architecture that requires it, e.g. ESP32, ESP8266; see this issue). Consider pyserial as well.

In that environment, you can install by running gem install arduino_ci. To update to a latest version, use gem update arduino_ci.

You can now test your library by simply running the command arduino_ci.rb from your library directory. This will perform the following:

  • validation of some fields in library.properties, if it exists
  • running unit tests from files found in test/, if they exist
  • testing compilation of example sketches found in examples/, if they exist

Assumptions About Your Repository

Arduino expects all libraries to be in a specific Arduino/libraries directory on your system. If your library is elsewhere, arduino_ci will automatically create a symbolic link in the libraries directory that points to the directory of the project being tested. This simplifieds working with project dependencies, but it can have unintended consequences on Windows systems.

If you use a Windows system it is recommended that you only run arduino_ci from project directories that are already inside the libraries directory because in some cases deleting a folder that contains a symbolic link to another folder can cause the entire linked folder to be removed instead of just the link itself.

Changes to Your Repository

Unit testing binaries created by arduino_ci should not be committed to the codebase. To avoid that, add the following to your .gitignore:

# arduino_ci unit test binaries and artifacts
*.bin
*.bin.dSYM

A Quick Example

For a fairly minimal practical example of a unit-testable library repo that you can copy from, see the Arduino-CI/Blink repository.

Advanced Start

New features and bugfixes reach GitHub before they reach a released ruby gem. Alternately, it may be that (for your own reasons) you do not wish to install arduino_ci globally on your system. A few additional setup steps are required if you wish to do this.

You Need Ruby and Bundler

In addition to version 2.5 or higher, you'll also need to gem install bundler to a minimum of version 2.0 if it's not already there. You may find it easiest to do this by using rbenv.

You will need to add a file called Gemfile (no extension) to your Arduino project.

Non-root installation

If you are simply trying to avoid the need to install arduino_ci system-wide (which may require administrator permissions), your Gemfile would look like this:

source 'https://rubygems.org'

# Replace 1.2 with the desired version of arduino_ci.  See https://guides.rubygems.org/patterns/#pessimistic-version-constraint
gem 'arduino_ci', '~> 1.2'

It would also make sense to add the following to your .gitignore:

/.bundle/
vendor

Note: this used to be the recommended installation method, but with the library's maturation it's better to avoid the use of Gemfile and bundle install by just installing as per the "Quick Start" instructions above.

Using the latest-available code

If you want to use the latest code on GitHub, your Gemfile would look like this:

source 'https://rubygems.org'

# to use the latest github code in a given repo and branch, replace the below values for git: and ref: as needed
gem 'arduino_ci', git: 'https://github.com/ArduinoCI/arduino_ci.git', ref: '<your desired ref, branch, or tag>'

Using a version of arduino_ci source code on your local machine

First, Thanks! See CONTRIBUTING.md. Your Gemfile would look like this:

source 'https://rubygems.org'

gem 'arduino_ci', path: '/path/to/development/dir/for/arduino_ci'

Installing the Dependencies

Fulfilling the arduino_ci library dependency is as easy as running one or both of these commands:

$ bundle config set --local path 'vendor/bundle'   # if you lack administrative privileges to install globally
$ bundle install

This will create a Gemfile.lock in your project directory, which you may optionally check into source control. A broader introduction to ruby dependencies is outside the scope of this document.

Running arduino_ci.rb To Test Your Library

With that installed, just the following shell command each time you want the tests to execute:

$ bundle exec arduino_ci.rb

Reference

For more information on the usage of arduino_ci.rb, see REFERENCE.md. It contains information such as:

  • How to configure build options (platforms to test, Arduino library dependencies to install) with an .arduino-ci.yml file
  • Where to put unit test files
  • How to structure unit test files
  • How to control the global (physical) state of the Arduino board
  • How to modify the Arduino platforms, compilers, test plans, etc

Setting up Pull Request Testing and/or External CI

Note: arduino_ci.rb expects to be run from the root directory of your Arduino project library.

Arduino CI's Own GitHub action

GitHub Marketplace

Your Own Scripted GitHub Action

GitHub Actions allows you to automate your workflows directly in GitHub. No additional steps are needed. Just create a YAML file with the information below in your repo under the .github/workflows/ directory.

on: [push, pull_request]
jobs:
  runTest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.6
      - run: |
          gem install arduino_ci
          arduino_ci.rb

Travis CI

You'll need to go to https://travis-ci.org/profile/ and enable testing for your Arduino project. Once that happens, you should be all set. The script will test all example projects of the library and all unit tests.

Next, you need this in .travis.yml in your repo

sudo: false
language: ruby
script:
  - gem install arduino_ci
  - arduino_ci.rb

Appveyor CI

You'll need to go to https://ci.appveyor.com/projects and add your project.

Next, you'll need this in appveyor.yml in your repo.

build: off
test_script:
  - gem install arduino_ci
  - arduino_ci.rb

Known Problems

Author

This gem was written by Ian Katz ([email protected]) in 2018. It's released under the Apache 2.0 license.

See Also

arduino_ci's People

Contributors

dolfandringa avatar ghaug avatar hf-4145 avatar hlovdal avatar ianfixes avatar jgfoster avatar lsaca05 avatar matthijskooijman avatar midasgossye avatar per1234 avatar prestoncarman avatar prosenb avatar scls19fr avatar tomduff avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arduino_ci's Issues

Add GODMODE-configurable delay to system calls

Summary

Time is expected to pass in the real world. In the mocked unit test environment, it doesn't. This means that otherwise-normal code will infinitely loop in tests

Arduino or Unit Test Code, Illustrating the Problem

  while((millis() < wait_timer) && (!FLAG_ABORT_PENDING)) {
    // waiting for random wait to finish
  }

Proposed solution

Add a configurable delay (0 by default) to all system calls: millis() most importantly, but also things like analogRead and analogWrite.

Set preprocessor defines for various boards in `default.yaml`

This looks like a good resource for what #defines might be available

https://arduino.stackexchange.com/questions/21137/arduino-how-to-get-the-board-type-in-code

#if defined(TEENSYDUINO) 

    //  --------------- Teensy -----------------

    #if defined(__AVR_ATmega32U4__)
        #define BOARD "Teensy 2.0"
    #elif defined(__AVR_AT90USB1286__)       
        #define BOARD "Teensy++ 2.0"
    #elif defined(__MK20DX128__)       
        #define BOARD "Teensy 3.0"
    #elif defined(__MK20DX256__)       
        #define BOARD "Teensy 3.2" // and Teensy 3.1 (obsolete)
    #elif defined(__MKL26Z64__)       
        #define BOARD "Teensy LC"
    #elif defined(__MK64FX512__)
        #define BOARD "Teensy 3.5"
    #elif defined(__MK66FX1M0__)
        #define BOARD "Teensy 3.6"
    #else
       #error "Unknown board"
    #endif

#else // --------------- Arduino ------------------

    #if   defined(ARDUINO_AVR_ADK)       
        #define BOARD "Mega Adk"
    #elif defined(ARDUINO_AVR_BT)    // Bluetooth
        #define BOARD "Bt"
    #elif defined(ARDUINO_AVR_DUEMILANOVE)       
        #define BOARD "Duemilanove"
    #elif defined(ARDUINO_AVR_ESPLORA)       
        #define BOARD "Esplora"
    #elif defined(ARDUINO_AVR_ETHERNET)       
        #define BOARD "Ethernet"
    #elif defined(ARDUINO_AVR_FIO)       
        #define BOARD "Fio"
    #elif defined(ARDUINO_AVR_GEMMA)
        #define BOARD "Gemma"
    #elif defined(ARDUINO_AVR_LEONARDO)       
        #define BOARD "Leonardo"
    #elif defined(ARDUINO_AVR_LILYPAD)
        #define BOARD "Lilypad"
    #elif defined(ARDUINO_AVR_LILYPAD_USB)
        #define BOARD "Lilypad Usb"
    #elif defined(ARDUINO_AVR_MEGA)       
        #define BOARD "Mega"
    #elif defined(ARDUINO_AVR_MEGA2560)       
        #define BOARD "Mega 2560"
    #elif defined(ARDUINO_AVR_MICRO)       
        #define BOARD "Micro"
    #elif defined(ARDUINO_AVR_MINI)       
        #define BOARD "Mini"
    #elif defined(ARDUINO_AVR_NANO)       
        #define BOARD "Nano"
    #elif defined(ARDUINO_AVR_NG)       
        #define BOARD "NG"
    #elif defined(ARDUINO_AVR_PRO)       
        #define BOARD "Pro"
    #elif defined(ARDUINO_AVR_ROBOT_CONTROL)       
        #define BOARD "Robot Ctrl"
    #elif defined(ARDUINO_AVR_ROBOT_MOTOR)       
        #define BOARD "Robot Motor"
    #elif defined(ARDUINO_AVR_UNO)       
        #define BOARD "Uno"
    #elif defined(ARDUINO_AVR_YUN)       
        #define BOARD "Yun"

    // These boards must be installed separately:
    #elif defined(ARDUINO_SAM_DUE)       
        #define BOARD "Due"
    #elif defined(ARDUINO_SAMD_ZERO)       
        #define BOARD "Zero"
    #elif defined(ARDUINO_ARC32_TOOLS)       
        #define BOARD "101"
    #else
       #error "Unknown board"
    #endif

#endif

Improve boilerplate for test code

Seems like I should have a macro to replace

int main(int argc, char *argv[]) {
  return Test::run_and_report(argc, argv);
}

But I don't know what it should be, or if I should do it at all

Pros:

  • Gives Ruby full control over the executables, enables tighter coupling and more seamless transfer of settings there without intervention on the part of the Arduino library maintainer.

Cons:

  • What should the macro be, such that when you look at a test file you know it's a "normal" CPP file?

Add CircleCI example

Feature Request

Add CircleCI to this project and report its status in the README

Example Code

.circleci/config.yml via @TomohiroHayashi

version: 2
jobs:
  build:
    machine: true    
    steps:
      - checkout

      - run:
          name: install and execute
          command: |
            bundle install
            bundle exec arduino_ci_remote.rb

Example README.md section

Platform Travis CI AppVeyor CircleCI
OSX OSX Build Status NEW BADGE HERE
Linux Linux Build Status NEW BADGE HERE
Windows Windows Build status

arduino_ci doesn't seems to work properly with mega2560

Hello,

Here is a minimal (non) working example
https://github.com/scls19fr/mwe_arduino_ci

to show problem I was facing (see https://github.com/ianfixes/arduino_ci/issues/78#issuecomment-453776168 ) with Arduino Mega 2560.

Kind regards

PS : arduino_ci log finish with Failures: 1
It may be interesting to show how many tests / examples are being run...
because showing only Failures: 0 can be quite misleading... it can simply be because tests / examples haven't been found

Exception in thread "main" java.lang.NoSuchMethodError: com.apple.eawt.Application.isAboutMenuItemPresent()

System

  • OS: OSX
  • ruby -v:
    ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-darwin17]
    (tried with 2.4 as well)
  • bundle -v:
    Bundler version 1.16.1
  • bundle info arduino_ci:
  • g++ -v:
    Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
    Apple LLVM version 9.1.0 (clang-902.0.39.1)
    Target: x86_64-apple-darwin17.5.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  • Arduino IDE version: 1.8.5
  • URL of failing Travis CI job: -
  • URL of your Arduino project: https://github.com/mdlima/arduino_cob_led_controller

Issue / Feature Request Summary

Hi Ian, thanks for sharing this work, I've been trying to find a way to unit test my Arduino code and this looks very promising.

I've followed the README steps but am getting an error when executing the gem. I've tried running the example from the TestSomething folder here and got the exact same error. Tried looking for this error but got nowhere.

It would be very helpful if you can point me to where to look for finding a solution. Thanks in advance.

Here's the output:

TestSomething ❯❯❯ bundle exec arduino_ci_remote.rb                                      master ✱ ◼
Installing library under test...                                               ✓
Library installed at /Users/mdlima/Documents/Arduino/libraries/TestSomething... ✓
The set of compilers (1) isn't empty...                                        ✓
Checking g++ version...
    Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
    Apple LLVM version 9.1.0 (clang-902.0.39.1)
    Target: x86_64-apple-darwin17.5.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin
...Checking g++ version                                                        ✓
Installing board package arduino:sam...                                        ✗
This may indicate a problem with ArduinoCI!
Failures: 1
Last message:  $  java -cp /Applications/Arduino.app/Contents/Java/* -DAPP_DIR=/Applications/Arduino.app/Contents/Java -Dfile.encoding=UTF-8 -Dapple.awt.UIElement=true -Xms128M -Xmx512M processing.app.Base --install-boards arduino:sam
========== Stdout:

========== Stderr:
Exception in thread "main" java.lang.NoSuchMethodError: com.apple.eawt.Application.isAboutMenuItemPresent()Z
	at processing.app.Base.main(Base.java:138)

The jar files are in the expected /Applications/Arduino.app/Contents/Java/ folder.

Arduino or Unit Test Code, Illustrating the Problem

Error returned when running bundle exec arduino_ci_remote.rb from the TestSomething example.

Arduino Architecture(s) Affected

Uno, all?

Improve bi-directional communication between test runner and unit test binaries

Feature Request

This issue is to track the (as yet undefined) method of passing rich data back and forth from the ruby test runner to the executable.

Use cases

  • Selecting/rejecting individual unit tests from a test (cpp) file from running
  • Reporting all test pass/fail/info data from the binary to the unit test runner

Re-enable RuboCop `Security/Open` warning

(Issue Summary / Feature Request)

lib/arduino_ci/arduino_downloader_windows.rb:30:7: C: Security/Open: The use of Kernel#open is a serious security risk.
      open(URI.parse(package_url), ssl_verify_mode: 0) do |url|
      ^^^^
lib/arduino_ci/arduino_downloader.rb:134:7: C: Security/Open: The use of Kernel#open is a serious security risk.
      open(package_url, ssl_verify_mode: 0, progress_proc: dot_printer) do |url|
      ^^^^

undefined method `binary_path' for nil:NilClass (NoMethodError)

System

  • OS: Mac OS 10.13.5
  • ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin16]
  • bundle -v: Bundler version 1.16.4
  • bundle info arduino_ci:
  * arduino_ci (0.1.16)
	Summary: Tools for building and unit testing Arduino libraries
	Homepage: http://github.com/ianfixes/arduino_ci
	Path: /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16
  • g++ -v:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
  • Arduino IDE version: 1.8.6

  • java -version:

java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

Issue

I'm just trying to run unit test locally on my Mac...
(I'm not trying CI for now)

$ bundle exec arduino_ci_remote.rb
Arduino package seems to have been downloaded already
Extracting archive with Zip.....................................................................................................
Arduino package seems to have been installed already
Located Arduino binary... /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:311:in `block in <top (required)>': undefined method `binary_path' for nil:NilClass (NoMethodError)
	from /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:40:in `perform_action'
	from /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:75:in `inform'
	from /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:311:in `<top (required)>'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/arduino_ci_remote.rb:23:in `load'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/arduino_ci_remote.rb:23:in `<main>'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `eval'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `<main>'

Any idea?

Add pulseIn and pulseOut support

Issue / Feature Request Summary

This might be tricky, but PinHistory (with the help of #23) should be able to support pulseIn and pulseOut interactions

Mock HID.h

(Issue Summary / Feature Request)

The source file is in Java/hardware/arduino/avr/libraries/

fix arduino zero and esp8266 entries

According to adafruit/arduino script, some changes to platforms:

[zero]="arduino:samd:arduino_zero_native" 
[esp8266]="esp8266:esp8266:huzzah:FlashSize=4M3M,CpuFrequency=80

Add OSX to CI

Summary

This project will be cross-platform as of #39. Update Travis CI to test both OSX and Linux:

os:
  - linux
  - osx

https://docs.travis-ci.com/user/multi-os/

The, update the build status in the README.md to be a table like in manticore-native

Platform | Version                   | Native | Distro    | Version | CI Status |
-------- | -------                   | ------ |  ------   | ------- |:------    |
iOS      | 7.0+                      | Obj C  | CocoaPods | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=objc&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)
MacOS    | 10.9+                     | Obj C  | CocoaPods | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=objc&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)
Android  | API 19+                   | Java   | JCenter   | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=java&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)
Windows  | XP (.Net4)                | C#     | NuGet     | none    | [![Build status](https://ci.appveyor.com/api/projects/status/sm23ige74y836v48?svg=true)](https://ci.appveyor.com/project/ifreecarve/manticore-native/branch/master)
Windows  | 7,8,Vista (v8  )          | C#     | NuGet     | none    | [![Build status](https://ci.appveyor.com/api/projects/status/sm23ige74y836v48?svg=true)](https://ci.appveyor.com/project/ifreecarve/manticore-native/branch/master)
Windows  | 8.1, 8.1 Phone, 10 (jint) | C#     | NuGet     | none    | [CI not running](https://github.com/paypal/manticore-native/issues/14)
_codegen_| 0.12                      | JS     | npm       | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=node&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)

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

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.

Simplify template logic in Compare.h and add float (epsilon) equality

https://stackoverflow.com/questions/41386688/template-specialisation-with-enable-if-and-is-arithmetic-for-a-class

I'm clearly not quite there with the following

#include <limits>

template <typename A = std::enable_if<std::is_integral<AA>::value, AA>::type, typename B = std::enable_if<std::is_integral<BB>::value, BB>::type> struct Compare<A, B>
{
  inline static int between(const A &a,const B &b)
  {
    if (a<b) return -1;
    if (b<a) return  1;
    return 0;
  } // between
  inline static bool equal(const A &a,const B &b)
  {
    if (std::numeric_limits<A>::is_exact && std::numeric_limits<B>::is_exact) return (!(a<b)) && (!(b<a));
    if (std::numeric_limits<A>::epsilon() > std::numeric_limits<B>::epsilon()) {
      return std::numeric_limits<A>::epsilon() > (a > b ? (a - b) : (b - a));
    } else {
      return std::numeric_limits<B>::epsilon() > (a > b ? (a - b) : (b - a));
    }
  } // equal
/* etc

Add Windows & Appveyor CI support

Issue / Feature Request Summary

It's time to add Windows as a supported OS. There should be no technical limitation here beyond the difficulty of developing it without a Windows machine (relying instead on Appveyor directly).

At the moment, that failure due to lack of OS support (originally raised by @tomduff) is expressed in this form:

C:\User\someone\GitHub\arduino_ci\SampleProjects\DoSomething>bundle exec arduino_ci_remote.rb
Installing library under test... Traceback (most recent call last):
        5: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/bin/arduino_ci_remote.rb:23:in `<main>'
        4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/bin/arduino_ci_remote.rb:23:in `load'
        3: from C:/User/someone/Documents/GitHub/arduino_ci/exe/arduino_ci_remote.rb:66:in `<top (required)>'
        2: from C:/User/someone/Documents/GitHub/arduino_ci/exe/arduino_ci_remote.rb:58:in `assure'
        1: from C:/User/someone/Documents/GitHub/arduino_ci/exe/arduino_ci_remote.rb:32:in `perform_action'
C:/User/someone/GitHub/arduino_ci/exe/arduino_ci_remote.rb:66:in `block in <top (required)>': undefined method `install_local_library' for nil:NilClass (NoMethodError)

Running a given test file

Hello,

I'm trying to use arduino_ci for test driven development.

Unfortunately I haven't seen a way to run a given test file.

I was expecting to run (only) one test file using for example:

bundle exec arduino_ci_remote.rb test/test_application.cpp

or just one unit test

bundle exec arduino_ci_remote.rb test/test_application.cpp::unittest_name

(it may be harder)

But being at least a test file could speedup development process.

Kind regards

Suppress CLIXML output on Appveyor

System

Feel free to delete this section if you're submitting a feature request

Issue Summary

There's an obscene amount of CLIXML text in the output.

#< CLIXML
System.Management.Automation.PSCustomObjectSystem.Object1Preparing modules for first use.0-1-1Completed-1 2Preparing modules for first use.0-1-1Completed-1 3Preparing modules for first use.0-1-1Completed-1 0Expand-Archive0-11Processing-1The archive file 'arduino-1.8.5' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion

We should suppress it.

How to set up arduino_ci-enable test environment on Windows 7 Pro SP1

Hello,

I'm trying Arduino_CI on a different system (at work)...

I can't really understand what's going on...
(installing all this is a pain with Windows...)

Here is my install procedure:

  1. Install Ruby (I choosed https://rubyinstaller.org/downloads/ Ruby+Devkit 2.5.3-1 (x64))

  2. Install MinGW http://www.mingw.org/ to have gcc / g++

  3. Add C:\MinGW\bin to PATH to have g++ available from any directory

  4. gem install --http-proxy http://cache.mydomain.fr:3128 bundler

  5. cd my_project

  6. bundle install

(after setting http_proxy variable... which is a bit different depending if you are doing this on Git Bash or on Windows command terminal cmd)

  1. bundle exec arduino_ci_remote.rb

System

Feel free to delete this section if you're submitting a feature request

  • OS: Windows 7 Pro - SP1

  • ruby -v:

    ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]

  • bundle -v:

    Bundler version 2.0.1

  • bundle info arduino_ci:

  * arduino_ci (0.1.16)
        Summary: Tools for building and unit testing Arduino libraries
        Homepage: http://github.com/ianfixes/arduino_ci
        Path: C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16
  • g++ -v:
$ g++ -v
Using built-in specs.
COLLECT_GCC=C:\MinGW\bin\g++.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/8.2.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-8.2.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-8.2.0-1' --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-isl=/mingw --enable-libgomp --disable-libvtv --enable-nls --disable-build-format-warnings
Thread model: win32
gcc version 8.2.0 (MinGW.org GCC-8.2.0-1)
  • Arduino IDE version: 1.8.8
  • java -version: can't find java executable... but Arduino IDE is running (fine)

(Issue Summary / Feature Request)

$ bundle exec arduino_ci_remote.rb
Located Arduino binary...       C:\Program Files (x86)\Arduino/arduino_debug.exe
The set of compilers (1) isn't empty...                                        ✓
Checking g++ version...
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/8.2.0/lto-wrapper.exe
    Target: mingw32
    Configured with: ../src/gcc-8.2.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-8.2.0-1' --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-isl=/mingw --enable-libgomp --disable-libvtv --enable-nls --disable-build-format-warnings
    Thread model: win32
    gcc version 8.2.0 (MinGW.org GCC-8.2.0-1)
...Checking g++ version                                                        ✓
libasan availability for g++...                                            false
Requested unittest platform 'uno' is defined in 'platforms' YML...             ✓
Unit testing test_application.cpp with g++...

Last command:  $ g++ -std=c++0x -o U:/github/scls19fr/gokart_multilaptimer/unittest_test_application.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest -IU:/github/scls19fr/gokart_multilaptimer/multilaptimer C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp U:/github/scls19fr/gokart_multilaptimer/test/test_application.cpp

In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.h:4,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from U:/github/scls19fr/gokart_multilaptimer/test/test_application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
...Unit testing test_application.cpp with g++                                  ✗
Unit testing test_laptimer.cpp with g++...

Last command:  $ g++ -std=c++0x -o U:/github/scls19fr/gokart_multilaptimer/unittest_test_laptimer.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest -IU:/github/scls19fr/gokart_multilaptimer/multilaptimer C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp U:/github/scls19fr/gokart_multilaptimer/test/test_laptimer.cpp

In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.h:4,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from U:/github/scls19fr/gokart_multilaptimer/test/test_laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
...Unit testing test_laptimer.cpp with g++                                     ✗
Unit testing test_utils.cpp with g++...

Last command:  $ g++ -std=c++0x -o U:/github/scls19fr/gokart_multilaptimer/unittest_test_utils.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest -IU:/github/scls19fr/gokart_multilaptimer/multilaptimer C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp U:/github/scls19fr/gokart_multilaptimer/test/test_utils.cpp

In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.h:4,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from U:/github/scls19fr/gokart_multilaptimer/test/test_utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
...Unit testing test_utils.cpp with g++                                        ✗
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed successfully...
    C:\Users\scelles\Documents\Arduino/libraries/Adafruit_Circuit_Playground/Adafruit_CircuitPlayground.cpp
    
(skipped)

    C:\Users\scelles\Documents\Arduino/libraries/USBHost/README.adoc
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/examples/ADKTerminalTest/ADKTerminalTest.ino
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/examples/KeyboardController/KeyboardController.ino
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/examples/MouseController/MouseController.ino
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/keywords.txt
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/library.properties
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/KeyboardController.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/KeyboardController.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/MouseController.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/MouseController.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/Usb.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/Usb.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/address.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/adk.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/adk.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/confdescparser.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hid.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hid2.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hidboot.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hidboot.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hidusagestr.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/parsetools.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/parsetools.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/usb_ch9.h
    C:\Users\scelles\Documents\Arduino/libraries/readme.txt
...Library installed successfully                                              ✗
This may indicate a problem with ArduinoCI, or your configuration
Failures: 4
Last message:  $  C:\Program Files (x86)\Arduino/arduino_debug.exe --install-library USBHost
========== Stdout:
T▒l▒chargement du catalogue de biblioth▒ques...
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 0kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 23kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 46kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 69kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 95kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 119kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 142kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 166kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 191kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 216kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 242kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 271kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 293kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 320kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 342kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 369kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 392kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 418kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 441kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 467kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 490kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 517kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 539kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 566kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 588kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 615kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 637kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 664kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 687kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 713kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 736kb sur 741kb.
Mise a jour de la liste des biblioth▒que install▒e
Library is already installed: USBHost:1.0.5
========== Stderr:
Chargement de la configuration
Initialisation des paquets...
Pr▒paration des cartes
Using proxy HTTP @ cache.my-domain.fr:3128

libraries aren't included properly during unit test compilation

Currently CppLibrary is using the "base name" of the directory, not the full path. Need to figure out a way to get the full library installation dir from ArduinoCmd.

Further, we are not yet following #include statements for any files that might come in from subdirectories.

There are at least 6 cases that need to be tested, each as its own subdir of SampleProjects.

  • Arduino 1.0.x compatible where all necessary files are in the root directory
  • Arduino 1.0.x compatible where some necessary files are included from a subdirectory
  • Arduino 1.0.x compatible where some subdirectories contain files that should not be included
  • Arduino 1.5 compatible where all necessary files are in src/
  • Arduino 1.5 compatible where some necessary files are included from other directories
  • Arduino 1.5 compatible where some subdirectories contain files that should not be included

Provide instruction to test libraries / sketches with dependencies

Hello,

I think it should be useful to provide information in doc to test libraries / sketches with dependencies.

I see 2 kind of dependencies:

My opinion is that arduino-cli should manage this... (instead of everyone doing its own script)
I opened several issues related to this problem.

arduino-cli

A more general issue (that I didn't opened)
Library manager: Library dependencies arduino/Arduino#5795

The concept of environments could help to have several versions of a same library installed without hassle arduino/arduino-cli#108 ... but that's an other story.

What's you opinion about this @ianfixes?
What actions can be done?

Kind regards

Fix the signatures of `pgm_read_*` macros

Related to errors like this one

error: invalid operands to binary expression ('const uint8_t *' (aka 'const unsigned char *') and 'const uint8_t *')
                crc = pgm_read_byte(dscrc2x16_table + (crc & 0x0f)) ^
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^

The code in pgmspace.h that needs to change is this:

// this is the one I updated
#define pgm_read_byte(addr) (*(const uint8_t *)(addr))

// these ones need to be updated in similar fashion
#define pgm_read_word(x) (x)
#define pgm_read_dword(x) (x)
#define pgm_read_float(x) (x)
#define pgm_read_ptr(x) (x)
#define pgm_get_far_address(x) (x)

The problem is that at the moment I haven't dug into what these signatures should be.

unittest compiler list is not inherited

System

Windows

  • OS: Windows 10
  • ruby -v: ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mingw32]
  • bundle -v: Bundler version 1.16.1
  • bundle info arduino_ci: arduino_ci (0.1.9)
  • g++ -v: gcc version 7.3.0 (GCC)
  • Arduino IDE version: 1.8.5

Linux

  • OS: Centos 7
  • ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
  • bundle -v: Bundler version 1.16.1
  • bundle info arduino_ci: arduino_ci (0.1.9)
  • g++ -v: gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
  • Arduino IDE version: 1.8.5

Issue Summary

The unittest compiler list is not inherited from the base file resulting in the following error:
The set of compilers (0) isn't empty... ✗

Currently an explicit entry is required in .arduino-ci.yaml:

    # .arduino-ci.yaml
    unittest:
      platforms:
        - uno
        - due
      compilers:
        - g++

Arduino or Unit Test Code, Illustrating the Problem

arduino-ci/SampleProjects/DoSomething

Fix g++ compile errors under OSX

System

  • OS: OSX
  • g++: builtin

Issue / Feature Request Summary

Generally, shore up the differences between OSX's g++ (really clang), g++-4.8 (on Travis), and g++-7 (tried it because it was available).

Reported in #24:

Fix for g++ compile errors under OSX.

/Library/Ruby/Gems/2.3.0/gems/arduino_ci-0.1.7/cpp/arduino/Print.h:57:86: error: unknown type name 'PGM_P'
/Library/Ruby/Gems/2.3.0/gems/arduino_ci-0.1.7/cpp/arduino/WString.h:39:16: error: no member named 'isnan' in namespace 'std'

Possibly useful

Allow specific tests or groups of tests to be run selectively

Feature Request

When developing tests it would be useful not to have to run all tests in a project, only those under development or of particular interest.

Options could include:

  • test case by name
    bundle exec arduino_ci_remote.rb -test interesting-test
  • all tests in a file
    bundle exec arduino_ci_remote.rb -file interesting-tests-file
  • multiples and combinations of each
    bundle exec arduino_ci_remote.rb -file test-file -test some-test -test some-other-test

I'm not sure how args are handled by ruby/bundle exec so the above command lines are just for illustration of the concept

Mock EEPROM.h

(Issue Summary / Feature Request)

The source file is in Java/hardware/arduino/avr/libraries/

Add or update board definitions -- arduino mega at least

Add new board definitions based on this gist

  #if defined(__AVR_ATmega168__)
    // Arduino Diecimila and older
    LINE("__AVR_ATmega168__", __AVR_ATmega168__);
  #endif
  
  #if defined(__AVR_ATmega328P__)
    // Arduino Duemilanove and Uno
    LINE("__AVR_ATmega328P__", __AVR_ATmega328P__);
  #endif
  
  #if defined(__AVR_ATmega2560__)
    // Arduino Mega 2560
    LINE("__AVR_ATmega2560__", __AVR_ATmega2560__);
  #endif
  
  #if defined(__AVR_ATmega1280__)
    // Arduino Mega
    LINE("__AVR_ATmega1280__", __AVR_ATmega1280__);
  #endif
  
  #if defined(__AVR_ATmega32U4__)
    // Arduino Leonardo
    LINE("__AVR_ATmega32U4__", __AVR_ATmega32U4__);
  #endif
  
  #if defined(__SAM3X8E__)
    // Arduino Due
    LINE("__SAM3X8E__", __SAM3X8E__);
  #endif
  
  // Determine board type
  #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
    Serial.println("Regular Arduino");
  #elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
    Serial.println("Arduino Mega"); 
  #elif defined(__AVR_ATmega32U4__)
    Serial.println("Arduino Leonardo");
  #elif defined(__SAM3X8E__)
    Serial.println("Arduino Due");
  #else
    Serial.println("Unknown");
  #endif

wrong number of arguments

System

Issue Summary

Locally (in OSX) and remotely the following error is displayed when running unit tests:

/home/travis/.rvm/gems/ruby-2.4.1/gems/arduino_ci-0.1.8/lib/arduino_ci/cpp_library.rb:185:in 
`build_for_test_with_configuration': wrong number of arguments (given 3, expected 4) (ArgumentError)

The broken code seems to be in arduino_ci_remote.rb

This line is missing a parameter:

exe = cpp_library.build_for_test_with_configuration(
            unittest_path,
            config.aux_libraries_for_unittest,
            config.gcc_config(p)
          )

It should be

exe = cpp_library.build_for_test_with_configuration(
            unittest_path,
            config.aux_libraries_for_unittest,
            gcc_binary,
            config.gcc_config(p)
          )

Add ability to report compilation warnings, optionally fail on them

verify_sketch stdout:
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething
Sketch uses 22084 bytes (4%) of program storage space. Maximum is 524288 bytes.

This can be found in the ret[:err] of ArduinoCmd.verify_sketch:

Loading configuration...
Initializing packages...
Preparing boards...
Verifying...
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino: In function 'void setup()':
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino:1:21: warning: statement has no effect [-Wunused-value]
 void setup(void) { 0; }
                     ^
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino: In function 'void loop()':
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino:2:20: warning: statement has no effect [-Wunused-value]
 void loop(void) { 0; }

Would need to

  1. get a regex that can find warning lines reliably
  2. need to reject lines that aren't part of the current project
  3. decide how to store them
  4. decide how to configure errors against them

Best practices to exclude folders from compilation?

Issue / Feature Request Summary

A configuration parameter to exclude folders from compilation.

Consider a case where all libraries are in ./lib so they can all be in a single git hub repo (using git submodules). arduino_ci walks the tree to find all the header files - irrespective of any compiler directives to use mock headers/classes instead, the libraries get pulled in too (which may break compilation).

Failed downloads of Arduino are difficult to debug

System

  • OS: Linux

Summary

Downloading Arduino binary with wget should be followed by a trail of dots for a successful download (as a progress indicator). If that doesn't happen, the rest of the failure is very cryptic.

[tom@instance-2 DoSomething]$ bundle exec arduino_ci_remote.rb
Downloading Arduino binary with wget
Extracting archive with tar
tar: arduino-1.8.5-linux64.tar.xz: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
mv: cannot stat ‘arduino-1.8.5’: No such file or directory
Installing library under test... /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:66:in `block in <top (required)>': undefined method `install_local_library' for nil:NilClass (NoMethodError)
        from /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:32:in `perform_action'
        from /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:58:in `assure'
        from /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:66:in `<top (required)>'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/arduino_ci_remote.rb:23:in `load'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/arduino_ci_remote.rb:23:in `<main>'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `eval'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `<main>'

repeat unit tests name and status at end of test log

Hello,

When facing a very long test log it's can be hard to find what test files are failling
(especially when errors are very long such as in this build https://travis-ci.com/scls19fr/mwe_arduino_ci/builds/97293666 )

Providing a more readable end of log will be great (such as this one)

Unit testing test_mwe_00.cpp with g++                                          ✗
Unit testing test_mwe_01.cpp with g++                                          ✗
Unit testing test_mwe_02.cpp with g++                                          ✗
Unit testing test_mwe_03.cpp with g++                                          ✗
Unit testing test_mwe_04.cpp with g++                                          ✗
Unit testing test_mwe_05.cpp with g++                                          ✗
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed at...            /home/travis/Arduino/libraries/mwe_arduino_ci
Requested library example platform 'mega2560' 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 mega2560 (arduino:avr:mega:cpu=atmega2560)...           ✓
Verifying mwe_arduino_ci_01.ino...                                             ✓
Verifying mwe_arduino_ci_00.ino...                                             ✓
Found: 6 test files - 5 examples
Failures: 6

Kind regards

PS... that's odd to see only 2 examples here... when there was 5 in previous build
https://travis-ci.com/scls19fr/mwe_arduino_ci/builds/97292804#L748-L752

It seems that it was a delay in Travis log display

Mock SPI.h

(Issue Summary / Feature Request)

fatal error: 'SPI.h' file not found
#include <SPI.h>
         ^~~~~~~

The source file is Java/hardware/arduino/avr/libraries/SPI/src/SPI.h

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.