[Cmake-commits] CMake branch, next, updated. v3.6.1-1762-ged02aa4
Domen Vrankar
domen.vrankar at gmail.com
Sun Sep 4 15:15:10 EDT 2016
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via ed02aa4047c6e5aff30d1cb20ab29678399379c4 (commit)
via e42a39918f784d671ce7f51d9269cc754e263e44 (commit)
from b8ececb4b62f0fe2bb3fa7000bf00df327d76de5 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ed02aa4047c6e5aff30d1cb20ab29678399379c4
commit ed02aa4047c6e5aff30d1cb20ab29678399379c4
Merge: b8ececb e42a399
Author: Domen Vrankar <domen.vrankar at gmail.com>
AuthorDate: Sun Sep 4 15:15:09 2016 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Sun Sep 4 15:15:09 2016 -0400
Merge topic 'cpack-deb-long-filenames' into next
e42a3991 cpack-deb-long-filenames
https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e42a39918f784d671ce7f51d9269cc754e263e44
commit e42a39918f784d671ce7f51d9269cc754e263e44
Author: Domen Vrankar <domen.vrankar at gmail.com>
AuthorDate: Sun Sep 4 21:13:24 2016 +0200
Commit: Domen Vrankar <domen.vrankar at gmail.com>
CommitDate: Sun Sep 4 21:13:24 2016 +0200
cpack-deb-long-filenames
Support for long filenames in deb
packages. See Issue #14332
diff --git a/Help/release/dev/cpack-deb-long-filenames.rst b/Help/release/dev/cpack-deb-long-filenames.rst
new file mode 100644
index 0000000..6113eaf
--- /dev/null
+++ b/Help/release/dev/cpack-deb-long-filenames.rst
@@ -0,0 +1,6 @@
+cpack-deb-long-filenames
+------------------------
+
+* The :module:`CPackDeb` module learned to support long file names
+ when archive format is set to GNU tar.
+ See :variable:`CPACK_DEBIAN_ARCHIVE_TYPE`
diff --git a/Modules/CPackDeb.cmake b/Modules/CPackDeb.cmake
index c9678d6..1a7b923 100644
--- a/Modules/CPackDeb.cmake
+++ b/Modules/CPackDeb.cmake
@@ -177,6 +177,24 @@
#
# See https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
#
+# .. variable:: CPACK_DEBIAN_ARCHIVE_TYPE
+#
+# The archive format used for creating the Debian package.
+#
+# * Mandatory : YES
+# * Default : "paxr"
+#
+# Possible values are:
+#
+# - paxr
+# - gnutar
+#
+# .. note::
+#
+# Default pax archive format is the most portable format and generates
+# packages that do not treat sparse files specially.
+# GNU tar format on the other hand supports longer filenames.
+#
# .. variable:: CPACK_DEBIAN_COMPRESSION_TYPE
#
# The compression used for creating the Debian package.
@@ -842,12 +860,24 @@ function(cpack_deb_prepare_package_vars)
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
endif()
+ if(CPACK_DEBIAN_ARCHIVE_TYPE)
+ set(archive_types_ "paxr;gnutar")
+ cmake_policy(PUSH)
+ cmake_policy(SET CMP0057 NEW)
+ if(NOT CPACK_DEBIAN_ARCHIVE_TYPE IN_LIST archive_types_)
+ message(FATAL_ERROR "CPACK_DEBIAN_ARCHIVE_TYPE set to unsupported"
+ "type ${CPACK_DEBIAN_ARCHIVE_TYPE}")
+ endif()
+ cmake_policy(POP)
+ else()
+ set(CPACK_DEBIAN_ARCHIVE_TYPE "paxr")
+ endif()
+
# Compression: (recommended)
if(NOT CPACK_DEBIAN_COMPRESSION_TYPE)
set(CPACK_DEBIAN_COMPRESSION_TYPE "gzip")
endif()
-
# Recommends:
# You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS
@@ -1000,6 +1030,7 @@ function(cpack_deb_prepare_package_vars)
set(GEN_CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_DEBIAN_PACKAGE_MAINTAINER}" PARENT_SCOPE)
set(GEN_CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_DEBIAN_PACKAGE_DESCRIPTION}" PARENT_SCOPE)
set(GEN_CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
+ set(GEN_CPACK_DEBIAN_ARCHIVE_TYPE "${CPACK_DEBIAN_ARCHIVE_TYPE}" PARENT_SCOPE)
set(GEN_CPACK_DEBIAN_COMPRESSION_TYPE "${CPACK_DEBIAN_COMPRESSION_TYPE}" PARENT_SCOPE)
set(GEN_CPACK_DEBIAN_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_PACKAGE_RECOMMENDS}" PARENT_SCOPE)
set(GEN_CPACK_DEBIAN_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS}" PARENT_SCOPE)
diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx
index 1f3ac51..b960c0a 100644
--- a/Source/CPack/cmCPackDebGenerator.cxx
+++ b/Source/CPack/cmCPackDebGenerator.cxx
@@ -419,6 +419,12 @@ int cmCPackDebGenerator::createDeb()
<< debian_compression_type << std::endl);
}
+ const char* debian_archive_type =
+ this->GetOption("GEN_CPACK_DEBIAN_ARCHIVE_TYPE");
+ if (!debian_archive_type) {
+ debian_archive_type = "paxr";
+ }
+
std::string filename_data_tar =
strGenWDIR + "/data.tar" + compression_suffix;
@@ -431,7 +437,9 @@ int cmCPackDebGenerator::createDeb()
<< filename_data_tar << "\" for writing" << std::endl);
return 0;
}
- cmArchiveWrite data_tar(fileStream_data_tar, tar_compression_type, "paxr");
+ cmArchiveWrite data_tar(fileStream_data_tar,
+ tar_compression_type,
+ debian_archive_type);
// uid/gid should be the one of the root user, and this root user has
// always uid/gid equal to 0.
@@ -535,7 +543,8 @@ int cmCPackDebGenerator::createDeb()
return 0;
}
cmArchiveWrite control_tar(fileStream_control_tar,
- cmArchiveWrite::CompressGZip, "paxr");
+ cmArchiveWrite::CompressGZip,
+ debian_archive_type);
// sets permissions and uid/gid for the files
control_tar.SetUIDAndGID(0u, 0u);
diff --git a/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-ExpectedFiles.cmake b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-ExpectedFiles.cmake
new file mode 100644
index 0000000..dd72cf7
--- /dev/null
+++ b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-ExpectedFiles.cmake
@@ -0,0 +1,5 @@
+set(whitespaces_ "[\t\n\r ]*")
+
+set(EXPECTED_FILES_COUNT "1")
+set(EXPECTED_FILE_1 "long_filenames_0.1.1-1_*.deb")
+set(EXPECTED_FILE_CONTENT_1 "^.*/usr/${whitespaces_}.*/usr/foo/${whitespaces_}.*/usr/foo/llllllllll_oooooooooo_nnnnnnnnnn_gggggggggg_ffffffffff_iiiiiiiiii_llllllllll_eeeeeeeeee_nnnnnnnnnn_aaaaaaaaaa_mmmmmmmmmm_eeeeeeeeee.txt$")
diff --git a/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-Prerequirements.cmake b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-Prerequirements.cmake
new file mode 100644
index 0000000..0c1d77e
--- /dev/null
+++ b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-Prerequirements.cmake
@@ -0,0 +1,7 @@
+function(get_test_prerequirements found_var)
+ find_program(FAKEROOT_EXECUTABLE NAMES fakeroot)
+
+ if(FAKEROOT_EXECUTABLE)
+ set(${found_var} true PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-VerifyResult.cmake b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-VerifyResult.cmake
new file mode 100644
index 0000000..169be1c
--- /dev/null
+++ b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-VerifyResult.cmake
@@ -0,0 +1,23 @@
+# create structure required by non root dpkg install
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/root_dir")
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/root_dir/admindir")
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/root_dir/admindir/updates")
+file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/root_dir/admindir/info")
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/root_dir/admindir/available" "")
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/root_dir/admindir/status" "")
+
+
+execute_process(COMMAND ${FAKEROOT_EXECUTABLE} ${DPKG_EXECUTABLE}
+ -i --force-not-root --root=${CMAKE_CURRENT_BINARY_DIR}/root_dir
+ --admindir=${CMAKE_CURRENT_BINARY_DIR}/root_dir/admindir
+ --log=${CMAKE_CURRENT_BINARY_DIR}/root_dir/dpkg.log
+ ${FOUND_FILE_1}
+ RESULT_VARIABLE install_result_
+ ERROR_VARIABLE install_error_
+ OUTPUT_QUIET
+ )
+
+if(install_result_)
+ message(FATAL_ERROR "LONG_FILENAMES package error - result:"
+ " '${install_result_}'; text: '${install_error_}'")
+endif()
diff --git a/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-specifics.cmake b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-specifics.cmake
new file mode 100644
index 0000000..39a6be4
--- /dev/null
+++ b/Tests/RunCMake/CPack/DEB/LONG_FILENAMES-specifics.cmake
@@ -0,0 +1,3 @@
+set(CPACK_PACKAGE_CONTACT "someone")
+set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
+set(CPACK_DEBIAN_ARCHIVE_TYPE "gnutar")
diff --git a/Tests/RunCMake/CPack/DEB/Prerequirements.cmake b/Tests/RunCMake/CPack/DEB/Prerequirements.cmake
index 197b99d..cb9a277 100644
--- a/Tests/RunCMake/CPack/DEB/Prerequirements.cmake
+++ b/Tests/RunCMake/CPack/DEB/Prerequirements.cmake
@@ -5,4 +5,11 @@ function(get_test_prerequirements found_var config_file)
file(WRITE "${config_file}" "set(DPKG_EXECUTABLE \"${DPKG_EXECUTABLE}\")")
set(${found_var} true PARENT_SCOPE)
endif()
+
+ # optional tool for some tests
+ find_program(FAKEROOT_EXECUTABLE fakeroot)
+ if(FAKEROOT_EXECUTABLE)
+ file(APPEND "${config_file}"
+ "\nset(FAKEROOT_EXECUTABLE \"${FAKEROOT_EXECUTABLE}\")")
+ endif()
endfunction()
diff --git a/Tests/RunCMake/CPack/LONG_FILENAMES.cmake b/Tests/RunCMake/CPack/LONG_FILENAMES.cmake
new file mode 100644
index 0000000..3242aef
--- /dev/null
+++ b/Tests/RunCMake/CPack/LONG_FILENAMES.cmake
@@ -0,0 +1,10 @@
+set(LONG_FILENAME
+ "${CMAKE_CURRENT_BINARY_DIR}/llllllllll_oooooooooo_nnnnnnnnnn_gggggggggg_ffffffffff_iiiiiiiiii_llllllllll_eeeeeeeeee_nnnnnnnnnn_aaaaaaaaaa_mmmmmmmmmm_eeeeeeeeee.txt")
+
+file(WRITE
+ "${LONG_FILENAME}"
+ "long_filename_test")
+
+install(FILES ${LONG_FILENAME} DESTINATION foo)
+
+set(CPACK_PACKAGE_NAME "long_filenames")
diff --git a/Tests/RunCMake/CPack/RunCMakeTest.cmake b/Tests/RunCMake/CPack/RunCMakeTest.cmake
index 44586d7..a3029cf 100644
--- a/Tests/RunCMake/CPack/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CPack/RunCMakeTest.cmake
@@ -17,3 +17,4 @@ run_cpack_test(INSTALL_SCRIPTS "RPM" false)
run_cpack_test(DEB_GENERATE_SHLIBS "DEB" true)
run_cpack_test(DEB_GENERATE_SHLIBS_LDCONFIG "DEB" true)
run_cpack_test(DEBUGINFO "RPM" true)
+run_cpack_test(LONG_FILENAMES "DEB" false)
-----------------------------------------------------------------------
Summary of changes:
Help/release/dev/cpack-deb-long-filenames.rst | 6 ++++
Modules/CPackDeb.cmake | 33 +++++++++++++++++++-
Source/CPack/cmCPackDebGenerator.cxx | 13 ++++++--
.../CPack/DEB/LONG_FILENAMES-ExpectedFiles.cmake | 5 +++
....cmake => LONG_FILENAMES-Prerequirements.cmake} | 4 +--
.../CPack/DEB/LONG_FILENAMES-VerifyResult.cmake | 23 ++++++++++++++
...cifics.cmake => LONG_FILENAMES-specifics.cmake} | 2 +-
Tests/RunCMake/CPack/DEB/Prerequirements.cmake | 7 +++++
Tests/RunCMake/CPack/LONG_FILENAMES.cmake | 10 ++++++
Tests/RunCMake/CPack/RunCMakeTest.cmake | 1 +
10 files changed, 98 insertions(+), 6 deletions(-)
create mode 100644 Help/release/dev/cpack-deb-long-filenames.rst
create mode 100644 Tests/RunCMake/CPack/DEB/LONG_FILENAMES-ExpectedFiles.cmake
copy Tests/RunCMake/CPack/DEB/{DEB_GENERATE_SHLIBS-Prerequirements.cmake => LONG_FILENAMES-Prerequirements.cmake} (58%)
create mode 100644 Tests/RunCMake/CPack/DEB/LONG_FILENAMES-VerifyResult.cmake
copy Tests/RunCMake/CPack/DEB/{COMPONENTS_EMPTY_DIR-specifics.cmake => LONG_FILENAMES-specifics.cmake} (66%)
create mode 100644 Tests/RunCMake/CPack/LONG_FILENAMES.cmake
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list