ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

How to recursive mark ROS_NOBUILD with rosmake --mark-installed ?

asked 2011-08-04 01:48:16 -0500

hcostelha gravatar image

updated 2011-08-04 21:38:11 -0500


I have been testing ROS in openSUSE (successfully so far) using a system wide installation (for multiple users). Since this is a system installation, it is not writable by regular users. As such, to prevent built packages from being built again, I am using the --mark-installed option (to add a ROS_NOBUILD file upon completion).

The problem is that the ROS_NOBUILD file is added only to the packages I pass as argument to the rosmake command. All dependencies that are built do not get the --mark-installed option by default, which is my desired behavior. Is there a way to make it happen?

Otherwise I have to either rosmake each and every needed package, or add the ROS_NOBUILD by hand to every built package.

Thanks and regards,

Hugo Costelha

edit retag flag offensive close merge delete

4 Answers

Sort by ยป oldest newest most voted

answered 2011-08-04 05:17:57 -0500

kwc gravatar image

You may want to look at the rosprotect tool if you wish to mark a installation tree as no build:

edit flag offensive delete link more


Thanks for your answer but I am testing with the electric distribution, and eros_python_tools only as a tag for diamondback. Nevertheless, I think that making the switch recursive would be a better option.
hcostelha gravatar image hcostelha  ( 2011-08-04 21:56:31 -0500 )edit
The python tools in eros' diamondback tag will still work for electric, I've just held off tagging it while electric is beta as there's a fair few things I need to do in other areas.
Daniel Stonier gravatar image Daniel Stonier  ( 2011-08-04 22:17:19 -0500 )edit
Ok, thanks. Nevertheless, I think that marking (all) successful builds with ROS_NOBUILD when using rosmake would be an interesting/desired feature.
hcostelha gravatar image hcostelha  ( 2011-08-05 01:35:06 -0500 )edit
Yeah, the current design is to allow symmetry with the --unmark-installed option. In the unmark case the specifics do matter.
tfoote gravatar image tfoote  ( 2011-08-09 20:12:20 -0500 )edit

answered 2011-08-06 11:10:49 -0500

tfoote gravatar image

You can use rosmake --mark-installed STACK_NAMES with stack names as the target or if you want all packages in the system installation rosmake -a --mark-installed.

edit flag offensive delete link more


For now I will use the "-a --mark-installed", as it gets the job done for all packages. Thanks for the tip.
hcostelha gravatar image hcostelha  ( 2011-08-09 22:43:56 -0500 )edit

answered 2011-08-05 03:02:22 -0500

felix k gravatar image

I asked a related question here: intelligent rosmake? does rosinstall remove ROS_NOBUILD?

But I decided not to use rosprotect/--mark-installed everywhere because I wouldn't remember where I used it, therefore an update may not be build, and I cannot distinguish the real not to be build NOBUILD packages. So I just use --mark-installed on those packages needing a very lot of time or download. Eventually rosprotect with comms/minimal.

Call rosmake once per pkg, wait the secs, then use make.

edit flag offensive delete link more


The idea is to use this when performing an installation for multiple users, with no writing permissions. If a package depends on another package that does not have ROS_NOBUILD, it will fail even if already compiled. Thus, every built package needs ROS_NOBUILD.
hcostelha gravatar image hcostelha  ( 2011-08-05 04:59:00 -0500 )edit
I seem to have missed the multiple users installation point, sorry for that.
felix k gravatar image felix k  ( 2011-08-10 00:03:06 -0500 )edit

answered 2011-08-06 19:26:49 -0500

Daniel Stonier gravatar image

I believe we're just talking about a convenient tool here. It could be bundled inside rosmake, and it could also be split into a separate tool as well. Some might argue that having all the functionality in one supertool is convenient, but then you'll find others who argue that its better to keep each tool separate, focusing on one job alone. Start worrying about where the functionality is and you'll be riding the wheels and roundabouts instead of getting the job done.

There's a tool there which does exactly what you're looking for. Use eros' rosprotect directly, or copy the script and customise it for yourself (it's quite a simple script). The important thing is getting the job done. This one's not a real show stopper when it comes to using ros and there are probably much higher priorities than doing something which has already been implemented (specially as this will probably be unnecessary with the advent of rosbuild2).

edit flag offensive delete link more


My comment was just in the sense that it seems unnatural that, when using --mark-installed, a successful build will not be marked as such, unless the package name is in the command-line (or it is part of a stack included in the command-line). But it was just a suggestion, and thanks for all the help
hcostelha gravatar image hcostelha  ( 2011-08-07 22:06:03 -0500 )edit

Question Tools


Asked: 2011-08-04 01:48:16 -0500

Seen: 1,173 times

Last updated: Aug 06 '11