mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
Merge topic 'commands-file-permissions'
769ff05483
Help: Clarify permission-related command options900184616a
Cleanup: Fix misspelt name of local C++ variable635431a0c9
Tests: Check host platform instead of target for running stat4ceb0ca59e
Tests: Remove redundant files for configure_file() tests Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5945
This commit is contained in:
@@ -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
|
||||
|
@@ -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>]
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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()
|
||||
|
@@ -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
|
||||
)
|
||||
|
@@ -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
|
||||
)
|
||||
|
Reference in New Issue
Block a user