The primary update is that package.xml is now used for each package. stack.xml and manifest.xml can be removed. Also without a concept of a stack anymore we need to make metapackages with the same name, and dependencies on all the former stack contents.
Having done quite a few of these conversions in the last few days this is my observed procedure. Create a subdirectory with the name of the stack. Move stack.xml into the new subdirectory and rename it to package.xml. And it will need to conform to rep 127 http://reps/rep-0127.html Also then you will need to update CMakeLists.txt for the new simpler syntax. When you are ready to release, the rosdistro file will need the full version number x.y.z-d as well as a list of sub packages. in the form {name: path/to/name/in/repo, name2: path/to/name2} where path/to/name/in/repo can be omitted if it is equal to the name. If no list of packages is provided it is assumed to be a unary package at the root. After releasing the bloom pipeline has been simplified to two commands bloom-import-upstream then bloom-release ROSDISTRO
An example of me doing all this is in robot mode. see https://kforge.ros.org/robotmodel/robot_model/rev/ae60aded70f3
Currently I have the following packages flagged as needing this attention/package.xml added.
ivcon ompl ecto_opencv pcl libccd convex_decomposition geometric_shapes moveit_msgs usdfdom ecto_pcl rosdoc_lite shape_tools python_qt_bindings octovis console_bridge object_recognition_transparent_objects flirtlib ecto_image_pipeline python_orocos_kdl moveit_core object_recognition_msgs srdfdom urdf_headers object_recognition_tabletop libg2o swig_wx octomap object_recognition_tod urdfdom ecto_openni sbpl pcl_ros object_recognition_capture eigen_stl_containers flann roslisp random_numbers octomap_msgs fcl ecto_ros object_recognition_linemod orocos_kdl
(If it's catkin independent please talk to William, he's improved how we can inject package.xml into a package. There should be documentation coming out soon for that. )
Some specific notes on converting catkin packges to the new format from doing it recently:
Inside the package.xml you will need to: * change the toplevel tag to package. * remove the brief from the description tag. * remove the review tag * remove the copyright tag * create run_depend and build_depend tags on all the former stack contents (note singular for the dependency tags!) * add <metapackage/> tag to the exports section
Inside each package, you will need to do the following: * convert manifest.xml into package.xml
- add the name and version tags
- convert the author tag to rep 127 format (one tag per person with an optional email attribute)
- add a maintainer tag for rep 127 (must have an email attribute)
- remove the brief from the description
- remove the review tag
- remove the copyright tag
- add build and run depends for dependent packages
- rosdeps become build_depends and run_depend rules too.
* update CMakeLists.txt
- make sure all package CMakeLists.txt start with cmake_minimum_required(VERSION 2.8.3)
- remove catkin_stack call if present
- add find_package(catkin REQUIRED COMPONENTS all dependent catkin packages)
- you should usually call find_package(catkin ..) only once, each call will overwrite the catkin_* variables
- change catkin_project($PACKAGENAME ..) to catkin_package(..)
- add DEPENDS on the same list as above aka "all dependent catkin packages" if these packages are exposed to stuff which depends on this package
- switch to use catkin_INCLUDE_DIRS and catkin_LIBRARIES as variables, the above find will clump all dependent package info into the one variable for convenience
- when installing files use the variable CATKIN_PACKAGE_*_DESTINATION
* install the latest catkin_pkg from debs (python-catkin-pkg) * build your packages in a workspace to verify that they work
- you can use "catkin_build_isolated PARENT_FOLDER_OF_PACKAGES PARENT_FOLDER_FOR_BUILD" to verify that your packages build in individual workspaces (i.e. in "src" you should call "catkin_build_isolated . .." which will build all packages under source in topological order and create N build folders under ../build_isolated)
* release using bloom
- make sure you're using the latest bloom from debs
- git bloom-import-upstream
- git bloom-release groovy (this will create branches and tags for each package in the gbp repo)
- then push using the command it shows you
* update the rosdistro with the version
- add packages list
- set the full version id including the debian increment (note it defaults to 0 debian inc)
- notify us so that we can generate the individual jobs on jenkins for each package