diff options
author | Brad King <brad.king@kitware.com> | 2021-03-29 13:31:31 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2021-03-29 13:32:09 (GMT) |
commit | 75dd9b6c97a7b553d905c5bb3ef41cd38afc7315 (patch) | |
tree | 01fe846862c10d4454a4df3430f5d4b8f6f347af | |
parent | b355358de359fa0c9b225715fbbfb7d34b362668 (diff) | |
parent | 769ff05483fa92e63466839854c4f3f0142a4fb3 (diff) | |
download | CMake-75dd9b6c97a7b553d905c5bb3ef41cd38afc7315.zip CMake-75dd9b6c97a7b553d905c5bb3ef41cd38afc7315.tar.gz CMake-75dd9b6c97a7b553d905c5bb3ef41cd38afc7315.tar.bz2 |
Merge topic 'commands-file-permissions'
769ff05483 Help: Clarify permission-related command options
900184616a Cleanup: Fix misspelt name of local C++ variable
635431a0c9 Tests: Check host platform instead of target for running stat
4ceb0ca59e Tests: Remove redundant files for configure_file() tests
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5945
-rw-r--r-- | Help/command/configure_file.rst | 37 | ||||
-rw-r--r-- | Help/command/file.rst | 26 | ||||
-rw-r--r-- | Source/cmConfigureFileCommand.cxx | 14 | ||||
-rw-r--r-- | Source/cmFileCommand.cxx | 14 | ||||
-rw-r--r-- | Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake | 2 | ||||
-rw-r--r-- | Tests/RunCMake/configure_file/SourcePermissions-result.txt | 0 | ||||
-rw-r--r-- | Tests/RunCMake/configure_file/SourcePermissions-stderr.txt | 0 | ||||
-rw-r--r-- | Tests/RunCMake/configure_file/SourcePermissions.cmake | 6 | ||||
-rw-r--r-- | Tests/RunCMake/configure_file/UseSourcePermissions.cmake | 6 |
9 files changed, 61 insertions, 44 deletions
diff --git a/Help/command/configure_file.rst b/Help/command/configure_file.rst index 8f082e8..086668c 100644 --- a/Help/command/configure_file.rst +++ b/Help/command/configure_file.rst @@ -6,9 +6,9 @@ Copy a file to another location and modify its contents. .. code-block:: cmake configure_file(<input> <output> - [FILE_PERMISSIONS <permissions>...] + [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS | + FILE_PERMISSIONS <permissions>...] [COPYONLY] [ESCAPE_QUOTES] [@ONLY] - [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS] [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ]) Copies an ``<input>`` file to an ``<output>`` file and substitutes @@ -97,8 +97,27 @@ The arguments are: If the path names an existing directory the output file is placed in that directory with the same file name as the input file. +``NO_SOURCE_PERMISSIONS`` + .. versionadded:: 3.19 + + Do not transfer the permissions of the input file to the output file. + The copied file permissions default to the standard 644 value + (-rw-r--r--). + +``USE_SOURCE_PERMISSIONS`` + .. versionadded:: 3.20 + + Transfer the permissions of the input file to the output file. + This is already the default behavior if none of the three permissions-related + keywords are given (``NO_SOURCE_PERMISSIONS``, ``USE_SOURCE_PERMISSIONS`` + or ``FILE_PERMISSIONS``). The ``USE_SOURCE_PERMISSIONS`` keyword mostly + serves as a way of making the intended behavior clearer at the call site. + ``FILE_PERMISSIONS <permissions>...`` - Use user provided permissions for the output file. + .. versionadded:: 3.20 + + Ignore the input file's permissions and use the specified ``<permissions>`` + for the output file instead. ``COPYONLY`` Copy the file without replacing any variable references or other @@ -111,18 +130,6 @@ The arguments are: Restrict variable replacement to references of the form ``@VAR@``. This is useful for configuring scripts that use ``${VAR}`` syntax. -``NO_SOURCE_PERMISSIONS`` - .. versionadded:: 3.19 - - Does not transfer the file permissions of the original file to the copy. - The copied file permissions default to the standard 644 value - (-rw-r--r--). - -``USE_SOURCE_PERMISSIONS`` - .. versionadded:: 3.20 - - Transfer the file permissions of the original file to the output file. - ``NEWLINE_STYLE <style>`` Specify the newline style for the output file. Specify ``UNIX`` or ``LF`` for ``\n`` newlines, or specify diff --git a/Help/command/file.rst b/Help/command/file.rst index 445a408..2b445c5 100644 --- a/Help/command/file.rst +++ b/Help/command/file.rst @@ -481,8 +481,8 @@ modified. file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> [CONDITION expression] [TARGET target] - [FILE_PERMISSIONS <permissions>...] - [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS] + [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS | + FILE_PERMISSIONS <permissions>...] [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ]) Generate an output file for each build configuration supported by the current @@ -524,16 +524,26 @@ from the input content to produce the output content. The options are: require a target for evaluation (e.g. ``$<COMPILE_FEATURES:...>``, ``$<TARGET_PROPERTY:prop>``). -``FILE_PERMISSIONS <permissions>...`` - Use user provided permissions for the generated file. - ``NO_SOURCE_PERMISSIONS`` + .. versionadded:: 3.20 + The generated file permissions default to the standard 644 value (-rw-r--r--). ``USE_SOURCE_PERMISSIONS`` - Transfer the file permissions of the original file to the generated file. - This option expects INPUT option. + .. versionadded:: 3.20 + + Transfer the file permissions of the ``INPUT`` file to the generated file. + This is already the default behavior if none of the three permissions-related + keywords are given (``NO_SOURCE_PERMISSIONS``, ``USE_SOURCE_PERMISSIONS`` + or ``FILE_PERMISSIONS``). The ``USE_SOURCE_PERMISSIONS`` keyword mostly + serves as a way of making the intended behavior clearer at the call site. + It is an error to specify this option without ``INPUT``. + +``FILE_PERMISSIONS <permissions>...`` + .. versionadded:: 3.20 + + Use the specified permissions for the generated file. ``NEWLINE_STYLE <style>`` .. versionadded:: 3.20 @@ -738,9 +748,9 @@ Create the given directories and their parents as needed. .. code-block:: cmake file(<COPY|INSTALL> <files>... DESTINATION <dir> + [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS] [FILE_PERMISSIONS <permissions>...] [DIRECTORY_PERMISSIONS <permissions>...] - [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS] [FOLLOW_SYMLINK_CHAIN] [FILES_MATCHING] [[PATTERN <pattern> | REGEX <regex>] diff --git a/Source/cmConfigureFileCommand.cxx b/Source/cmConfigureFileCommand.cxx index edd261d..12b2925 100644 --- a/Source/cmConfigureFileCommand.cxx +++ b/Source/cmConfigureFileCommand.cxx @@ -165,7 +165,7 @@ bool cmConfigureFileCommand(std::vector<std::string> const& args, return false; } - mode_t permisiions = 0; + mode_t permissions = 0; if (filePermissions) { if (filePermissionOptions.empty()) { @@ -175,7 +175,7 @@ bool cmConfigureFileCommand(std::vector<std::string> const& args, std::vector<std::string> invalidOptions; for (auto const& e : filePermissionOptions) { - if (!cmFSPermissions::stringToModeT(e, permisiions)) { + if (!cmFSPermissions::stringToModeT(e, permissions)) { invalidOptions.push_back(e); } } @@ -197,14 +197,14 @@ bool cmConfigureFileCommand(std::vector<std::string> const& args, } if (noSourcePermissions) { - permisiions |= cmFSPermissions::mode_owner_read; - permisiions |= cmFSPermissions::mode_owner_write; - permisiions |= cmFSPermissions::mode_group_read; - permisiions |= cmFSPermissions::mode_world_read; + permissions |= cmFSPermissions::mode_owner_read; + permissions |= cmFSPermissions::mode_owner_write; + permissions |= cmFSPermissions::mode_group_read; + permissions |= cmFSPermissions::mode_world_read; } if (!status.GetMakefile().ConfigureFile(inputFile, outputFile, copyOnly, - atOnly, escapeQuotes, permisiions, + atOnly, escapeQuotes, permissions, newLineStyle)) { status.SetError("Problem configuring file"); return false; diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 1c73d0d..a06ed48 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -2577,18 +2577,18 @@ bool HandleGenerateCommand(std::vector<std::string> const& args, } } - mode_t permisiions = 0; + mode_t permissions = 0; if (arguments.NoSourcePermissions) { - permisiions |= cmFSPermissions::mode_owner_read; - permisiions |= cmFSPermissions::mode_owner_write; - permisiions |= cmFSPermissions::mode_group_read; - permisiions |= cmFSPermissions::mode_world_read; + permissions |= cmFSPermissions::mode_owner_read; + permissions |= cmFSPermissions::mode_owner_write; + permissions |= cmFSPermissions::mode_group_read; + permissions |= cmFSPermissions::mode_world_read; } if (!arguments.FilePermissions.empty()) { std::vector<std::string> invalidOptions; for (auto const& e : arguments.FilePermissions) { - if (!cmFSPermissions::stringToModeT(e, permisiions)) { + if (!cmFSPermissions::stringToModeT(e, permissions)) { invalidOptions.push_back(e); } } @@ -2610,7 +2610,7 @@ bool HandleGenerateCommand(std::vector<std::string> const& args, AddEvaluationFile(input, arguments.Target, arguments.Output, arguments.Condition, inputIsContent, - newLineStyle.GetCharacters(), permisiions, status); + newLineStyle.GetCharacters(), permissions, status); return true; } diff --git a/Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake b/Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake index 8b30f96..31494d5 100644 --- a/Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake +++ b/Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake @@ -2,7 +2,7 @@ if(NOT EXISTS "${generatedFile}") message(SEND_ERROR "Missing generated file:\n ${generatedFile}") endif() -if (UNIX) +if (CMAKE_HOST_UNIX) find_program(STAT_EXECUTABLE NAMES stat) if(NOT STAT_EXECUTABLE) return() diff --git a/Tests/RunCMake/configure_file/SourcePermissions-result.txt b/Tests/RunCMake/configure_file/SourcePermissions-result.txt deleted file mode 100644 index e69de29..0000000 --- a/Tests/RunCMake/configure_file/SourcePermissions-result.txt +++ /dev/null diff --git a/Tests/RunCMake/configure_file/SourcePermissions-stderr.txt b/Tests/RunCMake/configure_file/SourcePermissions-stderr.txt deleted file mode 100644 index e69de29..0000000 --- a/Tests/RunCMake/configure_file/SourcePermissions-stderr.txt +++ /dev/null diff --git a/Tests/RunCMake/configure_file/SourcePermissions.cmake b/Tests/RunCMake/configure_file/SourcePermissions.cmake index 50330fc..c4d3d61 100644 --- a/Tests/RunCMake/configure_file/SourcePermissions.cmake +++ b/Tests/RunCMake/configure_file/SourcePermissions.cmake @@ -6,17 +6,17 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sourcefile.txt WORLD_READ ) -if (UNIX) +if (CMAKE_HOST_UNIX) find_program(STAT_EXECUTABLE NAMES stat) if(NOT STAT_EXECUTABLE) return() endif() - if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + if (CMAKE_HOST_SYSTEM_NAME MATCHES "FreeBSD") execute_process(COMMAND "${STAT_EXECUTABLE}" -f %Lp "${CMAKE_CURRENT_BINARY_DIR}/sourcefile-source-permissions.txt" OUTPUT_VARIABLE output ) - elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") execute_process(COMMAND "${STAT_EXECUTABLE}" -f %A "${CMAKE_CURRENT_BINARY_DIR}/sourcefile-source-permissions.txt" OUTPUT_VARIABLE output ) diff --git a/Tests/RunCMake/configure_file/UseSourcePermissions.cmake b/Tests/RunCMake/configure_file/UseSourcePermissions.cmake index f7aedd1..65e5954 100644 --- a/Tests/RunCMake/configure_file/UseSourcePermissions.cmake +++ b/Tests/RunCMake/configure_file/UseSourcePermissions.cmake @@ -3,20 +3,20 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sourcefile.txt USE_SOURCE_PERMISSIONS ) -if (UNIX) +if (CMAKE_HOST_UNIX) find_program(STAT_EXECUTABLE NAMES stat) if(NOT STAT_EXECUTABLE) return() endif() - if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + if (CMAKE_HOST_SYSTEM_NAME MATCHES "FreeBSD") execute_process(COMMAND "${STAT_EXECUTABLE}" -f %Lp "${CMAKE_CURRENT_SOURCE_DIR}/sourcefile.txt" OUTPUT_VARIABLE output1 ) execute_process(COMMAND "${STAT_EXECUTABLE}" -f %Lp "${CMAKE_CURRENT_BINARY_DIR}/sourcefile-use-source-permissions.txt" OUTPUT_VARIABLE output2 ) - elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin") + elseif (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") execute_process(COMMAND "${STAT_EXECUTABLE}" -f %A "${CMAKE_CURRENT_SOURCE_DIR}/sourcefile.txt" OUTPUT_VARIABLE output1 ) |