views:

248

answers:

5

What we need in our firm is a sort of release management tool for Linux/C++. Our products consist of multiple libraries and config files. Here I will list the basic features we want such system to have:

  • Ability to track dependencies, easily increase major versions of libraries whose dependencies got their major version increased. It should build some sort of dependency graph internally so it can know who is affected by an update.

  • Know how to build the products it handle. Either a specific build file or even better - ability to read and understand makefiles.

  • Work with SVN so it can check for new releases from there and does the build.

  • Generate some installers - in rpm or tar.gz format. For that purpose it should be able to understand the rpm spec file format.

Currently we are working on such tool which is already pretty usable. However I believe that our task is not unique and there should be some tool out there which does the job.

A: 

Maven has a native code plugin. I don't think it'll do everything you want, but it's good at tracking version numbers of dependencies, will build artefacts and it'll work with your VCS.

Andrew Aylett
A: 
  • No idea
  • cmake/scons: I have used cmake but I don't exactly love it, but I have heard really good things about scons. But scons is python-based, so you need to have python installed on the build/dev machines.
  • I use Hudson, which has a plugin to fetch from svn. It performs intelligently in general, and in particular builds only if some file has changed in an svn update. Hudson is easy to get started with. Hudson is java-based and is pretty popular with the Java community. This means it is quite cross-platform, but you need to have JRE installed on the build machine.
  • Probably can call some rpm tool within hudson.
Amit Kumar
+1  A: 

Take a look at this article from DDJ, in which a more robust build system concept (than make) is presented and implemented. Not sure it will fit well to your requirements, but it's the closest I've ever seen. I was looking for the same thing months ago, and then I discovered the article.

http://www.drdobbs.com/architect/218400678

Fabio Ceconello
+1  A: 

Hi,

You should look into using a mix between Hudson, Maven (for build management), Ivy (for dependencies management) and Archiva (for artifacts archival).

Also, if you are looking into cross.compilation, take a look at Make Project Creator (MPC) and Bakefile.

Have fun!!

Ricardo Oliveira
+1  A: 

In the project I'm currently working on we use cmake and other Kitware tools to handle most of this issues for native code (C++). Answering point by point:

  • The cmake scripts handle the dependencies for our different projects. We have a dependency graph but I don't know if is a home-made script or it is a functionality that cmake provides.

  • Well cmake generates the makefiles regarding the platform. I generates projects for eclipse cdt and visual studio if it is asked to do so in case of developing.

  • Cmake has a couple of tools, ctest and cdash that we use to do the daily build and see how the test are doing.

  • In order to create the installer cmake has cpack. From just one script it can generate tar.gz, deb or rpm files in Linux or an automatically generated NSIS script to generate installers in windows.

For Java code we use maven and hudson that have been already mentioned here.

fco.javier.sanz