Update upstream source from tag 'upstream/3.23.1'
Update to upstream version '3.23.1' with Debian dir 8f78483bcd021186b0de24f0235b8bea761b47d5
This commit is contained in:
commit
63e96e614c
@ -828,7 +828,7 @@ of the ``Development`` component in the package metadata, ensuring that the
|
|||||||
library is always installed if the headers and CMake export file are present.
|
library is always installed if the headers and CMake export file are present.
|
||||||
|
|
||||||
.. versionadded:: 3.7
|
.. versionadded:: 3.7
|
||||||
In addition to cmake language files, the ``EXPORT_ANDROID_MK`` mode maybe
|
In addition to cmake language files, the ``EXPORT_ANDROID_MK`` mode may be
|
||||||
used to specify an export to the android ndk build system. This mode
|
used to specify an export to the android ndk build system. This mode
|
||||||
accepts the same options as the normal export mode. The Android
|
accepts the same options as the normal export mode. The Android
|
||||||
NDK supports the use of prebuilt libraries, both static and shared. This
|
NDK supports the use of prebuilt libraries, both static and shared. This
|
||||||
|
@ -612,7 +612,7 @@ Requires an element of object type.
|
|||||||
.. code-block:: cmake
|
.. code-block:: cmake
|
||||||
|
|
||||||
string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
|
string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
|
||||||
LENGTH <json-string> <member|index> [<member|index> ...])
|
LENGTH <json-string> [<member|index> ...])
|
||||||
|
|
||||||
Get the length of an element in ``<json-string>`` at the location
|
Get the length of an element in ``<json-string>`` at the location
|
||||||
given by the list of ``<member|index>`` arguments.
|
given by the list of ``<member|index>`` arguments.
|
||||||
|
@ -77,7 +77,7 @@ have zero or more named file sets. Each file set has a name, a type, a scope of
|
|||||||
``INTERFACE``, ``PUBLIC``, or ``PRIVATE``, one or more base directories, and
|
``INTERFACE``, ``PUBLIC``, or ``PRIVATE``, one or more base directories, and
|
||||||
files within those directories. The only acceptable type is ``HEADERS``. The
|
files within those directories. The only acceptable type is ``HEADERS``. The
|
||||||
optional default file sets are named after their type. The target may not be a
|
optional default file sets are named after their type. The target may not be a
|
||||||
custom target.
|
custom target or :prop_tgt:`FRAMEWORK` target.
|
||||||
|
|
||||||
Files in a ``PRIVATE`` or ``PUBLIC`` file set are marked as source files for
|
Files in a ``PRIVATE`` or ``PUBLIC`` file set are marked as source files for
|
||||||
the purposes of IDE integration. Additionally, files in ``HEADERS`` file sets
|
the purposes of IDE integration. Additionally, files in ``HEADERS`` file sets
|
||||||
|
@ -245,20 +245,6 @@ Commit with a message such as::
|
|||||||
Release versions do not have the development topic section of
|
Release versions do not have the development topic section of
|
||||||
the CMake Release Notes index page.
|
the CMake Release Notes index page.
|
||||||
|
|
||||||
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/^u:/.u:/' .gitlab-ci.yml
|
|
||||||
|
|
||||||
Commit with a message such as::
|
|
||||||
|
|
||||||
gitlab-ci: Drop package pipeline upload jobs for release branch
|
|
||||||
|
|
||||||
The package pipeline for release versions should not upload packages
|
|
||||||
automatically to our archive of nightly development versions.
|
|
||||||
|
|
||||||
Update ``Source/CMakeVersion.cmake`` to set the version to
|
Update ``Source/CMakeVersion.cmake`` to set the version to
|
||||||
``$major.$minor.0-rc0``:
|
``$major.$minor.0-rc0``:
|
||||||
|
|
||||||
@ -290,15 +276,13 @@ Merge the ``release-$ver`` branch to ``master``:
|
|||||||
git merge --no-ff release-$ver
|
git merge --no-ff release-$ver
|
||||||
|
|
||||||
Begin post-release development by restoring the development branch release
|
Begin post-release development by restoring the development branch release
|
||||||
note infrastructure, the nightly package pipeline upload jobs, and
|
note infrastructure, and the version date from ``origin/master``:
|
||||||
the version date from ``origin/master``:
|
|
||||||
|
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
|
|
||||||
git checkout origin/master -- \
|
git checkout origin/master -- \
|
||||||
Source/CMakeVersion.cmake Help/release/dev/0-sample-topic.rst
|
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 $'/^Releases/ i\\\n.. include:: dev.txt\\\n' Help/release/index.rst
|
||||||
sed -i 's/^\.u:/u:/' .gitlab-ci.yml
|
|
||||||
|
|
||||||
Update ``Source/CMakeVersion.cmake`` to set the version to
|
Update ``Source/CMakeVersion.cmake`` to set the version to
|
||||||
``$major.$minor.$date``:
|
``$major.$minor.$date``:
|
||||||
|
@ -24,7 +24,9 @@ file name components no longer add a dependency on the evaluated target.
|
|||||||
In CMake 3.18 and lower a dependency on the evaluated target of the above
|
In CMake 3.18 and lower a dependency on the evaluated target of the above
|
||||||
generator expressions would always be added. CMake 3.19 and above prefer
|
generator expressions would always be added. CMake 3.19 and above prefer
|
||||||
to not add this dependency. This policy provides compatibility for projects
|
to not add this dependency. This policy provides compatibility for projects
|
||||||
that have not been updated to expect the new behavior.
|
that have not been updated to expect the new behavior. The policy setting
|
||||||
|
is recorded on each target when it is created, and decides whether generator
|
||||||
|
expressions referencing that target imply a dependency on it.
|
||||||
|
|
||||||
The ``OLD`` behavior for this policy is to add a dependency on the evaluated
|
The ``OLD`` behavior for this policy is to add a dependency on the evaluated
|
||||||
target for the above generator expressions. The ``NEW`` behavior of
|
target for the above generator expressions. The ``NEW`` behavior of
|
||||||
|
@ -3,14 +3,13 @@ HEADER_SETS
|
|||||||
|
|
||||||
.. versionadded:: 3.23
|
.. versionadded:: 3.23
|
||||||
|
|
||||||
List of the target's ``PRIVATE`` and ``PUBLIC`` header sets (i.e. all
|
Read-only list of the target's ``PRIVATE`` and ``PUBLIC`` header sets (i.e.
|
||||||
file sets with the type ``HEADERS``). Files listed in these file sets
|
all file sets with the type ``HEADERS``). Files listed in these file sets are
|
||||||
are treated as source files for the purpose of IDE integration.
|
treated as source files for the purpose of IDE integration. The files also
|
||||||
The files also have their :prop_sf:`HEADER_FILE_ONLY` property set to
|
have their :prop_sf:`HEADER_FILE_ONLY` property set to ``TRUE``.
|
||||||
``TRUE``.
|
|
||||||
|
|
||||||
This property is normally only set by :command:`target_sources(FILE_SET)`
|
Header sets may be defined using the :command:`target_sources` command
|
||||||
rather than being manipulated directly.
|
``FILE_SET`` option with type ``HEADERS``.
|
||||||
|
|
||||||
See also :prop_tgt:`HEADER_SET_<NAME>`, :prop_tgt:`HEADER_SET` and
|
See also :prop_tgt:`HEADER_SET_<NAME>`, :prop_tgt:`HEADER_SET` and
|
||||||
:prop_tgt:`INTERFACE_HEADER_SETS`.
|
:prop_tgt:`INTERFACE_HEADER_SETS`.
|
||||||
|
@ -3,12 +3,12 @@ INTERFACE_HEADER_SETS
|
|||||||
|
|
||||||
.. versionadded:: 3.23
|
.. versionadded:: 3.23
|
||||||
|
|
||||||
List of the target's ``INTERFACE`` and ``PUBLIC`` header sets (i.e. all
|
Read-only list of the target's ``INTERFACE`` and ``PUBLIC`` header sets (i.e.
|
||||||
file sets with the type ``HEADERS``). Files listed in these header sets
|
all file sets with the type ``HEADERS``). Files listed in these header sets
|
||||||
can be installed with :command:`install(TARGETS)` and exported with
|
can be installed with :command:`install(TARGETS)` and exported with
|
||||||
:command:`install(EXPORT)` and :command:`export`.
|
:command:`install(EXPORT)` and :command:`export`.
|
||||||
|
|
||||||
This property is normally only set by :command:`target_sources(FILE_SET)`
|
Header sets may be defined using the :command:`target_sources` command
|
||||||
rather than being manipulated directly.
|
``FILE_SET`` option with type ``HEADERS``.
|
||||||
|
|
||||||
See also :prop_tgt:`HEADER_SETS`.
|
See also :prop_tgt:`HEADER_SETS`.
|
||||||
|
@ -143,12 +143,17 @@ Other Changes
|
|||||||
|
|
||||||
* The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.03 or later.
|
* The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.03 or later.
|
||||||
|
|
||||||
|
Updates
|
||||||
|
=======
|
||||||
|
|
||||||
|
Changes made since CMake 3.22.0 include the following.
|
||||||
|
|
||||||
3.22.1
|
3.22.1
|
||||||
------
|
------
|
||||||
|
|
||||||
This version made no changes to documented features or interfaces.
|
* This version made no changes to documented features or interfaces.
|
||||||
Some implementation updates were made to support ecosystem changes
|
Some implementation updates were made to support ecosystem changes
|
||||||
and/or fix regressions.
|
and/or fix regressions.
|
||||||
|
|
||||||
3.22.2
|
3.22.2
|
||||||
------
|
------
|
||||||
@ -164,3 +169,10 @@ and/or fix regressions.
|
|||||||
errors in existing projects. The fix has been reverted to restore
|
errors in existing projects. The fix has been reverted to restore
|
||||||
compatibility. The fix may be restored in a future version of CMake
|
compatibility. The fix may be restored in a future version of CMake
|
||||||
via a policy.
|
via a policy.
|
||||||
|
|
||||||
|
3.22.4
|
||||||
|
------
|
||||||
|
|
||||||
|
* This version made no changes to documented features or interfaces.
|
||||||
|
Some implementation updates were made to support ecosystem changes
|
||||||
|
and/or fix regressions.
|
||||||
|
@ -114,8 +114,8 @@ Variables
|
|||||||
Properties
|
Properties
|
||||||
----------
|
----------
|
||||||
|
|
||||||
* The :prop_tgt:`HEADER_SETS` and :prop_tgt:`INTERFACE_HEADER_SETS` target
|
* The :prop_tgt:`HEADER_SETS` and :prop_tgt:`INTERFACE_HEADER_SETS` read-only
|
||||||
properties were added to list header sets associated with a target.
|
target properties were added to list header sets associated with a target.
|
||||||
|
|
||||||
* The :prop_tgt:`HEADER_SET` and :prop_tgt:`HEADER_SET_<NAME>` target
|
* The :prop_tgt:`HEADER_SET` and :prop_tgt:`HEADER_SET_<NAME>` target
|
||||||
properties were added to list files in the default header set
|
properties were added to list files in the default header set
|
||||||
@ -264,3 +264,21 @@ Other Changes
|
|||||||
* :manual:`ccmake(1)` may now be enabled on Windows when building
|
* :manual:`ccmake(1)` may now be enabled on Windows when building
|
||||||
CMake from source. This is experimental, and so is not included
|
CMake from source. This is experimental, and so is not included
|
||||||
in official distributions.
|
in official distributions.
|
||||||
|
|
||||||
|
Updates
|
||||||
|
=======
|
||||||
|
|
||||||
|
Changes made since CMake 3.23.0 include the following.
|
||||||
|
|
||||||
|
3.23.1
|
||||||
|
------
|
||||||
|
|
||||||
|
* The :command:`target_sources` ``FILE_SET`` feature added in CMake 3.23.0
|
||||||
|
does not yet place header files properly in Apple :prop_tgt:`FRAMEWORK`
|
||||||
|
targets. Pending further work in a future version of CMake, it is now
|
||||||
|
an error to add a ``FILE_SET`` of type ``HEADERS`` to such targets on
|
||||||
|
Apple platforms.
|
||||||
|
|
||||||
|
* The :prop_tgt:`HEADER_SETS` and :prop_tgt:`INTERFACE_HEADER_SETS` target
|
||||||
|
properties added in CMake 3.23.0 are now read-only records of the header
|
||||||
|
sets created by the :command:`target_sources` command.
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
CMAKE_CACHEFILE_DIR
|
CMAKE_CACHEFILE_DIR
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
The directory with the ``CMakeCache.txt`` file.
|
This variable is used internally by CMake, and may not be set during
|
||||||
|
the first configuration of a build tree. When it is set, it has the
|
||||||
This is the full path to the directory that has the ``CMakeCache.txt``
|
same value as :variable:`CMAKE_BINARY_DIR`. Use that variable instead.
|
||||||
file in it. This is the same as :variable:`CMAKE_BINARY_DIR`.
|
|
||||||
|
@ -16,13 +16,18 @@ conditions are true.
|
|||||||
|
|
||||||
cmake_dependent_option(<option> "<help_text>" <value> <depends> <force>)
|
cmake_dependent_option(<option> "<help_text>" <value> <depends> <force>)
|
||||||
|
|
||||||
Makes ``<option>`` available to the user if ``<depends>`` is true. When
|
Makes ``<option>`` available to the user if the
|
||||||
``<option>`` is available, the given ``<help_text>`` and initial ``<value>``
|
:ref:`semicolon-separated list <CMake Language Lists>` of conditions in
|
||||||
are used. If the ``<depends>`` condition is not true, ``<option>`` will not be
|
``<depends>`` are all true. Otherwise, a local variable named ``<option>``
|
||||||
presented and will always have the value given by ``<force>``. Any value set by
|
is set to ``<force>``.
|
||||||
the user is preserved for when the option is presented again. In case ``<depends>``
|
|
||||||
is a :ref:`semicolon-separated list <CMake Language Lists>`, all elements must
|
When ``<option>`` is available, the given ``<help_text>`` and initial
|
||||||
be true in order to initialize ``<option>`` with ``<value>``.
|
``<value>`` are used. Otherwise, any value set by the user is preserved for
|
||||||
|
when ``<depends>`` is satisfied in the future.
|
||||||
|
|
||||||
|
Note that the ``<option>`` variable only has a value which satisfies the
|
||||||
|
``<depends>`` condition within the scope of the caller because it is a local
|
||||||
|
variable.
|
||||||
|
|
||||||
Example invocation:
|
Example invocation:
|
||||||
|
|
||||||
|
@ -22,10 +22,13 @@ property for executables will be honored at link time.
|
|||||||
Options are:
|
Options are:
|
||||||
|
|
||||||
``OUTPUT_VARIABLE <output>``
|
``OUTPUT_VARIABLE <output>``
|
||||||
Set ``<output>`` variable with details about any error.
|
Set ``<output>`` variable with details about any error. If the check is
|
||||||
|
bypassed because it uses cached results from a previous call, the output
|
||||||
|
will be empty even if errors were present in the previous call.
|
||||||
|
|
||||||
``LANGUAGES <lang>...``
|
``LANGUAGES <lang>...``
|
||||||
Check the linkers used for each of the specified languages.
|
Check the linkers used for each of the specified languages.
|
||||||
|
If this option is not provided, the command checks all enabled languages.
|
||||||
|
|
||||||
``C``, ``CXX``, ``Fortran`` are supported.
|
``C``, ``CXX``, ``Fortran`` are supported.
|
||||||
|
|
||||||
@ -43,9 +46,9 @@ Variables
|
|||||||
For each language checked, two boolean cache variables are defined.
|
For each language checked, two boolean cache variables are defined.
|
||||||
|
|
||||||
``CMAKE_<lang>_LINK_PIE_SUPPORTED``
|
``CMAKE_<lang>_LINK_PIE_SUPPORTED``
|
||||||
Set to ``YES`` if ``PIE`` is supported by the linker and ``NO`` otherwise.
|
Set to true if ``PIE`` is supported by the linker and false otherwise.
|
||||||
``CMAKE_<lang>_LINK_NO_PIE_SUPPORTED``
|
``CMAKE_<lang>_LINK_NO_PIE_SUPPORTED``
|
||||||
Set to ``YES`` if ``NO_PIE`` is supported by the linker and ``NO`` otherwise.
|
Set to true if ``NO_PIE`` is supported by the linker and false otherwise.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
@ -139,7 +142,7 @@ function (check_pie_supported)
|
|||||||
# no support at link time. Set cache variables to NO
|
# no support at link time. Set cache variables to NO
|
||||||
set(CMAKE_${lang}_LINK_PIE_SUPPORTED NO CACHE INTERNAL "PIE (${lang})")
|
set(CMAKE_${lang}_LINK_PIE_SUPPORTED NO CACHE INTERNAL "PIE (${lang})")
|
||||||
set(CMAKE_${lang}_LINK_NO_PIE_SUPPORTED NO CACHE INTERNAL "NO_PIE (${lang})")
|
set(CMAKE_${lang}_LINK_NO_PIE_SUPPORTED NO CACHE INTERNAL "NO_PIE (${lang})")
|
||||||
string (APPEND outputs "PIE and NO_PIE are not supported by linker for ${lang}")
|
string (APPEND outputs "PIE and NO_PIE are not supported by linker for ${lang}\n")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ is set regardless of the presence of the ``Server`` component in find_package ca
|
|||||||
# In Windows the default installation of PostgreSQL uses that as part of the path.
|
# In Windows the default installation of PostgreSQL uses that as part of the path.
|
||||||
# E.g C:\Program Files\PostgreSQL\8.4.
|
# E.g C:\Program Files\PostgreSQL\8.4.
|
||||||
# Currently, the following version numbers are known to this module:
|
# Currently, the following version numbers are known to this module:
|
||||||
# "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0"
|
# "14" "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0"
|
||||||
#
|
#
|
||||||
# To use this variable just do something like this:
|
# To use this variable just do something like this:
|
||||||
# set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4")
|
# set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4")
|
||||||
@ -102,7 +102,7 @@ set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to wher
|
|||||||
|
|
||||||
|
|
||||||
set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS}
|
set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS}
|
||||||
"13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0")
|
"14" "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0")
|
||||||
|
|
||||||
# Define additional search paths for root directories.
|
# Define additional search paths for root directories.
|
||||||
set( PostgreSQL_ROOT_DIRECTORIES
|
set( PostgreSQL_ROOT_DIRECTORIES
|
||||||
|
@ -55,7 +55,7 @@ where ``<dir>`` is one of:
|
|||||||
object code libraries (``lib`` or ``lib64``)
|
object code libraries (``lib`` or ``lib64``)
|
||||||
|
|
||||||
On Debian, this may be ``lib/<multiarch-tuple>`` when
|
On Debian, this may be ``lib/<multiarch-tuple>`` when
|
||||||
:variable:`CMAKE_INSTALL_PREFIX` is ``/``, ``/usr``, or ``/usr/local``.
|
:variable:`CMAKE_INSTALL_PREFIX` is ``/usr``.
|
||||||
``INCLUDEDIR``
|
``INCLUDEDIR``
|
||||||
C header files (``include``)
|
C header files (``include``)
|
||||||
``OLDINCLUDEDIR``
|
``OLDINCLUDEDIR``
|
||||||
@ -273,9 +273,7 @@ if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set
|
|||||||
|
|
||||||
if(__system_type_for_install STREQUAL "debian")
|
if(__system_type_for_install STREQUAL "debian")
|
||||||
if(CMAKE_LIBRARY_ARCHITECTURE)
|
if(CMAKE_LIBRARY_ARCHITECTURE)
|
||||||
if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/"
|
if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
|
||||||
OR "${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$"
|
|
||||||
OR "${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$")
|
|
||||||
set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
|
set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
|
||||||
endif()
|
endif()
|
||||||
if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
|
if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX
|
||||||
|
@ -59,8 +59,8 @@ macro(CMAKE_CHECK_FLAG_COMMON_INIT _FUNC _LANG _SRC _PATTERNS)
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
# Normalize locale during test compilation.
|
# Normalize locale during test compilation.
|
||||||
set(_locale_vars LC_ALL LC_MESSAGES LANG)
|
set(_CFCC_locale_vars LC_ALL LC_MESSAGES LANG)
|
||||||
foreach(v IN LISTS _locale_vars)
|
foreach(v IN LISTS _CFCC_locale_vars)
|
||||||
set(_CMAKE_CHECK_FLAG_COMMON_CONFIG_locale_vars_saved_${v} "$ENV{${v}}")
|
set(_CMAKE_CHECK_FLAG_COMMON_CONFIG_locale_vars_saved_${v} "$ENV{${v}}")
|
||||||
set(ENV{${v}} C)
|
set(ENV{${v}} C)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
69
Modules/Internal/HeaderpadWorkaround.cmake
Normal file
69
Modules/Internal/HeaderpadWorkaround.cmake
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||||
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||||
|
|
||||||
|
|
||||||
|
# Do NOT include this module directly into any of your code. It is used by
|
||||||
|
# the try_compile() implementation to work around a specific issue with
|
||||||
|
# conflicting flags when building for Apple platforms.
|
||||||
|
if(NOT APPLE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
cmake_policy(PUSH)
|
||||||
|
cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
|
||||||
|
|
||||||
|
function(__cmake_internal_workaround_headerpad_flag_conflict _LANG)
|
||||||
|
|
||||||
|
# Until we can avoid hard-coding -Wl,-headerpad_max_install_names in the
|
||||||
|
# linker flags, we need to remove it here for cases where we know it will
|
||||||
|
# conflict with other flags, generate a warning and be ignored.
|
||||||
|
set(regex "(^| )(-fembed-bitcode(-marker|=(all|bitcode|marker))?|-bundle_bitcode)($| )")
|
||||||
|
set(remove_headerpad NO)
|
||||||
|
|
||||||
|
# Check arbitrary flags that the user or project has set. These compiler
|
||||||
|
# flags get added to the linker command line.
|
||||||
|
if("${CMAKE_${_LANG}_FLAGS}" MATCHES "${regex}")
|
||||||
|
set(remove_headerpad YES)
|
||||||
|
endif()
|
||||||
|
if(NOT remove_headerpad)
|
||||||
|
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||||
|
if(is_multi_config)
|
||||||
|
# Only one of these config-specific variables will be set by try_compile()
|
||||||
|
# and the rest will be unset, but we can't easily tell which one is set.
|
||||||
|
# No harm to just add them all here, empty ones won't add flags to check.
|
||||||
|
foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES)
|
||||||
|
if("${CMAKE_${_LANG}_FLAGS_${config}}" MATCHES "${regex}")
|
||||||
|
set(remove_headerpad YES)
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
else()
|
||||||
|
if("${CMAKE_${_LANG}_FLAGS_${CMAKE_BUILD_TYPE}}" MATCHES "${regex}")
|
||||||
|
set(remove_headerpad YES)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# The try_compile() command passes compiler flags to check in a way that
|
||||||
|
# results in them being added to add_definitions(). Those don't end up on
|
||||||
|
# the linker command line, so we don't need to check them here.
|
||||||
|
|
||||||
|
if(remove_headerpad)
|
||||||
|
foreach(flag IN ITEMS
|
||||||
|
CMAKE_${_LANG}_LINK_FLAGS
|
||||||
|
CMAKE_SHARED_LIBRARY_CREATE_${_LANG}_FLAGS
|
||||||
|
CMAKE_SHARED_MODULE_CREATE_${_LANG}_FLAGS)
|
||||||
|
string(REPLACE "-Wl,-headerpad_max_install_names" "" ${flag} "${${flag}}")
|
||||||
|
set(${flag} "${${flag}}" PARENT_SCOPE)
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
get_property(__enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||||
|
foreach(__lang IN LISTS __enabled_languages)
|
||||||
|
__cmake_internal_workaround_headerpad_flag_conflict(${__lang})
|
||||||
|
endforeach()
|
||||||
|
unset(__lang)
|
||||||
|
unset(__enabled_languages)
|
||||||
|
|
||||||
|
cmake_policy(POP)
|
@ -1,7 +1,7 @@
|
|||||||
# CMake version number components.
|
# CMake version number components.
|
||||||
set(CMake_VERSION_MAJOR 3)
|
set(CMake_VERSION_MAJOR 3)
|
||||||
set(CMake_VERSION_MINOR 23)
|
set(CMake_VERSION_MINOR 23)
|
||||||
set(CMake_VERSION_PATCH 0)
|
set(CMake_VERSION_PATCH 1)
|
||||||
#set(CMake_VERSION_RC 0)
|
#set(CMake_VERSION_RC 0)
|
||||||
set(CMake_VERSION_IS_DIRTY 0)
|
set(CMake_VERSION_IS_DIRTY 0)
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ endif()
|
|||||||
|
|
||||||
if(NOT CMake_VERSION_NO_GIT)
|
if(NOT CMake_VERSION_NO_GIT)
|
||||||
# If this source was exported by 'git archive', use its commit info.
|
# If this source was exported by 'git archive', use its commit info.
|
||||||
set(git_info [==[00677703d0 CMake 3.23.0]==])
|
set(git_info [==[efe08e2894 CMake 3.23.1]==])
|
||||||
|
|
||||||
# Otherwise, try to identify the current development source version.
|
# 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]* "
|
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]* "
|
||||||
|
@ -831,6 +831,12 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
|
|||||||
? "NEW"
|
? "NEW"
|
||||||
: "OLD");
|
: "OLD");
|
||||||
|
|
||||||
|
// Workaround for -Wl,-headerpad_max_install_names issue until we can avoid
|
||||||
|
// adding that flag in the platform and compiler language files
|
||||||
|
fprintf(fout,
|
||||||
|
"include(\"${CMAKE_ROOT}/Modules/Internal/"
|
||||||
|
"HeaderpadWorkaround.cmake\")\n");
|
||||||
|
|
||||||
if (targetType == cmStateEnums::EXECUTABLE) {
|
if (targetType == cmStateEnums::EXECUTABLE) {
|
||||||
/* Put the executable at a known location (for COPY_FILE). */
|
/* Put the executable at a known location (for COPY_FILE). */
|
||||||
fprintf(fout, "set(CMAKE_RUNTIME_OUTPUT_DIRECTORY \"%s\")\n",
|
fprintf(fout, "set(CMAKE_RUNTIME_OUTPUT_DIRECTORY \"%s\")\n",
|
||||||
|
@ -7,19 +7,79 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <cmext/string_view>
|
||||||
|
|
||||||
#include "cmsys/RegularExpression.hxx"
|
#include "cmsys/RegularExpression.hxx"
|
||||||
|
|
||||||
#include "cmGeneratorExpression.h"
|
#include "cmGeneratorExpression.h"
|
||||||
#include "cmListFileCache.h"
|
#include "cmListFileCache.h"
|
||||||
#include "cmLocalGenerator.h"
|
#include "cmLocalGenerator.h"
|
||||||
|
#include "cmMakefile.h"
|
||||||
#include "cmMessageType.h"
|
#include "cmMessageType.h"
|
||||||
#include "cmStringAlgorithms.h"
|
#include "cmStringAlgorithms.h"
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
#include "cmake.h"
|
#include "cmake.h"
|
||||||
|
|
||||||
cmFileSet::cmFileSet(std::string name, std::string type)
|
cm::static_string_view cmFileSetVisibilityToName(cmFileSetVisibility vis)
|
||||||
|
{
|
||||||
|
switch (vis) {
|
||||||
|
case cmFileSetVisibility::Interface:
|
||||||
|
return "INTERFACE"_s;
|
||||||
|
case cmFileSetVisibility::Public:
|
||||||
|
return "PUBLIC"_s;
|
||||||
|
case cmFileSetVisibility::Private:
|
||||||
|
return "PRIVATE"_s;
|
||||||
|
}
|
||||||
|
return ""_s;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmFileSetVisibility cmFileSetVisibilityFromName(cm::string_view name,
|
||||||
|
cmMakefile* mf)
|
||||||
|
{
|
||||||
|
if (name == "INTERFACE"_s) {
|
||||||
|
return cmFileSetVisibility::Interface;
|
||||||
|
}
|
||||||
|
if (name == "PUBLIC"_s) {
|
||||||
|
return cmFileSetVisibility::Public;
|
||||||
|
}
|
||||||
|
if (name == "PRIVATE"_s) {
|
||||||
|
return cmFileSetVisibility::Private;
|
||||||
|
}
|
||||||
|
mf->IssueMessage(
|
||||||
|
MessageType::FATAL_ERROR,
|
||||||
|
cmStrCat("File set visibility \"", name, "\" is not valid."));
|
||||||
|
return cmFileSetVisibility::Private;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmFileSetVisibilityIsForSelf(cmFileSetVisibility vis)
|
||||||
|
{
|
||||||
|
switch (vis) {
|
||||||
|
case cmFileSetVisibility::Interface:
|
||||||
|
return false;
|
||||||
|
case cmFileSetVisibility::Public:
|
||||||
|
case cmFileSetVisibility::Private:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmFileSetVisibilityIsForInterface(cmFileSetVisibility vis)
|
||||||
|
{
|
||||||
|
switch (vis) {
|
||||||
|
case cmFileSetVisibility::Interface:
|
||||||
|
case cmFileSetVisibility::Public:
|
||||||
|
return true;
|
||||||
|
case cmFileSetVisibility::Private:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmFileSet::cmFileSet(std::string name, std::string type,
|
||||||
|
cmFileSetVisibility visibility)
|
||||||
: Name(std::move(name))
|
: Name(std::move(name))
|
||||||
, Type(std::move(type))
|
, Type(std::move(type))
|
||||||
|
, Visibility(visibility)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,20 +7,38 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <cm/string_view>
|
||||||
|
#include <cmext/string_view>
|
||||||
|
|
||||||
#include "cmListFileCache.h"
|
#include "cmListFileCache.h"
|
||||||
|
|
||||||
class cmCompiledGeneratorExpression;
|
class cmCompiledGeneratorExpression;
|
||||||
struct cmGeneratorExpressionDAGChecker;
|
struct cmGeneratorExpressionDAGChecker;
|
||||||
class cmGeneratorTarget;
|
class cmGeneratorTarget;
|
||||||
class cmLocalGenerator;
|
class cmLocalGenerator;
|
||||||
|
class cmMakefile;
|
||||||
|
|
||||||
|
enum class cmFileSetVisibility
|
||||||
|
{
|
||||||
|
Private,
|
||||||
|
Public,
|
||||||
|
Interface,
|
||||||
|
};
|
||||||
|
cm::static_string_view cmFileSetVisibilityToName(cmFileSetVisibility vis);
|
||||||
|
cmFileSetVisibility cmFileSetVisibilityFromName(cm::string_view name,
|
||||||
|
cmMakefile* mf);
|
||||||
|
bool cmFileSetVisibilityIsForSelf(cmFileSetVisibility vis);
|
||||||
|
bool cmFileSetVisibilityIsForInterface(cmFileSetVisibility vis);
|
||||||
|
|
||||||
class cmFileSet
|
class cmFileSet
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cmFileSet(std::string name, std::string type);
|
cmFileSet(std::string name, std::string type,
|
||||||
|
cmFileSetVisibility visibility);
|
||||||
|
|
||||||
const std::string& GetName() const { return this->Name; }
|
const std::string& GetName() const { return this->Name; }
|
||||||
const std::string& GetType() const { return this->Type; }
|
const std::string& GetType() const { return this->Type; }
|
||||||
|
cmFileSetVisibility GetVisibility() const { return this->Visibility; }
|
||||||
|
|
||||||
void ClearDirectoryEntries();
|
void ClearDirectoryEntries();
|
||||||
void AddDirectoryEntry(BT<std::string> directories);
|
void AddDirectoryEntry(BT<std::string> directories);
|
||||||
@ -61,6 +79,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
std::string Name;
|
std::string Name;
|
||||||
std::string Type;
|
std::string Type;
|
||||||
|
cmFileSetVisibility Visibility;
|
||||||
std::vector<BT<std::string>> DirectoryEntries;
|
std::vector<BT<std::string>> DirectoryEntries;
|
||||||
std::vector<BT<std::string>> FileEntries;
|
std::vector<BT<std::string>> FileEntries;
|
||||||
};
|
};
|
||||||
|
@ -2469,12 +2469,12 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
|
|||||||
static const std::array<std::string, 4> langs = { { "C", "CXX", "OBJC",
|
static const std::array<std::string, 4> langs = { { "C", "CXX", "OBJC",
|
||||||
"OBJCXX" } };
|
"OBJCXX" } };
|
||||||
|
|
||||||
bool haveAnyPch = false;
|
std::set<std::string> pchLangSet;
|
||||||
if (this->GetGlobalGenerator()->IsXcode()) {
|
if (this->GetGlobalGenerator()->IsXcode()) {
|
||||||
for (const std::string& lang : langs) {
|
for (const std::string& lang : langs) {
|
||||||
const std::string pchHeader = target->GetPchHeader(config, lang, "");
|
const std::string pchHeader = target->GetPchHeader(config, lang, "");
|
||||||
if (!pchHeader.empty()) {
|
if (!pchHeader.empty()) {
|
||||||
haveAnyPch = true;
|
pchLangSet.emplace(lang);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2519,9 +2519,11 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
|
|||||||
const std::string pchHeader = target->GetPchHeader(config, lang, arch);
|
const std::string pchHeader = target->GetPchHeader(config, lang, arch);
|
||||||
|
|
||||||
if (pchSource.empty() || pchHeader.empty()) {
|
if (pchSource.empty() || pchHeader.empty()) {
|
||||||
if (this->GetGlobalGenerator()->IsXcode() && haveAnyPch) {
|
if (this->GetGlobalGenerator()->IsXcode() && !pchLangSet.empty()) {
|
||||||
for (auto* sf : sources) {
|
for (auto* sf : sources) {
|
||||||
sf->SetProperty("SKIP_PRECOMPILE_HEADERS", "ON");
|
if (pchLangSet.find(sf->GetLanguage()) == pchLangSet.end()) {
|
||||||
|
sf->SetProperty("SKIP_PRECOMPILE_HEADERS", "ON");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -1678,28 +1678,32 @@ void cmNinjaTargetGenerator::ExportObjectCompileCommand(
|
|||||||
compileObjectVars.Includes = includes.c_str();
|
compileObjectVars.Includes = includes.c_str();
|
||||||
|
|
||||||
// Rule for compiling object file.
|
// Rule for compiling object file.
|
||||||
std::vector<std::string> compileCmds;
|
std::string cudaCompileMode;
|
||||||
if (language == "CUDA") {
|
if (language == "CUDA") {
|
||||||
std::string cmdVar;
|
|
||||||
if (this->GeneratorTarget->GetPropertyAsBool(
|
if (this->GeneratorTarget->GetPropertyAsBool(
|
||||||
"CUDA_SEPARABLE_COMPILATION")) {
|
"CUDA_SEPARABLE_COMPILATION")) {
|
||||||
cmdVar = "CMAKE_CUDA_COMPILE_SEPARABLE_COMPILATION";
|
const std::string& rdcFlag =
|
||||||
} else if (this->GeneratorTarget->GetPropertyAsBool(
|
this->Makefile->GetRequiredDefinition("_CMAKE_CUDA_RDC_FLAG");
|
||||||
"CUDA_PTX_COMPILATION")) {
|
cudaCompileMode = cmStrCat(cudaCompileMode, rdcFlag, " ");
|
||||||
cmdVar = "CMAKE_CUDA_COMPILE_PTX_COMPILATION";
|
|
||||||
} else {
|
|
||||||
cmdVar = "CMAKE_CUDA_COMPILE_WHOLE_COMPILATION";
|
|
||||||
}
|
}
|
||||||
const std::string& compileCmd =
|
if (this->GeneratorTarget->GetPropertyAsBool("CUDA_PTX_COMPILATION")) {
|
||||||
this->GetMakefile()->GetRequiredDefinition(cmdVar);
|
const std::string& ptxFlag =
|
||||||
cmExpandList(compileCmd, compileCmds);
|
this->Makefile->GetRequiredDefinition("_CMAKE_CUDA_PTX_FLAG");
|
||||||
} else {
|
cudaCompileMode = cmStrCat(cudaCompileMode, ptxFlag);
|
||||||
const std::string cmdVar = cmStrCat("CMAKE_", language, "_COMPILE_OBJECT");
|
} else {
|
||||||
const std::string& compileCmd =
|
const std::string& wholeFlag =
|
||||||
this->GetMakefile()->GetRequiredDefinition(cmdVar);
|
this->Makefile->GetRequiredDefinition("_CMAKE_CUDA_WHOLE_FLAG");
|
||||||
cmExpandList(compileCmd, compileCmds);
|
cudaCompileMode = cmStrCat(cudaCompileMode, wholeFlag);
|
||||||
|
}
|
||||||
|
compileObjectVars.CudaCompileMode = cudaCompileMode.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> compileCmds;
|
||||||
|
const std::string cmdVar = cmStrCat("CMAKE_", language, "_COMPILE_OBJECT");
|
||||||
|
const std::string& compileCmd =
|
||||||
|
this->Makefile->GetRequiredDefinition(cmdVar);
|
||||||
|
cmExpandList(compileCmd, compileCmds);
|
||||||
|
|
||||||
std::unique_ptr<cmRulePlaceholderExpander> rulePlaceholderExpander(
|
std::unique_ptr<cmRulePlaceholderExpander> rulePlaceholderExpander(
|
||||||
this->GetLocalGenerator()->CreateRulePlaceholderExpander());
|
this->GetLocalGenerator()->CreateRulePlaceholderExpander());
|
||||||
|
|
||||||
|
@ -1456,37 +1456,14 @@ void cmTarget::StoreProperty(const std::string& prop, ValueType value)
|
|||||||
BT<std::string>(value, this->impl->Makefile->GetBacktrace()));
|
BT<std::string>(value, this->impl->Makefile->GetBacktrace()));
|
||||||
}
|
}
|
||||||
} else if (prop == propHEADER_SETS) {
|
} else if (prop == propHEADER_SETS) {
|
||||||
if (value) {
|
this->impl->Makefile->IssueMessage(MessageType::FATAL_ERROR,
|
||||||
for (auto const& name : cmExpandedList(value)) {
|
"HEADER_SETS property is read-only\n");
|
||||||
if (!this->GetFileSet(name)) {
|
return;
|
||||||
this->impl->Makefile->IssueMessage(
|
|
||||||
MessageType::FATAL_ERROR,
|
|
||||||
cmStrCat("Header set \"", name, "\" has not yet been created."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->impl->HeaderSetsEntries.clear();
|
|
||||||
if (!StringIsEmpty(value)) {
|
|
||||||
this->impl->HeaderSetsEntries.emplace_back(
|
|
||||||
value, this->impl->Makefile->GetBacktrace());
|
|
||||||
}
|
|
||||||
} else if (prop == propINTERFACE_HEADER_SETS) {
|
} else if (prop == propINTERFACE_HEADER_SETS) {
|
||||||
if (value) {
|
this->impl->Makefile->IssueMessage(
|
||||||
for (auto const& name : cmExpandedList(value)) {
|
MessageType::FATAL_ERROR,
|
||||||
if (!this->GetFileSet(name)) {
|
"INTERFACE_HEADER_SETS property is read-only\n");
|
||||||
this->impl->Makefile->IssueMessage(
|
return;
|
||||||
MessageType::FATAL_ERROR,
|
|
||||||
cmStrCat("Header set \"", name, "\" has not yet been created."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->impl->InterfaceHeaderSetsEntries.clear();
|
|
||||||
if (!StringIsEmpty(value)) {
|
|
||||||
this->impl->InterfaceHeaderSetsEntries.emplace_back(
|
|
||||||
value, this->impl->Makefile->GetBacktrace());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
this->impl->Properties.SetProperty(prop, value);
|
this->impl->Properties.SetProperty(prop, value);
|
||||||
}
|
}
|
||||||
@ -1641,27 +1618,14 @@ void cmTarget::AppendProperty(const std::string& prop,
|
|||||||
fileSet->AddFileEntry(
|
fileSet->AddFileEntry(
|
||||||
BT<std::string>(value, this->impl->Makefile->GetBacktrace()));
|
BT<std::string>(value, this->impl->Makefile->GetBacktrace()));
|
||||||
} else if (prop == "HEADER_SETS") {
|
} else if (prop == "HEADER_SETS") {
|
||||||
for (auto const& name : cmExpandedList(value)) {
|
this->impl->Makefile->IssueMessage(MessageType::FATAL_ERROR,
|
||||||
if (!this->GetFileSet(name)) {
|
"HEADER_SETS property is read-only\n");
|
||||||
this->impl->Makefile->IssueMessage(
|
return;
|
||||||
MessageType::FATAL_ERROR,
|
|
||||||
cmStrCat("Header set \"", name, "\" has not yet been created."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->impl->HeaderSetsEntries.emplace_back(
|
|
||||||
value, this->impl->Makefile->GetBacktrace());
|
|
||||||
} else if (prop == "INTERFACE_HEADER_SETS") {
|
} else if (prop == "INTERFACE_HEADER_SETS") {
|
||||||
for (auto const& name : cmExpandedList(value)) {
|
this->impl->Makefile->IssueMessage(
|
||||||
if (!this->GetFileSet(name)) {
|
MessageType::FATAL_ERROR,
|
||||||
this->impl->Makefile->IssueMessage(
|
"INTERFACE_HEADER_SETS property is read-only\n");
|
||||||
MessageType::FATAL_ERROR,
|
return;
|
||||||
cmStrCat("Header set \"", name, "\" has not yet been created."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->impl->InterfaceHeaderSetsEntries.emplace_back(
|
|
||||||
value, this->impl->Makefile->GetBacktrace());
|
|
||||||
} else {
|
} else {
|
||||||
this->impl->Properties.AppendProperty(prop, value, asString);
|
this->impl->Properties.AppendProperty(prop, value, asString);
|
||||||
}
|
}
|
||||||
@ -2038,13 +2002,26 @@ cmValue cmTarget::GetProperty(const std::string& prop) const
|
|||||||
return cmValue(output);
|
return cmValue(output);
|
||||||
}
|
}
|
||||||
if (prop == propHEADER_SETS) {
|
if (prop == propHEADER_SETS) {
|
||||||
|
std::vector<std::string> set_names;
|
||||||
|
for (auto const& file_set : this->impl->FileSets) {
|
||||||
|
if (cmFileSetVisibilityIsForSelf(file_set.second.GetVisibility())) {
|
||||||
|
set_names.push_back(file_set.second.GetName());
|
||||||
|
}
|
||||||
|
}
|
||||||
static std::string output;
|
static std::string output;
|
||||||
output = cmJoin(this->impl->HeaderSetsEntries, ";"_s);
|
output = cmJoin(set_names, ";"_s);
|
||||||
return cmValue(output);
|
return cmValue(output);
|
||||||
}
|
}
|
||||||
if (prop == propINTERFACE_HEADER_SETS) {
|
if (prop == propINTERFACE_HEADER_SETS) {
|
||||||
|
std::vector<std::string> set_names;
|
||||||
|
for (auto const& file_set : this->impl->FileSets) {
|
||||||
|
if (cmFileSetVisibilityIsForInterface(
|
||||||
|
file_set.second.GetVisibility())) {
|
||||||
|
set_names.push_back(file_set.second.GetName());
|
||||||
|
}
|
||||||
|
}
|
||||||
static std::string output;
|
static std::string output;
|
||||||
output = cmJoin(this->impl->InterfaceHeaderSetsEntries, ";"_s);
|
output = cmJoin(set_names, ";"_s);
|
||||||
return cmValue(output);
|
return cmValue(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2342,10 +2319,20 @@ cmFileSet* cmTarget::GetFileSet(const std::string& name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::pair<cmFileSet*, bool> cmTarget::GetOrCreateFileSet(
|
std::pair<cmFileSet*, bool> cmTarget::GetOrCreateFileSet(
|
||||||
const std::string& name, const std::string& type)
|
const std::string& name, const std::string& type, cmFileSetVisibility vis)
|
||||||
{
|
{
|
||||||
auto result =
|
auto result = this->impl->FileSets.emplace(
|
||||||
this->impl->FileSets.emplace(std::make_pair(name, cmFileSet(name, type)));
|
std::make_pair(name, cmFileSet(name, type, vis)));
|
||||||
|
if (result.second) {
|
||||||
|
if (cmFileSetVisibilityIsForSelf(vis)) {
|
||||||
|
this->impl->HeaderSetsEntries.emplace_back(
|
||||||
|
name, this->impl->Makefile->GetBacktrace());
|
||||||
|
}
|
||||||
|
if (cmFileSetVisibilityIsForInterface(vis)) {
|
||||||
|
this->impl->InterfaceHeaderSetsEntries.emplace_back(
|
||||||
|
name, this->impl->Makefile->GetBacktrace());
|
||||||
|
}
|
||||||
|
}
|
||||||
return std::make_pair(&result.first->second, result.second);
|
return std::make_pair(&result.first->second, result.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "cmAlgorithms.h"
|
#include "cmAlgorithms.h"
|
||||||
|
#include "cmFileSet.h"
|
||||||
#include "cmPolicies.h"
|
#include "cmPolicies.h"
|
||||||
#include "cmStateTypes.h"
|
#include "cmStateTypes.h"
|
||||||
#include "cmStringAlgorithms.h"
|
#include "cmStringAlgorithms.h"
|
||||||
@ -19,7 +20,6 @@
|
|||||||
#include "cmValue.h"
|
#include "cmValue.h"
|
||||||
|
|
||||||
class cmCustomCommand;
|
class cmCustomCommand;
|
||||||
class cmFileSet;
|
|
||||||
class cmGlobalGenerator;
|
class cmGlobalGenerator;
|
||||||
class cmInstallTargetGenerator;
|
class cmInstallTargetGenerator;
|
||||||
class cmListFileBacktrace;
|
class cmListFileBacktrace;
|
||||||
@ -285,7 +285,8 @@ public:
|
|||||||
const cmFileSet* GetFileSet(const std::string& name) const;
|
const cmFileSet* GetFileSet(const std::string& name) const;
|
||||||
cmFileSet* GetFileSet(const std::string& name);
|
cmFileSet* GetFileSet(const std::string& name);
|
||||||
std::pair<cmFileSet*, bool> GetOrCreateFileSet(const std::string& name,
|
std::pair<cmFileSet*, bool> GetOrCreateFileSet(const std::string& name,
|
||||||
const std::string& type);
|
const std::string& type,
|
||||||
|
cmFileSetVisibility vis);
|
||||||
|
|
||||||
std::vector<std::string> GetAllInterfaceFileSets() const;
|
std::vector<std::string> GetAllInterfaceFileSets() const;
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||||
#include "cmTargetSourcesCommand.h"
|
#include "cmTargetSourcesCommand.h"
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
@ -230,12 +229,20 @@ bool TargetSourcesImpl::HandleOneFileSet(
|
|||||||
this->SetError("FILE_SETs may not be added to custom targets");
|
this->SetError("FILE_SETs may not be added to custom targets");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (this->Target->IsFrameworkOnApple()) {
|
||||||
|
this->SetError("FILE_SETs may not be added to FRAMEWORK targets");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool const isDefault = args.Type == args.FileSet ||
|
bool const isDefault = args.Type == args.FileSet ||
|
||||||
(args.Type.empty() && args.FileSet[0] >= 'A' && args.FileSet[0] <= 'Z');
|
(args.Type.empty() && args.FileSet[0] >= 'A' && args.FileSet[0] <= 'Z');
|
||||||
std::string type = isDefault ? args.FileSet : args.Type;
|
std::string type = isDefault ? args.FileSet : args.Type;
|
||||||
|
|
||||||
auto fileSet = this->Target->GetOrCreateFileSet(args.FileSet, type);
|
cmFileSetVisibility visibility =
|
||||||
|
cmFileSetVisibilityFromName(scope, this->Makefile);
|
||||||
|
|
||||||
|
auto fileSet =
|
||||||
|
this->Target->GetOrCreateFileSet(args.FileSet, type, visibility);
|
||||||
if (fileSet.second) {
|
if (fileSet.second) {
|
||||||
if (!isDefault) {
|
if (!isDefault) {
|
||||||
if (!cmFileSet::IsValidName(args.FileSet)) {
|
if (!cmFileSet::IsValidName(args.FileSet)) {
|
||||||
@ -257,15 +264,6 @@ bool TargetSourcesImpl::HandleOneFileSet(
|
|||||||
if (args.BaseDirs.empty()) {
|
if (args.BaseDirs.empty()) {
|
||||||
args.BaseDirs.emplace_back(this->Makefile->GetCurrentSourceDirectory());
|
args.BaseDirs.emplace_back(this->Makefile->GetCurrentSourceDirectory());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scope == "PRIVATE"_s || scope == "PUBLIC"_s) {
|
|
||||||
this->Target->AppendProperty(cmTarget::GetFileSetsPropertyName(type),
|
|
||||||
args.FileSet);
|
|
||||||
}
|
|
||||||
if (scope == "INTERFACE"_s || scope == "PUBLIC"_s) {
|
|
||||||
this->Target->AppendProperty(
|
|
||||||
cmTarget::GetInterfaceFileSetsPropertyName(type), args.FileSet);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
type = fileSet.first->GetType();
|
type = fileSet.first->GetType();
|
||||||
if (!args.Type.empty() && args.Type != type) {
|
if (!args.Type.empty() && args.Type != type) {
|
||||||
@ -275,37 +273,11 @@ bool TargetSourcesImpl::HandleOneFileSet(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string existingScope = "PRIVATE";
|
if (visibility != fileSet.first->GetVisibility()) {
|
||||||
|
|
||||||
auto const fileSetsProperty = cmTarget::GetFileSetsPropertyName(type);
|
|
||||||
auto const interfaceFileSetsProperty =
|
|
||||||
cmTarget::GetInterfaceFileSetsPropertyName(type);
|
|
||||||
std::vector<std::string> fileSets;
|
|
||||||
std::vector<std::string> interfaceFileSets;
|
|
||||||
cmExpandList(this->Target->GetSafeProperty(fileSetsProperty), fileSets);
|
|
||||||
cmExpandList(this->Target->GetSafeProperty(interfaceFileSetsProperty),
|
|
||||||
interfaceFileSets);
|
|
||||||
|
|
||||||
if (std::find(interfaceFileSets.begin(), interfaceFileSets.end(),
|
|
||||||
args.FileSet) != interfaceFileSets.end()) {
|
|
||||||
existingScope = "INTERFACE";
|
|
||||||
}
|
|
||||||
if (std::find(fileSets.begin(), fileSets.end(), args.FileSet) !=
|
|
||||||
fileSets.end()) {
|
|
||||||
if (existingScope == "INTERFACE"_s) {
|
|
||||||
existingScope = "PUBLIC";
|
|
||||||
}
|
|
||||||
} else if (existingScope != "INTERFACE"_s) {
|
|
||||||
this->SetError(cmStrCat("File set \"", args.FileSet, "\" is not in ",
|
|
||||||
fileSetsProperty, " or ",
|
|
||||||
interfaceFileSetsProperty));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (scope != existingScope) {
|
|
||||||
this->SetError(
|
this->SetError(
|
||||||
cmStrCat("Scope ", scope, " for file set \"", args.FileSet,
|
cmStrCat("Scope ", scope, " for file set \"", args.FileSet,
|
||||||
"\" does not match original scope ", existingScope));
|
"\" does not match original scope ",
|
||||||
|
cmFileSetVisibilityToName(fileSet.first->GetVisibility())));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -326,11 +298,11 @@ bool TargetSourcesImpl::HandleOneFileSet(
|
|||||||
for (auto const& dir : cmExpandedList(baseDirectories)) {
|
for (auto const& dir : cmExpandedList(baseDirectories)) {
|
||||||
auto interfaceDirectoriesGenex =
|
auto interfaceDirectoriesGenex =
|
||||||
cmStrCat("$<BUILD_INTERFACE:", dir, ">");
|
cmStrCat("$<BUILD_INTERFACE:", dir, ">");
|
||||||
if (scope == "PRIVATE"_s || scope == "PUBLIC"_s) {
|
if (cmFileSetVisibilityIsForSelf(visibility)) {
|
||||||
this->Target->AppendProperty("INCLUDE_DIRECTORIES",
|
this->Target->AppendProperty("INCLUDE_DIRECTORIES",
|
||||||
interfaceDirectoriesGenex);
|
interfaceDirectoriesGenex);
|
||||||
}
|
}
|
||||||
if (scope == "INTERFACE"_s || scope == "PUBLIC"_s) {
|
if (cmFileSetVisibilityIsForInterface(visibility)) {
|
||||||
this->Target->AppendProperty("INTERFACE_INCLUDE_DIRECTORIES",
|
this->Target->AppendProperty("INTERFACE_INCLUDE_DIRECTORIES",
|
||||||
interfaceDirectoriesGenex);
|
interfaceDirectoriesGenex);
|
||||||
}
|
}
|
||||||
|
@ -306,10 +306,11 @@ int do_cmake(int ac, char const* const* av)
|
|||||||
parsedArgs.emplace_back("--find-package");
|
parsedArgs.emplace_back("--find-package");
|
||||||
return true;
|
return true;
|
||||||
} },
|
} },
|
||||||
CommandArgument{ "--list-presets", CommandArgument::Values::Zero,
|
CommandArgument{ "--list-presets", CommandArgument::Values::ZeroOrOne,
|
||||||
[&](std::string const&) -> bool {
|
[&](std::string const& value) -> bool {
|
||||||
workingMode = cmake::HELP_MODE;
|
workingMode = cmake::HELP_MODE;
|
||||||
parsedArgs.emplace_back("--list-presets");
|
parsedArgs.emplace_back("--list-presets");
|
||||||
|
parsedArgs.emplace_back(value);
|
||||||
return true;
|
return true;
|
||||||
} },
|
} },
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
cmake_minimum_required(VERSION 3.18)
|
cmake_minimum_required(VERSION 3.18)
|
||||||
project(WithDefs CUDA)
|
project(WithDefs CUDA)
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
set(release_compile_defs DEFREL)
|
set(release_compile_defs DEFREL)
|
||||||
|
|
||||||
#Goal for this example:
|
#Goal for this example:
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
^Not searching for unused variables given on the command line\.
|
||||||
|
Available configure presets:
|
||||||
|
|
||||||
|
"zzzzzz" - Sleepy
|
||||||
|
"aaaaaaaa" - Screaming
|
||||||
|
"mmmmmm"
|
||||||
|
"no-generator"$
|
@ -71,13 +71,18 @@ function(run_cmake_presets name)
|
|||||||
set(_unused_cli)
|
set(_unused_cli)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(_preset "--preset=${name}")
|
||||||
|
if(CMakePresets_NO_PRESET)
|
||||||
|
set(_preset)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(RunCMake_TEST_COMMAND ${CMAKE_COMMAND}
|
set(RunCMake_TEST_COMMAND ${CMAKE_COMMAND}
|
||||||
${_source_args}
|
${_source_args}
|
||||||
-DRunCMake_TEST=${name}
|
-DRunCMake_TEST=${name}
|
||||||
-DRunCMake_GENERATOR=${RunCMake_GENERATOR}
|
-DRunCMake_GENERATOR=${RunCMake_GENERATOR}
|
||||||
-DCMAKE_MAKE_PROGRAM=${RunCMake_MAKE_PROGRAM}
|
-DCMAKE_MAKE_PROGRAM=${RunCMake_MAKE_PROGRAM}
|
||||||
${_unused_cli}
|
${_unused_cli}
|
||||||
--preset=${name}
|
${_preset}
|
||||||
${ARGN}
|
${ARGN}
|
||||||
)
|
)
|
||||||
run_cmake(${name})
|
run_cmake(${name})
|
||||||
@ -288,7 +293,10 @@ run_cmake_presets(ListPresets --list-presets)
|
|||||||
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/ListPresetsWorkingDir")
|
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/ListPresetsWorkingDir")
|
||||||
set(RunCMake_TEST_NO_CLEAN 1)
|
set(RunCMake_TEST_NO_CLEAN 1)
|
||||||
set(CMakePresets_NO_SOURCE_ARGS 1)
|
set(CMakePresets_NO_SOURCE_ARGS 1)
|
||||||
|
set(CMakePresets_NO_PRESET 1)
|
||||||
run_cmake_presets(ListPresetsWorkingDir --list-presets)
|
run_cmake_presets(ListPresetsWorkingDir --list-presets)
|
||||||
|
run_cmake_presets(ListConfigurePresetsWorkingDir --list-presets=configure)
|
||||||
|
unset(CMakePresets_NO_PRESET)
|
||||||
unset(CMakePresets_NO_SOURCE_ARGS)
|
unset(CMakePresets_NO_SOURCE_ARGS)
|
||||||
unset(RunCMake_TEST_NO_CLEAN)
|
unset(RunCMake_TEST_NO_CLEAN)
|
||||||
unset(RunCMake_TEST_BINARY_DIR)
|
unset(RunCMake_TEST_BINARY_DIR)
|
||||||
|
@ -4,6 +4,10 @@ include(CheckCompilerFlag)
|
|||||||
|
|
||||||
set(C 1) # test that this is tolerated
|
set(C 1) # test that this is tolerated
|
||||||
|
|
||||||
|
# test that the check uses an isolated locale
|
||||||
|
set(_env_LC_ALL "${LC_ALL}")
|
||||||
|
set(ENV{LC_ALL} "BAD")
|
||||||
|
|
||||||
check_compiler_flag(C "-_this_is_not_a_flag_" SHOULD_FAIL)
|
check_compiler_flag(C "-_this_is_not_a_flag_" SHOULD_FAIL)
|
||||||
if(SHOULD_FAIL)
|
if(SHOULD_FAIL)
|
||||||
message(SEND_ERROR "invalid C compile flag didn't fail.")
|
message(SEND_ERROR "invalid C compile flag didn't fail.")
|
||||||
@ -22,3 +26,8 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU") # LCC C compiler silently ignore -frtti i
|
|||||||
message(SEND_ERROR "${CMAKE_C_COMPILER_ID} compiler flag '-frtti' check passed but should have failed")
|
message(SEND_ERROR "${CMAKE_C_COMPILER_ID} compiler flag '-frtti' check passed but should have failed")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT "$ENV{LC_ALL}" STREQUAL "BAD")
|
||||||
|
message(SEND_ERROR "ENV{LC_ALL} was not preserved by check_compiler_flag")
|
||||||
|
endif()
|
||||||
|
set(ENV{LC_ALL} ${_env_LC_ALL})
|
||||||
|
@ -4,6 +4,10 @@ include(CheckCompilerFlag)
|
|||||||
|
|
||||||
set(CXX 1) # test that this is tolerated
|
set(CXX 1) # test that this is tolerated
|
||||||
|
|
||||||
|
# test that the check uses an isolated locale
|
||||||
|
set(_env_LC_ALL "${LC_ALL}")
|
||||||
|
set(ENV{LC_ALL} "BAD")
|
||||||
|
|
||||||
check_compiler_flag(CXX "-_this_is_not_a_flag_" SHOULD_FAIL)
|
check_compiler_flag(CXX "-_this_is_not_a_flag_" SHOULD_FAIL)
|
||||||
if(SHOULD_FAIL)
|
if(SHOULD_FAIL)
|
||||||
message(SEND_ERROR "invalid CXX compile flag didn't fail.")
|
message(SEND_ERROR "invalid CXX compile flag didn't fail.")
|
||||||
@ -15,3 +19,8 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|LCC|Clang" AND NOT "x${CMAKE_CXX_SIMULATE_
|
|||||||
message(SEND_ERROR "${CMAKE_CXX_COMPILER_ID} compiler flag '-x c++' check failed")
|
message(SEND_ERROR "${CMAKE_CXX_COMPILER_ID} compiler flag '-x c++' check failed")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT "$ENV{LC_ALL}" STREQUAL "BAD")
|
||||||
|
message(SEND_ERROR "ENV{LC_ALL} was not preserved by check_compiler_flag")
|
||||||
|
endif()
|
||||||
|
set(ENV{LC_ALL} ${_env_LC_ALL})
|
||||||
|
18
Tests/RunCMake/CheckCompilerFlag/HeaderpadWorkaround.cmake
Normal file
18
Tests/RunCMake/CheckCompilerFlag/HeaderpadWorkaround.cmake
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
include(CheckCompilerFlag)
|
||||||
|
|
||||||
|
# Confirm we can check the conflicting flag directly. This should pass with
|
||||||
|
# or without the workaround.
|
||||||
|
check_compiler_flag(C "-fembed-bitcode" result1)
|
||||||
|
if(NOT result1)
|
||||||
|
message(FATAL_ERROR "False negative when -fembed-bitcode tested directly")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check conflicting flag set by user or project won't cause a false negative
|
||||||
|
# when testing a valid flag. This only passes with the workaround.
|
||||||
|
set(CMAKE_C_FLAGS -fembed-bitcode)
|
||||||
|
check_compiler_flag(C "-O" result2)
|
||||||
|
if(NOT result2)
|
||||||
|
message(FATAL_ERROR "False negative when -fembed-bitcode set in CMAKE_C_FLAGS")
|
||||||
|
endif()
|
@ -26,3 +26,7 @@ endif()
|
|||||||
if(CMake_TEST_HIP)
|
if(CMake_TEST_HIP)
|
||||||
run_cmake(CheckHIPCompilerFlag)
|
run_cmake(CheckHIPCompilerFlag)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
run_cmake_with_options(HeaderpadWorkaround --debug-trycompile)
|
||||||
|
endif()
|
||||||
|
@ -4,7 +4,7 @@ CMAKE_INSTALL_DATAROOTDIR='usr/share'
|
|||||||
CMAKE_INSTALL_DOCDIR='usr/share/doc/Root'
|
CMAKE_INSTALL_DOCDIR='usr/share/doc/Root'
|
||||||
CMAKE_INSTALL_INCLUDEDIR='usr/include'
|
CMAKE_INSTALL_INCLUDEDIR='usr/include'
|
||||||
CMAKE_INSTALL_INFODIR='usr/share/info'
|
CMAKE_INSTALL_INFODIR='usr/share/info'
|
||||||
CMAKE_INSTALL_LIBDIR='usr/lib/arch'
|
CMAKE_INSTALL_LIBDIR='usr/lib'
|
||||||
CMAKE_INSTALL_LIBEXECDIR='usr/libexec'
|
CMAKE_INSTALL_LIBEXECDIR='usr/libexec'
|
||||||
CMAKE_INSTALL_LOCALEDIR='usr/share/locale'
|
CMAKE_INSTALL_LOCALEDIR='usr/share/locale'
|
||||||
CMAKE_INSTALL_LOCALSTATEDIR='var'
|
CMAKE_INSTALL_LOCALSTATEDIR='var'
|
||||||
@ -19,7 +19,7 @@ CMAKE_INSTALL_FULL_DATAROOTDIR='/usr/share'
|
|||||||
CMAKE_INSTALL_FULL_DOCDIR='/usr/share/doc/Root'
|
CMAKE_INSTALL_FULL_DOCDIR='/usr/share/doc/Root'
|
||||||
CMAKE_INSTALL_FULL_INCLUDEDIR='/usr/include'
|
CMAKE_INSTALL_FULL_INCLUDEDIR='/usr/include'
|
||||||
CMAKE_INSTALL_FULL_INFODIR='/usr/share/info'
|
CMAKE_INSTALL_FULL_INFODIR='/usr/share/info'
|
||||||
CMAKE_INSTALL_FULL_LIBDIR='/usr/lib/arch'
|
CMAKE_INSTALL_FULL_LIBDIR='/usr/lib'
|
||||||
CMAKE_INSTALL_FULL_LIBEXECDIR='/usr/libexec'
|
CMAKE_INSTALL_FULL_LIBEXECDIR='/usr/libexec'
|
||||||
CMAKE_INSTALL_FULL_LOCALEDIR='/usr/share/locale'
|
CMAKE_INSTALL_FULL_LOCALEDIR='/usr/share/locale'
|
||||||
CMAKE_INSTALL_FULL_LOCALSTATEDIR='/var'
|
CMAKE_INSTALL_FULL_LOCALSTATEDIR='/var'
|
||||||
|
@ -4,7 +4,7 @@ CMAKE_INSTALL_DATAROOTDIR='share'
|
|||||||
CMAKE_INSTALL_DOCDIR='share/doc/UsrLocal'
|
CMAKE_INSTALL_DOCDIR='share/doc/UsrLocal'
|
||||||
CMAKE_INSTALL_INCLUDEDIR='include'
|
CMAKE_INSTALL_INCLUDEDIR='include'
|
||||||
CMAKE_INSTALL_INFODIR='share/info'
|
CMAKE_INSTALL_INFODIR='share/info'
|
||||||
CMAKE_INSTALL_LIBDIR='lib/arch'
|
CMAKE_INSTALL_LIBDIR='lib'
|
||||||
CMAKE_INSTALL_LIBEXECDIR='libexec'
|
CMAKE_INSTALL_LIBEXECDIR='libexec'
|
||||||
CMAKE_INSTALL_LOCALEDIR='share/locale'
|
CMAKE_INSTALL_LOCALEDIR='share/locale'
|
||||||
CMAKE_INSTALL_LOCALSTATEDIR='var'
|
CMAKE_INSTALL_LOCALSTATEDIR='var'
|
||||||
@ -19,7 +19,7 @@ CMAKE_INSTALL_FULL_DATAROOTDIR='/usr/local/share'
|
|||||||
CMAKE_INSTALL_FULL_DOCDIR='/usr/local/share/doc/UsrLocal'
|
CMAKE_INSTALL_FULL_DOCDIR='/usr/local/share/doc/UsrLocal'
|
||||||
CMAKE_INSTALL_FULL_INCLUDEDIR='/usr/local/include'
|
CMAKE_INSTALL_FULL_INCLUDEDIR='/usr/local/include'
|
||||||
CMAKE_INSTALL_FULL_INFODIR='/usr/local/share/info'
|
CMAKE_INSTALL_FULL_INFODIR='/usr/local/share/info'
|
||||||
CMAKE_INSTALL_FULL_LIBDIR='/usr/local/lib/arch'
|
CMAKE_INSTALL_FULL_LIBDIR='/usr/local/lib'
|
||||||
CMAKE_INSTALL_FULL_LIBEXECDIR='/usr/local/libexec'
|
CMAKE_INSTALL_FULL_LIBEXECDIR='/usr/local/libexec'
|
||||||
CMAKE_INSTALL_FULL_LOCALEDIR='/usr/local/share/locale'
|
CMAKE_INSTALL_FULL_LOCALEDIR='/usr/local/share/locale'
|
||||||
CMAKE_INSTALL_FULL_LOCALSTATEDIR='/usr/local/var'
|
CMAKE_INSTALL_FULL_LOCALSTATEDIR='/usr/local/var'
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
project(PchIncludedAllLanguages C CXX)
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILE_OPTIONS_USE_PCH)
|
||||||
|
add_definitions(-DHAVE_PCH_SUPPORT)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(main
|
||||||
|
main.cpp
|
||||||
|
empty.c
|
||||||
|
pch-included.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_precompile_headers(main PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/pch.h>)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
add_test(NAME main COMMAND main)
|
@ -30,4 +30,5 @@ if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
|||||||
endif()
|
endif()
|
||||||
run_test(PchReuseFromObjLib)
|
run_test(PchReuseFromObjLib)
|
||||||
run_test(PchIncludedAllLanguages)
|
run_test(PchIncludedAllLanguages)
|
||||||
|
run_test(PchIncludedOneLanguage)
|
||||||
run_test(PchLibObjLibExe)
|
run_test(PchLibObjLibExe)
|
||||||
|
@ -165,7 +165,7 @@ function(run_cmake test)
|
|||||||
"|[^\n]*install_name_tool: warning: changes being made to the file will invalidate the code signature in:"
|
"|[^\n]*install_name_tool: warning: changes being made to the file will invalidate the code signature in:"
|
||||||
"|[^\n]*xcodebuild[^\n]*DVTPlugInManager"
|
"|[^\n]*xcodebuild[^\n]*DVTPlugInManager"
|
||||||
"|[^\n]*xcodebuild[^\n]*warning: file type[^\n]*is based on missing file type"
|
"|[^\n]*xcodebuild[^\n]*warning: file type[^\n]*is based on missing file type"
|
||||||
"|[^\n]*objc[^\n]*: Class AMSupportURL[^\n]* One of the two will be used. Which one is undefined."
|
"|[^\n]*objc[^\n]*: Class [^\n]* One of the two will be used. Which one is undefined."
|
||||||
"|[^\n]*is a member of multiple groups"
|
"|[^\n]*is a member of multiple groups"
|
||||||
"|[^\n]*offset in archive not a multiple of 8"
|
"|[^\n]*offset in archive not a multiple of 8"
|
||||||
"|[^\n]*from Time Machine by path"
|
"|[^\n]*from Time Machine by path"
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
^CMake Error at FileSetFramework\.cmake:[0-9]+ \(target_sources\):
|
||||||
|
target_sources FILE_SETs may not be added to FRAMEWORK targets
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists\.txt:[0-9]+ \(include\)$
|
7
Tests/RunCMake/target_sources/FileSetFramework.cmake
Normal file
7
Tests/RunCMake/target_sources/FileSetFramework.cmake
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
add_library(lib1 SHARED lib1.c)
|
||||||
|
set_property(TARGET lib1 PROPERTY FRAMEWORK ON)
|
||||||
|
target_sources(lib1
|
||||||
|
PUBLIC FILE_SET HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES h1.h
|
||||||
|
)
|
@ -17,7 +17,7 @@ include("${export_build_dir}/export.cmake")
|
|||||||
include("${export_build_dir}/install/lib/cmake/export.cmake")
|
include("${export_build_dir}/install/lib/cmake/export.cmake")
|
||||||
|
|
||||||
assert_prop_eq(export::lib1 HEADER_SETS "")
|
assert_prop_eq(export::lib1 HEADER_SETS "")
|
||||||
assert_prop_eq(export::lib1 INTERFACE_HEADER_SETS "HEADERS;b;c;d;e;f;g;dir3")
|
assert_prop_eq(export::lib1 INTERFACE_HEADER_SETS "HEADERS;b;c;d;dir3;e;f;g")
|
||||||
assert_prop_eq(export::lib1 HEADER_SET "${CMAKE_CURRENT_SOURCE_DIR}/error.c")
|
assert_prop_eq(export::lib1 HEADER_SET "${CMAKE_CURRENT_SOURCE_DIR}/error.c")
|
||||||
assert_prop_eq(export::lib1 HEADER_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
|
assert_prop_eq(export::lib1 HEADER_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
assert_prop_eq(export::lib1 HEADER_SET_b "${CMAKE_CURRENT_SOURCE_DIR}/h2.h")
|
assert_prop_eq(export::lib1 HEADER_SET_b "${CMAKE_CURRENT_SOURCE_DIR}/h2.h")
|
||||||
@ -35,7 +35,7 @@ assert_prop_eq(export::lib1 HEADER_DIRS_g "${CMAKE_CURRENT_SOURCE_DIR}/dir1;${CM
|
|||||||
assert_prop_eq(export::lib1 INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR};$<1:${CMAKE_CURRENT_SOURCE_DIR}/dir>;${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/$<IF:$<CONFIG:Debug>,debug,release>;${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/dir1;${CMAKE_CURRENT_SOURCE_DIR}/dir2;${CMAKE_CURRENT_SOURCE_DIR}/dir3;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:$<1:${CMAKE_CURRENT_SOURCE_DIR}/dir>>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/$<IF:$<CONFIG:Debug>,debug,release>>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir1>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir2>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir3>")
|
assert_prop_eq(export::lib1 INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR};$<1:${CMAKE_CURRENT_SOURCE_DIR}/dir>;${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/$<IF:$<CONFIG:Debug>,debug,release>;${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/dir1;${CMAKE_CURRENT_SOURCE_DIR}/dir2;${CMAKE_CURRENT_SOURCE_DIR}/dir3;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:$<1:${CMAKE_CURRENT_SOURCE_DIR}/dir>>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/$<IF:$<CONFIG:Debug>,debug,release>>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir1>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir2>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir3>")
|
||||||
|
|
||||||
assert_prop_eq(install::lib1 HEADER_SETS "")
|
assert_prop_eq(install::lib1 HEADER_SETS "")
|
||||||
assert_prop_eq(install::lib1 INTERFACE_HEADER_SETS "HEADERS;b;c;d;e;f;g;dir3")
|
assert_prop_eq(install::lib1 INTERFACE_HEADER_SETS "HEADERS;b;c;d;dir3;e;f;g")
|
||||||
assert_prop_eq(install::lib1 HEADER_SET "${export_build_dir}/install/include/error.c")
|
assert_prop_eq(install::lib1 HEADER_SET "${export_build_dir}/install/include/error.c")
|
||||||
assert_prop_eq(install::lib1 HEADER_DIRS "${export_build_dir}/install/include")
|
assert_prop_eq(install::lib1 HEADER_DIRS "${export_build_dir}/install/include")
|
||||||
assert_prop_eq(install::lib1 HEADER_SET_b "${export_build_dir}/install/include/h2.h")
|
assert_prop_eq(install::lib1 HEADER_SET_b "${export_build_dir}/install/include/h2.h")
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
^CMake Error at FileSetNoExistInterface\.cmake:[0-9]+ \(set_property\):
|
|
||||||
Header set "a" has not yet been created\.
|
|
||||||
Call Stack \(most recent call first\):
|
|
||||||
CMakeLists\.txt:[0-9]+ \(include\)$
|
|
@ -1,4 +0,0 @@
|
|||||||
^CMake Error at FileSetNoExistPrivate\.cmake:[0-9]+ \(set_property\):
|
|
||||||
Header set "a" has not yet been created\.
|
|
||||||
Call Stack \(most recent call first\):
|
|
||||||
CMakeLists\.txt:[0-9]+ \(include\)$
|
|
@ -1,7 +0,0 @@
|
|||||||
enable_language(C)
|
|
||||||
|
|
||||||
add_library(lib1 STATIC empty.c)
|
|
||||||
set_property(TARGET lib1 PROPERTY HEADER_SETS "a")
|
|
||||||
|
|
||||||
# Error happens at configure-time, so this doesn't help.
|
|
||||||
target_sources(lib1 PRIVATE FILE_SET a TYPE HEADERS)
|
|
@ -1,4 +0,0 @@
|
|||||||
^CMake Error at FileSetNoScope\.cmake:[0-9]+ \(target_sources\):
|
|
||||||
target_sources File set "a" is not in HEADER_SETS or INTERFACE_HEADER_SETS
|
|
||||||
Call Stack \(most recent call first\):
|
|
||||||
CMakeLists\.txt:[0-9]+ \(include\)$
|
|
@ -1,6 +0,0 @@
|
|||||||
enable_language(C)
|
|
||||||
|
|
||||||
add_library(lib1 STATIC empty.c)
|
|
||||||
target_sources(lib1 PRIVATE FILE_SET a TYPE HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES h1.h)
|
|
||||||
set_property(TARGET lib1 PROPERTY HEADER_SETS)
|
|
||||||
target_sources(lib1 PRIVATE FILE_SET a TYPE HEADERS FILES h2.h)
|
|
@ -57,14 +57,14 @@ assert_prop_eq(lib1 INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURC
|
|||||||
assert_prop_eq(lib1 INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
assert_prop_eq(lib1 INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
||||||
|
|
||||||
target_sources(lib1 PUBLIC FILE_SET HEADERS BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}" FILES h1.h)
|
target_sources(lib1 PUBLIC FILE_SET HEADERS BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}" FILES h1.h)
|
||||||
assert_prop_eq(lib1 INTERFACE_HEADER_SETS "a;c;d;HEADERS")
|
assert_prop_eq(lib1 INTERFACE_HEADER_SETS "HEADERS;a;c;d")
|
||||||
assert_prop_eq(lib1 HEADER_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
|
assert_prop_eq(lib1 HEADER_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
assert_prop_eq(lib1 HEADER_SET "${CMAKE_CURRENT_SOURCE_DIR}/h1.h")
|
assert_prop_eq(lib1 HEADER_SET "${CMAKE_CURRENT_SOURCE_DIR}/h1.h")
|
||||||
assert_prop_eq(lib1 INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
assert_prop_eq(lib1 INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
||||||
assert_prop_eq(lib1 INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
assert_prop_eq(lib1 INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
||||||
|
|
||||||
target_sources(lib1 PUBLIC FILE_SET HEADERS FILES h2.h)
|
target_sources(lib1 PUBLIC FILE_SET HEADERS FILES h2.h)
|
||||||
assert_prop_eq(lib1 INTERFACE_HEADER_SETS "a;c;d;HEADERS")
|
assert_prop_eq(lib1 INTERFACE_HEADER_SETS "HEADERS;a;c;d")
|
||||||
assert_prop_eq(lib1 HEADER_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
|
assert_prop_eq(lib1 HEADER_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
assert_prop_eq(lib1 HEADER_SET "${CMAKE_CURRENT_SOURCE_DIR}/h1.h;${CMAKE_CURRENT_SOURCE_DIR}/h2.h")
|
assert_prop_eq(lib1 HEADER_SET "${CMAKE_CURRENT_SOURCE_DIR}/h1.h;${CMAKE_CURRENT_SOURCE_DIR}/h2.h")
|
||||||
assert_prop_eq(lib1 INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
assert_prop_eq(lib1 INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/.>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/dir>;$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
^CMake Error at FileSetReadOnlyInterface\.cmake:[0-9]+ \(set_property\):
|
||||||
|
INTERFACE_HEADER_SETS property is read-only
|
||||||
|
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists\.txt:[0-9]+ \(include\)$
|
@ -2,6 +2,3 @@ enable_language(C)
|
|||||||
|
|
||||||
add_library(lib1 STATIC empty.c)
|
add_library(lib1 STATIC empty.c)
|
||||||
set_property(TARGET lib1 PROPERTY INTERFACE_HEADER_SETS "a")
|
set_property(TARGET lib1 PROPERTY INTERFACE_HEADER_SETS "a")
|
||||||
|
|
||||||
# Error happens at configure-time, so this doesn't help.
|
|
||||||
target_sources(lib1 INTERFACE FILE_SET a TYPE HEADERS)
|
|
@ -0,0 +1,5 @@
|
|||||||
|
^CMake Error at FileSetReadOnlyPrivate\.cmake:[0-9]+ \(set_property\):
|
||||||
|
HEADER_SETS property is read-only
|
||||||
|
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists\.txt:[0-9]+ \(include\)$
|
@ -0,0 +1,4 @@
|
|||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
add_library(lib1 STATIC empty.c)
|
||||||
|
set_property(TARGET lib1 PROPERTY HEADER_SETS "a")
|
@ -33,13 +33,15 @@ run_cmake(FileSetWrongBaseDirsRelative)
|
|||||||
run_cmake(FileSetOverlappingBaseDirs)
|
run_cmake(FileSetOverlappingBaseDirs)
|
||||||
run_cmake(FileSetInstallMissingSetsPrivate)
|
run_cmake(FileSetInstallMissingSetsPrivate)
|
||||||
run_cmake(FileSetInstallMissingSetsInterface)
|
run_cmake(FileSetInstallMissingSetsInterface)
|
||||||
run_cmake(FileSetNoScope)
|
run_cmake(FileSetReadOnlyPrivate)
|
||||||
run_cmake(FileSetNoExistPrivate)
|
run_cmake(FileSetReadOnlyInterface)
|
||||||
run_cmake(FileSetNoExistInterface)
|
|
||||||
run_cmake(FileSetNoExistInstall)
|
run_cmake(FileSetNoExistInstall)
|
||||||
run_cmake(FileSetDirectories)
|
run_cmake(FileSetDirectories)
|
||||||
run_cmake(FileSetCustomTarget)
|
run_cmake(FileSetCustomTarget)
|
||||||
run_cmake(FileSetBadName)
|
run_cmake(FileSetBadName)
|
||||||
|
if(APPLE)
|
||||||
|
run_cmake(FileSetFramework)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0115=NEW)
|
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0115=NEW)
|
||||||
run_cmake(FileSetFileNoExist)
|
run_cmake(FileSetFileNoExist)
|
||||||
|
@ -32,7 +32,7 @@ SPHINX_EXECUTABLE:FILEPATH=/usr/local/bin/sphinx-build
|
|||||||
SPHINX_HTML:BOOL=ON
|
SPHINX_HTML:BOOL=ON
|
||||||
SPHINX_MAN:BOOL=ON
|
SPHINX_MAN:BOOL=ON
|
||||||
SPHINX_QTHELP:BOOL=ON
|
SPHINX_QTHELP:BOOL=ON
|
||||||
QCOLLECTIONGENERATOR_EXECUTABLE:PATH=/opt/qt/bin/qhelpgenerator
|
QHELPGENERATOR_EXECUTABLE:PATH=/opt/qt/bin/qhelpgenerator
|
||||||
|
|
||||||
# We bootstrap as part of the build so skip its test.
|
# We bootstrap as part of the build so skip its test.
|
||||||
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
||||||
|
@ -32,7 +32,7 @@ SPHINX_EXECUTABLE:FILEPATH=/opt/rh/rh-python36/root/usr/bin/sphinx-build
|
|||||||
SPHINX_HTML:BOOL=ON
|
SPHINX_HTML:BOOL=ON
|
||||||
SPHINX_MAN:BOOL=ON
|
SPHINX_MAN:BOOL=ON
|
||||||
SPHINX_QTHELP:BOOL=ON
|
SPHINX_QTHELP:BOOL=ON
|
||||||
QCOLLECTIONGENERATOR_EXECUTABLE:PATH=/opt/qt/bin/qhelpgenerator
|
QHELPGENERATOR_EXECUTABLE:PATH=/opt/qt/bin/qhelpgenerator
|
||||||
|
|
||||||
# We bootstrap as part of the build so skip its test.
|
# We bootstrap as part of the build so skip its test.
|
||||||
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
||||||
|
@ -24,7 +24,7 @@ SPHINX_EXECUTABLE:FILEPATH=C:/python3/Scripts/sphinx-build.exe
|
|||||||
SPHINX_HTML:BOOL=ON
|
SPHINX_HTML:BOOL=ON
|
||||||
SPHINX_MAN:BOOL=ON
|
SPHINX_MAN:BOOL=ON
|
||||||
SPHINX_QTHELP:BOOL=ON
|
SPHINX_QTHELP:BOOL=ON
|
||||||
QCOLLECTIONGENERATOR_EXECUTABLE:PATH=C:/qt-i386/bin/qhelpgenerator.exe
|
QHELPGENERATOR_EXECUTABLE:PATH=C:/qt-i386/bin/qhelpgenerator.exe
|
||||||
|
|
||||||
# No bootstrap with MSVC tools.
|
# No bootstrap with MSVC tools.
|
||||||
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
||||||
|
@ -24,7 +24,7 @@ SPHINX_EXECUTABLE:FILEPATH=C:/python3/Scripts/sphinx-build.exe
|
|||||||
SPHINX_HTML:BOOL=ON
|
SPHINX_HTML:BOOL=ON
|
||||||
SPHINX_MAN:BOOL=ON
|
SPHINX_MAN:BOOL=ON
|
||||||
SPHINX_QTHELP:BOOL=ON
|
SPHINX_QTHELP:BOOL=ON
|
||||||
QCOLLECTIONGENERATOR_EXECUTABLE:PATH=C:/qt-x86_64/bin/qhelpgenerator.exe
|
QHELPGENERATOR_EXECUTABLE:PATH=C:/qt-x86_64/bin/qhelpgenerator.exe
|
||||||
|
|
||||||
# No bootstrap with MSVC tools.
|
# No bootstrap with MSVC tools.
|
||||||
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
||||||
|
@ -50,6 +50,12 @@ else()
|
|||||||
set(conf_copyright "Kitware, Inc.")
|
set(conf_copyright "Kitware, Inc.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMake_SPHINX_CMAKE_ORG)
|
||||||
|
set(conf_baseurl "https://cmake.org/cmake/help/latest")
|
||||||
|
else()
|
||||||
|
set(conf_baseurl "")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(conf_docs "${CMake_SOURCE_DIR}/Help")
|
set(conf_docs "${CMake_SOURCE_DIR}/Help")
|
||||||
set(conf_path "${CMAKE_CURRENT_SOURCE_DIR}")
|
set(conf_path "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
set(conf_version "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}")
|
set(conf_version "${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}")
|
||||||
@ -97,12 +103,12 @@ endif()
|
|||||||
if(SPHINX_QTHELP)
|
if(SPHINX_QTHELP)
|
||||||
find_package(PythonInterp REQUIRED)
|
find_package(PythonInterp REQUIRED)
|
||||||
|
|
||||||
find_program(QCOLLECTIONGENERATOR_EXECUTABLE
|
find_program(QHELPGENERATOR_EXECUTABLE
|
||||||
NAMES qcollectiongenerator-qt5 qcollectiongenerator
|
NAMES qhelpgenerator-qt5 qhelpgenerator
|
||||||
DOC "qcollectiongenerator tool"
|
DOC "qhelpgenerator tool"
|
||||||
)
|
)
|
||||||
if (NOT QCOLLECTIONGENERATOR_EXECUTABLE)
|
if(NOT QHELPGENERATOR_EXECUTABLE)
|
||||||
message(FATAL_ERROR "QCOLLECTIONGENERATOR_EXECUTABLE (qcollectiongenerator) not found!")
|
message(FATAL_ERROR "QHELPGENERATOR_EXECUTABLE (qhelpgenerator) not found!")
|
||||||
endif()
|
endif()
|
||||||
list(APPEND doc_formats qthelp)
|
list(APPEND doc_formats qthelp)
|
||||||
|
|
||||||
@ -122,7 +128,7 @@ if(SPHINX_QTHELP)
|
|||||||
"${CMAKE_CURRENT_SOURCE_DIR}/create_identifiers.py"
|
"${CMAKE_CURRENT_SOURCE_DIR}/create_identifiers.py"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/qthelp/"
|
"${CMAKE_CURRENT_BINARY_DIR}/qthelp/"
|
||||||
|
|
||||||
COMMAND ${QCOLLECTIONGENERATOR_EXECUTABLE}
|
COMMAND ${QHELPGENERATOR_EXECUTABLE}
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/qthelp/CMake.qhcp
|
${CMAKE_CURRENT_BINARY_DIR}/qthelp/CMake.qhcp
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
@ -130,11 +136,35 @@ if(SPHINX_LATEXPDF)
|
|||||||
list(APPEND doc_formats latexpdf)
|
list(APPEND doc_formats latexpdf)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(doc_html_opts "")
|
||||||
|
if(CMake_SPHINX_CMAKE_ORG)
|
||||||
|
list(APPEND doc_html_opts
|
||||||
|
-A googleanalytics=1
|
||||||
|
-A opensearch=1
|
||||||
|
-A versionswitch=1
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMake_SPHINX_CMAKE_ORG_OUTDATED)
|
||||||
|
list(APPEND doc_html_opts -A outdated=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND qthelp_extra_commands
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/qthelp/CMake.qch"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/html/CMake.qch"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(doc_format_outputs "")
|
set(doc_format_outputs "")
|
||||||
set(doc_format_last "")
|
set(doc_format_last "")
|
||||||
foreach(format ${doc_formats})
|
foreach(format ${doc_formats})
|
||||||
set(doc_format_output "doc_format_${format}")
|
set(doc_format_output "doc_format_${format}")
|
||||||
set(doc_format_log "build-${format}.log")
|
set(doc_format_log "build-${format}.log")
|
||||||
|
if(CMake_SPHINX_CMAKE_ORG)
|
||||||
|
set(doctrees "doctrees/${format}")
|
||||||
|
else()
|
||||||
|
set(doctrees "doctrees")
|
||||||
|
endif()
|
||||||
if(format STREQUAL "latexpdf")
|
if(format STREQUAL "latexpdf")
|
||||||
# This format does not use builder (-b) but make_mode (-M) which expects
|
# This format does not use builder (-b) but make_mode (-M) which expects
|
||||||
# arguments in peculiar order
|
# arguments in peculiar order
|
||||||
@ -145,8 +175,9 @@ foreach(format ${doc_formats})
|
|||||||
${CMake_SOURCE_DIR}/Help
|
${CMake_SOURCE_DIR}/Help
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${format}
|
${CMAKE_CURRENT_BINARY_DIR}/${format}
|
||||||
-c ${CMAKE_CURRENT_BINARY_DIR}
|
-c ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
-d ${CMAKE_CURRENT_BINARY_DIR}/doctrees
|
-d ${CMAKE_CURRENT_BINARY_DIR}/${doctrees}
|
||||||
${sphinx_flags}
|
${sphinx_flags}
|
||||||
|
${doc_${format}_opts}
|
||||||
> ${doc_format_log} # log stdout, pass stderr
|
> ${doc_format_log} # log stdout, pass stderr
|
||||||
${${format}_extra_commands}
|
${${format}_extra_commands}
|
||||||
DEPENDS ${doc_format_last}
|
DEPENDS ${doc_format_last}
|
||||||
@ -159,9 +190,10 @@ foreach(format ${doc_formats})
|
|||||||
OUTPUT ${doc_format_output}
|
OUTPUT ${doc_format_output}
|
||||||
COMMAND ${SPHINX_EXECUTABLE}
|
COMMAND ${SPHINX_EXECUTABLE}
|
||||||
-c ${CMAKE_CURRENT_BINARY_DIR}
|
-c ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
-d ${CMAKE_CURRENT_BINARY_DIR}/doctrees
|
-d ${CMAKE_CURRENT_BINARY_DIR}/${doctrees}
|
||||||
-b ${format}
|
-b ${format}
|
||||||
${sphinx_flags}
|
${sphinx_flags}
|
||||||
|
${doc_${format}_opts}
|
||||||
${CMake_SOURCE_DIR}/Help
|
${CMake_SOURCE_DIR}/Help
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${format}
|
${CMAKE_CURRENT_BINARY_DIR}/${format}
|
||||||
> ${doc_format_log} # log stdout, pass stderr
|
> ${doc_format_log} # log stdout, pass stderr
|
||||||
@ -173,7 +205,9 @@ foreach(format ${doc_formats})
|
|||||||
endif()
|
endif()
|
||||||
set_property(SOURCE ${doc_format_output} PROPERTY SYMBOLIC 1)
|
set_property(SOURCE ${doc_format_output} PROPERTY SYMBOLIC 1)
|
||||||
list(APPEND doc_format_outputs ${doc_format_output})
|
list(APPEND doc_format_outputs ${doc_format_output})
|
||||||
set(doc_format_last ${doc_format_output})
|
if(NOT CMake_SPHINX_CMAKE_ORG)
|
||||||
|
set(doc_format_last ${doc_format_output})
|
||||||
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
add_custom_target(documentation ALL DEPENDS ${doc_format_outputs})
|
add_custom_target(documentation ALL DEPENDS ${doc_format_outputs})
|
||||||
@ -193,6 +227,10 @@ if(CMake_SPHINX_DEPEND_ON_EXECUTABLES)
|
|||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMake_SPHINX_CMAKE_ORG)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(SPHINX_INFO)
|
if(SPHINX_INFO)
|
||||||
CMake_OPTIONAL_COMPONENT(sphinx-info)
|
CMake_OPTIONAL_COMPONENT(sphinx-info)
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/texinfo/cmake.info
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/texinfo/cmake.info
|
||||||
|
@ -55,6 +55,7 @@ for fpath in cmake_manuals:
|
|||||||
man_show_urls = False
|
man_show_urls = False
|
||||||
man_make_section_directory = False
|
man_make_section_directory = False
|
||||||
|
|
||||||
|
html_baseurl = '@conf_baseurl@'
|
||||||
html_show_sourcelink = True
|
html_show_sourcelink = True
|
||||||
html_static_path = ['@conf_path@/static']
|
html_static_path = ['@conf_path@/static']
|
||||||
html_style = 'cmake.css'
|
html_style = 'cmake.css'
|
||||||
|
@ -22,3 +22,15 @@ div.sphinxsidebarwrapper {
|
|||||||
dd > :first-child > p {
|
dd > :first-child > p {
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.outdated {
|
||||||
|
background-color: #f0f0c0;
|
||||||
|
color: black;
|
||||||
|
font-size: 90%;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 2px;
|
||||||
|
padding-top: 5px;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
@ -17,10 +17,28 @@
|
|||||||
</li>
|
</li>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{%- block relbar1 %}
|
||||||
|
{{ super() }}
|
||||||
|
{%- if outdated is defined %}
|
||||||
|
<div class="outdated">
|
||||||
|
This documents an old version of CMake.
|
||||||
|
<a href="https://cmake.org/cmake/help/latest/{{ pagename }}.html">
|
||||||
|
Click here to see the latest release.
|
||||||
|
</a>
|
||||||
|
<span class="version_switch_note"></span>
|
||||||
|
</div>
|
||||||
|
{%- endif %}
|
||||||
|
{%- endblock %}
|
||||||
|
|
||||||
{% block extrahead %}
|
{% block extrahead %}
|
||||||
{% if versionswitch is defined %}
|
{%- if opensearch is defined %}
|
||||||
<script type="text/javascript" src="{{ pathto('../version_switch.js', 1) }}"></script>
|
<link rel="search" type="application/opensearchdescription+xml"
|
||||||
{% endif %}
|
title="Search within CMake Documentation of Latest Version"
|
||||||
|
href="{{ pathto('../latest-opensearch.xml', 1) }}"/>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if versionswitch is defined %}
|
||||||
|
<script type="text/javascript" src="{{ pathto('../version_switch.js', 1) }}"></script>
|
||||||
|
{%- endif %}
|
||||||
{{ super() }}
|
{{ super() }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
@ -29,3 +47,19 @@
|
|||||||
{% block htmltitle %}
|
{% block htmltitle %}
|
||||||
<title>{{ title|striptags|e }} {{ "—"|safe }} {{ docstitle|e }}</title>
|
<title>{{ title|striptags|e }} {{ "—"|safe }} {{ docstitle|e }}</title>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{%- block footer %}
|
||||||
|
{{ super() }}
|
||||||
|
{%- if googleanalytics is defined %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
||||||
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
try {
|
||||||
|
var pageTracker = _gat._getTracker("UA-6042509-4");
|
||||||
|
pageTracker._trackPageview();
|
||||||
|
} catch(err) {}
|
||||||
|
</script>
|
||||||
|
{%- endif %}
|
||||||
|
{%- endblock %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user