MCPcopy Create free account
hub / github.com/Kitware/CMake / generateControlTar

Method generateControlTar

Source/CPack/cmCPackDebGenerator.cxx:328–474  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

326}
327
328bool DebGenerator::generateControlTar(std::string const& md5Filename) const
329{
330 std::string filename_control_tar =
331 this->WorkDir + "/control.tar" + this->CompressionSuffix;
332
333 cmGeneratedFileStream fileStream_control_tar;
334 fileStream_control_tar.Open(filename_control_tar, false, true);
335 if (!fileStream_control_tar) {
336 cmCPackLogger(cmCPackLog::LOG_ERROR,
337 "Error opening the file \""
338 << filename_control_tar << "\" for writing" << std::endl);
339 return false;
340 }
341 cmArchiveWrite control_tar(fileStream_control_tar, this->TarCompressionType,
342 this->DebianArchiveType, this->CompressionLevel);
343 if (!control_tar.Open()) {
344 cmCPackLogger(cmCPackLog::LOG_ERROR,
345 "Error opening the archive \""
346 << filename_control_tar
347 << "\", ERROR = " << control_tar.GetError() << std::endl);
348 return false;
349 }
350
351 // sets permissions and uid/gid for the files
352 control_tar.SetUIDAndGID(0u, 0u);
353 control_tar.SetUNAMEAndGNAME("root", "root");
354
355 /* permissions are set according to
356 https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners
357 and
358 https://lintian.debian.org/tags/control-file-has-bad-permissions.html
359 */
360 mode_t const permission644 = 0644;
361 mode_t const permissionExecute = 0111;
362 mode_t const permission755 = permission644 | permissionExecute;
363
364 // for md5sum and control (that we have generated here), we use 644
365 // (RW-R--R--)
366 // so that deb lintian doesn't warn about it
367 control_tar.SetPermissions(permission644);
368
369 // adds control and md5sums
370 if (!control_tar.Add(md5Filename, this->WorkDir.length(), ".") ||
371 !control_tar.Add(this->WorkDir + "/control", this->WorkDir.length(),
372 ".")) {
373 cmCPackLogger(cmCPackLog::LOG_ERROR,
374 "Error adding file to tar:\n"
375 "#top level directory: "
376 << this->WorkDir
377 << "\n"
378 "#file: \"control\" or \"md5sums\"\n"
379 "#error:"
380 << control_tar.GetError() << std::endl);
381 return false;
382 }
383
384 // adds generated shlibs file
385 if (this->GenShLibs) {

Callers 1

generateMethod · 0.95

Calls 10

SetUIDAndGIDMethod · 0.80
SetUNAMEAndGNAMEMethod · 0.80
lengthMethod · 0.80
ClearPermissionsMethod · 0.80
FileExistsFunction · 0.50
OpenMethod · 0.45
GetErrorMethod · 0.45
SetPermissionsMethod · 0.45
AddMethod · 0.45
countMethod · 0.45

Tested by

no test coverage detected