Contents
Overview
This tutorial will walkthrough the process I used to work on porting actionlib. Up until this point, actionlib's dependency stacks are already working and in the winros sdk.
Preparation
Install the SDK (download or build/install).
- Call the installation runtime environment (system needs to know where libs, headers and modules are).
> call C:\opt\ros\fuerte\x86\env.bat
- Prepare source environment for actionlib
> cd C:\work # Create and install minimal source environment in C:\work\ws > winros ws init # Add your own source stacks. > cd C:\work\ws > rosws set actionlib --hg https://kforge.ros.org/common/actionlib > rosws update actionlib
Build
Or attempt to build (probably fail the first time you bring in a new stack). Actionlib is already catkinized (uses the new rosbuild system), so the only problems we should have are due to cross platform coding bugs or not found rosdeps.
I wouldn't worry about trying to do this for a non-catkinized stack - wait for it to be officially catkinized by the developer first otherwise you'll be doing alot of patching.
Do everything in the parallel build directory ./build_ws
# cmake configuration > winros ws configure # compile > winros ws build
Of course here you will find alot of errors in one or both of those steps that need to be fixed. Hack away on your ./ws directory until you are happy.
Hacking
Export Declarations - we have a framework for msvc declspec export declarations in ros c++ code.
Ifdef Policy - guide for doing windows/linux ifdef declarations (keep in mind we are doing mingw as well).
Debugging - tips on how to debug for win_ros with msvc.
Patches
Next, we need a diff(s) of all the changes in the actionlib stack. Multiple diffs are better - one for each fix. This makes it easier for them to get accepted upstream. Chances are if you do one massive diff for 5+ changes, it will not get accepted.
For each patch I made with actionlib, I typically followed the following process.
> hg clone https://kforge.ros.org/common/actionlib > cp -r actionlib actionlib_new # Add my changes to actionlib_new > diff -NBaur -x ".hg" -x ".svn" -x ".git" -x "*.pyc" actionlib actionlib_new > actionlib_boost_dependencies.patch
Submit this patch to win_ros.
- It will get tested and if ok...
Added under win_ros/win_patches/patches.
Here it will get automatically applied for the sdk and whenever setting up the build environment. Some patches are included that are necessary, but maybe not properly correct, or they are just workarounds till a real solution is available. These are floated in win_ros continuously.
If on the other hand, the patch looks good, and it tests ok, we'll send it upstream for merging into the official stacks (all patches should eventually go this way.
You can see the current and previous status of all patches since fuerte in mainpage.dox.