The path is often derived from the process itself. If you look at the output of the build process, you'll see it CDing into various directories as it prepares for another phase of the process.
Simply, if you change the absolute paths to a relative path (and your source files should all be in the payload of your SRPM or moved into a source tree before building if this is a new build) then much of these problems will happily go away.
Also, using an echo in the %prep section, look at stupid pet tricks like
%prep echo %(dirname %{Source0}) echo %(basename %{S:1})
When you are absolutely sure you definitely need to do such horror, that kind of mess will come in handy. Keep it as a rarity if you can.
Someone better than me: If you see this post, remind me how to make it ONLY resolve that %() once, and not every time it needs it?