CMP0069
-------

:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` is enforced when enabled.

CMake 3.9 and newer prefer to add IPO flags whenever the
:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property is enabled and
produce an error if flags are not known to CMake for the current compiler.
Since a given compiler may not support IPO flags in all environments in which
it is used, it is now the project's responsibility to use the
:module:`CheckIPOSupported` module to check for support before enabling the
:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property.  This approach
allows a project to conditionally activate IPO when supported.  It also
allows an end user to set the :variable:`CMAKE_INTERPROCEDURAL_OPTIMIZATION`
variable in an environment known to support IPO even if the project does
not enable the property.

Since CMake 3.8 and lower only honored :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION`
for the Intel compiler on Linux, some projects may unconditionally enable the
target property.  Policy ``CMP0069`` provides compatibility with such projects.

This policy takes effect whenever the IPO property is enabled.  The ``OLD``
behavior for this policy is to add IPO flags only for Intel compiler on Linux.
The ``NEW`` behavior for this policy is to add IPO flags for the current
compiler or produce an error if CMake does not know the flags.

This policy was introduced in CMake version 3.9.  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.

.. include:: DEPRECATED.txt

Examples
^^^^^^^^

Behave like CMake 3.8 and do not apply any IPO flags except for Intel compiler
on Linux:

.. code-block:: cmake

  cmake_minimum_required(VERSION 3.8)
  project(foo)

  # ...

  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)

Use the :module:`CheckIPOSupported` module to detect whether IPO is
supported by the current compiler, environment, and CMake version.
Produce a fatal error if support is not available:

.. code-block:: cmake

  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
  project(foo)

  include(CheckIPOSupported)
  check_ipo_supported()

  # ...

  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)

Apply IPO flags only if compiler supports it:

.. code-block:: cmake

  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
  project(foo)

  include(CheckIPOSupported)

  # ...

  check_ipo_supported(RESULT result)
  if(result)
    set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
  endif()

Apply IPO flags without any checks.  This may lead to build errors if IPO
is not supported by the compiler in the current environment.  Produce an
error if CMake does not know IPO flags for the current compiler:

.. code-block:: cmake

  cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
  project(foo)

  # ...

  set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
