Closed
Description
System
- OS: Linux
ruby -v
: ruby 2.3.1p112bundle -v
: Bundler version 2.1.4bundle info arduino_ci
: arduino_ci (0.3.0)g++ -v
: gcc version 5.4.0 20160609- URL of your Arduino project: https://github.com/rosogon/arduino_ci_two_libraries
Issue Summary
If libB depends on libA, both with arduino_ci tests, trying to run the unit tests on libB will raise the error "multiple definition of main". This happens because cpp_files_libraries returns the whole tree of the referenced library (libA in the example), not removing the files in test/.
Con: Skipping those files can break libraries containing files in test/ (which are needed to use the library). Weird, but could happen.
Arduino or Unit Test Code, Illustrating the Problem
The following repo illustratres the example: https://github.com/rosogon/arduino_ci_two_libraries
libB $ bundle exec arduino_ci_remote.rb --skip-compilation
Located Arduino binary... /home/roman/arduino_ci_ide/arduino
[...]
Requested unittest platform 'uno' is defined in 'platforms' YML... ✓
Using pre-existing library... libA
Unit testing test.cpp with g++...
Last command: $ g++ -std=c++0x -o /home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/libB/unittest_test.cpp.bin -DARDUINO=100 -g -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -D__AVR_ATmega328P__ -I/home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/.bundle/ruby/2.3.0/gems/arduino_ci-0.3.0/cpp/arduino -I/home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/.bundle/ruby/2.3.0/gems/arduino_ci-0.3.0/cpp/unittest -I/home/roman/projects/Arduino/libraries/libA /home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/.bundle/ruby/2.3.0/gems/arduino_ci-0.3.0/cpp/arduino/Arduino.cpp /home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/.bundle/ruby/2.3.0/gems/arduino_ci-0.3.0/cpp/arduino/Godmode.cpp /home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/.bundle/ruby/2.3.0/gems/arduino_ci-0.3.0/cpp/arduino/stdlib.cpp /home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/.bundle/ruby/2.3.0/gems/arduino_ci-0.3.0/cpp/unittest/ArduinoUnitTests.cpp /home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/libA/test/test.cpp /home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/libB/test/test.cpp
/tmp/ccFO4mjB.o: In function `std::basic_ostream<char, std::char_traits<char> >& std::flush<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)':
/home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/.bundle/ruby/2.3.0/gems/arduino_ci-0.3.0/cpp/unittest/ArduinoUnitTests.h:149: multiple definition of `main'
/tmp/ccudL6dM.o:/home/roman/romanfiles/projects/Arduino/arduino_ci_two_libraries/libA/test/test.cpp:10: first defined here
collect2: error: ld returned 1 exit status
...Unit testing test.cpp with g++ ✗
Skipping compilation of examples... as requested via command line
Failures: 1