summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2021-03-29 13:31:31 (GMT)
committerKitware Robot <kwrobot@kitware.com>2021-03-29 13:32:09 (GMT)
commit75dd9b6c97a7b553d905c5bb3ef41cd38afc7315 (patch)
tree01fe846862c10d4454a4df3430f5d4b8f6f347af
parentb355358de359fa0c9b225715fbbfb7d34b362668 (diff)
parent769ff05483fa92e63466839854c4f3f0142a4fb3 (diff)
downloadCMake-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.rst37
-rw-r--r--Help/command/file.rst26
-rw-r--r--Source/cmConfigureFileCommand.cxx14
-rw-r--r--Source/cmFileCommand.cxx14
-rw-r--r--Tests/RunCMake/File_Generate/UseSourcePermissionsVerify.cmake2
-rw-r--r--Tests/RunCMake/configure_file/SourcePermissions-result.txt0
-rw-r--r--Tests/RunCMake/configure_file/SourcePermissions-stderr.txt0
-rw-r--r--Tests/RunCMake/configure_file/SourcePermissions.cmake6
-rw-r--r--Tests/RunCMake/configure_file/UseSourcePermissions.cmake6
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
)