|  | @@ -12,6 +12,7 @@
 | 
	
		
			
				|  |  |  #include "cmParseJacocoCoverage.h"
 | 
	
		
			
				|  |  |  #include "cmParsePHPCoverage.h"
 | 
	
		
			
				|  |  |  #include "cmSystemTools.h"
 | 
	
		
			
				|  |  | +#include "cmWorkingDirectory.h"
 | 
	
		
			
				|  |  |  #include "cmXMLWriter.h"
 | 
	
		
			
				|  |  |  #include "cmake.h"
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -969,9 +970,8 @@ int cmCTestCoverageHandler::HandleGCovCoverage(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::string testingDir = this->CTest->GetBinaryDir() + "/Testing";
 | 
	
		
			
				|  |  |    std::string tempDir = testingDir + "/CoverageInfo";
 | 
	
		
			
				|  |  | -  std::string currentDirectory = cmSystemTools::GetCurrentWorkingDirectory();
 | 
	
		
			
				|  |  |    cmSystemTools::MakeDirectory(tempDir.c_str());
 | 
	
		
			
				|  |  | -  cmSystemTools::ChangeDirectory(tempDir);
 | 
	
		
			
				|  |  | +  cmWorkingDirectory workdir(tempDir);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    int gcovStyle = 0;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1294,7 +1294,6 @@ int cmCTestCoverageHandler::HandleGCovCoverage(
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  cmSystemTools::ChangeDirectory(currentDirectory);
 | 
	
		
			
				|  |  |    return file_count;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1340,7 +1339,6 @@ int cmCTestCoverageHandler::HandleLCovCoverage(
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    std::string testingDir = this->CTest->GetBinaryDir();
 | 
	
		
			
				|  |  | -  std::string currentDirectory = cmSystemTools::GetCurrentWorkingDirectory();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::set<std::string> missingFiles;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1362,7 +1360,7 @@ int cmCTestCoverageHandler::HandleLCovCoverage(
 | 
	
		
			
				|  |  |      cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "." << std::flush,
 | 
	
		
			
				|  |  |                         this->Quiet);
 | 
	
		
			
				|  |  |      std::string fileDir = cmSystemTools::GetFilenamePath(*it);
 | 
	
		
			
				|  |  | -    cmSystemTools::ChangeDirectory(fileDir);
 | 
	
		
			
				|  |  | +    cmWorkingDirectory workdir(fileDir);
 | 
	
		
			
				|  |  |      std::string command = "\"" + lcovCommand + "\" " + lcovExtraFlags + " ";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
 | 
	
	
		
			
				|  | @@ -1552,7 +1550,6 @@ int cmCTestCoverageHandler::HandleLCovCoverage(
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  cmSystemTools::ChangeDirectory(currentDirectory);
 | 
	
		
			
				|  |  |    return file_count;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1591,13 +1588,8 @@ bool cmCTestCoverageHandler::FindLCovFiles(std::vector<std::string>& files)
 | 
	
		
			
				|  |  |    gl.RecurseOff(); // No need of recurse if -prof_dir${BUILD_DIR} flag is
 | 
	
		
			
				|  |  |                     // used while compiling.
 | 
	
		
			
				|  |  |    gl.RecurseThroughSymlinksOff();
 | 
	
		
			
				|  |  | -  std::string prevBinaryDir;
 | 
	
		
			
				|  |  |    std::string buildDir = this->CTest->GetCTestConfiguration("BuildDirectory");
 | 
	
		
			
				|  |  | -  if (cmSystemTools::ChangeDirectory(buildDir)) {
 | 
	
		
			
				|  |  | -    cmCTestLog(this->CTest, ERROR_MESSAGE, "Error changing directory to "
 | 
	
		
			
				|  |  | -                 << buildDir << std::endl);
 | 
	
		
			
				|  |  | -    return false;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  cmWorkingDirectory workdir(buildDir);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Run profmerge to merge all *.dyn files into dpi files
 | 
	
		
			
				|  |  |    if (!cmSystemTools::RunSingleCommand("profmerge")) {
 | 
	
	
		
			
				|  | @@ -1605,11 +1597,9 @@ bool cmCTestCoverageHandler::FindLCovFiles(std::vector<std::string>& files)
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  prevBinaryDir = cmSystemTools::GetCurrentWorkingDirectory();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    // DPI file should appear in build directory
 | 
	
		
			
				|  |  |    std::string daGlob;
 | 
	
		
			
				|  |  | -  daGlob = prevBinaryDir;
 | 
	
		
			
				|  |  | +  daGlob = buildDir;
 | 
	
		
			
				|  |  |    daGlob += "/*.dpi";
 | 
	
		
			
				|  |  |    cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
 | 
	
		
			
				|  |  |                       "   looking for dpi files in: " << daGlob << std::endl,
 | 
	
	
		
			
				|  | @@ -1646,11 +1636,7 @@ int cmCTestCoverageHandler::HandleTracePyCoverage(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::string testingDir = this->CTest->GetBinaryDir() + "/Testing";
 | 
	
		
			
				|  |  |    std::string tempDir = testingDir + "/CoverageInfo";
 | 
	
		
			
				|  |  | -  std::string currentDirectory = cmSystemTools::GetCurrentWorkingDirectory();
 | 
	
		
			
				|  |  |    cmSystemTools::MakeDirectory(tempDir.c_str());
 | 
	
		
			
				|  |  | -  cmSystemTools::ChangeDirectory(tempDir);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  cmSystemTools::ChangeDirectory(currentDirectory);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::vector<std::string>::iterator fileIt;
 | 
	
		
			
				|  |  |    int file_count = 0;
 | 
	
	
		
			
				|  | @@ -1737,7 +1723,6 @@ int cmCTestCoverageHandler::HandleTracePyCoverage(
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      ++file_count;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  cmSystemTools::ChangeDirectory(currentDirectory);
 | 
	
		
			
				|  |  |    return file_count;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |