From 09d5a4d7f0a254c0be179fe237dbf1e09479d8e8 Mon Sep 17 00:00:00 2001 From: Johnny Jazeix Date: Fri, 31 Jan 2025 10:15:18 +0100 Subject: CPack: add uncompressed TAR support Fixes: #26646 --- Help/cpack_gen/archive.rst | 4 ++++ Help/release/dev/cpack-tar.rst | 5 +++++ Source/CPack/cmCPackArchiveGenerator.cxx | 6 ++++++ Source/CPack/cmCPackArchiveGenerator.h | 1 + Source/CPack/cmCPackGeneratorFactory.cxx | 2 ++ Tests/RunCMake/CMakeLists.txt | 1 + Tests/RunCMake/CPack/RunCMakeTest.cmake | 8 ++++---- Tests/RunCMake/CPack/TAR/Helpers.cmake | 3 +++ Tests/RunCMake/CPack/TAR/Prerequirements.cmake | 4 ++++ Tests/RunCMake/CPack/TAR/packaging_COMPONENT_default.cmake | 1 + 10 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 Help/release/dev/cpack-tar.rst create mode 100644 Tests/RunCMake/CPack/TAR/Helpers.cmake create mode 100644 Tests/RunCMake/CPack/TAR/Prerequirements.cmake create mode 100644 Tests/RunCMake/CPack/TAR/packaging_COMPONENT_default.cmake diff --git a/Help/cpack_gen/archive.rst b/Help/cpack_gen/archive.rst index 2c8e7e2..379e6f5 100644 --- a/Help/cpack_gen/archive.rst +++ b/Help/cpack_gen/archive.rst @@ -8,6 +8,10 @@ any of the following formats: .. versionadded:: 3.1 +- TAR (``.tar``) + + .. versionadded:: 4.0 + - TBZ2 (``.tar.bz2``) - TGZ (``.tar.gz``) diff --git a/Help/release/dev/cpack-tar.rst b/Help/release/dev/cpack-tar.rst new file mode 100644 index 0000000..d929239 --- /dev/null +++ b/Help/release/dev/cpack-tar.rst @@ -0,0 +1,5 @@ +cpack-tar +--------- + +* The :cpack_gen:`CPack Archive Generator` learned to generated `.tar` + packages without compression. diff --git a/Source/CPack/cmCPackArchiveGenerator.cxx b/Source/CPack/cmCPackArchiveGenerator.cxx index 1d95e78..75475ce 100644 --- a/Source/CPack/cmCPackArchiveGenerator.cxx +++ b/Source/CPack/cmCPackArchiveGenerator.cxx @@ -169,6 +169,12 @@ cmCPackGenerator* cmCPackArchiveGenerator::CreateTZSTGenerator() ".tar.zst"); } +cmCPackGenerator* cmCPackArchiveGenerator::CreateTarGenerator() +{ + return new cmCPackArchiveGenerator(cmArchiveWrite::CompressNone, "gnutar", + ".tar"); +} + cmCPackGenerator* cmCPackArchiveGenerator::CreateZIPGenerator() { return new cmCPackArchiveGenerator(cmArchiveWrite::CompressNone, "zip", diff --git a/Source/CPack/cmCPackArchiveGenerator.h b/Source/CPack/cmCPackArchiveGenerator.h index 4f89b6c..b0a7160 100644 --- a/Source/CPack/cmCPackArchiveGenerator.h +++ b/Source/CPack/cmCPackArchiveGenerator.h @@ -29,6 +29,7 @@ public: static cmCPackGenerator* CreateTXZGenerator(); static cmCPackGenerator* CreateTZGenerator(); static cmCPackGenerator* CreateTZSTGenerator(); + static cmCPackGenerator* CreateTarGenerator(); static cmCPackGenerator* CreateZIPGenerator(); /** diff --git a/Source/CPack/cmCPackGeneratorFactory.cxx b/Source/CPack/cmCPackGeneratorFactory.cxx index b3410e7..3617a4d 100644 --- a/Source/CPack/cmCPackGeneratorFactory.cxx +++ b/Source/CPack/cmCPackGeneratorFactory.cxx @@ -54,6 +54,8 @@ cmCPackGeneratorFactory::cmCPackGeneratorFactory() cmCPackArchiveGenerator::CreateTZGenerator); this->RegisterGenerator("TZST", "Tar Zstandard compression", cmCPackArchiveGenerator::CreateTZSTGenerator); + this->RegisterGenerator("TAR", "Tar no compression", + cmCPackArchiveGenerator::CreateTarGenerator); this->RegisterGenerator("ZIP", "ZIP file format", cmCPackArchiveGenerator::CreateZIPGenerator); } diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 1bb57ea..b29ac57 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1126,6 +1126,7 @@ set(cpack_tests RPM.COMPONENT_WITH_SPECIAL_CHARS 7Z + TAR TBZ2 TGZ TXZ diff --git a/Tests/RunCMake/CPack/RunCMakeTest.cmake b/Tests/RunCMake/CPack/RunCMakeTest.cmake index 6b39119..57f86ca 100644 --- a/Tests/RunCMake/CPack/RunCMakeTest.cmake +++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake @@ -36,8 +36,8 @@ if(DEBUGEDIT AND NOT BRPALT) endif() run_cpack_test(LONG_FILENAMES "DEB.LONG_FILENAMES" false "MONOLITHIC") run_cpack_test_subtests(MAIN_COMPONENT "invalid;found" "RPM.MAIN_COMPONENT" false "COMPONENT") -run_cpack_test(MINIMAL "RPM.MINIMAL;DEB.MINIMAL;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ;External" false "MONOLITHIC;COMPONENT") -run_cpack_test_package_target(MINIMAL "RPM.MINIMAL;DEB.MINIMAL;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ;External" false "MONOLITHIC;COMPONENT") +run_cpack_test(MINIMAL "RPM.MINIMAL;DEB.MINIMAL;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ;TAR;External" false "MONOLITHIC;COMPONENT") +run_cpack_test_package_target(MINIMAL "RPM.MINIMAL;DEB.MINIMAL;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ;TAR;External" false "MONOLITHIC;COMPONENT") run_cpack_test_package_target(THREADED_ALL "TXZ;DEB" false "MONOLITHIC;COMPONENT") run_cpack_test_package_target(THREADED "TXZ;DEB" false "MONOLITHIC;COMPONENT") run_cpack_test_subtests(PACKAGE_CHECKSUM "invalid;MD5;SHA1;SHA224;SHA256;SHA384;SHA512" "TGZ" false "MONOLITHIC") @@ -78,6 +78,6 @@ else() endif() run_cpack_test_package_target(PRE_POST_SCRIPTS "ZIP" false "MONOLITHIC;COMPONENT") run_cpack_test_subtests(DUPLICATE_FILE "success;conflict_file;conflict_symlink" "TGZ" false "COMPONENT;GROUP") -run_cpack_test(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP") -run_cpack_test_package_target(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ" false "MONOLITHIC;COMPONENT;GROUP") +run_cpack_test(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ;TAR" false "MONOLITHIC;COMPONENT;GROUP") +run_cpack_test_package_target(COMPONENT_WITH_SPECIAL_CHARS "RPM.COMPONENT_WITH_SPECIAL_CHARS;DEB.COMPONENT_WITH_SPECIAL_CHARS;7Z;TBZ2;TGZ;TXZ;TZ;ZIP;STGZ;TAR" false "MONOLITHIC;COMPONENT;GROUP") run_cpack_test_subtests(MULTIARCH "same;foreign;allowed;fail" "DEB.MULTIARCH" false "MONOLITHIC;COMPONENT") diff --git a/Tests/RunCMake/CPack/TAR/Helpers.cmake b/Tests/RunCMake/CPack/TAR/Helpers.cmake new file mode 100644 index 0000000..c963701 --- /dev/null +++ b/Tests/RunCMake/CPack/TAR/Helpers.cmake @@ -0,0 +1,3 @@ +set(cpack_archive_extension_ "tar") + +include("${CMAKE_CURRENT_LIST_DIR}/../ArchiveCommon/common_helpers.cmake") diff --git a/Tests/RunCMake/CPack/TAR/Prerequirements.cmake b/Tests/RunCMake/CPack/TAR/Prerequirements.cmake new file mode 100644 index 0000000..dbaf682 --- /dev/null +++ b/Tests/RunCMake/CPack/TAR/Prerequirements.cmake @@ -0,0 +1,4 @@ +function(get_test_prerequirements found_var config_file) + file(WRITE "${config_file}" "") + set(${found_var} true PARENT_SCOPE) +endfunction() diff --git a/Tests/RunCMake/CPack/TAR/packaging_COMPONENT_default.cmake b/Tests/RunCMake/CPack/TAR/packaging_COMPONENT_default.cmake new file mode 100644 index 0000000..81a5035 --- /dev/null +++ b/Tests/RunCMake/CPack/TAR/packaging_COMPONENT_default.cmake @@ -0,0 +1 @@ +set(CPACK_ARCHIVE_COMPONENT_INSTALL "ON") -- cgit v0.12