ROSserial trys to build all packages in catkin workspace
I have a simple catkin workspace with two packages:
gababot_core
jake
The gababot_core depends on ROSserial. The jake package does not. If I 'purge' my workspace and remove build/
and devel/
and then try to rebuild catkin_make
it crashes with the following error:
*** Warning, failed to generate libraries for the following packages: ***
jake ('NoneType' object has no attribute '_md5sum')
Traceback (most recent call last):
File "/opt/ros/kinetic/share/rosserial_arduino/make_libraries.py", line 91, in <module>
rosserial_generate(rospack, path+"/ros_lib", ROS_TO_EMBEDDED_TYPES)
File "/opt/ros/kinetic/lib/python2.7/dist-packages/rosserial_client/make_library.py", line 561, in rosserial_generate
raise Exception("Failed to generate libraries for: " + str(failed))
Exception: Failed to generate libraries for: ["jake ('NoneType' object has no attribute '_md5sum')"]
gababot_core/CMakeFiles/gababot_core_ros_lib.dir/build.make:60: recipe for target 'gababot_core/ros_lib' failed
make[2]: *** [gababot_core/ros_lib] Error 1
CMakeFiles/Makefile2:1110: recipe for target 'gababot_core/CMakeFiles/gababot_core_ros_lib.dir/all' failed
make[1]: *** [gababot_core/CMakeFiles/gababot_core_ros_lib.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
So ROSserial tries to generate arduino libraries for jake. It doesn't make sense, because jake doesn't depend on ROSserial (esp. not rosserial_arduino). When I run catkin_make
a second time it actually works fine and builds everything as I expect.
Update:
Actually the error is due to make_libraries.py trying to build all messages from all packages. Including two custom messages in jake
which are NOT needed in gababot_core
. On the first run these messages have not yet been generated (no depenency between the two packets) and catkin fails to generate one target.
On the second pass the messages in jake
have successfully been generated and it builds fine. This seems to be a 'bug' or at least an unwanted side effect in the current rosserial package. I suspect this is also the reason, why rosserial builds for the arduino are so big, as all messages are build into the roslib and stored on the arduino.