Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Merge toolchain-2.9 into master and discard the toolchain-2.x branches? #135

Merged
merged 53 commits into from
Feb 9, 2021

Conversation

meyerj
Copy link
Member

@meyerj meyerj commented Jan 25, 2021

Who in maintainer of the toolchain branches? I would like this change in the toolchain-2.9 branch.

I tried to keep them up-to-date in the past, but without actually using typelib (or orogen) myself in the last years. I also do not know about gccxml vs. castxml.

Ideally the extra branches would not even be needed. The only non-trivial differences are in manifest.xml and package.xml, and related to the old problem that the same filename is used by AutoProj and ROS tools like rosdep. The latter still prefers manifest.xml (dry) over package.xml (wet) if it exists, and handles <depend package="..."> (other ROS packages) and <rosdep name="..."> (packages provided via apt, pip, gems etc.) differently. That is unfortunate, the author of the package should not have to care and it depends on the build environment, which is probably why the difference has been removed for package.xml in REP-0127 (latest specification is REP-0149). Additionally, AutoProj introduced useful new features like <depend_optional>, but which are not understood by ROS tools and cause errors. And last but not least, all the keys need to be either packages with a package.xml file that can be added to the workspace and built from source, or listed in the rosdep database maintained at https://github.com/ros/rosdistro/tree/master/rosdep.

So overall some coordination is required for every dependency update, to not break the build for either AutoProj or for ROS/catkin users.

The version numbers are indeed not so important, especially when building from source. But the version has to be increased for each new release into ROS - provided that this is still desirable. The last release of typelib was into ROS indigo back in 2015 (orocos-gbp/typelib-release). In any case the version numbers and release cycles should IMHO not be coupled to RTT or Orocos Toolchain anymore (and hence no toolchain-2.x branches). So please choose whatever you prefer for typelib and other packages you maintain (orocos-toolchain/orogen#140 (comment)).

Other changes (master...toolchain-2.9) are actually trivial and could be either reverted or applied to the master branch?

  • install package.xml in CMakeLists.txt and update the outdated maintainer email address [email protected] (replaced by [email protected], which currently forwards to [email protected])
  • rosbuild Makefile is obsolete and has been removed (5e8b7c8)
  • fixes needed for linking to pthread and Boost_THREAD_LIBRARIES (40cd3a8)?
  • some arch detection patch required for macOS back then, likely obsolete (6339de6)?

See also orocos-toolchain/orogen#140 and orocos-toolchain/rtt#321. It would be very nice if we can find a solution for those kind of problems in the future, but I do not see how this can be done without deprecating manifest.xml in favor of autoproj.xml and package.xml (orocos-toolchain/rtt#321 (comment)), and keeping both up-to-date? If there is anything I can do (other than merging the two approved pull requests above), please let me know.

Originally posted by @meyerj in #133 (comment)

Ruben Smits and others added 30 commits September 11, 2013 16:13
Signed-off-by: Ruben Smits <[email protected]>
Signed-off-by: Ruben Smits <[email protected]>

Conflicts:
	bindings/ruby/CMakeLists.txt
Signed-off-by: Ruben Smits <[email protected]>

Conflicts:
	bindings/ruby/CMakeLists.txt
Signed-off-by: Ruben Smits <[email protected]>
…hain package to here

This is only effective if typelib is installed to a catkin install space.

Signed-off-by: Johannes Meyer <[email protected]>
Conflicts:
	CMakeLists.txt
	bindings/ruby/CMakeLists.txt
	package.xml
	typelib/pluginmanager.cc
These headers are installed to the RUBY_EXTENSIONS_INSTALL_DIR (e.g. lib/ruby/1.9.1/x86_64-linux)
instead of include/. Are these headers actually required by other packages or are they internal?

Signed-off-by: Johannes Meyer <[email protected]>
This reverts commit 598eed9.
typelib.hh is private. typelib_ruby.hh is public.

Signed-off-by: Johannes Meyer <[email protected]>
Ruben Smits and others added 20 commits June 11, 2015 13:43
ruby/config.h is installed in /usr/include/x86_64-linux-gnu and not in RUBY_INCLUDE_PATH.
RUBY_INCLUDE_DIRS contains both required include directories.

Signed-off-by: Johannes Meyer <[email protected]>
This commit partially reverts 9bc91be.
rosdep cannot handle <package depend="..."> tags for non-catkin dependencies in manifest.xml
and still prefers to read manifest.xml over package.xml if the former exists.
…est-xml

toolchain-2.9: fix rosdep compatibility of manifest.xml and merge recent changes to package.xml
Apparently the environment variable is not used anymore by typelib.
@meyerj meyerj requested a review from doudou January 25, 2021 23:48
@@ -15,7 +15,7 @@ endif (NOT TYPELIB_HARDCODED_PLUGIN_PATH)
set_source_files_properties(endianness.cc PROPERTIES
COMPILE_FLAGS -fno-strict-aliasing)

target_link_libraries(typeLib ${CMAKE_DL_LIBS} ${Boost_FILESYSTEM_LIBRARIES} ${Boost_SYSTEM_LIBRARIES})
target_link_libraries(typeLib pthread ${CMAKE_DL_LIBS} ${Boost_FILESYSTEM_LIBRARIES} ${Boost_SYSTEM_LIBRARIES} ${Boost_THREAD_LIBRARIES})
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Boost mutexes are used in typelib/utilmm/singleton/server.hh and hence the library must be linked to Boost Thread. Could be that boost::recursive_mutex is header-only if compiled in Release mode, but we observed linker errors in the past, at least in Debug mode.

<rosdep name="libxml2" />
<rosdep name="pkg-config" />
<rosdep name="ruby-dev" />
<rosdep name="ruby-backports" />
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is required to find the matching keys in the rosdep database.
Alternatively the file could be renamed to autoproj.xml in the future, if that is an acceptable path forward for you.

cmdline << "-m32"
else
cmdline << "-m64"
end
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Likely can be discarded if gccxml is obsolete anyway.

@@ -62,12 +62,13 @@ ENDIF(NOT LibXML_FOUND)

CONFIGURE_FILE(typelib.pc.in typelib.pc @ONLY)
INSTALL(FILES ${CMAKE_BINARY_DIR}/typelib.pc DESTINATION lib/pkgconfig)
INSTALL(FILES package.xml DESTINATION share/typelib)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Installation of package.xml is required to make ROS tools happy.

@doudou
Copy link
Contributor

doudou commented Jan 27, 2021

I don't see any blocker in there. @g-arjones ?

@doudou
Copy link
Contributor

doudou commented Jan 27, 2021

About the autoproj.xml file, we can definitely implement it ... I have to admit it's low on my priority list right now.

What confuses me is:

If you are not using typelib/orogen, doesn't it mean that the whole integration with the rest of your orocos/rtt/ros toolchain is falling behind ? So why not deprecate it once and for all and call it a day ?

@meyerj
Copy link
Member Author

meyerj commented Jan 27, 2021

If you are not using typelib/orogen, doesn't it mean that the whole integration with the rest of your orocos/rtt/ros toolchain is falling behind ? So why not deprecate it once and for all and call it a day ?

That is what I already suggested earlier, for example in orocos-toolchain/orocos_toolchain#37 (comment). So basically to not consider all packages together as "the Orocos Toolchain" anymore. That is de-facto the case, and only very few changes in one toolchain package actually require synchronized changes in another. So better to maintain, version and release them as independent projects, where orogen and rtt_typelib just depend on (ideally) any recent version of RTT.

If there is agreement to go down that path, then basically the orocos_toolchain repository would reach its end-of-life, or only provide log4cpp, rtt and ocl. If that is purely my choice, then so be it, purely for practical reasons and without that I want to offend anyone. Furthermore all macros related to typegen could be removed from UseOROCOS-RTT.cmake at some point, like we also removed most traces of ROS integration in core RTT, except for build tool support. If needed, orogen can provide CMake macros itself after find_package(orogen). To be decided whether that also implies moving repositories rtt and ocl to the GitHub orocos organization and other repositories to other organizations, for example rock-core.

But obviously there are some users who want to build typelib and orogen with ROS tools like catkin (#133), and that might be worth to support independent of Orocos? Actually releasing packages into ROS, such that the buildfarm builds and provides Debian, Ubuntu and Fedora packages, is optional and would put some restrictions on the versions of Ruby and other dependencies that can be used (following the ROS target platforms). But whether to support source builds with ROS tools or not is then up to you or another maintainer to decide. Basically the only requirements are a CMakeLists.txt and an up-to-date package.xml file, and to somehow solve the manifest.xml incompatibility issues.

@g-arjones
Copy link
Contributor

I don't see any blocker in there. @g-arjones ?

Nope, looks good to me as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants