views:

53

answers:

1

Hello,

We're building a Windows and Mac app using a commercial licence of Qt, which we're building from a git clone.

We've got a build setup using Hudson with potentially several build agents, and what I'd like to do for Windows at least is build once then deploy the build Qt to each agent (rather than have to build Qt on each agent). It seems, however, that the built Qt doesn't like to be moved or copied.

Is there a way around this? One thought we had was whether there was some setting that would build Qt so it resembled their binary distribution, but I can't see a way to do this.

+3  A: 

The way that the released Qt binaries work is this:

Qt is built into a very long build path (e.g. on windows, c:\Qt\______________padding__________for_________packaging________________). Then it's packed up into an installer. The installer contains a custom plugin which scans through the binaries at install time and patches the Qt binaries, replacing the long build path with the user's install path. Note, the size of the binary can't be changed, so the user's install path must always be shorter than the build path...

On Mac and Linux there is also similar munging of rpaths. Either the rpath uses $ORIGIN to make it relative, or it's binary patched like the above path.

The scripts which make the binary packages are quite monolithic and this logic isn't easily extracted...

For your use case, I would recommend that you simply build Qt in a predictable path all the time. Always build Qt at c:\Qt_test and deploy to c:\Qt_test on each agent. The downside is that Hudson might not be so good at automatically cleaning this up, so you'd have to script that yourself.

Intransigent Parsnip
That works - thanks for the explanation and the suggestion.
Stephen Penny