Update upstream source from tag 'upstream/3.22.1'

Update to upstream version '3.22.1'
with Debian dir 378f33a2c6
ci/unstable
Timo Röhling 3 years ago
commit abcc735897

@ -56,12 +56,23 @@ Basic Expressions
``NO``, ``FALSE``, ``N``, ``IGNORE``, ``NOTFOUND``, the empty string,
or ends in the suffix ``-NOTFOUND``. Named boolean constants are
case-insensitive. If the argument is not one of these specific
constants, it is treated as a variable or string and the following
signature is used.
constants, it is treated as a variable or string (see `Variable Expansion`_
further below) and one of the following two forms applies.
``if(<variable|string>)``
``if(<variable>)``
True if given a variable that is defined to a value that is not a false
constant. False otherwise. (Note macro arguments are not variables.)
constant. False otherwise, including if the variable is undefined.
Note that macro arguments are not variables.
Environment variables also cannot be tested this way, e.g.
``if(ENV{some_var})`` will always evaluate to false.
``if(<string>)``
A quoted string always evaluates to false unless:
* The string's value is one of the true constants, or
* Policy :policy:`CMP0054` is not set to ``NEW`` and the string's value
happens to be a variable name that is affected by :policy:`CMP0054`'s
behavior.
Logic Operators
"""""""""""""""

@ -245,12 +245,12 @@ Commit with a message such as::
Release versions do not have the development topic section of
the CMake Release Notes index page.
Update ``.gitlab-ci.yml`` to drop the ``upload:`` jobs from the
Update ``.gitlab-ci.yml`` to drop the upload jobs from the
packaging pipeline by renaming them to start in ``.``:
.. code-block:: shell
sed -i 's/^upload:/.upload:/' .gitlab-ci.yml
sed -i 's/^u:/.u:/' .gitlab-ci.yml
Commit with a message such as::
@ -298,7 +298,7 @@ the version date from ``origin/master``:
git checkout origin/master -- \
Source/CMakeVersion.cmake Help/release/dev/0-sample-topic.rst
sed -i $'/^Releases/ i\\\n.. include:: dev.txt\\\n' Help/release/index.rst
sed -i 's/^\.upload:/upload:/' .gitlab-ci.yml
sed -i 's/^\.u:/u:/' .gitlab-ci.yml
Update ``Source/CMakeVersion.cmake`` to set the version to
``$major.$minor.$date``:

@ -324,6 +324,19 @@ Heavier jobs require a manual trigger to run:
* ``failed``: Restart jobs which have completed, but without success.
* ``completed``: Restart all completed jobs.
In order to keep job names shorter and keep as much information visible on the
GitLab web interface as possible, jobs have a short prefix which indicates
what its main purpose is:
* ``b:`` jobs build CMake for the purposes of running the
test suite.
* ``l:`` jobs perform "linting" on the CMake source tree such as static
analysis.
* ``p:`` jobs perform preparatory tasks for use in other jobs.
* ``t:`` jobs perform testing of CMake.
* ``u:`` jobs upload other job results to permanent locations.
If the merge request topic branch is updated by a push, a new manual trigger
using one of the above methods is needed to start CI again.

@ -13,25 +13,104 @@ source directory into a destination directory. This environment variable
however allows the user to override this behavior, causing CMake to create
symbolic links instead.
.. note::
A symbolic link consists of a reference file path rather than contents of its own,
hence there are two ways to express the relation, either by a relative or an absolute path.
Usage Scenarios
^^^^^^^^^^^^^^^
Installing symbolic links rather than copying files can help in the following
ways:
* Conserving storage space because files do not have to be duplicated on disk.
* Changes to the source of the symbolic link are seen at the install
destination without having to re-run the install step.
* Editing through the link at the install destination will modify the source
of the link. This may be useful when dealing with CMake project hierarchies,
i.e. using :module:`ExternalProject` and consistent source navigation and
refactoring is desired across projects.
Allowed Values
^^^^^^^^^^^^^^
The following values are allowed for ``CMAKE_INSTALL_MODE``:
* empty, unset or ``COPY``: default behavior, duplicate the file at its destination
* ``ABS_SYMLINK``: create an *absolute* symbolic link to the source file at the destination *or fail*
* ``ABS_SYMLINK_OR_COPY``: like ``ABS_SYMLINK`` but silently copy on error
* ``REL_SYMLINK``: create an *relative* symbolic link to the source file at the destination *or fail*
* ``REL_SYMLINK_OR_COPY``: like ``REL_SYMLINK`` but silently copy on error
* ``SYMLINK``: try as if through ``REL_SYMLINK`` and fall back to ``ABS_SYMLINK`` if the referenced
file cannot be expressed using a relative path. Fail on error.
* ``SYMLINK_OR_COPY``: like ``SYMLINK`` but silently copy on error
``COPY``, empty or unset
Duplicate the file at its destination. This is the default behavior.
``ABS_SYMLINK``
Create an *absolute* symbolic link to the source file at the destination.
Halt with an error if the link cannot be created.
``ABS_SYMLINK_OR_COPY``
Like ``ABS_SYMLINK`` but fall back to silently copying if the symlink
couldn't be created.
``REL_SYMLINK``
Create a *relative* symbolic link to the source file at the destination.
Halt with an error if the link cannot be created.
``REL_SYMLINK_OR_COPY``
Like ``REL_SYMLINK`` but fall back to silently copying if the symlink
couldn't be created.
``SYMLINK``
Try as if through ``REL_SYMLINK`` and fall back to ``ABS_SYMLINK`` if the
referenced file cannot be expressed using a relative path.
Halt with an error if the link cannot be created.
``SYMLINK_OR_COPY``
Like ``SYMLINK`` but fall back to silently copying if the symlink couldn't
be created.
.. note::
A symbolic link consists of a reference file path rather than contents of its
own, hence there are two ways to express the relation, either by a *relative*
or an *absolute* path.
When To Set The Environment Variable
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
For the environment variable to take effect, it must be set during the correct
build phase(s).
* If the project calls :command:`file(INSTALL)` directly, the environment
variable must be set during the configuration phase.
* In order to apply to :command:`install()`, the environment variable must be
set during installation. This could be during a build if using the
``install`` or ``package`` build targets, or separate from the build when
invoking an install or running :manual:`cpack <cpack(1)>` from the command
line.
* When using :module:`ExternalProject`, it might be required during the build
phase, since the external project's own configure, build and install steps
will execute during the main project's build phase.
Given the above, it is recommended to set the environment variable consistently
across all phases (configure, build and install).
Caveats
^^^^^^^
Use this environment variable with caution. The following highlights some
points to be considered:
* ``CMAKE_INSTALL_MODE`` only affects files, not directories.
* Symbolic links are not available on all platforms.
* The way this environment variable interacts with the install step of
:module:`ExternalProject` is more complex. For further details, see that
module's documentation.
Installing symbolic links rather than copying files can help conserve storage space because files do
not have to be duplicated on disk. However, modifications applied to the source immediately affects
the symbolic link and vice versa. *Use with caution*.
* A symbolic link ties the destination to the source in a persistent way.
Writing to either of the two affects both file system objects.
This is in contrast to normal install behavior which only copies files as
they were at the time the install was performed, with no enduring
relationship between the source and destination of the install.
.. note:: ``CMAKE_INSTALL_MODE`` only affects files, *not* directories.
* Combining ``CMAKE_INSTALL_MODE`` with :prop_tgt:`IOS_INSTALL_COMBINED` is
not supported.
.. note:: Symbolic links are not available on all platforms.
* Changing ``CMAKE_INSTALL_MODE`` from what it was on a previous run can lead
to unexpected results. Moving from a non-symlinking mode to a symlinking
mode will discard any previous file at the destination, but the reverse is
not true. Once a symlink exists at the destination, even if you switch to a
non-symlink mode, the symlink will continue to exist at the destination and
will not be replaced by an actual file.

@ -53,6 +53,8 @@ between the two policies.
This policy was introduced in CMake version 3.13. CMake version
|release| warns when the policy is not set and uses ``OLD`` behavior.
Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
explicitly.
explicitly within a project. Use the :variable:`CMAKE_POLICY_DEFAULT_CMP0077
<CMAKE_POLICY_DEFAULT_CMP\<NNNN\>>` variable to set the policy for
a third-party project in a subdirectory without modifying it.
.. include:: DEPRECATED.txt

@ -22,7 +22,10 @@ will *not* set the cache variable if a non-cache variable of the same name
already exists and :policy:`CMP0077` is set to ``NEW``.
Policy ``CMP0126`` was introduced in CMake version 3.21. Use the
:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly
within a project. Use the :variable:`CMAKE_POLICY_DEFAULT_CMP0126
<CMAKE_POLICY_DEFAULT_CMP\<NNNN\>>` variable to set the policy for
a third-party project in a subdirectory without modifying it.
Unlike many policies, CMake version |release| does *not* warn when the policy
is not set and simply uses ``OLD`` behavior. See documentation of the
:variable:`CMAKE_POLICY_WARNING_CMP0126 <CMAKE_POLICY_WARNING_CMP<NNNN>>`

@ -21,9 +21,11 @@ order specified in the property's value. The ``OP`` may be one of:
- ``string_append``: Appends ``VALUE`` to the current value of ``MYVAR``.
- ``string_prepend``: Prepends ``VALUE`` to the current value of ``MYVAR``.
- ``path_list_append``: Appends ``VALUE`` to the current value of ``MYVAR``
using the platform-specific list separator.
using the host platform's path list separator (``;`` on Windows and ``:``
elsewhere).
- ``path_list_prepend``: Prepends ``VALUE`` to the current value of
``MYVAR`` using the platform-specific list separator.
``MYVAR`` using the host platform's path list separator (``;`` on Windows
and ``:`` elsewhere).
- ``cmake_list_append``: Appends ``VALUE`` to the current value of ``MYVAR``
using ``;`` as the separator.
- ``cmake_list_prepend``: Prepends ``VALUE`` to the current value of

@ -9,9 +9,16 @@ the given version unset. Set ``CMAKE_POLICY_DEFAULT_CMP<NNNN>`` to ``OLD``
or ``NEW`` to specify the default for policy ``CMP<NNNN>``, where ``<NNNN>``
is the policy number.
This variable should not be set by a project in CMake code; use
:command:`cmake_policy(SET)` instead. Users running CMake may set this
variable in the cache (e.g. ``-DCMAKE_POLICY_DEFAULT_CMP<NNNN>=<OLD|NEW>``)
to set a policy not otherwise set by the project. Set to ``OLD`` to quiet a
policy warning while using old behavior or to ``NEW`` to try building the
project with new behavior.
This variable should not be set by a project in CMake code as a way to
set its own policies; use :command:`cmake_policy(SET)` instead. This
variable is meant to externally set policies for which a project has
not itself been updated:
* Users running CMake may set this variable in the cache
(e.g. ``-DCMAKE_POLICY_DEFAULT_CMP<NNNN>=<OLD|NEW>``). Set it to ``OLD``
to quiet a policy warning while using old behavior or to ``NEW`` to
try building the project with new behavior.
* Projects may set this variable before a call to :command:`add_subdirectory`
that adds a third-party project in order to set its policies without
modifying third-party code.

@ -60,7 +60,7 @@ const char* info_language_standard_default =
"INFO" ":" "standard_default[" C_VERSION "]";
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
// !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode.
/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
#if (defined(__clang__) || defined(__GNUC__) || \
defined(__TI_COMPILER_VERSION__)) && \
!defined(__STRICT_ANSI__) && !defined(_MSC_VER)

@ -33,7 +33,7 @@ const char* info_language_standard_default = "INFO" ":" "standard_default["
"]";
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
// !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode.
/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
#if (defined(__clang__) || defined(__GNUC__)) && !defined(__STRICT_ANSI__) && \
!defined(_MSC_VER)
"ON"

@ -66,7 +66,7 @@ const char* info_language_standard_default = "INFO" ":" "standard_default["
"]";
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
// !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode.
/* !defined(_MSC_VER) to exclude Clang's MSVC compatibility mode. */
#if (defined(__clang__) || defined(__GNUC__) || \
defined(__TI_COMPILER_VERSION__)) && \
!defined(__STRICT_ANSI__) && !defined(_MSC_VER)

@ -23,7 +23,7 @@ function(cmake_parse_library_architecture lang implicit_dirs implicit_objs outpu
foreach(obj IN LISTS implicit_objs)
get_filename_component(dir "${obj}" DIRECTORY)
if("${dir}" MATCHES "(/usr)+/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$")
if("${dir}" MATCHES "(/usr)?/lib/${CMAKE_LIBRARY_ARCHITECTURE_REGEX}$")
get_filename_component(arch "${dir}" NAME)
set(library_arch "${arch}")
break()

@ -637,6 +637,22 @@ External Project Definition
supported). Passing an empty string as the ``<cmd>`` makes the install
step do nothing.
.. note::
If the :envvar:`CMAKE_INSTALL_MODE` environment variable is set when the
main project is built, it will only have an effect if the following
conditions are met:
* The main project's configure step assumed the external project uses
CMake as its build system.
* The external project's install command actually runs. Note that due
to the way ``ExternalProject`` may use timestamps internally, if
nothing the install step depends on needs to be re-executed, the
install command might also not need to run.
Note also that ``ExternalProject`` does not check whether the
:envvar:`CMAKE_INSTALL_MODE` environment variable changes from one run
to another.
**Test Step Options:**
The test step is only defined if at least one of the following ``TEST_...``
options are provided.

@ -57,7 +57,7 @@ set(PKG_CONFIG_NAMES "pkg-config")
if(CMAKE_HOST_WIN32)
list(PREPEND PKG_CONFIG_NAMES "pkg-config.bat")
endif()
list(PREPEND PKG_CONFIG_NAMES "pkgconf")
list(APPEND PKG_CONFIG_NAMES "pkgconf")
find_program(PKG_CONFIG_EXECUTABLE
NAMES ${PKG_CONFIG_NAMES}

@ -229,6 +229,11 @@ Hints
* If set to TRUE, search **only** for static libraries.
* If set to FALSE, search **only** for shared libraries.
.. note::
This hint will be ignored on ``Windows`` because static libraries are not
available on this platform.
``Python_FIND_ABI``
.. versionadded:: 3.16

@ -215,6 +215,11 @@ Hints
* If set to TRUE, search **only** for static libraries.
* If set to FALSE, search **only** for shared libraries.
.. note::
This hint will be ignored on ``Windows`` because static libraries are not
available on this platform.
``Python2_FIND_STRATEGY``
.. versionadded:: 3.15

@ -231,6 +231,11 @@ Hints
* If set to TRUE, search **only** for static libraries.
* If set to FALSE, search **only** for shared libraries.
.. note::
This hint will be ignored on ``Windows`` because static libraries are not
available on this platform.
``Python3_FIND_ABI``
.. versionadded:: 3.16

@ -253,7 +253,9 @@ if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set
elseif(DEFINED ENV{CONDA_PREFIX})
set(conda_prefix "$ENV{CONDA_PREFIX}")
cmake_path(ABSOLUTE_PATH conda_prefix NORMALIZE)
if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix)
if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix AND
NOT ("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$" OR
"${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$"))
set(__system_type_for_install "conda")
endif()
endif()

@ -686,7 +686,7 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)
${swig_custom_products}
${swig_cleanup_command}
# Let's create the ${outdir} at execution time, in case dir contains $(OutDir)
COMMAND "${CMAKE_COMMAND}" -E make_directory ${outdir} ${outfiledir}
COMMAND "${CMAKE_COMMAND}" -E make_directory "${workingdir}" "${outdir}" "${outfiledir}"
${swig_timestamp_command}
COMMAND "${CMAKE_COMMAND}" -E env "SWIG_LIB=${SWIG_DIR}" "${SWIG_EXECUTABLE}"
"-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"

@ -1,7 +1,7 @@
# CMake version number components.
set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 22)
set(CMake_VERSION_PATCH 0)
set(CMake_VERSION_PATCH 1)
#set(CMake_VERSION_RC 0)
set(CMake_VERSION_IS_DIRTY 0)
@ -21,7 +21,7 @@ endif()
if(NOT CMake_VERSION_NO_GIT)
# If this source was exported by 'git archive', use its commit info.
set(git_info [==[ff8c3acc0f CMake 3.22.0]==])
set(git_info [==[aa6a33fe54 CMake 3.22.1]==])
# Otherwise, try to identify the current development source version.
if(NOT git_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]?[0-9a-f]?)[0-9a-f]* "

@ -498,7 +498,8 @@ bool cmGlobalGenerator::CheckLanguages(
void cmGlobalGenerator::EnableLanguage(
std::vector<std::string> const& languages, cmMakefile* mf, bool optional)
{
if (!this->IsMultiConfig()) {
if (!this->IsMultiConfig() &&
!this->GetCMakeInstance()->GetIsInTryCompile()) {
std::string envBuildType;
if (!mf->GetDefinition("CMAKE_BUILD_TYPE") &&
cmSystemTools::GetEnv("CMAKE_BUILD_TYPE", envBuildType)) {

@ -567,7 +567,7 @@ public:
} else {
this->Stream << this->LG->EscapeForXML("\n");
}
std::string script = this->LG->ConstructScript(ccg, unmanaged);
std::string script = this->LG->ConstructScript(ccg);
this->Stream << this->LG->EscapeForXML(script);
}
@ -1780,7 +1780,7 @@ void cmLocalVisualStudio7Generator::WriteCustomRule(
}
std::string comment = this->ConstructComment(ccg);
std::string script = this->ConstructScript(ccg, unmanaged);
std::string script = this->ConstructScript(ccg);
if (this->FortranProject) {
cmSystemTools::ReplaceString(script, "$(Configuration)", config);
}

@ -124,8 +124,7 @@ const char* cmLocalVisualStudioGenerator::GetReportErrorLabel() const
}
std::string cmLocalVisualStudioGenerator::ConstructScript(
cmCustomCommandGenerator const& ccg, IsManaged isManaged,
const std::string& newline_text)
cmCustomCommandGenerator const& ccg, const std::string& newline_text)
{
bool useLocal = this->CustomCommandUseLocal();
std::string workingDirectory = ccg.GetWorkingDirectory();
@ -238,14 +237,6 @@ std::string cmLocalVisualStudioGenerator::ConstructScript(
script += newline;
script += "if %errorlevel% neq 0 goto ";
script += this->GetReportErrorLabel();
if (isManaged == managed) {
// These aren't generated by default for C# projects.
script += newline;
script += this->GetReportErrorLabel();
script += newline;
script += "exit /b 0";
script += newline;
}
}
return script;

@ -31,13 +31,7 @@ public:
virtual ~cmLocalVisualStudioGenerator();
/** Construct a script from the given list of command lines. */
enum IsManaged
{
unmanaged,
managed
};
std::string ConstructScript(cmCustomCommandGenerator const& ccg,
IsManaged isManaged,
const std::string& newline = "\n");
/** Label to which to jump in a batch file after a failed step in a

@ -3167,7 +3167,8 @@ void cmMakefile::InitCMAKE_CONFIGURATION_TYPES(std::string const& genDefault)
return;
}
std::string initConfigs;
if (!cmSystemTools::GetEnv("CMAKE_CONFIGURATION_TYPES", initConfigs)) {
if (this->GetCMakeInstance()->GetIsInTryCompile() ||
!cmSystemTools::GetEnv("CMAKE_CONFIGURATION_TYPES", initConfigs)) {
initConfigs = genDefault;
}
this->AddCacheDefinition(

@ -888,7 +888,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(
bool lang_has_preprocessor =
((lang == "C") || (lang == "CXX") || (lang == "OBJC") ||
(lang == "OBJCXX") || (lang == "Fortran") || (lang == "CUDA") ||
lang == "ISPC" || lang == "ASM");
lang == "ISPC" || lang == "HIP" || lang == "ASM");
bool const lang_has_assembly = lang_has_preprocessor;
bool const lang_can_export_cmds = lang_has_preprocessor;

@ -2869,6 +2869,14 @@ bool cmSystemTools::ChangeRPath(std::string const& file,
file, oldRPath, newRPath, removeEnvironmentRPath, emsg, changed)) {
return result.value();
}
// The file format is not recognized. Assume it has no RPATH.
if (newRPath.empty()) {
// The caller wanted no RPATH anyway.
return true;
}
if (emsg) {
*emsg = "The file format is not recognized.";
}
return false;
}
@ -2883,6 +2891,14 @@ bool cmSystemTools::SetRPath(std::string const& file,
SetRPathXCOFF(file, newRPath, emsg, changed)) {
return result.value();
}
// The file format is not recognized. Assume it has no RPATH.
if (newRPath.empty()) {
// The caller wanted no RPATH anyway.
return true;
}
if (emsg) {
*emsg = "The file format is not recognized.";
}
return false;
}
@ -3212,7 +3228,8 @@ bool cmSystemTools::RemoveRPath(std::string const& file, std::string* emsg,
if (cm::optional<bool> result = RemoveRPathXCOFF(file, emsg, removed)) {
return result.value();
}
return false;
// The file format is not recognized. Assume it has no RPATH.
return true;
}
bool cmSystemTools::CheckRPath(std::string const& file,
@ -3252,9 +3269,9 @@ bool cmSystemTools::CheckRPath(std::string const& file,
return false;
}
#endif
(void)file;
(void)newRPath;
return false;
// The file format is not recognized. Assume it has no RPATH.
// Therefore we succeed if the new rpath is empty anyway.
return newRPath.empty();
}
bool cmSystemTools::RepeatedRemoveDirectory(const std::string& dir)

@ -197,7 +197,7 @@ std::string cmTimestamp::AddTimestampComponent(char flag,
#ifdef __MINGW32__
/* See a bug in MinGW: https://sourceforge.net/p/mingw-w64/bugs/793/. A work
* around is to try to use strftime() from ucrtbase.dll. */
using T = size_t(WINAPI*)(char*, size_t, const char*, const struct tm*);
using T = size_t(__cdecl*)(char*, size_t, const char*, const struct tm*);
auto loadUcrtStrftime = []() -> T {
auto handle =
LoadLibraryExA("ucrtbase.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);

@ -1488,10 +1488,7 @@ void cmVisualStudio10TargetGenerator::WriteCustomRule(
cmCustomCommandGenerator ccg(command, c, lg, true);
std::string comment = lg->ConstructComment(ccg);
comment = cmVS10EscapeComment(comment);
cmLocalVisualStudioGenerator::IsManaged isManaged = (this->Managed)
? cmLocalVisualStudioGenerator::managed
: cmLocalVisualStudioGenerator::unmanaged;
std::string script = lg->ConstructScript(ccg, isManaged);
std::string script = lg->ConstructScript(ccg);
bool symbolic = false;
// input files for custom command
std::stringstream additional_inputs;
@ -4241,10 +4238,7 @@ void cmVisualStudio10TargetGenerator::WriteEvent(
comment += lg->ConstructComment(ccg);
script += pre;
pre = "\n";
cmLocalVisualStudioGenerator::IsManaged isManaged = (this->Managed)
? cmLocalVisualStudioGenerator::managed
: cmLocalVisualStudioGenerator::unmanaged;
script += lg->ConstructScript(ccg, isManaged);
script += lg->ConstructScript(ccg);
stdPipesUTF8 = stdPipesUTF8 || cc.GetStdPipesUTF8();
}

@ -2234,8 +2234,9 @@ if(BUILD_TESTING)
endif()
if(NOT "${CMAKE_GENERATOR}" MATCHES "Visual Studio 9 "
AND NOT CMAKE_GENERATOR_TOOLSET)
AND NOT CMAKE_GENERATOR_TOOLSET STREQUAL "v90")
ADD_TEST_MACRO(VSWindowsFormsResx VSWindowsFormsResx)
ADD_TEST_MACRO(VSManagedCustomCommand)
endif()
add_test(VSExternalInclude ${CMAKE_CTEST_COMMAND}

@ -0,0 +1,56 @@
CMAKE_LANG=C
CMAKE_LINKER=/opt/llvm-13/bin/ld.lld
CMAKE_C_COMPILER_ABI=ELF
CMAKE_C_COMPILER_AR=/opt/llvm-13/bin/llvm-ar
CMAKE_C_COMPILER_ARCHITECTURE_ID=
CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN=
CMAKE_C_COMPILER_ID=Clang
CMAKE_C_COMPILER_LAUNCHER=
CMAKE_C_COMPILER_LOADED=1
CMAKE_C_COMPILER_RANLIB=/opt/llvm-13/bin/llvm-ranlib
CMAKE_C_COMPILER_TARGET=
CMAKE_C_COMPILER_VERSION=13.0.0
CMAKE_C_COMPILER_VERSION_INTERAL=
Change Dir: /tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp
Run Build Command(s):/usr/bin/make -f Makefile cmTC_91833/fast && /usr/bin/make -f CMakeFiles/cmTC_91833.dir/build.make CMakeFiles/cmTC_91833.dir/build
make[1]: Entering directory '/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o
/opt/llvm-13/bin/clang -v -MD -MT CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o -c /opt/cmake-3.21.3/share/cmake-3.21/Modules/CMakeCCompilerABI.c
clang version 13.0.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /opt/llvm-13/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .@m64
Candidate multilib: 32@m32
Candidate multilib: x32@mx32
Selected multilib: .@m64
(in-process)
"/opt/llvm-13/bin/clang-13" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -main-file-name CMakeCCompilerABI.c -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp -resource-dir /opt/llvm-13/lib/clang/13.0.0 -dependency-file CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o.d -MT CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o -sys-header-deps -internal-isystem /opt/llvm-13/lib/clang/13.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fgnuc-version=4.2.1 -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o -x c /opt/cmake-3.21.3/share/cmake-3.21/Modules/CMakeCCompilerABI.c
clang -cc1 version 13.0.0 based upon LLVM 13.0.0 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
/opt/llvm-13/lib/clang/13.0.0/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Linking C executable cmTC_91833
/opt/cmake-3.21.3/bin/cmake -E cmake_link_script CMakeFiles/cmTC_91833.dir/link.txt --verbose=1
/opt/llvm-13/bin/clang -v -rdynamic CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o -o cmTC_91833
clang version 13.0.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /opt/llvm-13/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .@m64
Candidate multilib: 32@m32
Candidate multilib: x32@mx32
Selected multilib: .@m64
"/opt/llvm-13/bin/ld.lld" -export-dynamic -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_91833 /lib/x86_64-linux-gnu/crt1.o /lib/x86_64-linux-gnu/crti.o /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/clang_rt.crtbegin.o -L/opt/llvm-13/bin/../lib/x86_64-pc-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/opt/llvm-13/bin/../lib -L/lib -L/usr/lib CMakeFiles/cmTC_91833.dir/CMakeCCompilerABI.c.o /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/libclang_rt.builtins.a --as-needed -l:libunwind.so --no-as-needed -lc /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/libclang_rt.builtins.a --as-needed -l:libunwind.so --no-as-needed /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/clang_rt.crtend.o /lib/x86_64-linux-gnu/crtn.o
make[1]: Leaving directory '/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp'

@ -0,0 +1,58 @@
CMAKE_LANG=CXX
CMAKE_LINKER=/opt/llvm-13/bin/ld.lld
CMAKE_CXX_COMPILER_ABI=ELF
CMAKE_CXX_COMPILER_AR=/opt/llvm-13/bin/llvm-ar
CMAKE_CXX_COMPILER_ARCHITECTURE_ID=
CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN=
CMAKE_CXX_COMPILER_ID=Clang
CMAKE_CXX_COMPILER_LAUNCHER=
CMAKE_CXX_COMPILER_LOADED=1
CMAKE_CXX_COMPILER_RANLIB=/opt/llvm-13/bin/llvm-ranlib
CMAKE_CXX_COMPILER_TARGET=
CMAKE_CXX_COMPILER_VERSION=13.0.0
CMAKE_CXX_COMPILER_VERSION_INTERAL=
Change Dir: /tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp
Run Build Command(s):/usr/bin/make -f Makefile cmTC_5372b/fast && /usr/bin/make -f CMakeFiles/cmTC_5372b.dir/build.make CMakeFiles/cmTC_5372b.dir/build
make[1]: Entering directory '/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o
/opt/llvm-13/bin/clang++ -v -MD -MT CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o.d -o CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o -c /opt/cmake-3.21.3/share/cmake-3.21/Modules/CMakeCXXCompilerABI.cpp
clang version 13.0.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /opt/llvm-13/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .@m64
Candidate multilib: 32@m32
Candidate multilib: x32@mx32
Selected multilib: .@m64
(in-process)
"/opt/llvm-13/bin/clang-13" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp -resource-dir /opt/llvm-13/lib/clang/13.0.0 -dependency-file CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o.d -MT CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o -sys-header-deps -internal-isystem /opt/llvm-13/bin/../include/x86_64-pc-linux-gnu/c++/v1 -internal-isystem /opt/llvm-13/bin/../include/c++/v1 -internal-isystem /opt/llvm-13/lib/clang/13.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o -x c++ /opt/cmake-3.21.3/share/cmake-3.21/Modules/CMakeCXXCompilerABI.cpp
clang -cc1 version 13.0.0 based upon LLVM 13.0.0 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
/opt/llvm-13/bin/../include/x86_64-pc-linux-gnu/c++/v1
/opt/llvm-13/bin/../include/c++/v1
/opt/llvm-13/lib/clang/13.0.0/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Linking CXX executable cmTC_5372b
/opt/cmake-3.21.3/bin/cmake -E cmake_link_script CMakeFiles/cmTC_5372b.dir/link.txt --verbose=1
/opt/llvm-13/bin/clang++ -v -rdynamic CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_5372b
clang version 13.0.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /opt/llvm-13/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .@m64
Candidate multilib: 32@m32
Candidate multilib: x32@mx32
Selected multilib: .@m64
"/opt/llvm-13/bin/ld.lld" -export-dynamic -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_5372b /lib/x86_64-linux-gnu/crt1.o /lib/x86_64-linux-gnu/crti.o /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/clang_rt.crtbegin.o -L/opt/llvm-13/bin/../lib/x86_64-pc-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/opt/llvm-13/bin/../lib -L/lib -L/usr/lib CMakeFiles/cmTC_5372b.dir/CMakeCXXCompilerABI.cpp.o -lc++ -lm /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/libclang_rt.builtins.a -l:libunwind.so -lc /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/libclang_rt.builtins.a -l:libunwind.so /opt/llvm-13/lib/clang/13.0.0/lib/x86_64-pc-linux-gnu/clang_rt.crtend.o /lib/x86_64-linux-gnu/crtn.o
make[1]: Leaving directory '/tmp/cmake/Tests/RunCMake/ParseImplicitData/build/CMakeFiles/CMakeTmp'

@ -38,6 +38,7 @@ set(targets
linux-C-XL-16.1.0.0 linux-CXX-XL-16.1.0.0
linux-CUDA-NVIDIA-10.1.168-CLANG linux-CUDA-NVIDIA-10.1.168-XLClang-v-empty
linux-CUDA-NVIDIA-9.2.148-GCC
linux-custom_clang-C-Clang-13.0.0 linux-custom_clang-CXX-Clang-13.0.0
mingw.org-C-GNU-4.9.3 mingw.org-CXX-GNU-4.9.3
netbsd-C-GNU-4.8.5 netbsd-CXX-GNU-4.8.5
netbsd_nostdinc-C-GNU-4.8.5 netbsd_nostdinc-CXX-GNU-4.8.5

@ -0,0 +1 @@
/opt/llvm-13/lib/clang/13.0.0/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include

@ -0,0 +1 @@
/opt/llvm-13/include/x86_64-pc-linux-gnu/c\+\+/v1;/opt/llvm-13/include/c\+\+/v1;/opt/llvm-13/lib/clang/13.0.0/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include

@ -38,6 +38,7 @@ set(targets
linux-C-XL-16.1.0.0 linux-CXX-XL-16.1.0.0
linux-CUDA-NVIDIA-10.1.168-CLANG linux-CUDA-NVIDIA-10.1.168-XLClang-v
linux-CUDA-NVIDIA-9.2.148-GCC
linux-custom_clang-C-Clang-13.0.0 linux-custom_clang-CXX-Clang-13.0.0
mingw.org-C-GNU-4.9.3 mingw.org-CXX-GNU-4.9.3
netbsd-C-GNU-4.8.5 netbsd-CXX-GNU-4.8.5
netbsd_nostdinc-C-GNU-4.8.5 netbsd_nostdinc-CXX-GNU-4.8.5

@ -0,0 +1,3 @@
libs=-l:libunwind.so;c;-l:libunwind.so
dirs=/opt/llvm-13/lib/x86_64-pc-linux-gnu;/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib64;/lib/x86_64-linux-gnu;/lib64;/usr/lib/x86_64-linux-gnu;/opt/llvm-13/lib;/lib;/usr/lib
library_arch=x86_64-linux-gnu

@ -0,0 +1,3 @@
libs=c\+\+;m;-l:libunwind.so;c;-l:libunwind.so
dirs=/opt/llvm-13/lib/x86_64-pc-linux-gnu;/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib64;/lib/x86_64-linux-gnu;/lib64;/usr/lib/x86_64-linux-gnu;/opt/llvm-13/lib;/lib;/usr/lib
library_arch=x86_64-linux-gnu

@ -5,3 +5,14 @@ run_cmake_command(ELF ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/ELF.cmake)
if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
run_cmake_command(XCOFF ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/XCOFF.cmake)
endif()
run_cmake_command(TextCheck ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TextCheck.cmake)
run_cmake_command(TextCheckEmpty ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TextCheckEmpty.cmake)
run_cmake_command(TextChange ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TextChange.cmake)
run_cmake_command(TextChangeEmpty ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TextChangeEmpty.cmake)
run_cmake_command(TextSet ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TextSet.cmake)
run_cmake_command(TextSetEmpty ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TextSetEmpty.cmake)
run_cmake_command(TextRemove ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/TextRemove.cmake)

@ -0,0 +1,12 @@
^CMake Error at [^
]*/Tests/RunCMake/file-RPATH/TextChange.cmake:[0-9]+ \(file\):
file RPATH_CHANGE could not write new RPATH:
/new/rpath
to the file:
[^
]*/Tests/RunCMake/file-RPATH/TextChange-build/not_a_binary.txt
The file format is not recognized\.$

@ -0,0 +1,3 @@
set(f "${CMAKE_CURRENT_BINARY_DIR}/not_a_binary.txt")
file(WRITE "${f}" "Not a binary.\n")
file(RPATH_CHANGE FILE "${f}" OLD_RPATH "/old/rpath" NEW_RPATH "/new/rpath")

@ -0,0 +1,3 @@
set(f "${CMAKE_CURRENT_BINARY_DIR}/not_a_binary.txt")
file(WRITE "${f}" "Not a binary.\n")
file(RPATH_CHANGE FILE "${f}" OLD_RPATH "/old/rpath" NEW_RPATH "")

@ -0,0 +1,6 @@
set(f "${CMAKE_CURRENT_BINARY_DIR}/not_a_binary.txt")
file(WRITE "${f}" "Not a binary.\n")
file(RPATH_CHECK FILE "${f}" RPATH "/some/rpath")
if(EXISTS "${f}")
message(FATAL_ERROR "RPATH_CHECK did not remove\n ${f}\nfor non-empty RPATH")
endif()

@ -0,0 +1,6 @@
set(f "${CMAKE_CURRENT_BINARY_DIR}/not_a_binary.txt")
file(WRITE "${f}" "Not a binary.\n")
file(RPATH_CHECK FILE "${f}" RPATH "")
if(NOT EXISTS "${f}")
message(FATAL_ERROR "RPATH_CHECK removed\n ${f}\nfor empty RPATH")
endif()

@ -0,0 +1,3 @@
set(f "${CMAKE_CURRENT_BINARY_DIR}/not_a_binary.txt")
file(WRITE "${f}" "Not a binary.\n")
file(RPATH_REMOVE FILE "${f}")

@ -0,0 +1,12 @@
^CMake Error at [^
]*/Tests/RunCMake/file-RPATH/TextSet.cmake:[0-9]+ \(file\):
file RPATH_SET could not write new RPATH:
/new/rpath
to the file:
[^
]*/Tests/RunCMake/file-RPATH/TextSet-build/not_a_binary.txt
The file format is not recognized\.$

@ -0,0 +1,3 @@
set(f "${CMAKE_CURRENT_BINARY_DIR}/not_a_binary.txt")
file(WRITE "${f}" "Not a binary.\n")
file(RPATH_SET FILE "${f}" NEW_RPATH "/new/rpath")

@ -0,0 +1,3 @@
set(f "${CMAKE_CURRENT_BINARY_DIR}/not_a_binary.txt")
file(WRITE "${f}" "Not a binary.\n")
file(RPATH_SET FILE "${f}" NEW_RPATH "")

@ -0,0 +1,7 @@
#ifdef TC_CONFIG_BAD
# error "Built in 'Bad' config"
#endif
int main(void)
{
return 0;
}

@ -0,0 +1,18 @@
enable_language(C)
set(ENV{CMAKE_BUILD_TYPE} "Bad")
set(ENV{CMAKE_CONFIGURATION_TYPES} "Bad;Debug")
add_library(tc_defs INTERFACE IMPORTED)
target_compile_definitions(tc_defs INTERFACE "TC_CONFIG_$<UPPER_CASE:$<CONFIG>>")
try_compile(ENV_CONFIG_RESULT "${CMAKE_BINARY_DIR}"
SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/EnvConfig.c"
COPY_FILE "${CMAKE_CURRENT_BINARY_DIR}/EnvConfig.bin"
OUTPUT_VARIABLE tc_output
LINK_LIBRARIES tc_defs
)
if(NOT ENV_CONFIG_RESULT)
string(REPLACE "\n" "\n " tc_output " ${tc_output}")
message(FATAL_ERROR "try_compile failed:\n${tc_output}")
endif()

@ -16,6 +16,8 @@ run_cmake(BadSources2)
run_cmake(NonSourceCopyFile)
run_cmake(NonSourceCompileDefinitions)
run_cmake(EnvConfig)
set(RunCMake_TEST_OPTIONS --debug-trycompile)
run_cmake(PlatformVariables)
run_cmake(WarnDeprecated)

@ -76,6 +76,7 @@ if(SWIG_FOUND AND NOT SWIG_VERSION VERSION_LESS "4.0.2"
${build_generator_args}
--build-project TestBasicPython
--build-options ${build_options} -DSWIG_USE_SWIG_DEPENDENCIES=ON
"-DSWIG_OUTFILE_DIR=${CMake_BINARY_DIR}/Tests/UseSWIG/BasicPython.Depfile"
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)
add_test(NAME UseSWIG.Depfile.BasicPerl COMMAND

@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.20)
project(VSManagedCustomCommand CXX)
add_custom_command(OUTPUT middle.txt
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/example.txt ${CMAKE_CURRENT_BINARY_DIR}/middle.txt
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/example.txt
)
add_custom_command(OUTPUT example.cxx
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/middle.txt ${CMAKE_CURRENT_BINARY_DIR}/example.cxx
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/middle.txt
)
add_library(example SHARED example.cxx)
set_property(TARGET example PROPERTY COMMON_LANGUAGE_RUNTIME "")

@ -0,0 +1,4 @@
__declspec(dllexport) int example()
{
return 0;
}

@ -0,0 +1,118 @@
#!/usr/bin/env bash
set -e
readonly usage='usage: sign-notarize.bash -i <id> -d <dev-acct> -k <key-item> [-p <provider>] [--] <package>.dmg
Sign and notarize the "CMake.app" bundle inside the given "<package>.dmg" disk image.
Also produce a "<package>.tar.gz" tarball containing the same "CMake.app".
Options:
-i <id> Signing Identity
-d <dev-acct> Developer account name
-k <key-item> Keychain item containing account credentials
-p <provider> Provider short name
'
cleanup() {
if test -d "$tmpdir"; then
rm -rf "$tmpdir"
fi
if test -d "$vol_path"; then
hdiutil detach "$vol_path"
fi
}
trap "cleanup" EXIT
die() {
echo "$@" 1>&2; exit 1
}
id=''
dev_acct=''
key_item=''
provider=''
while test "$#" != 0; do
case "$1" in
-i) shift; id="$1" ;;
-d) shift; dev_acct="$1" ;;
-k) shift; key_item="$1" ;;
-p) shift; provider="$1" ;;
--) shift ; break ;;
-*) die "$usage" ;;
*) break ;;
esac
shift
done
case "$1" in
*.dmg) readonly dmg="$1"; shift ;;
*) die "$usage" ;;
esac
test "$#" = 0 || die "$usage"
# Verify arguments.
if test -z "$id" -o -z "$dev_acct" -o -z "$key_item"; then
die "$usage"
fi
if test -n "$provider"; then
provider="--provider $provider"
fi
# Verify environment.
if ! xcnotary="$(type -p xcnotary)"; then
die "'xcnotary' not found in PATH"
fi
readonly xcnotary
readonly tmpdir="$(mktemp -d)"
# Prepare entitlements.
readonly entitlements_xml="$tmpdir/entitlements.xml"
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
</dict>
</plist>' > "$entitlements_xml"
# Extract SLA
readonly sla_xml="$tmpdir/sla.xml"
hdiutil udifderez -xml "$dmg" > "$sla_xml"
plutil -remove 'blkx' "$sla_xml"
plutil -remove 'plst' "$sla_xml"
# Convert from read-only original image to read-write.
readonly udrw_dmg="$tmpdir/udrw.dmg"
hdiutil convert "$dmg" -format UDRW -o "${udrw_dmg}"
# Mount the temporary udrw image.
readonly vol_name="$(basename "${dmg%.dmg}")"
readonly vol_path="/Volumes/$vol_name"
hdiutil attach "${udrw_dmg}"
codesign --verify --timestamp --options=runtime --verbose --deep \
-s "$id" \
--entitlements "$entitlements_xml" \
"$vol_path/CMake.app/Contents/bin/cmake" \
"$vol_path/CMake.app/Contents/bin/ccmake" \
"$vol_path/CMake.app/Contents/bin/ctest" \
"$vol_path/CMake.app/Contents/bin/cpack" \
"$vol_path/CMake.app/Contents/share/cmake"*"/Modules/Internal/CPack/CPack.OSXScriptLauncher.in" \
"$vol_path/CMake.app"
xcnotary notarize "$vol_path/CMake.app" -d "$dev_acct" -k "$key_item" $provider
# Create a tarball of the volume next to the original disk image.
readonly tar_gz="${dmg/%.dmg/.tar.gz}"
tar cvzf "$tar_gz" -C /Volumes "$vol_name/CMake.app"
# Unmount the modified udrw image.
hdiutil detach "$vol_path"
# Convert back to read-only, compressed image.
hdiutil convert "${udrw_dmg}" -format UDZO -imagekey zlib-level=9 -ov -o "$dmg"
# Re-insert SLA.
hdiutil udifrez -xml "${sla_xml}" 'FIXME_WHY_IS_THIS_ARGUMENT_NEEDED' "$dmg"
Loading…
Cancel
Save