Renamed ProgramExitError to ProgramExitException. BaseCompiler.perform() now returns a boolean value. True if the build suceeded, False if there was no need to perform the build. The testproject was adjusted accordingly.