My patches to CMake
Go to file
Stephen Kelly 65aa5442b7 Target: Return null when a transitive property is not defined.
Commit v2.8.11~310^2~1 (Keep track of INCLUDE_DIRECTORIES as a vector of
structs., 2012-11-19) added special case of INCLUDE_DIRECTORIES
for the purpose of origin-tracking of individual entries in the property. It
introduced a bug in that it returned an empty string instead of '0' in the
case that no includes have been set.

Commit v2.8.11~289^2~2 (Handle INTERFACE properties transitively for includes
and defines., 2012-09-23) introduced transitive handling of the property
through the link implementation, together with a whitelist of properties
which would be evaluated transitively. Because of the bug introduced
previously, the 'prop' in TargetPropertyNode is non-null,
meaning that the content (the empty string) would be evaluated as a generator
expression.  This was harmless as the follow-up code was only for 'INTERFACE_'
variants of target properties, so the effect was the same.

Commits v2.8.11~280^2~2 (Keep track of properties used to determine linker
libraries., 2012-11-05) and v2.8.11~280^2~1 (Add API to calculate
link-interface-dependent bool properties or error., 2013-01-06) added a way
to track and report errors on properties which both determine and are
determined by the link implementation.  This was later used in generator
expression evaluation by commit v2.8.11~252^2~2 (Make INTERFACE determined
properties readable in generator expressions., 2013-01-19).  If a property
is unset (null), and the link implementation of the target was not being
evaluated, this commit made it possible to evaluate the property from the
link implementation instead.  If the link implementation was being evaluated,
an empty string was returned from the generator expression evaluation, which
might be later reported as an error.

The above logic was written for 'compatible interface' properties, but in
fact it should have also included other properties.  Because of the
empty-string-instead-of-null bug, this code block is not entered for the
INCLUDE_DIRECTORIES property.  At this point, however, the bug still does
not significantly affect behavior, because the follow-up code is still a
no-op for the INCLUDE_DIRECTORIES property, and an empty string is returned
regardless. Commit v2.8.11~189^2~6 (Use the link information as a source of
compile definitions and includes., 2013-02-12) refactored the logic, but also
without a change in behavior.

Commit v2.8.11~156^2~2 (Expand includes and defines transitively
in 'external' genexes., 2013-02-13) refactored the logic again, this time with
a change of behavior. The INCLUDE_DIRECTORIES property was then mapped to
INTERFACE_INCLUDE_DIRECTORIES during transitive generator expression
evaluation.  Because the transitive evaluation involved evaluation of the
link implementation, this introduced a recursive loop and a segfault with
code like:

  add_library(empty1 ...)
  add_library(empty2 ...)
  target_link_libraries(empty1
    PRIVATE
      $<$<STREQUAL:$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>,/foo/bar>:empty2>
  )

As there is no real use-case for reading a target property like that while
evaluating the link implementation, this went unnoticed.  The same pattern
was followed for other special-cased reads of transitive target properties
such as COMPILE_DEFINITIONS.

The segfault was fixed in the parent commit, but change the property to
return null when appropriate for other future uses.
2014-07-02 00:10:58 +02:00
Auxiliary cmake-mode.el: Add help for variables/properties/complete. Factorize. 2014-02-13 09:38:13 -05:00
Help Merge topic 'install-messages' 2014-06-27 09:42:42 -04:00
Licenses cmake-gui: Reference LGPLv2.1 when redistributing Qt 2013-11-21 11:04:24 -05:00
Modules Merge topic 'UseSWIG-fix-noproxy-check' 2014-06-27 09:42:54 -04:00
Source Target: Return null when a transitive property is not defined. 2014-07-02 00:10:58 +02:00
Templates Add an "installed file" property scope 2014-05-28 12:28:18 -04:00
Tests Genex: Fix stack overflow in transitive property evaluation. 2014-07-02 00:09:38 +02:00
Utilities Help: Add context to titles in QtHelp. 2014-06-17 11:28:00 +02:00
.gitattributes Add CMAKE_GNUtoMS option to convert GNU .dll.a to MS .lib 2011-12-05 18:13:49 -05:00
.hooks-config.bash Add pre-commit|commit-msg|prepare-commit-msg hook placeholders 2011-10-24 10:18:36 -04:00
CMakeCPack.cmake Configure NSIS-packaged CMake version and install destination 2013-11-12 15:47:06 -05:00
CMakeCPackOptions.cmake.in Change version scheme to use only two components for feature levels 2014-02-19 09:30:13 -05:00
CMakeGraphVizOptions.cmake Convert CMake-language commands to lower case 2012-08-13 14:19:16 -04:00
CMakeLists.txt Update CDash server URL 2014-06-24 13:54:52 -04:00
CMakeLogo.gif ENH: fancier logo 2007-11-26 13:21:57 -05:00
CONTRIBUTING.rst Simplify and clarify credit text and link 2014-06-03 09:24:26 -04:00
CTestConfig.cmake Update CDash server URL 2014-06-24 13:54:52 -04:00
CTestCustom.cmake.in Merge topic 'openbsd-warnings' 2014-04-15 10:22:20 -04:00
CompileFlags.cmake CompileFlags: add better selection which aCC version gets -AA +hpxstd98 flags 2014-05-06 13:25:01 -04:00
Copyright.txt Copyright.txt: Update year range to end in 2014 2014-01-02 14:11:55 -05:00
DartConfig.cmake Update CDash server URL 2014-06-24 13:54:52 -04:00
DartLocal.conf.in ENH: remove superior dean i, no longer uses borland 2007-12-03 20:44:43 -05:00
README.rst Simplify and clarify credit text and link 2014-06-03 09:24:26 -04:00
bootstrap Merge topic 'bootstrap-cmake-locations' 2014-06-27 09:42:50 -04:00
cmake_uninstall.cmake.in Replace string(REGEX REPLACE) with string(REPLACE) where possible 2014-04-14 18:17:05 +02:00
configure Simplify bootstrap script source dir detection 2009-09-25 10:48:24 -04:00
doxygen.config Remove trailing whitespace from most CMake and C/C++ code 2012-08-13 14:18:39 -04:00

README.rst

CMake
*****

Introduction
============

CMake is a cross-platform, open-source build system generator.
For full documentation visit the `CMake Home Page`_ and the
`CMake Documentation Page`_.

.. _`CMake Home Page`: http://www.cmake.org
.. _`CMake Documentation Page`: http://www.cmake.org/cmake/help/documentation.html

CMake is maintained and supported by `Kitware`_ and developed in
collaboration with a productive community of contributors.

.. _`Kitware`: http://www.kitware.com/cmake

License
=======

CMake is distributed under the OSI-approved BSD 3-clause License.
See `Copyright.txt`_ for details.

.. _`Copyright.txt`: Copyright.txt

Building CMake
==============

Supported Platforms
-------------------

MS Windows, Mac OS X, Linux, FreeBSD, Solaris, HP-UX, IRIX, BeOS, QNX

Other UNIX-like operating systems may work too out of the box, if not
it should not be a major problem to port CMake to this platform.
Subscribe and post to the `CMake Users List`_ to ask if others have
had experience with the platform.

.. _`CMake Users List`: http://www.cmake.org/mailman/listinfo/cmake

Building CMake from Scratch
---------------------------

UNIX/Mac OSX/MinGW/MSYS/Cygwin
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

You need to have a compiler and a make installed.
Run the ``bootstrap`` script you find the in the source directory of CMake.
You can use the ``--help`` option to see the supported options.
You may use the ``--prefix=<install_prefix>`` option to specify a custom
installation directory for CMake. You can run the ``bootstrap`` script from
within the CMake source directory or any other build directory of your
choice. Once this has finished successfully, run ``make`` and
``make install``.  In summary::

 $ ./bootstrap && make && make install

Windows
^^^^^^^

You need to download and install a binary release of CMake in order to build
CMake.  You can get these releases from the `CMake Download Page`_ .  Then
proceed with the instructions below.

.. _`CMake Download Page`: http://www.cmake.org/cmake/resources/software.html

Building CMake with CMake
-------------------------

You can build CMake as any other project with a CMake-based build system:
run the installed CMake on the sources of this CMake with your preferred
options and generators. Then build it and install it.
For instructions how to do this, see documentation on `Running CMake`_.

.. _`Running CMake`: http://www.cmake.org/cmake/help/runningcmake.html

Contributing
============

See `CONTRIBUTING.rst`_ for instructions to contribute.

.. _`CONTRIBUTING.rst`: CONTRIBUTING.rst