|  | @@ -126,6 +126,7 @@ void CMakeCommandUsage(const char* program)
 | 
											
												
													
														|  |      << "  touch <file>...           - touch a <file>.\n"
 |  |      << "  touch <file>...           - touch a <file>.\n"
 | 
											
												
													
														|  |      << "  touch_nocreate <file>...  - touch a <file> but do not create it.\n"
 |  |      << "  touch_nocreate <file>...  - touch a <file> but do not create it.\n"
 | 
											
												
													
														|  |      << "  create_symlink old new    - create a symbolic link new -> old\n"
 |  |      << "  create_symlink old new    - create a symbolic link new -> old\n"
 | 
											
												
													
														|  | 
 |  | +    << "  create_hardlink old new   - create a hard link new -> old\n"
 | 
											
												
													
														|  |      << "  true                      - do nothing with an exit code of 0\n"
 |  |      << "  true                      - do nothing with an exit code of 0\n"
 | 
											
												
													
														|  |      << "  false                     - do nothing with an exit code of 1\n"
 |  |      << "  false                     - do nothing with an exit code of 1\n"
 | 
											
												
													
														|  |  #if defined(_WIN32) && !defined(__CYGWIN__)
 |  |  #if defined(_WIN32) && !defined(__CYGWIN__)
 | 
											
										
											
												
													
														|  | @@ -1034,6 +1035,34 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args)
 | 
											
												
													
														|  |        return 0;
 |  |        return 0;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    // Command to create a hard link.  Fails on platforms not
 | 
											
												
													
														|  | 
 |  | +    // supporting them.
 | 
											
												
													
														|  | 
 |  | +    if (args[1] == "create_hardlink" && args.size() == 4) {
 | 
											
												
													
														|  | 
 |  | +      const char* SouceFileName = args[2].c_str();
 | 
											
												
													
														|  | 
 |  | +      const char* destinationFileName = args[3].c_str();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +      if (!cmSystemTools::FileExists(SouceFileName)) {
 | 
											
												
													
														|  | 
 |  | +        std::cerr << "failed to create hard link because source path '"
 | 
											
												
													
														|  | 
 |  | +                  << SouceFileName << "' does not exist \n";
 | 
											
												
													
														|  | 
 |  | +        return 1;
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +      if ((cmSystemTools::FileExists(destinationFileName) ||
 | 
											
												
													
														|  | 
 |  | +           cmSystemTools::FileIsSymlink(destinationFileName)) &&
 | 
											
												
													
														|  | 
 |  | +          !cmSystemTools::RemoveFile(destinationFileName)) {
 | 
											
												
													
														|  | 
 |  | +        std::string emsg = cmSystemTools::GetLastSystemError();
 | 
											
												
													
														|  | 
 |  | +        std::cerr << "failed to create hard link '" << destinationFileName
 | 
											
												
													
														|  | 
 |  | +                  << "' because existing path cannot be removed: " << emsg
 | 
											
												
													
														|  | 
 |  | +                  << "\n";
 | 
											
												
													
														|  | 
 |  | +        return 1;
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +      if (!cmSystemTools::CreateLink(args[2], args[3])) {
 | 
											
												
													
														|  | 
 |  | +        return 1;
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +      return 0;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      // Command to do nothing with an exit code of 0.
 |  |      // Command to do nothing with an exit code of 0.
 | 
											
												
													
														|  |      if (args[1] == "true") {
 |  |      if (args[1] == "true") {
 | 
											
												
													
														|  |        return 0;
 |  |        return 0;
 |