You could also use the keyword 'flat' before 'varying' to turn off interpolation for that variable.
I've got only old hardware right now (one of intel gma videocards), that supports only Open GL <=1.4, but GLSL 1.2 is also supported via ARB-extensions (not the way OpenGL >=2.0 works with).
Why are you using an ancient OpenGL version like 1.4 with the GLSL version introduced in OpenGL 2.1? If you need features introduced in GLSL 1.2, you are probably targeting GPUs which also support the OpenGL 2.1 version (and maybe also OpenGL 3.0).
If I understand right---that caused by assigning uniform to varying variable and only then using it (varying var) in fragment shader.
Also, I'm confused. (Global) uniforms act per-primitive. How did you manage different values of a per-triangle attribute for each vertex?