Added a todo in ImageProcessor.

The hashing doesn't seem quite right.
Fixed GafferUI.showURL() on OS X.

We were running into problems because we have a custom DYLD_LIBRARY_PATH which prevents some applications from loading properly. Using the "open" command launches in a fresh environment automatically. I suspect we need to do something similar on Linux, but can't test there right now.
Stopped annoying startup errors when 3delight or arnold are missing.

We now only attempt to load GafferArnold if the arnold python module is on the PYTHONPATH, and only attempt to load GafferRenderMan if the DELIGHT environment variable is set. We do still catch and report errors if loading subsequently fails due to a configuration error though. Since the conditions under which we try to load the modules are created by the steps in the getting started guide, hopefully this will work reasonably well, not making false attempts at loading and still providing hints when things aren't quite right.
Moved ArnoldShader::parameterValue() implementation to base class.

The base class implementation makes sense alongside the base class implementation of parameterHash(), and should work for any shader types which support the linking of parameters by specifying a value of "link:shaderHandle" to the renderer. It paves the way for an easier implementation of the upcoming OSLShader.

The RenderManShader implementation of parameterValue() still isn't shared by the base class but hopefully one day it can be - at least we'll be moving in the right direction by sharing code between ArnoldShader and OSLShader.
Added code for building LLVM and OSL dependencies.
Carved out a TypeId range for GafferOSL.

The range is taken from GafferRenderMan.
Added GafferOSL module with OSLShader node and test cases.

This is the first step in supporting Open Shading Language in Gaffer. Upcoming commits will add the ability to actually execute the shaders to create images.
Fixed viewing of connected shaders in the NodeEditor.

Because shaders aren't ComputeNodes, getting the value from an output plug was throwing exceptions, but the UI for the NodeEditor needs to call getValue() to have something to display. Outputs from non-computing nodes now act like unconnected inputs - they simply return the single static value they're storing.
Added OSLRenderer class.

This implements the IECore::Renderer interface, allowing it to receive options, attributes and shaders as for a real renderer, but it doesn't actually produce images. Instead it returns ShadingEngines which can be used to run the OSL shader network specified by the current attribute state. This will be used by upcoming nodes to run shaders using image channels and primitive variables as inputs and outputs.
Added some simple OSL shaders for use with the upcoming OSLImage node.
Added the OSLImage node.

This runs OSL shader networks using image channels as both the input and output.
Added OSLObject node.

This allows OSL shaders to be used as deformers on objects in the scene. Exposed access to OSLImage's internal cache of ShadingEngines so they could be shared by OSLObject - did consider splitting it out into its own file but it seemed a bit fussy - maybe if functionality grows to support transforms and attributes in the ShadingEngine then we can reconsider.
Added menu items for OSL nodes and shaders.

This meant refactoring bits of the RenderMan shader menu into GafferScene.ShaderUI so that the menu building code could be shared as much as possible. Also added a handy link to the 3Delight documentation.