Control spot lamp aim and rotation

I am trying to animate a spot lamp (it has a texture applied to it so rotation matters.) I’d like to have the lamp track an Empty and also copy the Empty’s local Z rotation to it’s own local Z rotation. I thought this would be easy but I can seem to get it. Is there a way to do this?

Basically I want the spot lamp to always point at the Empty (like the TrackTo constraint), but not enforce an up axis, instead allowing the spot to spin freely on local Z axis (not like the TrackTo constraint).

The only place I have seen this functionality before is the IK Solver constraint, but unfortunately as far as I know you cannot apply that to a spot lamp. The difference between the TrackTo and the IK constraints is that TrackTo enforces an up axis and IK Solver does not.

I can post a blend file, if the above explanation is unclear.

Ok, I finally figured out a way to do it… though it seems like there should be a much easier way. I added an armature with one bone, parented the spot lamp to the bone, added an IK Solver so that the bone will point at the target empty, and added a copy rotation (for -Z axis).

And here is the short test animation I made using this setup:

If someone knows an easier way to make this rig, let me know. Thanks!