Catkin also provides CMake find_package infrastructure and pkg-config infrastructure for each package. I would think scons would support getting build flags from pkg-config given its popularity in many dev libraries. That is likely easier than extracting them from CMake and probably the easiest method in general. -- On Thu, Jan 17, 2013 at 12:59 PM, Brian Wightman wrote: > In rosbuild I was able to use rospkg to grab all of the [cflags, lflags] > exports out of a given package's manifest. Is there a plan to add this > functionality for catkin packages? > > My use-case may sound a bit odd: > > I have been using scons rather than cmake to build packages. The rospkg > manifest.xml parsing makes this rather painless (20 lines of python to > collect all the build flags). Now with the "exports" buried in cmake files, > I don't have a convenient way to access them. > > In particular, I have code that forwards ROS messages between systems with > separate roscore instances. I have to compile in a publisher/subscriber > call for each message type so I've found it convenient to auto-generate the > HPP/CPP files from a list of message-containing packages (std_msgs, > sensor_msgs, etc.) using Python and rospkg. > > If anyone's curious, here's the scons build code I've been using: > > import os, rospkg > def load_ros_deps(env): > pkg_name = os.path.basename(Dir('.').**srcnode().abspath) > depends = [] > for d in map(repr, rospkg.RosPack().get_manifest(**pkg_name).depends): > depends.append(d) > # load exports > manifest = rospkg.RosPack().get_manifest(**d) > for f in [j for j in [manifest.get_export('cpp', i) for i in > ['cflags', 'lflags']] if j]: > allf = f[0].split('`') > for conf in allf[1::2]: > env.ParseConfig(conf) > env.MergeFlags(env.ParseFlags(**' '.join(allf[0::2]))) > pkg_path = os.path.dirname(manifest.**filename) > msg_path = os.path.join(pkg_path, 'msg_gen', 'cpp', 'include') > if os.path.exists(msg_path): > env.MergeFlags(env.ParseFlags(**'-I{}'.format(msg_path))) > > env = Environment( > ENV = {'PYTHONPATH': os.environ['PYTHONPATH'], # allow us to call > rosboost-cfg > 'PKG_CONFIG_PATH': os.environ['PKG_CONFIG_PATH']}**, > ... > ) > > Certainly I can achieve the same thing with CMake, but I find scons to be > much nicer to work with. > > Thanks, > Brian Wightman > ______________________________**_________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/**listinfo/ros-users > -- William Woodall Willow Garage - Software Engineer wwoodall@willowgarage.com