1CMAKE-POLICIES(7)                    CMake                   CMAKE-POLICIES(7)
2
3
4

NAME

6       cmake-policies - CMake Policies Reference
7

INTRODUCTION

9       Policies  in  CMake  are  used to preserve backward compatible behavior
10       across multiple releases.  When a new policy is introduced, newer CMake
11       versions will begin to warn about the backward compatible behavior.  It
12       is possible to disable the warning by explicitly requesting the OLD, or
13       backward  compatible  behavior using the cmake_policy() command.  It is
14       also possible to request NEW, or non-backward compatible behavior for a
15       policy,  also  avoiding  the  warning.   Each policy can also be set to
16       either NEW or OLD behavior explicitly on  the  command  line  with  the
17       CMAKE_POLICY_DEFAULT_CMP<NNNN> variable.
18
19       A  policy is a deprecation mechanism and not a reliable feature toggle.
20       A policy should almost never be set to OLD, except to silence  warnings
21       in  an otherwise frozen or stable codebase, or temporarily as part of a
22       larger migration path. The OLD behavior of each policy  is  undesirable
23       and will be replaced with an error condition in a future release.
24
25       The  cmake_minimum_required() command does more than report an error if
26       a too-old version of CMake is used to build a project.   It  also  sets
27       all  policies introduced in that CMake version or earlier to NEW behav‐
28       ior.  To manage policies without increasing the minimum required  CMake
29       version, the if(POLICY) command may be used:
30
31          if(POLICY CMP0990)
32            cmake_policy(SET CMP0990 NEW)
33          endif()
34
35       This has the effect of using the NEW behavior with newer CMake releases
36       which users may be using and not issuing a compatibility warning.
37
38       The setting of a policy is confined in some cases to not  propagate  to
39       the parent scope.  For example, if the files read by the include() com‐
40       mand or the find_package() command contain  a  use  of  cmake_policy(),
41       that  policy  setting will not affect the caller by default.  Both com‐
42       mands accept an optional NO_POLICY_SCOPE keyword to control this behav‐
43       ior.
44
45       The  CMAKE_MINIMUM_REQUIRED_VERSION variable may also be used to deter‐
46       mine whether to report an error on use of deprecated  macros  or  func‐
47       tions.
48

POLICIES INTRODUCED BY CMAKE 3.19

50   CMP0114
51       New in version 3.19.
52
53
54       ExternalProject step targets fully adopt their steps.
55
56       The  ExternalProject_Add()  STEP_TARGETS  option,  and the ExternalPro‐
57       ject_Add_StepTargets() function, can be used to  create  build  targets
58       for individual steps of an external project.
59
60       In CMake 3.18 and below, step targets have some limitations:
61
62       · Step  targets  always  depend  on  targets  named by the ExternalPro‐
63         ject_Add() DEPENDS option even though not all steps  need  them.   In
64         order to allow step targets to be created without those dependencies,
65         the  ExternalProject_Add()  INDEPENDENT_STEP_TARGETS  option  or  the
66         ExternalProject_Add_StepTargets()  NO_DEPENDS  option  may  be  used.
67         However, adding such “independent” step targets makes sense only  for
68         specific  steps  such  as download, update, and patch because they do
69         not need any of the external project’s build dependencies.   Further‐
70         more,  it  does not make sense to create independent step targets for
71         steps that depend on  non-independent  steps.   Such  rules  are  not
72         enforced,  and  projects  that  do not follow them can generate build
73         systems with confusing and generator-specific behavior.
74
75       · Step targets hold copies of the custom  commands  implementing  their
76         steps that are separate from the copies in the primary target created
77         by ExternalProject_Add(), and the primary target does not  depend  on
78         the  step  targets.  In parallel builds that drive the primary target
79         and step targets concurrently, multiple copies of the steps’ commands
80         may run concurrently and race each other.
81
82         Also, prior to policy CMP0113, the step targets generated by Makefile
83         Generators also contain all the custom commands on which  their  step
84         depends.   This can lead to repeated execution of those steps even in
85         serial builds.
86
87       In CMake 3.19 and above, the ExternalProject module prefers  a  revised
88       design to address these problems:
89
90       · Each  step  is  classified  as “independent” if it does not depend on
91         other targets named by the ExternalProject_Add() DEPENDS.  The prede‐
92         fined steps are automatically classified by default:
93
94         · The download, update, and patch steps are independent.
95
96         · The configure, build, test, and install steps are not.
97
98         For  custom steps, the ExternalProject_Add_Step() command provides an
99         INDEPENDENT option to mark them as independent.  It is  an  error  to
100         mark a step as independent if it depends on other steps that are not.
101         Note that this use of the term “independent” refers only to  indepen‐
102         dence  from  external targets and is orthogonal to a step’s dependen‐
103         cies on other steps.
104
105       · Step targets created by the ExternalProject_Add() STEP_TARGETS option
106         or the ExternalProject_Add_Step() function are now independent if and
107         only if their steps are  marked  as  independent.   The  ExternalPro‐
108         ject_Add()    INDEPENDENT_STEP_TARGETS    option   and   ExternalPro‐
109         ject_Add_StepTargets() NO_DEPENDS option are no longer allowed.
110
111       · Step targets, when created, are fully  responsible  for  holding  the
112         custom commands implementing their steps.  The primary target created
113         by ExternalProject_Add() depends on the step targets,  and  the  step
114         targets  depend  on  each other.  The target-level dependencies match
115         the file-level dependencies used by  the  custom  commands  for  each
116         step.
117
118         When     the     ExternalProject_Add()     UPDATE_DISCONNECTED     or
119         TEST_EXCLUDE_FROM_MAIN  option   is   used,   or   the   ExternalPro‐
120         ject_Add_Step()  EXCLUDE_FROM_MAIN  option is used for a custom step,
121         some step targets may be created automatically.  These are needed  to
122         hold  the  steps commonly depended upon by the primary target and the
123         disconnected step targets.
124
125       Policy CMP0114 provides compatibility for projects that have  not  been
126       updated  to  expect the new behavior.  The OLD behavior for this policy
127       is to use the above-documented behavior from 3.18 and below.   The  NEW
128       behavior  for  this policy is to use the above-documented behavior pre‐
129       ferred by 3.19 and above.
130
131       This policy was introduced in CMake version 3.19.  CMake version 3.19.7
132       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
133       cmake_policy() command to set it to OLD or NEW explicitly.
134
135   CMP0113
136       New in version 3.19.
137
138
139       Makefile Generators do not repeat custom commands from target dependen‐
140       cies.
141
142       Consider a chain of custom commands split across two dependent targets:
143
144          add_custom_command(OUTPUT output-not-created
145            COMMAND ... DEPENDS ...)
146          set_property(SOURCE output-not-created PROPERTY SYMBOLIC 1)
147          add_custom_command(OUTPUT output-created
148            COMMAND ... DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-not-created)
149          add_custom_target(first DEPENDS output-not-created)
150          add_custom_target(second DEPENDS output-created)
151          add_dependencies(second first)
152
153       In  CMake  3.18  and  lower, the Makefile generators put a copy of both
154       custom commands in the Makefile  for  target  second  even  though  its
155       dependency  on  target first ensures that the first custom command runs
156       before the second.  Running make second would cause  the  first  custom
157       command  to  run  once in the first target and then again in the second
158       target.
159
160       CMake 3.19 and above prefer to not duplicate custom commands in a  tar‐
161       get  that  are  already  generated in other targets on which the target
162       depends (directly or indirectly).  This policy  provides  compatibility
163       for projects that have not been updated to expect the new behavior.  In
164       particular, projects that relied on the duplicate execution or that did
165       not properly set the SYMBOLIC source file property may be affected.
166
167       The  OLD  behavior  for  this policy is to duplicate custom commands in
168       dependent targets.  The NEW behavior of this policy is to not duplicate
169       custom commands in dependent targets.
170
171       This  policy  was  introduced in CMake version 3.19.  Unlike many poli‐
172       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
173       and simply uses OLD behavior.
174
175       NOTE:
176          The  OLD behavior of a policy is deprecated by definition and may be
177          removed in a future version of CMake.
178
179   CMP0112
180       New in version 3.19.
181
182
183       Target file component generator expressions do not add target dependen‐
184       cies.
185
186       The  following target-based generator expressions that query for direc‐
187       tory or file name components no longer add a dependency on  the  evalu‐
188       ated target.
189
190          · TARGET_FILE_NAME
191
192          · TARGET_FILE_DIR
193
194          · TARGET_LINKER_FILE_BASE_NAME
195
196          · TARGET_LINKER_FILE_NAME
197
198          · TARGET_LINKER_FILE_DIR
199
200          · TARGET_SONAME_FILE_NAME
201
202          · TARGET_SONAME_FILE_DIR
203
204          · TARGET_PDB_FILE_NAME
205
206          · TARGET_PDB_FILE_DIR
207
208          · TARGET_BUNDLE_DIR
209
210          · TARGET_BUNDLE_CONTENT_DIR
211
212       In  CMake  3.18  and  lower a dependency on the evaluated target of the
213       above generator expressions would always  be  added.   CMake  3.19  and
214       above prefer to not add this dependency.  This policy provides compati‐
215       bility for projects that have not been updated to expect the new behav‐
216       ior.
217
218       The  OLD  behavior for this policy is to add a dependency on the evalu‐
219       ated target for the above generator expressions.  The NEW  behavior  of
220       this  policy is to not add a dependency on the evaluated target for the
221       above generator expressions.
222
223       This policy was introduced in CMake version 3.19.   Unlike  many  poli‐
224       cies, CMake version 3.19.7 does not warn by default when this policy is
225       not set and  simply  uses  OLD  behavior.   See  documentation  of  the
226       CMAKE_POLICY_WARNING_CMP0112 variable to control the warning.
227
228       NOTE:
229          The  OLD behavior of a policy is deprecated by definition and may be
230          removed in a future version of CMake.
231
232   CMP0111
233       New in version 3.19.
234
235
236       An imported target missing its location property fails  during  genera‐
237       tion.
238
239       Imported  Targets  for library files and executables require that their
240       location  on  disk  is  specified  in  a  target   property   such   as
241       IMPORTED_LOCATION,  IMPORTED_IMPLIB, or a per-configuration equivalent.
242       If a needed location property is not set, CMake 3.18 and below generate
243       the  string <TARGET_NAME>-NOTFOUND in its place, which results in fail‐
244       ures of the corresponding rules at build time.  CMake  3.19  and  above
245       prefer  instead  to raise an error during generation.  This policy pro‐
246       vides compatibility for projects that have not been updated  to  expect
247       the new behavior.
248
249       The  OLD  behavior  of  this  policy  is to generate the location of an
250       imported unknown, static or shared library target as <TARGET_NAME>-NOT‐
251       FOUND if not set.  The NEW behavior is to raise an error.
252
253       This policy was introduced in CMake version 3.19.  CMake version 3.19.7
254       warns when the policy is  not  set  and  uses  OLD  behavior.  Use  the
255       cmake_policy() command to set it to OLD or NEW explicitly.
256
257       NOTE:
258          The  OLD behavior of a policy is deprecated by definition and may be
259          removed in a future version of CMake.
260
261   CMP0110
262       New in version 3.19.
263
264
265       add_test() supports arbitrary characters in test names.
266
267       add_test() can now (officially) create tests with whitespace and  other
268       special characters in its name.  Before CMake version 3.19 that was not
269       allowed, however, it was possible to work  around  this  limitation  by
270       explicitly  putting  escaped  quotes  arount  the  test’s  name  in the
271       add_test command.
272
273       Although never officially supported several projects in the wild  found
274       and  implemented  this workaround.  However, the new change which offi‐
275       cially allows the add_test command to support whitespace and other spe‐
276       cial characters in test names now breaks that workaround.  In order for
277       these projects to work smoothly with newer CMake versions, this  policy
278       was introduced.
279
280       The  OLD behavior of this policy is to still prevent add_test from han‐
281       dling whitespace and special characters properly (if not using the men‐
282       tioned  workaround).   The  NEW behavior on the other hand allows names
283       with whitespace and special characters for tests created by add_test.
284
285       This policy was introduced in CMake version 3.19.  CMake version 3.19.7
286       warns  when  the  policy  is  not  set  and  uses OLD behavior. Use the
287       cmake_policy() command to set it to OLD or NEW explicitly.
288
289   CMP0109
290       New in version 3.19.
291
292
293       find_program() requires permission to execute but not to read.
294
295       In CMake 3.18 and below, the find_program() command on UNIX would  find
296       files that are readable without requiring execute permission, and would
297       not find files that are executable without read permission.   In  CMake
298       3.19  and above, find_program now prefers to require execute permission
299       but not read  permission.   This  policy  provides  compatibility  with
300       projects that have not been updated to expect the new behavior.
301
302       The  OLD  behavior  for this policy is for find_program to require read
303       permission but not execute permission.  The NEW behavior for this  pol‐
304       icy is for find_program to require execute permission but not read per‐
305       mission.
306
307       This policy was introduced in CMake version 3.19.  CMake version 3.19.7
308       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
309       cmake_policy() command to set it to OLD or NEW explicitly.
310
311       NOTE:
312          The OLD behavior of a policy is deprecated by definition and may  be
313          removed in a future version of CMake.
314

POLICIES INTRODUCED BY CMAKE 3.18

316   CMP0108
317       New in version 3.18.
318
319
320       A target is not allowed to link to itself even through an ALIAS target.
321
322       In  CMake  3.17  and  below,  a  target can link to a target aliased to
323       itself.
324
325       The OLD behavior for this policy is to allow a target to link to a tar‐
326       get aliased to itself.
327
328       The  NEW  behavior  of  this  policy  is to prevent a target to link to
329       itself through an ALIAS target.
330
331       This policy was introduced in CMake version 3.17.  Use  the  cmake_pol‐
332       icy()  command  to  set it to OLD or NEW explicitly.  Unlike many poli‐
333       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
334       and simply uses OLD behavior.
335
336       NOTE:
337          The  OLD behavior of a policy is deprecated by definition and may be
338          removed in a future version of CMake.
339
340   CMP0107
341       New in version 3.18.
342
343
344       It is not allowed to create an ALIAS target with the same  name  as  an
345       another target.
346
347       In  CMake  3.17  and  below,  an ALIAS target can overwrite silently an
348       existing target with the same name.
349
350       The OLD behavior for this policy is to allow target overwrite.
351
352       The NEW behavior of this policy is to prevent target overwriting.
353
354       This policy was introduced in CMake version 3.17.  Use  the  cmake_pol‐
355       icy()  command  to  set it to OLD or NEW explicitly.  Unlike many poli‐
356       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
357       and simply uses OLD behavior.
358
359       NOTE:
360          The  OLD behavior of a policy is deprecated by definition and may be
361          removed in a future version of CMake.
362
363   CMP0106
364       New in version 3.18.
365
366
367       The Documentation module is removed.
368
369       The Documentation was added as a support mechanism for the VTK  project
370       and  was tuned for that project. Instead of CMake providing this module
371       with (now old) VTK patterns for cache variables and required  packages,
372       the module is now deprecated by CMake itself.
373
374       The OLD behavior of this policy is for Documentation to add cache vari‐
375       ables and find VTK documentation dependent packages. The  NEW  behavior
376       is to act as an empty module.
377
378       This policy was introduced in CMake version 3.18.  CMake version 3.19.7
379       warns when the policy is  not  set  and  uses  OLD  behavior.  Use  the
380       cmake_policy() command to set it to OLD or NEW explicitly.
381
382       NOTE:
383          The  OLD behavior of a policy is deprecated by definition and may be
384          removed in a future version of CMake.
385
386   CMP0105
387       New in version 3.18.
388
389
390       LINK_OPTIONS and INTERFACE_LINK_OPTIONS target properties are now  used
391       for the device link step.
392
393       In  CMake  3.17 and below, link options are not used by the device link
394       step.
395
396       The OLD behavior for this policy is to ignore the link options.
397
398       The NEW behavior of this policy is to use the link options  during  the
399       device link step.
400
401       This  policy  was introduced in CMake version 3.17.  Use the cmake_pol‐
402       icy() command to set it to OLD or NEW explicitly.   Unlike  many  poli‐
403       cies,  CMake  version  3.19.7 does not warn when this policy is not set
404       and simply uses OLD behavior.
405
406       NOTE:
407          The OLD behavior of a policy is deprecated by definition and may  be
408          removed in a future version of CMake.
409
410   CMP0104
411       New in version 3.18.
412
413
414       Initialize   CMAKE_CUDA_ARCHITECTURES  when  CMAKE_CUDA_COMPILER_ID  is
415       NVIDIA.  Raise an error if CUDA_ARCHITECTURES is empty.
416
417       CMAKE_CUDA_ARCHITECTURES introduced in CMake 3.18 is used to initialize
418       CUDA_ARCHITECTURES,  which  passes correct code generation flags to the
419       CUDA compiler.
420
421       Previous to this users had to  manually  specify  the  code  generation
422       flags.  This policy is for backwards compatibility with manually speci‐
423       fying code generation flags.
424
425       The OLD behavior for this policy is to not initialize CMAKE_CUDA_ARCHI‐
426       TECTURES  when  CMAKE_CUDA_COMPILER_ID is NVIDIA.  Empty CUDA_ARCHITEC‐
427       TURES is allowed.
428
429       The NEW behavior of this policy is to  initialize  CMAKE_CUDA_ARCHITEC‐
430       TURES  when  CMAKE_CUDA_COMPILER_ID  is  NVIDIA  and  raise an error if
431       CUDA_ARCHITECTURES is empty during generation.
432
433       If CUDA_ARCHITECTURES is set to a false value  no  architectures  flags
434       are  passed  to the compiler. This is intended to support packagers and
435       the rare cases where full control over the passed flags is required.
436
437       This policy was introduced in CMake version 3.18.  CMake version 3.19.7
438       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
439       cmake_policy() command to set it to OLD or NEW explicitly.
440
441       NOTE:
442          The OLD behavior of a policy is deprecated by definition and may  be
443          removed in a future version of CMake.
444
445   Examples
446          set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 35 50 72)
447
448       Generates code for real and virtual architectures 30, 50 and 72.
449
450          set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
451
452       Generates code for real architecture 70 and virtual architecture 72.
453
454          set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
455
456       CMake will not pass any architecture flags to the compiler.
457
458   CMP0103
459       New in version 3.18.
460
461
462       Multiple  calls to export() command with same FILE without APPEND is no
463       longer allowed.
464
465       In CMake 3.17 and below, multiple calls to export()  command  with  the
466       same FILE without APPEND are accepted silently but only the last occur‐
467       rence is taken into account during the generation.
468
469       The OLD behavior for this policy is to ignore the multiple  occurrences
470       of
471              export() command except the last one.
472
473       The  NEW behavior of this policy is to raise an error on second call to
474       export() command with same FILE without APPEND.
475
476       This policy was introduced in CMake version 3.18.  CMake version 3.19.7
477       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
478       cmake_policy() command to set it to OLD or NEW explicitly.
479
480       NOTE:
481          The OLD behavior of a policy is deprecated by definition and may  be
482          removed in a future version of CMake.
483

POLICIES INTRODUCED BY CMAKE 3.17

485   CMP0102
486       New in version 3.17.
487
488
489       The  mark_as_advanced()  command no longer creates a cache entry if one
490       does not already exist.
491
492       In CMake 3.16 and below, if a variable was not defined at all  or  just
493       defined  locally,  the  mark_as_advanced()  command  would create a new
494       cache entry with an UNINITIALIZED type and no value. When a find_path()
495       (or  other  similar  find_  command) would next run, it would find this
496       undefined cache entry and set it up with an empty  string  value.  This
497       process would end up deleting the local variable in the process (due to
498       the way the cache works), effectively clearing any stored find_ results
499       that were only available in the local scope.
500
501       The  OLD  behavior for this policy is to create the empty cache defini‐
502       tion.  The NEW behavior of this policy is to ignore variables which  do
503       not already exist in the cache.
504
505       This  policy  was introduced in CMake version 3.17.  Use the cmake_pol‐
506       icy() command to set it to OLD or NEW explicitly.   Unlike  many  poli‐
507       cies,  CMake  version  3.19.7 does not warn when this policy is not set
508       and simply uses OLD behavior.
509
510       NOTE:
511          The OLD behavior of a policy is deprecated by definition and may  be
512          removed in a future version of CMake.
513
514   CMP0101
515       New in version 3.17.
516
517
518       target_compile_options() now honors BEFORE keyword in all scopes.
519
520       In CMake 3.16 and below the target_compile_options() ignores the BEFORE
521       keyword in private scope. CMake 3.17 and later honors BEFORE keyword in
522       all  scopes.  This policy provides compatibility for projects that have
523       not been updated to expect the new behavior.
524
525       The OLD behavior for this policy is to not honor BEFORE keyword in pri‐
526       vate  scope. The NEW behavior of this policy is to honor BEFORE keyword
527       in all scopes.
528
529       This policy was introduced in CMake version 3.17.  Use  the  cmake_pol‐
530       icy()  command  to  set it to OLD or NEW explicitly.  Unlike many poli‐
531       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
532       and simply uses OLD behavior.
533
534       NOTE:
535          The  OLD behavior of a policy is deprecated by definition and may be
536          removed in a future version of CMake.
537
538   CMP0100
539       New in version 3.17.
540
541
542       Let AUTOMOC and AUTOUIC process header files that end with a .hh exten‐
543       sion.
544
545       Since  version  3.17,  CMake processes header files that end with a .hh
546       extension in AUTOMOC and AUTOUIC.  In  earlier  CMake  versions,  these
547       header files were ignored by AUTOMOC and AUTOUIC.
548
549       This  policy affects how header files that end with a .hh extension get
550       treated in AUTOMOC and AUTOUIC.
551
552       The OLD behavior for this policy is to ignore .hh header files in AUTO‐
553       MOC and AUTOUIC.
554
555       The  NEW  behavior  for  this  policy is to process .hh header files in
556       AUTOMOC and AUTOUIC just like other header files.
557
558       NOTE:
559          To silence the CMP0100 warning source files  can  be  excluded  from
560          AUTOMOC and AUTOUIC processing by setting the source file properties
561          SKIP_AUTOMOC, SKIP_AUTOUIC or SKIP_AUTOGEN.
562
563              # Source skip example:
564              set_property(SOURCE /path/to/file1.hh PROPERTY SKIP_AUTOMOC ON)
565              set_property(SOURCE /path/to/file2.hh PROPERTY SKIP_AUTOUIC ON)
566              set_property(SOURCE /path/to/file3.hh PROPERTY SKIP_AUTOGEN ON)
567
568       This policy was introduced in  CMake  version  3.17.0.   CMake  version
569       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
570       cmake_policy() command to set it to OLD or NEW explicitly.
571
572       NOTE:
573          The OLD behavior of a policy is deprecated by definition and may  be
574          removed in a future version of CMake.
575
576   CMP0099
577       New in version 3.17.
578
579
580       Target  link properties INTERFACE_LINK_OPTIONS, INTERFACE_LINK_DIRECTO‐
581       RIES and INTERFACE_LINK_DEPENDS are now transitive over private  depen‐
582       dencies of static libraries.
583
584       In  CMake  3.16  and  below  the  interface link properties attached to
585       libraries  are  not  propagated  for  private  dependencies  of  static
586       libraries.   Only  the  libraries themselves are propagated to link the
587       dependent binary.  CMake 3.17 and later prefer to propagate all  inter‐
588       face  link properties.  This policy provides compatibility for projects
589       that have not been updated to expect the new behavior.
590
591       The OLD behavior for this policy is to  not  propagate  interface  link
592       properties.  The  NEW behavior of this policy is to propagate interface
593       link properties.
594
595       This policy was introduced in CMake version 3.17.  Use  the  cmake_pol‐
596       icy()  command  to  set it to OLD or NEW explicitly.  Unlike many poli‐
597       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
598       and simply uses OLD behavior.
599
600       NOTE:
601          The  OLD behavior of a policy is deprecated by definition and may be
602          removed in a future version of CMake.
603
604   CMP0098
605       New in version 3.17.
606
607
608       FindFLEX runs flex in directory CMAKE_CURRENT_BINARY_DIR  when  execut‐
609       ing.
610
611       The  module  provides  a FLEX_TARGET macro which generates FLEX output.
612       In CMake 3.16 and below the macro would generate a custom command  that
613       runs flex in the current source directory.  CMake 3.17 and later prefer
614       to run it in the build directory and  use  CMAKE_CURRENT_BINARY_DIR  as
615       the  WORKING_DIRECTORY  of  its  add_custom_command() invocation.  This
616       ensures that any implicitly generated file is written relative  to  the
617       build  tree  rather  than the source tree, unless the generated file is
618       provided as absolute path.
619
620       This policy provides compatibility for  projects  that  have  not  been
621       updated to expect the new behavior.
622
623       The  OLD behavior for this policy is for FLEX_TARGET to use the current
624       source directory  for  the  WORKING_DIRECTORY  and  where  to  generate
625       implicit  files.  The NEW behavior of this policy is to use the current
626       binary directory for the WORKING_DIRECTORY relative to  which  implicit
627       files are generated unless provided as absolute path.
628
629       This  policy  was introduced in CMake version 3.17.  Use the cmake_pol‐
630       icy() command to set it to OLD or NEW explicitly.   Unlike  many  poli‐
631       cies,  CMake  version  3.19.7 does not warn when this policy is not set
632       and simply uses OLD behavior.
633
634       NOTE:
635          The OLD behavior of a policy is deprecated by definition and may  be
636          removed in a future version of CMake.
637

POLICIES INTRODUCED BY CMAKE 3.16

639   CMP0097
640       New in version 3.16.
641
642
643       ExternalProject_Add() with GIT_SUBMODULES "" initializes no submodules.
644
645       The module provides a GIT_SUBMODULES option which controls what submod‐
646       ules to initialize and update. Starting  with  CMake  3.16,  explicitly
647       setting  GIT_SUBMODULES  to an empty string means no submodules will be
648       initialized or updated.
649
650       This policy provides compatibility for  projects  that  have  not  been
651       updated to expect the new behavior.
652
653       The  OLD  behavior for this policy is for GIT_SUBMODULES when set to an
654       empty string to initialize and update  all  git  submodules.   The  NEW
655       behavior  for  this  policy  is for GIT_SUBMODULES when set to an empty
656       string to initialize and update no git submodules.
657
658       This policy was introduced in CMake version 3.16.  Use  the  cmake_pol‐
659       icy()  command  to  set it to OLD or NEW explicitly.  Unlike most poli‐
660       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
661       and simply uses OLD behavior.
662
663   CMP0096
664       New in version 3.16.
665
666
667       The project() command preserves leading zeros in version components.
668
669       When a VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] argument is given
670       to  the  project()  command,  it  stores  the  version  string  in  the
671       PROJECT_VERSION  variable  and stores individual integer version compo‐
672       nents in PROJECT_VERSION_{MAJOR,MINOR,PATCH,TWEAK} variables (see  pol‐
673       icy  CMP0048).   CMake  3.15  and below dropped leading zeros from each
674       component.  CMake 3.16 and higher prefer  to  preserve  leading  zeros.
675       This  policy  provides  compatibility  for  projects that have not been
676       updated to expect the new behavior.
677
678       The OLD behavior of this policy drops leading zeros in all  components,
679       e.g.   such  that  version  1.07.06 becomes 1.7.6.  The NEW behavior of
680       this policy preserves the leading zeros in all  components,  such  that
681       version 1.07.06 remains unchanged.
682
683       This  policy  was  introduced in CMake version 3.16.  Unlike many poli‐
684       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
685       and  simply  uses  the OLD behavior.  Use the cmake_policy() command to
686       set it to OLD or NEW explicitly.
687
688       NOTE:
689          The OLD behavior of a policy is deprecated by definition and may  be
690          removed in a future version of CMake.
691
692   CMP0095
693       New in version 3.16.
694
695
696       RPATH  entries  are  properly escaped in the intermediary CMake install
697       script.
698
699       In CMake 3.15 and earlier, RPATH entries set via CMAKE_INSTALL_RPATH or
700       via  INSTALL_RPATH have not been escaped before being inserted into the
701       cmake_install.cmake script. Dynamic linkers on ELF-based systems  (e.g.
702       Linux  and  FreeBSD)  allow  certain keywords in RPATH entries, such as
703       ${ORIGIN} (More details are available in the ld.so man pages  on  those
704       systems).  The syntax of these keywords can match CMake’s variable syn‐
705       tax. In order to not  be  substituted  (usually  to  an  empty  string)
706       already by the intermediary cmake_install.cmake script, the user had to
707       double-escape  such  RPATH  keywords,   e.g.    set(CMAKE_INSTALL_RPATH
708       "\\\${ORIGIN}/../lib").   Since  the  intermediary  cmake_install.cmake
709       script is an implementation detail of CMake, CMake 3.16 and later  will
710       make  sure RPATH entries are inserted literally by escaping any coinci‐
711       dental CMake syntax.
712
713       The OLD behavior of this policy is to not escape RPATH entries  in  the
714       intermediary  cmake_install.cmake  script. The NEW behavior is to prop‐
715       erly escape coincidental CMake syntax in RPATH entries when  generating
716       the intermediary cmake_install.cmake script.
717
718       This  policy was introduced in CMake version 3.16. CMake version 3.19.7
719       warns when the policy is not set and detected usage of CMake-like  syn‐
720       tax  and uses OLD behavior. Use the cmake_policy() command to set it to
721       OLD or NEW explicitly.
722
723       NOTE:
724          The OLD behavior of a policy is deprecated by definition and may  be
725          removed in a future version of CMake.
726

POLICIES INTRODUCED BY CMAKE 3.15

728   CMP0094
729       New in version 3.15.
730
731
732       Modules FindPython3, FindPython2 and FindPython use LOCATION for lookup
733       strategy.
734
735       Starting with CMake 3.15, Modules FindPython3,  FindPython2  and  Find‐
736       Python    set    value    LOCATION    for,    respectively,   variables
737       Python3_FIND_STRATEGY, Python2_FIND_STRATEGY and  Python_FIND_STRATEGY.
738       This policy provides compatibility with projects that expect the legacy
739       behavior.
740
741       The OLD behavior for  this  policy  set  value  VERSION  for  variables
742       Python3_FIND_STRATEGY, Python2_FIND_STRATEGY and Python_FIND_STRATEGY.
743
744       This  policy  was introduced in CMake version 3.15.  Use the cmake_pol‐
745       icy() command to set it to OLD or NEW explicitly.   Unlike  many  poli‐
746       cies,  CMake  version  3.19.7 does not warn when this policy is not set
747       and simply uses the OLD behavior.
748
749       NOTE:
750          The OLD behavior of a policy is deprecated by definition and may  be
751          removed in a future version of CMake.
752
753   CMP0093
754       New in version 3.15.
755
756
757       FindBoost reports Boost_VERSION in x.y.z format.
758
759       In  CMake 3.14 and below the module would report the Boost version num‐
760       ber as specified in the preprocessor definition  BOOST_VERSION  in  the
761       boost/version.hpp  file.  In  CMake 3.15 and later it is preferred that
762       the reported version number matches the x.y.z format  reported  by  the
763       CMake  package  shipped with Boost 1.70.0 and later. The macro value is
764       still reported in the Boost_VERSION_MACRO variable.
765
766       The OLD behavior for this policy is for FindBoost to report  Boost_VER‐
767       SION  as  specified  in  the  preprocessor  definition BOOST_VERSION in
768       boost/version.hpp. The NEW behavior for this policy is for FindBoost to
769       report Boost_VERSION in x.y.z format.
770
771       This  policy  was introduced in CMake version 3.15.  Use the cmake_pol‐
772       icy() command to set it to OLD or NEW explicitly.   Unlike  many  poli‐
773       cies,  CMake  version  3.19.7 does not warn when this policy is not set
774       and simply uses the OLD behavior.
775
776       NOTE:
777          The OLD behavior of a policy is deprecated by definition and may  be
778          removed in a future version of CMake.
779
780   CMP0092
781       New in version 3.15.
782
783
784       MSVC warning flags are not in CMAKE_<LANG>_FLAGS by default.
785
786       When  using  MSVC-like compilers in CMake 3.14 and below, warning flags
787       like /W3 are added to CMAKE_<LANG>_FLAGS by default.  This is  problem‐
788       atic  for  projects  that want to choose a different warning level pro‐
789       grammatically.  In  particular,  it  requires  string  editing  of  the
790       CMAKE_<LANG>_FLAGS  variables  with  knowledge  of  the  CMake  builtin
791       defaults so they can be replaced.
792
793       CMake 3.15 and above prefer to leave out warning flags from  the  value
794       of CMAKE_<LANG>_FLAGS by default.
795
796       This  policy  provides  compatibility  with projects that have not been
797       updated to expect the lack of warning flags.  The policy setting  takes
798       effect as of the first project() or enable_language() command that ini‐
799       tializes CMAKE_<LANG>_FLAGS for a given language <LANG>.
800
801       NOTE:
802          Once the policy has taken effect at the top of a project for a given
803          language, that choice must be used throughout the tree for that lan‐
804          guage.  In projects that have nested projects in subdirectories,  be
805          sure to convert everything together.
806
807       The  OLD behavior for this policy is to place MSVC warning flags in the
808       default CMAKE_<LANG>_FLAGS cache entries.  The NEW  behavior  for  this
809       policy is to not place MSVC warning flags in the default cache entries.
810
811       This  policy  was introduced in CMake version 3.15.  Use the cmake_pol‐
812       icy() command to set it to OLD or NEW explicitly.   Unlike  many  poli‐
813       cies,  CMake  version  3.19.7 does not warn when this policy is not set
814       and simply uses OLD behavior.
815
816       NOTE:
817          The OLD behavior of a policy is deprecated by definition and may  be
818          removed in a future version of CMake.
819
820   CMP0091
821       New in version 3.15.
822
823
824       MSVC runtime library flags are selected by an abstraction.
825
826       Compilers  targeting the MSVC ABI have flags to select the MSVC runtime
827       library.  Runtime library selection typically varies with build config‐
828       uration because there is a separate runtime library for Debug builds.
829
830       In CMake 3.14 and below, MSVC runtime library selection flags are added
831       to the default CMAKE_<LANG>_FLAGS_<CONFIG> cache entries by CMake auto‐
832       matically.  This allows users to edit their cache entries to adjust the
833       flags.  However, the presence of such default flags is problematic  for
834       projects  that  want to choose a different runtime library programmati‐
835       cally.   In   particular,   it   requires   string   editing   of   the
836       CMAKE_<LANG>_FLAGS_<CONFIG>  variables  with  knowledge  of  the  CMake
837       builtin defaults so they can be replaced.
838
839       CMake 3.15 and above prefer to leave the MSVC runtime library selection
840       flags out of the default CMAKE_<LANG>_FLAGS_<CONFIG> values and instead
841       offer a first-class abstraction.  The CMAKE_MSVC_RUNTIME_LIBRARY  vari‐
842       able  and MSVC_RUNTIME_LIBRARY target property may be set to select the
843       MSVC runtime library.  If they are not set then CMake uses the  default
844       value  MultiThreaded$<$<CONFIG:Debug>:Debug>DLL  which is equivalent to
845       the original flags.
846
847       This policy provides compatibility with projects  that  have  not  been
848       updated  to  be  aware  of  the  abstraction.  The policy setting takes
849       effect as of the first  project()  or  enable_language()  command  that
850       enables a language whose compiler targets the MSVC ABI.
851
852       NOTE:
853          Once  the  policy  has  taken  effect  at the top of a project, that
854          choice must be used throughout the  tree.   In  projects  that  have
855          nested  projects  in  subdirectories,  be sure to convert everything
856          together.
857
858       The OLD behavior for this policy is to place MSVC runtime library flags
859       in the default CMAKE_<LANG>_FLAGS_<CONFIG> cache entries and ignore the
860       CMAKE_MSVC_RUNTIME_LIBRARY abstraction.  The NEW behavior for this pol‐
861       icy  is  to  not  place MSVC runtime library flags in the default cache
862       entries and use the abstraction instead.
863
864       This policy was introduced in CMake version 3.15.  Use  the  cmake_pol‐
865       icy()  command  to  set it to OLD or NEW explicitly.  Unlike many poli‐
866       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
867       and simply uses OLD behavior.
868
869       NOTE:
870          The  OLD behavior of a policy is deprecated by definition and may be
871          removed in a future version of CMake.
872
873   CMP0090
874       New in version 3.15.
875
876
877       export(PACKAGE) does not populate package registry by default.
878
879       In CMake 3.14 and below the export(PACKAGE) command populated the  user
880       package   registry   by   default   and   users   needed   to  set  the
881       CMAKE_EXPORT_NO_PACKAGE_REGISTRY to disable it, e.g. in automated build
882       and  packaging environments.  Since the user package registry is stored
883       outside the build tree, this side  effect  should  not  be  enabled  by
884       default.   Therefore  CMake  3.15 and above prefer that export(PACKAGE)
885       does nothing unless an explicit CMAKE_EXPORT_PACKAGE_REGISTRY  variable
886       is  set to enable it.  This policy provides compatibility with projects
887       that have not been updated.
888
889       The OLD behavior for this policy is for export(PACKAGE) command to pop‐
890       ulate the user package registry unless CMAKE_EXPORT_NO_PACKAGE_REGISTRY
891       is enabled.  The NEW behavior is  for  export(PACKAGE)  command  to  do
892       nothing unless the CMAKE_EXPORT_PACKAGE_REGISTRY is enabled.
893
894       This  policy  was introduced in CMake version 3.15.  Use the cmake_pol‐
895       icy() command to set it to OLD or NEW explicitly.   Unlike  most  poli‐
896       cies,  CMake  version  3.19.7 does not warn when this policy is not set
897       and simply uses OLD behavior.
898
899       NOTE:
900          The OLD behavior of a policy is deprecated by definition and may  be
901          removed in a future version of CMake.
902
903   CMP0089
904       New in version 3.15.
905
906
907       Compiler id for IBM Clang-based XL compilers is now XLClang.
908
909       CMake 3.15 and above recognize that IBM’s Clang-based XL compilers that
910       define __ibmxl__ are a new front-end distinct from xlc with a different
911       command  line  and  set  of capabilities.  CMake now prefers to present
912       this to projects by setting the  CMAKE_<LANG>_COMPILER_ID  variable  to
913       XLClang  instead of XL.  However, existing projects may assume the com‐
914       piler id for Clang-based XL is just XL as  it  was  in  CMake  versions
915       prior  to  3.15.   Therefore  this policy determines for Clang-based XL
916       compilers which compiler id to report in  the  CMAKE_<LANG>_COMPILER_ID
917       variable   after  language  <LANG>  is  enabled  by  the  project()  or
918       enable_language() command.  The policy must be set prior to the invoca‐
919       tion of either command.
920
921       The  OLD  behavior  for  this policy is to use compiler id XL.  The NEW
922       behavior for this policy is to use compiler id XLClang.
923
924       This policy was introduced in CMake version 3.15.  Use  the  cmake_pol‐
925       icy() command to set this policy to OLD or NEW explicitly.  Unlike most
926       policies, CMake version 3.19.7 does not warn by default when this  pol‐
927       icy  is not set and simply uses OLD behavior.  See documentation of the
928       CMAKE_POLICY_WARNING_CMP0089 variable to control the warning.
929
930       NOTE:
931          The OLD behavior of a policy is deprecated by definition and may  be
932          removed in a future version of CMake.
933

POLICIES INTRODUCED BY CMAKE 3.14

935   CMP0088
936       New in version 3.14.
937
938
939       FindBISON runs bison in CMAKE_CURRENT_BINARY_DIR when executing.
940
941       The  module provides a BISON_TARGET macro which generates BISON output.
942       In CMake 3.13 and below the macro would generate a custom command  that
943       runs bison in the source directory.  CMake 3.14 and later prefer to run
944       it in the build directory and use CMAKE_CURRENT_BINARY_DIR as the WORK‐
945       ING_DIRECTORY  of  its  add_custom_command()  invocation.  This ensures
946       that any implicitly generated file is written to the build tree  rather
947       than the source.
948
949       This  policy  provides  compatibility  for  projects that have not been
950       updated to expect the new behavior.
951
952       The OLD behavior for this policy is for BISON_TARGET to use the current
953       source  directory  for  the  WORKING_DIRECTORY  and  where  to generate
954       implicit files. The NEW behavior of this policy is to use  the  current
955       binary  directory  for  the  WORKING_DIRECTORY  and  where  to generate
956       implicit files.
957
958       This policy was introduced in CMake version 3.14.  Use  the  cmake_pol‐
959       icy()  command  to  set it to OLD or NEW explicitly.  Unlike most poli‐
960       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
961       and simply uses OLD behavior.
962
963       NOTE:
964          The  OLD behavior of a policy is deprecated by definition and may be
965          removed in a future version of CMake.
966
967   CMP0087
968       New in version 3.14.
969
970
971       install(CODE) and install(SCRIPT) support generator expressions.
972
973       In CMake 3.13 and earlier, install(CODE) and  install(SCRIPT)  did  not
974       evaluate  generator  expressions.   CMake  3.14 and later will evaluate
975       generator expressions for install(CODE) and install(SCRIPT).
976
977       The  OLD  behavior  of   this   policy   is   for   install(CODE)   and
978       install(SCRIPT)  to not evaluate generator expressions.  The NEW behav‐
979       ior  is  to  evaluate  generator  expressions  for  install(CODE)   and
980       install(SCRIPT).
981
982       Note  that  it  is  the  value of this policy setting at the end of the
983       directory scope that is important, not its setting at the time  of  the
984       call  to  install(CODE)  or install(SCRIPT).  This has implications for
985       calling these commands from places that have their own policy scope but
986       not their own directory scope (e.g. from files brought in via include()
987       rather than add_subdirectory()).
988
989       This policy was introduced in CMake version 3.14.  CMake version 3.19.7
990       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
991       cmake_policy() command to set it to OLD or NEW explicitly.
992
993       NOTE:
994          The OLD behavior of a policy is deprecated by definition and may  be
995          removed in a future version of CMake.
996
997   CMP0086
998       New in version 3.14.
999
1000
1001       UseSWIG honors SWIG_MODULE_NAME via -module flag.
1002
1003       Starting  with  CMake 3.14, UseSWIG passes option -module <module_name>
1004       to SWIG compiler if the file property  SWIG_MODULE_NAME  is  specified.
1005       This policy provides compatibility with projects that expect the legacy
1006       behavior.
1007
1008       The OLD behavior for this policy is to never pass -module option.   The
1009       NEW  behavior  is  to pass -module option to SWIG compiler if SWIG_MOD‐
1010       ULE_NAME is specified.
1011
1012       This policy was introduced in CMake version 3.14.  CMake version 3.19.7
1013       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1014       cmake_policy() command to set it to OLD or NEW explicitly.
1015
1016       NOTE:
1017          The OLD behavior of a policy is deprecated by definition and may  be
1018          removed in a future version of CMake.
1019
1020   CMP0085
1021       New in version 3.14.
1022
1023
1024       $<IN_LIST:...> handles empty list items.
1025
1026       In CMake 3.13 and lower, the $<IN_LIST:...> generator expression always
1027       returned 0 if the first argument was empty, even if the list  contained
1028       an  empty item. This behavior is inconsistent with the IN_LIST behavior
1029       of if(), which this generator expression is  meant  to  emulate.  CMake
1030       3.14 and later handles this case correctly.
1031
1032       The  OLD behavior of this policy is for $<IN_LIST:...> to always return
1033       0 if the first argument is empty. The NEW behavior is to  return  1  if
1034       the first argument is empty and the list contains an empty item.
1035
1036       This policy was introduced in CMake version 3.14.  CMake version 3.19.7
1037       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
1038       cmake_policy() command to set it to OLD or NEW explicitly.
1039
1040       NOTE:
1041          The  OLD behavior of a policy is deprecated by definition and may be
1042          removed in a future version of CMake.
1043
1044   CMP0084
1045       New in version 3.14.
1046
1047
1048       The FindQt module does not exist for find_package().
1049
1050       The existence of FindQt means that for Qt upstream to  provide  package
1051       config  files  that  can  be  found  by find_package(Qt), the consuming
1052       project has to explicitly  specify  find_package(Qt  CONFIG).  Removing
1053       this  module gives Qt a path forward for exporting its own config files
1054       which can easily be found by consuming projects.
1055
1056       This policy pretends that CMake’s internal FindQt module does not exist
1057       for  find_package(). If a project really wants to use Qt 3 or 4, it can
1058       call find_package(Qt[34]), include(FindQt),  or  add  FindQt  to  their
1059       CMAKE_MODULE_PATH.
1060
1061       The  OLD  behavior of this policy is for FindQt to exist for find_pack‐
1062       age(). The NEW behavior  is  to  pretend  that  it  doesn’t  exist  for
1063       find_package().
1064
1065       This policy was introduced in CMake version 3.14.  CMake version 3.19.7
1066       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
1067       cmake_policy() command to set it to OLD or NEW explicitly.
1068
1069       NOTE:
1070          The  OLD behavior of a policy is deprecated by definition and may be
1071          removed in a future version of CMake.
1072
1073   CMP0083
1074       New in version 3.14.
1075
1076
1077       To control generation of Position Independent Executable (PIE) or  not,
1078       some flags are required at link time.
1079
1080       CMake  3.13  and lower did not add these link flags when POSITION_INDE‐
1081       PENDENT_CODE is set.
1082
1083       The OLD behavior for this policy is to not manage PIE link  flags.  The
1084       NEW behavior is to add link flags if POSITION_INDEPENDENT_CODE is set:
1085
1086       · Set  to  TRUE: flags to produce a position independent executable are
1087         passed to the linker step. For example -pie for GCC.
1088
1089       · Set to FALSE: flags not to produce a position independent  executable
1090         are passed to the linker step. For example -no-pie for GCC.
1091
1092       · Not set: no flags are passed to the linker step.
1093
1094       Since  a  given linker may not support PIE flags in all environments in
1095       which it is used, it is the project’s responsibility to use the  Check‐
1096       PIESupported  module  to  check  for  support  to ensure that the POSI‐
1097       TION_INDEPENDENT_CODE target property for executables will  be  honored
1098       at link time.
1099
1100       This  policy  was  introduced in CMake version 3.14. Use the cmake_pol‐
1101       icy() command to set it to OLD or NEW explicitly.   Unlike  most  poli‐
1102       cies,  CMake  version  3.19.7 does not warn when this policy is not set
1103       and simply uses OLD behavior.
1104
1105       NOTE:
1106          Android platform has a special handling of PIE so it is not required
1107          to  use  the  CheckPIESupported module to ensure flags are passed to
1108          the linker.
1109
1110       NOTE:
1111          The OLD behavior of a policy is deprecated by definition and may  be
1112          removed in a future version of CMake.
1113
1114   Examples
1115       Behave like CMake 3.13 and do not apply any PIE flags at link stage.
1116
1117          cmake_minimum_required(VERSION 3.13)
1118          project(foo)
1119
1120          # ...
1121
1122          add_executable(foo ...)
1123          set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
1124
1125       Use  the CheckPIESupported module to detect whether PIE is supported by
1126       the current linker and environment.  Apply PIE flags only if the linker
1127       supports them.
1128
1129          cmake_minimum_required(VERSION 3.14) # CMP0083 NEW
1130          project(foo)
1131
1132          include(CheckPIESupported)
1133          check_pie_supported()
1134
1135          # ...
1136
1137          add_executable(foo ...)
1138          set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
1139
1140   CMP0082
1141       New in version 3.14.
1142
1143
1144       Install  rules from add_subdirectory() calls are interleaved with those
1145       in caller.
1146
1147       CMake 3.13 and lower ran  the  install  rules  from  add_subdirectory()
1148       after  all  other  install rules, even if add_subdirectory() was called
1149       before the other install rules.  CMake 3.14 and above prefer to  inter‐
1150       leave  these  add_subdirectory()  install rules with the others so that
1151       they are run in the order they are declared.  This policy provides com‐
1152       patibility  for  projects  that have not been updated to expect the new
1153       behavior.
1154
1155       The OLD behavior for this policy is  to  run  the  install  rules  from
1156       add_subdirectory() after the other install rules.  The NEW behavior for
1157       this policy is to run all install rules in the order they are declared.
1158
1159       This policy was introduced in CMake version 3.14.   Unlike  most  poli‐
1160       cies, CMake version 3.19.7 does not warn by default when this policy is
1161       not set and  simply  uses  OLD  behavior.   See  documentation  of  the
1162       CMAKE_POLICY_WARNING_CMP0082 variable to control the warning.
1163
1164       NOTE:
1165          The  OLD behavior of a policy is deprecated by definition and may be
1166          removed in a future version of CMake.
1167

POLICIES INTRODUCED BY CMAKE 3.13

1169   CMP0081
1170       New in version 3.13.
1171
1172
1173       Relative paths not allowed in LINK_DIRECTORIES target property.
1174
1175       CMake 3.12 and lower allowed the LINK_DIRECTORIES directory property to
1176       contain relative paths.  The base path for such relative entries is not
1177       well defined.  CMake 3.13 and later will issue  a  FATAL_ERROR  if  the
1178       LINK_DIRECTORIES   target   property   (which  is  initialized  by  the
1179       LINK_DIRECTORIES directory property) contains a relative path.
1180
1181       The OLD behavior for this policy is not to warn about relative paths in
1182       the LINK_DIRECTORIES target property.  The NEW behavior for this policy
1183       is to issue a FATAL_ERROR if LINK_DIRECTORIES contains a relative path.
1184
1185       This policy was introduced in CMake version 3.13.  CMake version 3.19.7
1186       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1187       cmake_policy() command to set it to OLD or NEW explicitly.
1188
1189       NOTE:
1190          The OLD behavior of a policy is deprecated by definition and may  be
1191          removed in a future version of CMake.
1192
1193   CMP0080
1194       New in version 3.13.
1195
1196
1197       BundleUtilities cannot be included at configure time.
1198
1199       The  macros  provided  by BundleUtilities are intended to be invoked at
1200       install time rather than at configure time, because they depend on  the
1201       listed  targets  already existing at the time they are invoked. If they
1202       are invoked at configure time, the targets haven’t been built yet,  and
1203       the commands will fail.
1204
1205       This  policy  restricts  the  inclusion  of BundleUtilities to cmake -P
1206       style scripts and install rules. Specifically, it looks for  the  pres‐
1207       ence of CMAKE_GENERATOR and throws a fatal error if it exists.
1208
1209       The  OLD  behavior  of  this  policy  is to allow BundleUtilities to be
1210       included at configure time. The NEW behavior of this policy is to  dis‐
1211       allow such inclusion.
1212
1213       This policy was introduced in CMake version 3.13.  CMake version 3.19.7
1214       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
1215       cmake_policy() command to set it to OLD or NEW explicitly.
1216
1217       NOTE:
1218          The  OLD behavior of a policy is deprecated by definition and may be
1219          removed in a future version of CMake.
1220
1221   CMP0079
1222       New in version 3.13.
1223
1224
1225       target_link_libraries() allows use with targets in other directories.
1226
1227       Prior to CMake 3.13 the target_link_libraries() command did not  accept
1228       targets  not created in the calling directory as its first argument for
1229       calls that update the LINK_LIBRARIES of  the  target  itself.   It  did
1230       accidentally  accept  targets from other directories on calls that only
1231       update the INTERFACE_LINK_LIBRARIES, but would simply  add  entries  to
1232       the  property as if the call were made in the original directory.  Thus
1233       link interface libraries specified this way were always  looked  up  by
1234       generators in the scope of the original target rather than in the scope
1235       that called target_link_libraries().
1236
1237       CMake 3.13 now allows the target_link_libraries() command to be  called
1238       from  any  directory  to  add  link  dependencies  and  link  interface
1239       libraries to targets created in other  directories.   The  entries  are
1240       added  to  LINK_LIBRARIES  and INTERFACE_LINK_LIBRARIES using a special
1241       (internal) suffix to tell the generators to look up the  names  in  the
1242       calling scope rather than the scope that created the target.
1243
1244       This  policy provides compatibility with projects that already use tar‐
1245       get_link_libraries() with the INTERFACE keyword on a target in  another
1246       directory  to  add  INTERFACE_LINK_LIBRARIES entries to be looked up in
1247       the target’s directory.  Such projects should be updated to be aware of
1248       the new scoping rules in that case.
1249
1250       The  OLD behavior of this policy is to disallow target_link_libraries()
1251       calls naming targets from another directory except  in  the  previously
1252       accidentally allowed case of using the INTERFACE keyword only.  The NEW
1253       behavior of this policy is to allow all such  calls  but  use  the  new
1254       scoping rules.
1255
1256       This policy was introduced in CMake version 3.13.  CMake version 3.19.7
1257       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
1258       cmake_policy() command to set it to OLD or NEW explicitly.
1259
1260       NOTE:
1261          The  OLD behavior of a policy is deprecated by definition and may be
1262          removed in a future version of CMake.
1263
1264   CMP0078
1265       New in version 3.13.
1266
1267
1268       UseSWIG generates standard target names.
1269
1270       Starting with CMake 3.13, UseSWIG generates now standard target  names.
1271       This policy provides compatibility with projects that expect the legacy
1272       behavior.
1273
1274       The OLD behavior for this policy relies on  UseSWIG_TARGET_NAME_PREFER‐
1275       ENCE  variable that can be used to specify an explicit preference.  The
1276       value may be one of:
1277
1278       · LEGACY:   legacy   strategy   is    applied.    Variable    SWIG_MOD‐
1279         ULE_<name>_REAL_NAME  must  be used to get real target name.  This is
1280         the default if not specified.
1281
1282       · STANDARD: target name matches specified name.
1283
1284       This policy was introduced in CMake version 3.13.  CMake version 3.19.7
1285       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1286       cmake_policy() command to set it to OLD or NEW explicitly.
1287
1288       NOTE:
1289          The OLD behavior of a policy is deprecated by definition and may  be
1290          removed in a future version of CMake.
1291
1292   CMP0077
1293       New in version 3.13.
1294
1295
1296       option() honors normal variables.
1297
1298       The option() command is typically used to create a cache entry to allow
1299       users to set the option.  However, there are cases in  which  a  normal
1300       (non-cached)  variable of the same name as the option may be defined by
1301       the project prior to calling the  option()  command.   For  example,  a
1302       project  that  embeds  another  project  as  a subdirectory may want to
1303       hard-code options of the subproject to build the way it needs.
1304
1305       For historical reasons in CMake 3.12 and  below  the  option()  command
1306       removes a normal (non-cached) variable of the same name when:
1307
1308       · a cache entry of the specified name does not exist at all, or
1309
1310       · a  cache  entry of the specified name exists but has not been given a
1311         type (e.g. via -D<name>=ON on the command line).
1312
1313       In both of these cases (typically on the  first  run  in  a  new  build
1314       tree), the option() command gives the cache entry type BOOL and removes
1315       any normal (non-cached) variable of the same name.   In  the  remaining
1316       case  that the cache entry of the specified name already exists and has
1317       a type (typically on later runs in a build tree), the option()  command
1318       changes nothing and any normal variable of the same name remains set.
1319
1320       In CMake 3.13 and above the option() command prefers to do nothing when
1321       a normal variable of the given name already exists.  It does not create
1322       or  update a cache entry or remove the normal variable.  The new behav‐
1323       ior is consistent between the first and later runs  in  a  build  tree.
1324       This  policy  provides  compatibility  with projects that have not been
1325       updated to expect the new behavior.
1326
1327       When the option() command sees a normal variable of the given name:
1328
1329       · The OLD behavior for this policy is to proceed  even  when  a  normal
1330         variable  of  the  same  name  exists.   If  the cache entry does not
1331         already exist and have a type then it is created and/or given a  type
1332         and the normal variable is removed.
1333
1334       · The NEW behavior for this policy is to do nothing when a normal vari‐
1335         able of the same name exists.  The normal variable  is  not  removed.
1336         The  cache  entry  is  not  created  or  updated and is ignored if it
1337         exists.
1338
1339       This policy was introduced in CMake version 3.13.  CMake version 3.19.7
1340       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1341       cmake_policy() command to set it to OLD or NEW explicitly.
1342
1343       NOTE:
1344          The OLD behavior of a policy is deprecated by definition and may  be
1345          removed in a future version of CMake.
1346
1347   CMP0076
1348       New in version 3.13.
1349
1350
1351       The target_sources() command converts relative paths to absolute.
1352
1353       In CMake 3.13 and above, the target_sources() command now converts rel‐
1354       ative source file paths to absolute paths in the following cases:
1355
1356       · Source files are added to the target’s INTERFACE_SOURCES property.
1357
1358       · The   target’s   SOURCE_DIR   property   differs   from    CMAKE_CUR‐
1359         RENT_SOURCE_DIR.
1360
1361       A  path  that begins with a generator expression is always left unmodi‐
1362       fied.
1363
1364       This policy provides compatibility with projects  that  have  not  been
1365       updated  to  expect this behavior.  The OLD behavior for this policy is
1366       to leave all relative source file paths unmodified.  The  NEW  behavior
1367       of  this  policy  is to convert relative paths to absolute according to
1368       above rules.
1369
1370       This policy was introduced in CMake version 3.13.  CMake version 3.19.7
1371       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1372       cmake_policy() command to set it to OLD or NEW explicitly.
1373
1374       NOTE:
1375          The OLD behavior of a policy is deprecated by definition and may  be
1376          removed in a future version of CMake.
1377

POLICIES INTRODUCED BY CMAKE 3.12

1379   CMP0075
1380       New in version 3.12.
1381
1382
1383       Include file check macros honor CMAKE_REQUIRED_LIBRARIES.
1384
1385       In CMake 3.12 and above, the
1386
1387       · check_include_file macro in the CheckIncludeFile module, the
1388
1389       · check_include_file_cxx  macro  in the CheckIncludeFileCXX module, and
1390         the
1391
1392       · check_include_files macro in the CheckIncludeFiles module
1393
1394       now prefer to link the check executable to the libraries listed in  the
1395       CMAKE_REQUIRED_LIBRARIES  variable.  This policy provides compatibility
1396       with projects that have not been updated to expect this behavior.
1397
1398       The OLD behavior for this policy is to ignore  CMAKE_REQUIRED_LIBRARIES
1399       in  the  include file check macros.  The NEW behavior of this policy is
1400       to honor CMAKE_REQUIRED_LIBRARIES in the include file check macros.
1401
1402       This policy was introduced in CMake version 3.12.  CMake version 3.19.7
1403       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1404       cmake_policy() command to set it to OLD or NEW explicitly.
1405
1406       NOTE:
1407          The OLD behavior of a policy is deprecated by definition and may  be
1408          removed in a future version of CMake.
1409
1410   CMP0074
1411       New in version 3.12.
1412
1413
1414       find_package() uses <PackageName>_ROOT variables.
1415
1416       In  CMake  3.12  and  above the find_package(<PackageName>) command now
1417       searches prefixes specified by the  <PackageName>_ROOT  CMake  variable
1418       and  the  <PackageName>_ROOT  environment  variable.  Package roots are
1419       maintained as a stack so nested calls to  all  find_*  commands  inside
1420       find  modules  and  config  packages also search the roots as prefixes.
1421       This policy provides compatibility with projects  that  have  not  been
1422       updated to avoid using <PackageName>_ROOT variables for other purposes.
1423
1424       The  OLD behavior for this policy is to ignore <PackageName>_ROOT vari‐
1425       ables.  The NEW behavior for this policy is to  use  <PackageName>_ROOT
1426       variables.
1427
1428       This policy was introduced in CMake version 3.12.  CMake version 3.19.7
1429       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
1430       cmake_policy() command to set it to OLD or NEW explicitly.
1431
1432       NOTE:
1433          The  OLD behavior of a policy is deprecated by definition and may be
1434          removed in a future version of CMake.
1435
1436   CMP0073
1437       New in version 3.12.
1438
1439
1440       Do not produce legacy _LIB_DEPENDS cache entries.
1441
1442       Ancient CMake versions once used  <tgt>_LIB_DEPENDS  cache  entries  to
1443       propagate  library link dependencies.  This has long been done by other
1444       means, leaving the export_library_dependencies() command  as  the  only
1445       user  of these values.  That command has long been disallowed by policy
1446       CMP0033, but the <tgt>_LIB_DEPENDS cache entries were left for compati‐
1447       bility with possible non-standard uses by projects.
1448
1449       CMake  3.12  and above now prefer to not produce these cache entries at
1450       all.  This policy provides compatibility with projects  that  have  not
1451       been updated to avoid using them.
1452
1453       The  OLD  behavior  for  this  policy is to set <tgt>_LIB_DEPENDS cache
1454       entries.  The NEW behavior for this policy is to not set them.
1455
1456       This policy was introduced in CMake version 3.12.  Use  the  cmake_pol‐
1457       icy()  command  to  set it to OLD or NEW explicitly.  Unlike most poli‐
1458       cies, CMake version 3.19.7 does not warn when this policy  is  not  set
1459       and simply uses OLD behavior.
1460
1461       NOTE:
1462          The  OLD behavior of a policy is deprecated by definition and may be
1463          removed in a future version of CMake.
1464

POLICIES INTRODUCED BY CMAKE 3.11

1466   CMP0072
1467       New in version 3.11.
1468
1469
1470       FindOpenGL prefers GLVND by default when available.
1471
1472       The  FindOpenGL  module  provides   an   OpenGL::GL   target   and   an
1473       OPENGL_LIBRARIES variable for projects to use for legacy GL interfaces.
1474       When both a legacy GL library (e.g. libGL.so) and GLVND  libraries  for
1475       OpenGL  and  GLX  (e.g.  libOpenGL.so and libGLX.so) are available, the
1476       module must choose between them.  It documents an  OpenGL_GL_PREFERENCE
1477       variable  that  can be used to specify an explicit preference.  When no
1478       such preference is set, the module must choose a default preference.
1479
1480       CMake 3.11 and above prefer to choose  GLVND  libraries.   This  policy
1481       provides  compatibility with projects that expect the legacy GL library
1482       to be used.
1483
1484       The OLD behavior for this policy  is  to  set  OpenGL_GL_PREFERENCE  to
1485       LEGACY.   The  NEW behavior for this policy is to set OpenGL_GL_PREFER‐
1486       ENCE to GLVND.
1487
1488       This policy was introduced in CMake version 3.11.  CMake version 3.19.7
1489       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1490       cmake_policy() command to set it to OLD or NEW explicitly.
1491
1492       NOTE:
1493          The OLD behavior of a policy is deprecated by definition and may  be
1494          removed in a future version of CMake.
1495

POLICIES INTRODUCED BY CMAKE 3.10

1497   CMP0071
1498       New in version 3.10.
1499
1500
1501       Let AUTOMOC and AUTOUIC process GENERATED files.
1502
1503       Since  version 3.10, CMake processes regular and GENERATED source files
1504       in AUTOMOC and AUTOUIC.  In earlier CMake versions, only regular source
1505       files were processed.  GENERATED source files were ignored silently.
1506
1507       This  policy affects how source files that are GENERATED get treated in
1508       AUTOMOC and AUTOUIC.
1509
1510       The OLD behavior for this policy is to ignore GENERATED source files in
1511       AUTOMOC and AUTOUIC.
1512
1513       The  NEW  behavior for this policy is to process GENERATED source files
1514       in AUTOMOC and AUTOUIC just like regular source files.
1515
1516       NOTE:
1517          To silence the CMP0071 warning source files  can  be  excluded  from
1518          AUTOMOC and AUTOUIC processing by setting the source file properties
1519          SKIP_AUTOMOC, SKIP_AUTOUIC or SKIP_AUTOGEN.
1520
1521       Source skip example:
1522
1523          # ...
1524          set_property(SOURCE /path/to/file1.h PROPERTY SKIP_AUTOMOC ON)
1525          set_property(SOURCE /path/to/file2.h PROPERTY SKIP_AUTOUIC ON)
1526          set_property(SOURCE /path/to/file3.h PROPERTY SKIP_AUTOGEN ON)
1527          # ...
1528
1529       This policy was introduced in CMake version 3.10.  CMake version 3.19.7
1530       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1531       cmake_policy() command to set it to OLD or NEW explicitly.
1532
1533       NOTE:
1534          The OLD behavior of a policy is deprecated by definition and may  be
1535          removed in a future version of CMake.
1536
1537   CMP0070
1538       New in version 3.10.
1539
1540
1541       Define file(GENERATE) behavior for relative paths.
1542
1543       CMake 3.10 and newer define that relative paths given to INPUT and OUT‐
1544       PUT arguments of file(GENERATE) are interpreted relative to the current
1545       source  and  binary directories, respectively.  CMake 3.9 and lower did
1546       not define any behavior for relative paths but did  not  diagnose  them
1547       either  and  accidentally  treated them relative to the process working
1548       directory.  Policy CMP0070 provides compatibility  with  projects  that
1549       used the old undefined behavior.
1550
1551       This policy affects behavior of relative paths given to file(GENERATE).
1552       The OLD behavior for this policy is to treat the paths relative to  the
1553       working  directory  of  CMake.   The NEW behavior for this policy is to
1554       interpret relative paths with respect to the current source  or  binary
1555       directory of the caller.
1556
1557       This policy was introduced in CMake version 3.10.  CMake version 3.19.7
1558       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
1559       cmake_policy() command to set it to OLD or NEW explicitly.
1560
1561       NOTE:
1562          The  OLD behavior of a policy is deprecated by definition and may be
1563          removed in a future version of CMake.
1564

POLICIES INTRODUCED BY CMAKE 3.9

1566   CMP0069
1567       New in version 3.9.
1568
1569
1570       INTERPROCEDURAL_OPTIMIZATION is enforced when enabled.
1571
1572       CMake 3.9 and newer prefer to add IPO flags whenever the  INTERPROCEDU‐
1573       RAL_OPTIMIZATION  target  property  is  enabled and produce an error if
1574       flags are not known to CMake for the current compiler.  Since  a  given
1575       compiler  may  not support IPO flags in all environments in which it is
1576       used, it is now the project’s responsibility to  use  the  CheckIPOSup‐
1577       ported  module  to  check for support before enabling the INTERPROCEDU‐
1578       RAL_OPTIMIZATION target property.  This approach allows  a  project  to
1579       conditionally  activate IPO when supported.  It also allows an end user
1580       to set the CMAKE_INTERPROCEDURAL_OPTIMIZATION variable in  an  environ‐
1581       ment known to support IPO even if the project does not enable the prop‐
1582       erty.
1583
1584       Since CMake 3.8 and lower only honored INTERPROCEDURAL_OPTIMIZATION for
1585       the  Intel  compiler on Linux, some projects may unconditionally enable
1586       the target property.  Policy CMP0069 provides compatibility  with  such
1587       projects.
1588
1589       This policy takes effect whenever the IPO property is enabled.  The OLD
1590       behavior for this policy is to add IPO flags only for Intel compiler on
1591       Linux.   The  NEW  behavior for this policy is to add IPO flags for the
1592       current compiler or produce an error if CMake does not know the flags.
1593
1594       This policy was introduced in CMake version 3.9.  CMake version  3.19.7
1595       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1596       cmake_policy() command to set it to OLD or NEW explicitly.
1597
1598       NOTE:
1599          The OLD behavior of a policy is deprecated by definition and may  be
1600          removed in a future version of CMake.
1601
1602   Examples
1603       Behave  like  CMake 3.8 and do not apply any IPO flags except for Intel
1604       compiler on Linux:
1605
1606          cmake_minimum_required(VERSION 3.8)
1607          project(foo)
1608
1609          # ...
1610
1611          set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1612
1613       Use the CheckIPOSupported module to detect whether IPO is supported  by
1614       the  current compiler, environment, and CMake version.  Produce a fatal
1615       error if support is not available:
1616
1617          cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
1618          project(foo)
1619
1620          include(CheckIPOSupported)
1621          check_ipo_supported()
1622
1623          # ...
1624
1625          set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1626
1627       Apply IPO flags only if compiler supports it:
1628
1629          cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
1630          project(foo)
1631
1632          include(CheckIPOSupported)
1633
1634          # ...
1635
1636          check_ipo_supported(RESULT result)
1637          if(result)
1638            set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1639          endif()
1640
1641       Apply IPO flags without any checks.  This may lead to build  errors  if
1642       IPO  is not supported by the compiler in the current environment.  Pro‐
1643       duce an error if CMake does not know IPO flags  for  the  current  com‐
1644       piler:
1645
1646          cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
1647          project(foo)
1648
1649          # ...
1650
1651          set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1652
1653   CMP0068
1654       New in version 3.9.
1655
1656
1657       RPATH settings on macOS do not affect install_name.
1658
1659       CMake  3.9  and newer remove any effect the following settings may have
1660       on the install_name of a target on macOS:
1661
1662       · BUILD_WITH_INSTALL_RPATH target property
1663
1664       · SKIP_BUILD_RPATH target property
1665
1666       · CMAKE_SKIP_RPATH variable
1667
1668       · CMAKE_SKIP_INSTALL_RPATH variable
1669
1670       Previously, setting BUILD_WITH_INSTALL_RPATH had the effect of  setting
1671       both  the install_name of a target to INSTALL_NAME_DIR and the RPATH to
1672       INSTALL_RPATH.  In CMake 3.9, it only affects setting of  RPATH.   How‐
1673       ever, if one wants INSTALL_NAME_DIR to apply to the target in the build
1674       tree, one may set BUILD_WITH_INSTALL_NAME_DIR.
1675
1676       If SKIP_BUILD_RPATH, CMAKE_SKIP_RPATH or CMAKE_SKIP_INSTALL_RPATH  were
1677       used  to  strip  the directory portion of the install_name of a target,
1678       one may set INSTALL_NAME_DIR="" instead.
1679
1680       The OLD behavior of this policy  is  to  use  the  RPATH  settings  for
1681       install_name  on  macOS.   The NEW behavior of this policy is to ignore
1682       the RPATH settings for install_name on macOS.
1683
1684       This policy was introduced in CMake version 3.9.  CMake version  3.19.7
1685       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1686       cmake_policy() command to set it to OLD or NEW explicitly.
1687
1688       NOTE:
1689          The OLD behavior of a policy is deprecated by definition and may  be
1690          removed in a future version of CMake.
1691

POLICIES INTRODUCED BY CMAKE 3.8

1693   CMP0067
1694       New in version 3.8.
1695
1696
1697       Honor language standard in try_compile() source-file signature.
1698
1699       The try_compile() source file signature is intended to allow callers to
1700       check whether they will be able to compile a given source file with the
1701       current  toolchain.   In order to match compiler behavior, any language
1702       standard mode should match.  However, CMake 3.7 and below  did  not  do
1703       this.   CMake  3.8 and above prefer to honor the language standard set‐
1704       tings for C, CXX (C++), and CUDA using the values of the variables:
1705
1706       · CMAKE_C_STANDARD
1707
1708       · CMAKE_C_STANDARD_REQUIRED
1709
1710       · CMAKE_C_EXTENSIONS
1711
1712       · CMAKE_CXX_STANDARD
1713
1714       · CMAKE_CXX_STANDARD_REQUIRED
1715
1716       · CMAKE_CXX_EXTENSIONS
1717
1718       · CMAKE_CUDA_STANDARD
1719
1720       · CMAKE_CUDA_STANDARD_REQUIRED
1721
1722       · CMAKE_CUDA_EXTENSIONS
1723
1724       This policy provides compatibility for projects that do not expect  the
1725       language standard settings to be used automatically.
1726
1727       The  OLD behavior of this policy is to ignore language standard setting
1728       variables when generating the try_compile test project.  The NEW behav‐
1729       ior of this policy is to honor language standard setting variables.
1730
1731       This policy was introduced in CMake version 3.8.  Unlike most policies,
1732       CMake version 3.19.7 does not warn by default when this policy  is  not
1733       set  and simply uses OLD behavior.  See documentation of the CMAKE_POL‐
1734       ICY_WARNING_CMP0067 variable to control the warning.
1735
1736       NOTE:
1737          The OLD behavior of a policy is deprecated by definition and may  be
1738          removed in a future version of CMake.
1739

POLICIES INTRODUCED BY CMAKE 3.7

1741   CMP0066
1742       New in version 3.7.
1743
1744
1745       Honor per-config flags in try_compile() source-file signature.
1746
1747       The  source  file signature of the try_compile() command uses the value
1748       of the CMAKE_<LANG>_FLAGS variable in the test project so that the test
1749       compilation  works as it would in the main project.  However, CMake 3.6
1750       and below do not also honor  config-specific  compiler  flags  such  as
1751       those  in  the  CMAKE_<LANG>_FLAGS_DEBUG variable.  CMake 3.7 and above
1752       prefer to honor config-specific compiler flags too.  This  policy  pro‐
1753       vides  compatibility  for  projects  that do not expect config-specific
1754       compiler flags to be used.
1755
1756       The OLD behavior of this policy is to ignore config-specific flag vari‐
1757       ables  like  CMAKE_<LANG>_FLAGS_DEBUG  and  only  use  CMake’s built-in
1758       defaults for the current compiler and platform.
1759
1760       The NEW behavior of this policy is to honor config-specific flag  vari‐
1761       abldes like CMAKE_<LANG>_FLAGS_DEBUG.
1762
1763       This policy was introduced in CMake version 3.7.  Unlike most policies,
1764       CMake version 3.19.7 does not warn by default when this policy  is  not
1765       set  and simply uses OLD behavior.  See documentation of the CMAKE_POL‐
1766       ICY_WARNING_CMP0066 variable to control the warning.
1767
1768       NOTE:
1769          The OLD behavior of a policy is deprecated by definition and may  be
1770          removed in a future version of CMake.
1771

POLICIES INTRODUCED BY CMAKE 3.4

1773   CMP0065
1774       New in version 3.4.
1775
1776
1777       Do  not  add  flags  to  export  symbols  from  executables without the
1778       ENABLE_EXPORTS target property.
1779
1780       CMake 3.3 and below, for historical reasons, always linked  executables
1781       on  some platforms with flags like -rdynamic to export symbols from the
1782       executables for use by any plugins they may load via dlopen.  CMake 3.4
1783       and  above  prefer  to do this only for executables that are explicitly
1784       marked with the ENABLE_EXPORTS target property.
1785
1786       The OLD behavior of this policy is to always use  the  additional  link
1787       flags   when  linking  executables  regardless  of  the  value  of  the
1788       ENABLE_EXPORTS target property.
1789
1790       The NEW behavior of this policy is to  only  use  the  additional  link
1791       flags when linking executables if the ENABLE_EXPORTS target property is
1792       set to True.
1793
1794       This policy was introduced in CMake version 3.4.  Unlike most policies,
1795       CMake  version  3.19.7 does not warn by default when this policy is not
1796       set and simply uses OLD behavior.  See documentation of the  CMAKE_POL‐
1797       ICY_WARNING_CMP0065 variable to control the warning.
1798
1799       NOTE:
1800          The  OLD behavior of a policy is deprecated by definition and may be
1801          removed in a future version of CMake.
1802
1803   CMP0064
1804       New in version 3.4.
1805
1806
1807       Recognize TEST as a operator for the if() command.
1808
1809       The TEST operator was added to the if() command to determine if a given
1810       test name was created by the add_test() command.
1811
1812       The  OLD  behavior for this policy is to ignore the TEST operator.  The
1813       NEW behavior is to interpret the TEST operator.
1814
1815       This policy was introduced in CMake version 3.4.  CMake version  3.19.7
1816       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1817       cmake_policy() command to set it to OLD or NEW explicitly.
1818
1819       NOTE:
1820          The OLD behavior of a policy is deprecated by definition and may  be
1821          removed in a future version of CMake.
1822

POLICIES INTRODUCED BY CMAKE 3.3

1824   CMP0063
1825       New in version 3.3.
1826
1827
1828       Honor visibility properties for all target types.
1829
1830       The <LANG>_VISIBILITY_PRESET and VISIBILITY_INLINES_HIDDEN target prop‐
1831       erties affect visibility of symbols during dynamic linking.  When first
1832       introduced  these  properties  affected  compilation of sources only in
1833       shared  libraries,  module  libraries,   and   executables   with   the
1834       ENABLE_EXPORTS  property  set.   This  was sufficient for the basic use
1835       cases of shared libraries and executables with plugins.  However,  some
1836       sources may be compiled as part of static libraries or object libraries
1837       and then linked into a shared library later.  CMake 3.3 and above  pre‐
1838       fer to honor these properties for sources compiled in all target types.
1839       This policy preserves compatibility for projects expecting the  proper‐
1840       ties to work only for some target types.
1841
1842       The OLD behavior for this policy is to ignore the visibility properties
1843       for  static  libraries,  object  libraries,  and  executables   without
1844       exports.   The  NEW behavior for this policy is to honor the visibility
1845       properties for all target types.
1846
1847       This policy was introduced in CMake version 3.3.  CMake version  3.19.7
1848       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1849       cmake_policy() command to set it to OLD or NEW explicitly.
1850
1851       NOTE:
1852          The OLD behavior of a policy is deprecated by definition and may  be
1853          removed in a future version of CMake.
1854
1855   CMP0062
1856       New in version 3.3.
1857
1858
1859       Disallow install() of export() result.
1860
1861       The  export()  command  generates  a  file containing Imported Targets,
1862       which is suitable for use from the build directory.  It is not suitable
1863       for  installation  because  it  contains  absolute paths to buildsystem
1864       locations, and is particular to a single build configuration.
1865
1866       The install(EXPORT) generates and installs files which contain Imported
1867       Targets.   These  files  are  generated with relative paths (unless the
1868       user specifies absolute paths), and are designed  for  multi-configura‐
1869       tion use.  See Creating Packages for more.
1870
1871       CMake  3.3  no longer allows the use of the install(FILES) command with
1872       the result of the export() command.
1873
1874       The OLD behavior for this policy is to allow installing the  result  of
1875       an  export() command.  The NEW behavior for this policy is not to allow
1876       installing the result of an export() command.
1877
1878       This policy was introduced in CMake version 3.3.  CMake version  3.19.7
1879       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1880       cmake_policy() command to set it to OLD or NEW explicitly.
1881
1882       NOTE:
1883          The OLD behavior of a policy is deprecated by definition and may  be
1884          removed in a future version of CMake.
1885
1886   CMP0061
1887       New in version 3.3.
1888
1889
1890       CTest does not by default tell make to ignore errors (-i).
1891
1892       The ctest_build() and build_command() commands no longer generate build
1893       commands for Makefile Generators with the -i option.   Previously  this
1894       was  done  to  help build as much of tested projects as possible.  How‐
1895       ever, this behavior is not consistent with other  generators  and  also
1896       causes the return code of the make tool to be meaningless.
1897
1898       Of  course  users  may  still  add  this  option  manually  by  setting
1899       CTEST_BUILD_COMMAND or the MAKECOMMAND  cache  entry.   See  the  CTest
1900       Build Step MakeCommand setting documentation for their effects.
1901
1902       The  OLD  behavior for this policy is to add -i to make calls in CTest.
1903       The NEW behavior for this policy is to not add -i.
1904
1905       This policy was introduced in CMake version 3.3.  Unlike most policies,
1906       CMake version 3.19.7 does not warn when this policy is not set and sim‐
1907       ply uses OLD behavior.
1908
1909       NOTE:
1910          The OLD behavior of a policy is deprecated by definition and may  be
1911          removed in a future version of CMake.
1912
1913   CMP0060
1914       New in version 3.3.
1915
1916
1917       Link libraries by full path even in implicit directories.
1918
1919       Policy  CMP0003  was  introduced  with  the intention of always linking
1920       library files by full path when a  full  path  is  given  to  the  tar‐
1921       get_link_libraries()  command.  However, on some platforms (e.g. HP-UX)
1922       the compiler front-end adds alternative library search  paths  for  the
1923       current   architecture   (e.g.   /usr/lib/<arch>  has  alternatives  to
1924       libraries in /usr/lib for the current architecture).  On such platforms
1925       the  find_library()  may find a library such as /usr/lib/libfoo.so that
1926       does not belong to the current architecture.
1927
1928       Prior to policy CMP0003  projects  would  still  build  in  such  cases
1929       because  the  incorrect library path would be converted to -lfoo on the
1930       link line and the linker would find the proper library in the arch-spe‐
1931       cific  search  path  provided by the compiler front-end implicitly.  At
1932       the time we chose to remain compatible with  such  projects  by  always
1933       converting  library  files  found in implicit link directories to -lfoo
1934       flags to ask the linker to search  for  them.   This  approach  allowed
1935       existing projects to continue to build while still linking to libraries
1936       outside implicit link directories via full path (such as those  in  the
1937       build tree).
1938
1939       CMake  does  allow  projects  to  override  this  behavior  by using an
1940       IMPORTED library target with its IMPORTED_LOCATION property set to  the
1941       desired  full  path  to a library file.  In fact, many Find Modules are
1942       learning to provide Imported Targets instead of  just  the  traditional
1943       Foo_LIBRARIES  variable listing library files.  However, this makes the
1944       link line generated for a library found by  a  Find  Module  depend  on
1945       whether it is linked through an imported target or not, which is incon‐
1946       sistent.  Furthermore, this behavior has been  a  source  of  confusion
1947       because the generated link line for a library file depends on its loca‐
1948       tion.  It is also problematic for projects trying  to  link  statically
1949       because flags like -Wl,-Bstatic -lfoo -Wl,-Bdynamic may be used to help
1950       the linker select libfoo.a instead of libfoo.so but then  leak  dynamic
1951       linking to following libraries.  (See the LINK_SEARCH_END_STATIC target
1952       property for a solution typically used for that problem.)
1953
1954       When the special case for libraries in implicit  link  directories  was
1955       first  introduced  the  list  of  implicit  link directories was simply
1956       hard-coded (e.g. /lib, /usr/lib, and a few others).  Since  that  time,
1957       CMake  has  learned to detect the implicit link directories used by the
1958       compiler front-end.  If necessary, the find_library() command could  be
1959       taught  to  use  this  information to help find libraries of the proper
1960       architecture.
1961
1962       For these reasons, CMake 3.3 and above prefer to drop the special  case
1963       and  link  libraries  by  full path even when they are in implicit link
1964       directories.   Policy  CMP0060  provides  compatibility  for   existing
1965       projects.
1966
1967       The  OLD  behavior  for  this policy is to ask the linker to search for
1968       libraries whose full paths are known to be in  implicit  link  directo‐
1969       ries.   The  NEW  behavior for this policy is to link libraries by full
1970       path even if they are in implicit link directories.
1971
1972       This policy was introduced in CMake version 3.3.  Unlike most policies,
1973       CMake  version  3.19.7 does not warn by default when this policy is not
1974       set and simply uses OLD behavior.  See documentation of the  CMAKE_POL‐
1975       ICY_WARNING_CMP0060 variable to control the warning.
1976
1977       NOTE:
1978          The  OLD behavior of a policy is deprecated by definition and may be
1979          removed in a future version of CMake.
1980
1981   CMP0059
1982       New in version 3.3.
1983
1984
1985       Do not treat DEFINITIONS as a built-in directory property.
1986
1987       CMake 3.3 and above no longer make  a  list  of  definitions  available
1988       through  the  DEFINITIONS  directory property.  The COMPILE_DEFINITIONS
1989       directory property may be used instead.
1990
1991       The OLD behavior for this policy is to provide the list of flags  given
1992       so far to the add_definitions() command.  The NEW behavior is to behave
1993       as a normal user-defined directory property.
1994
1995       This policy was introduced in CMake version 3.3.  CMake version  3.19.7
1996       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
1997       cmake_policy() command to set it to OLD or NEW explicitly.
1998
1999       NOTE:
2000          The OLD behavior of a policy is deprecated by definition and may  be
2001          removed in a future version of CMake.
2002
2003   CMP0058
2004       New in version 3.3.
2005
2006
2007       Ninja requires custom command byproducts to be explicit.
2008
2009       When  an intermediate file generated during the build is consumed by an
2010       expensive operation or a large tree of dependents, one may  reduce  the
2011       work  needed  for an incremental rebuild by updating the file timestamp
2012       only when its content changes.  With this approach the generation  rule
2013       must  have  a  separate  output  file that is always updated with a new
2014       timestamp that is newer than any dependencies of the rule so  that  the
2015       build  tool  re-runs the rule only when the input changes.  We refer to
2016       the separate output file as a rule’s witness and the generated file  as
2017       a rule’s byproduct.
2018
2019       Byproducts  may  not  be listed as outputs because their timestamps are
2020       allowed to be older than the inputs.  No build tools (like  make)  that
2021       existed  when  CMake  was  designed  have  a way to express byproducts.
2022       Therefore CMake versions prior to 3.2  had  no  way  to  specify  them.
2023       Projects  typically left byproducts undeclared in the rules that gener‐
2024       ate them.  For example:
2025
2026          add_custom_command(
2027            OUTPUT witness.txt
2028            COMMAND ${CMAKE_COMMAND} -E copy_if_different
2029                    ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
2030                    byproduct.txt # timestamp may not change
2031            COMMAND ${CMAKE_COMMAND} -E touch witness.txt
2032            DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
2033            )
2034          add_custom_target(Provider DEPENDS witness.txt)
2035          add_custom_command(
2036            OUTPUT generated.c
2037            COMMAND expensive-task -i byproduct.txt -o generated.c
2038            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/byproduct.txt
2039            )
2040          add_library(Consumer generated.c)
2041          add_dependencies(Consumer Provider)
2042
2043       This works well for all generators except Ninja.  The Ninja build  tool
2044       sees  a  rule listing byproduct.txt as a dependency and no rule listing
2045       it as an output.  Ninja then complains that there is no way to  satisfy
2046       the  dependency  and  stops  building  even though there are order-only
2047       dependencies that ensure byproduct.txt will exist before its  consumers
2048       need it.  See discussion of this problem in Ninja Issue 760 for further
2049       details on why Ninja works this way.
2050
2051       Instead of leaving byproducts undeclared in  the  rules  that  generate
2052       them,  Ninja  expects byproducts to be listed along with other outputs.
2053       Such rules may be marked with a restat option that tells Ninja to check
2054       the  timestamps  of outputs after the rules run.  This prevents byprod‐
2055       ucts whose timestamps do not change from causing  their  dependents  to
2056       re-build unnecessarily.
2057
2058       Since the above approach does not tell CMake what custom command gener‐
2059       ates byproduct.txt, the Ninja generator does not have  enough  informa‐
2060       tion  to  add the byproduct as an output of any rule.  CMake 2.8.12 and
2061       above work around this problem  and  allow  projects  using  the  above
2062       approach to build by generating phony build rules to tell Ninja to tol‐
2063       erate such missing files.  However, this workaround prevents Ninja from
2064       diagnosing  a  dependency that is really missing.  It also works poorly
2065       in in-source builds where every  custom  command  dependency,  even  on
2066       source  files, needs to be treated this way because CMake does not have
2067       enough information to know which files are generated as  byproducts  of
2068       custom commands.
2069
2070       CMake  3.2 introduced the BYPRODUCTS option to the add_custom_command()
2071       and add_custom_target() commands.  This option allows byproducts to  be
2072       specified explicitly:
2073
2074          add_custom_command(
2075            OUTPUT witness.txt
2076            BYPRODUCTS byproduct.txt # explicit byproduct specification
2077            COMMAND ${CMAKE_COMMAND} -E copy_if_different
2078                    ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
2079                    byproduct.txt # timestamp may not change
2080          ...
2081
2082       The BYPRODUCTS option is used by the Ninja generator to list byproducts
2083       among the outputs of the custom commands that  generate  them,  and  is
2084       ignored by other generators.
2085
2086       CMake  3.3  and above prefer to require projects to specify custom com‐
2087       mand byproducts explicitly so that it can avoid using  the  phony  rule
2088       workaround  altogether.   Policy CMP0058 was introduced to provide com‐
2089       patibility with existing projects that still need the workaround.
2090
2091       This policy has no effect on generators  other  than  Ninja.   The  OLD
2092       behavior  for  this policy is to generate Ninja phony rules for unknown
2093       dependencies in the build tree.  The NEW behavior for this policy is to
2094       not  generate these and instead require projects to specify custom com‐
2095       mand BYPRODUCTS explicitly.
2096
2097       This policy was introduced in CMake version 3.3.  CMake version  3.19.7
2098       warns when it sees unknown dependencies in out-of-source build trees if
2099       the policy is not set and then uses OLD behavior.  Use  the  cmake_pol‐
2100       icy()  command  to set the policy to OLD or NEW explicitly.  The policy
2101       setting must be in scope at the end  of  the  top-level  CMakeLists.txt
2102       file of the project and has global effect.
2103
2104       NOTE:
2105          The  OLD behavior of a policy is deprecated by definition and may be
2106          removed in a future version of CMake.
2107
2108   CMP0057
2109       New in version 3.3.
2110
2111
2112       Support new if() IN_LIST operator.
2113
2114       CMake 3.3 adds support for the new IN_LIST operator.
2115
2116       The OLD behavior for this policy is to  ignore  the  IN_LIST  operator.
2117       The NEW behavior is to interpret the IN_LIST operator.
2118
2119       This  policy was introduced in CMake version 3.3.  CMake version 3.19.7
2120       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2121       cmake_policy() command to set it to OLD or NEW explicitly.
2122
2123       NOTE:
2124          The  OLD behavior of a policy is deprecated by definition and may be
2125          removed in a future version of CMake.
2126

POLICIES INTRODUCED BY CMAKE 3.2

2128   CMP0056
2129       New in version 3.2.
2130
2131
2132       Honor link flags in try_compile() source-file signature.
2133
2134       The try_compile() command  source-file  signature  generates  a  CMake‐
2135       Lists.txt  file  to build the source file into an executable.  In order
2136       to compile the source the same way as it might be compiled by the call‐
2137       ing   project,   the   generated   project   sets   the  value  of  the
2138       CMAKE_<LANG>_FLAGS variable to that in the calling project.  The  value
2139       of the CMAKE_EXE_LINKER_FLAGS variable may be needed in some cases too,
2140       but CMake 3.1 and lower did not set it in the generated project.  CMake
2141       3.2 and above prefer to set it so that linker flags are honored as well
2142       as compiler flags.  This policy provides compatibility with the pre-3.2
2143       behavior.
2144
2145       The  OLD  behavior  for  this  policy  is  to  not set the value of the
2146       CMAKE_EXE_LINKER_FLAGS variable in the generated test project.  The NEW
2147       behavior   for   this   policy   is   to   set   the   value   of   the
2148       CMAKE_EXE_LINKER_FLAGS variable in the test project to the same  as  it
2149       is in the calling project.
2150
2151       If  the  project code does not set the policy explicitly, users may set
2152       it on the command line  by  defining  the  CMAKE_POLICY_DEFAULT_CMP0056
2153       variable in the cache.
2154
2155       This policy was introduced in CMake version 3.2.  Unlike most policies,
2156       CMake version 3.19.7 does not warn by default when this policy  is  not
2157       set  and simply uses OLD behavior.  See documentation of the CMAKE_POL‐
2158       ICY_WARNING_CMP0056 variable to control the warning.
2159
2160       NOTE:
2161          The OLD behavior of a policy is deprecated by definition and may  be
2162          removed in a future version of CMake.
2163
2164   CMP0055
2165       New in version 3.2.
2166
2167
2168       Strict checking for the break() command.
2169
2170       CMake  3.1  and lower allowed calls to the break() command outside of a
2171       loop context and also ignored any given arguments.  This was  undefined
2172       behavior.
2173
2174       The  OLD behavior for this policy is to allow break() to be placed out‐
2175       side of loop contexts and ignores any arguments.  The NEW behavior  for
2176       this  policy is to issue an error if a misplaced break or any arguments
2177       are found.
2178
2179       This policy was introduced in CMake version 3.2.  CMake version  3.19.7
2180       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2181       cmake_policy() command to set it to OLD or NEW explicitly.
2182
2183       NOTE:
2184          The OLD behavior of a policy is deprecated by definition and may  be
2185          removed in a future version of CMake.
2186

POLICIES INTRODUCED BY CMAKE 3.1

2188   CMP0054
2189       New in version 3.1.
2190
2191
2192       Only interpret if() arguments as variables or keywords when unquoted.
2193
2194       CMake  3.1  and  above  no  longer  implicitly dereference variables or
2195       interpret keywords in an if() command argument  when  it  is  a  Quoted
2196       Argument or a Bracket Argument.
2197
2198       The OLD behavior for this policy is to dereference variables and inter‐
2199       pret keywords even if they are quoted or bracketed.  The  NEW  behavior
2200       is  to  not  dereference variables or interpret keywords that have been
2201       quoted or bracketed.
2202
2203       Given the following partial example:
2204
2205          set(A E)
2206          set(E "")
2207
2208          if("${A}" STREQUAL "")
2209            message("Result is TRUE before CMake 3.1 or when CMP0054 is OLD")
2210          else()
2211            message("Result is FALSE in CMake 3.1 and above if CMP0054 is NEW")
2212          endif()
2213
2214       After explicit expansion of variables this gives:
2215
2216          if("E" STREQUAL "")
2217
2218       With the policy set to OLD implicit expansion reduces this semantically
2219       to:
2220
2221          if("" STREQUAL "")
2222
2223       With  the  policy  set  to NEW the quoted arguments will not be further
2224       dereferenced:
2225
2226          if("E" STREQUAL "")
2227
2228       This policy was introduced in CMake version 3.1.  CMake version  3.19.7
2229       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2230       cmake_policy() command to set it to OLD or NEW explicitly.
2231
2232       NOTE:
2233          The OLD behavior of a policy is deprecated by definition and may  be
2234          removed in a future version of CMake.
2235
2236   CMP0053
2237       New in version 3.1.
2238
2239
2240       Simplify variable reference and escape sequence evaluation.
2241
2242       CMake  3.1 introduced a much faster implementation of evaluation of the
2243       Variable References and Escape Sequences documented in  the  cmake-lan‐
2244       guage(7)  manual.  While the behavior is identical to the legacy imple‐
2245       mentation in most cases, some corner cases were cleaned up to  simplify
2246       the behavior.  Specifically:
2247
2248       · Expansion  of  @VAR@ reference syntax defined by the configure_file()
2249         and string(CONFIGURE) commands is no longer performed in  other  con‐
2250         texts.
2251
2252       · Literal ${VAR} reference syntax may contain only alphanumeric charac‐
2253         ters (A-Z, a-z, 0-9) and the characters _, ., /, -, and +.  Note that
2254         $  is technically allowed in the NEW behavior, but is invalid for OLD
2255         behavior.  This is due to an oversight during the  implementation  of
2256         CMP0053  and  its  use as a literal variable reference is discouraged
2257         for this reason.  Variables with other characters in their  name  may
2258         still be referenced indirectly, e.g.
2259
2260            set(varname "otherwise & disallowed $ characters")
2261            message("${${varname}}")
2262
2263       · The setting of policy CMP0010 is not considered, so improper variable
2264         reference syntax is always an error.
2265
2266       · More characters are allowed to be escaped in variable names.   Previ‐
2267         ously,  only  ()#"  \@^  were  valid  characters  to  escape. Now any
2268         non-alphanumeric, non-semicolon, non-NUL  character  may  be  escaped
2269         following the escape_identity production in the Escape Sequences sec‐
2270         tion of the cmake-language(7) manual.
2271
2272       The OLD behavior for this policy is to honor the  legacy  behavior  for
2273       variable  references  and escape sequences.  The NEW behavior is to use
2274       the simpler variable expansion and escape sequence evaluation rules.
2275
2276       This policy was introduced in CMake version 3.1.  CMake version  3.19.7
2277       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2278       cmake_policy() command to set it to OLD or NEW explicitly.
2279
2280       NOTE:
2281          The OLD behavior of a policy is deprecated by definition and may  be
2282          removed in a future version of CMake.
2283
2284   CMP0052
2285       New in version 3.1.
2286
2287
2288       Reject  source  and  build dirs in installed INTERFACE_INCLUDE_DIRECTO‐
2289       RIES.
2290
2291       CMake 3.0 and lower allowed subdirectories of the source  directory  or
2292       build directory to be in the INTERFACE_INCLUDE_DIRECTORIES of installed
2293       and exported targets, if the directory was also a subdirectory  of  the
2294       installation  prefix.   This makes the installation depend on the exis‐
2295       tence of the source dir or binary dir, and  the  installation  will  be
2296       broken if either are removed after installation.
2297
2298       See  Include  Directories and Usage Requirements for more on specifying
2299       include directories for targets.
2300
2301       The OLD behavior for this policy is to export the content of the INTER‐
2302       FACE_INCLUDE_DIRECTORIES  with the source or binary directory.  The NEW
2303       behavior for this policy is to issue an error if such  a  directory  is
2304       used.
2305
2306       This  policy was introduced in CMake version 3.1.  CMake version 3.19.7
2307       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2308       cmake_policy() command to set it to OLD or NEW explicitly.
2309
2310       NOTE:
2311          The  OLD behavior of a policy is deprecated by definition and may be
2312          removed in a future version of CMake.
2313
2314   CMP0051
2315       New in version 3.1.
2316
2317
2318       List TARGET_OBJECTS in SOURCES target property.
2319
2320       CMake 3.0 and  lower  did  not  include  the  TARGET_OBJECTS  generator
2321       expression when returning the SOURCES target property.
2322
2323       Configure-time  CMake code is not able to handle generator expressions.
2324       If using the SOURCES target property at configure time, it may be  nec‐
2325       essary    to    first    remove   generator   expressions   using   the
2326       string(GENEX_STRIP)  command.   Generate-time  CMake   code   such   as
2327       file(GENERATE) can handle the content without stripping.
2328
2329       The  OLD behavior for this policy is to omit TARGET_OBJECTS expressions
2330       from the SOURCES target property.  The NEW behavior for this policy  is
2331       to include TARGET_OBJECTS expressions in the output.
2332
2333       This  policy was introduced in CMake version 3.1.  CMake version 3.19.7
2334       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2335       cmake_policy() command to set it to OLD or NEW explicitly.
2336
2337       NOTE:
2338          The  OLD behavior of a policy is deprecated by definition and may be
2339          removed in a future version of CMake.
2340

POLICIES INTRODUCED BY CMAKE 3.0

2342   CMP0050
2343       Disallow add_custom_command SOURCE signatures.
2344
2345       CMake 2.8.12 and lower allowed  a  signature  for  add_custom_command()
2346       which specified an input to a command.  This was undocumented behavior.
2347       Modern use of CMake  associates  custom  commands  with  their  output,
2348       rather than their input.
2349
2350       The OLD behavior for this policy is to allow the use of add_custom_com‐
2351       mand() SOURCE signatures.  The NEW behavior for this policy is to issue
2352       an error if such a signature is used.
2353
2354       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2355       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2356       cmake_policy() command to set it to OLD or NEW explicitly.
2357
2358       NOTE:
2359          The  OLD behavior of a policy is deprecated by definition and may be
2360          removed in a future version of CMake.
2361
2362   CMP0049
2363       Do not expand variables in target source entries.
2364
2365       CMake 2.8.12 and lower performed an extra layer of  variable  expansion
2366       when evaluating source file names:
2367
2368          set(a_source foo.c)
2369          add_executable(foo \${a_source})
2370
2371       This was undocumented behavior.
2372
2373       The  OLD behavior for this policy is to expand such variables when pro‐
2374       cessing the target sources.  The NEW behavior for  this  policy  is  to
2375       issue an error if such variables need to be expanded.
2376
2377       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2378       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2379       cmake_policy() command to set it to OLD or NEW explicitly.
2380
2381       NOTE:
2382          The  OLD behavior of a policy is deprecated by definition and may be
2383          removed in a future version of CMake.
2384
2385   CMP0048
2386       The project() command manages VERSION variables.
2387
2388       CMake version 3.0 introduced the VERSION option of the  project()  com‐
2389       mand  to  specify  a  project version as well as the name.  In order to
2390       keep PROJECT_VERSION and related  variables  consistent  with  variable
2391       PROJECT_NAME  it is necessary to set the VERSION variables to the empty
2392       string when no VERSION is given to project().  However, this can change
2393       behavior  for  existing  projects that set VERSION variables themselves
2394       since project() may now clear them.  This policy controls the  behavior
2395       for compatibility with such projects.
2396
2397       The  OLD  behavior  for  this  policy  is  to  leave  VERSION variables
2398       untouched.  The NEW behavior for this policy is to set VERSION as docu‐
2399       mented by the project() command.
2400
2401       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2402       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2403       cmake_policy() command to set it to OLD or NEW explicitly.
2404
2405       NOTE:
2406          The  OLD behavior of a policy is deprecated by definition and may be
2407          removed in a future version of CMake.
2408
2409   CMP0047
2410       Use QCC compiler id for the qcc drivers on QNX.
2411
2412       CMake 3.0 and above recognize that the QNX qcc compiler driver is  dif‐
2413       ferent  from  the  GNU  compiler.  CMake now prefers to present this to
2414       projects  by  setting  the  CMAKE_<LANG>_COMPILER_ID  variable  to  QCC
2415       instead  of GNU.  However, existing projects may assume the compiler id
2416       for QNX qcc is just GNU as it was  in  CMake  versions  prior  to  3.0.
2417       Therefore  this  policy  determines  for  QNX  qcc which compiler id to
2418       report in the CMAKE_<LANG>_COMPILER_ID variable after  language  <LANG>
2419       is  enabled  by the project() or enable_language() command.  The policy
2420       must be set prior to the invocation of either command.
2421
2422       The OLD behavior for this policy is to use the GNU compiler id for  the
2423       qcc  and  QCC  compiler drivers. The NEW behavior for this policy is to
2424       use the QCC compiler id for those drivers.
2425
2426       This policy was introduced in CMake version 3.0.   Use  the  cmake_pol‐
2427       icy() command to set this policy to OLD or NEW explicitly.  Unlike most
2428       policies, CMake version 3.19.7 does not warn by default when this  pol‐
2429       icy  is not set and simply uses OLD behavior.  See documentation of the
2430       CMAKE_POLICY_WARNING_CMP0047 variable to control the warning.
2431
2432       NOTE:
2433          The OLD behavior of a policy is deprecated by definition and may  be
2434          removed in a future version of CMake.
2435
2436   CMP0046
2437       Error on non-existent dependency in add_dependencies.
2438
2439       CMake  2.8.12  and  lower  silently  ignored  non-existent dependencies
2440       listed in the add_dependencies() command.
2441
2442       The OLD behavior for this policy is  to  silently  ignore  non-existent
2443       dependencies. The NEW behavior for this policy is to report an error if
2444       non-existent dependencies are listed in the add_dependencies() command.
2445
2446       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2447       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2448       cmake_policy() command to set it to OLD or NEW explicitly.
2449
2450       NOTE:
2451          The OLD behavior of a policy is deprecated by definition and may  be
2452          removed in a future version of CMake.
2453
2454   CMP0045
2455       Error on non-existent target in get_target_property.
2456
2457       In CMake 2.8.12 and lower, the get_target_property() command accepted a
2458       non-existent target argument without issuing any error or warning.  The
2459       result variable is set to a -NOTFOUND value.
2460
2461       The  OLD  behavior  for  this policy is to issue no warning and set the
2462       result variable to a -NOTFOUND value.  The NEW behavior for this policy
2463       is  to issue a FATAL_ERROR if the command is called with a non-existent
2464       target.
2465
2466       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2467       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2468       cmake_policy() command to set it to OLD or NEW explicitly.
2469
2470       NOTE:
2471          The OLD behavior of a policy is deprecated by definition and may  be
2472          removed in a future version of CMake.
2473
2474   CMP0044
2475       Case sensitive <LANG>_COMPILER_ID generator expressions
2476
2477       CMake 2.8.12 introduced the <LANG>_COMPILER_ID generator expressions to
2478       allow comparison of the CMAKE_<LANG>_COMPILER_ID  with  a  test  value.
2479       The  possible  valid  values are lowercase, but the comparison with the
2480       test value was performed case-insensitively.
2481
2482       The OLD behavior for this policy is to perform a case-insensitive  com‐
2483       parison  with  the  value in the <LANG>_COMPILER_ID expression. The NEW
2484       behavior for this policy is to perform a case-sensitive comparison with
2485       the value in the <LANG>_COMPILER_ID expression.
2486
2487       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2488       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2489       cmake_policy() command to set it to OLD or NEW explicitly.
2490
2491       NOTE:
2492          The  OLD behavior of a policy is deprecated by definition and may be
2493          removed in a future version of CMake.
2494
2495   CMP0043
2496       Ignore COMPILE_DEFINITIONS_<Config> properties
2497
2498       CMake 2.8.12 and lower allowed setting the COMPILE_DEFINITIONS_<CONFIG>
2499       target  property and COMPILE_DEFINITIONS_<CONFIG> directory property to
2500       apply configuration-specific compile definitions.
2501
2502       Since CMake 2.8.10, the COMPILE_DEFINITIONS property has supported gen‐
2503       erator  expressions  for  setting configuration-dependent content.  The
2504       continued existence of the suffixed variables is redundant, and  causes
2505       a  maintenance  burden.   Population  of  the COMPILE_DEFINITIONS_DEBUG
2506       property may be  replaced  with  a  population  of  COMPILE_DEFINITIONS
2507       directly or via target_compile_definitions():
2508
2509          # Old Interfaces:
2510          set_property(TARGET tgt APPEND PROPERTY
2511            COMPILE_DEFINITIONS_DEBUG DEBUG_MODE
2512          )
2513          set_property(DIRECTORY APPEND PROPERTY
2514            COMPILE_DEFINITIONS_DEBUG DIR_DEBUG_MODE
2515          )
2516
2517          # New Interfaces:
2518          set_property(TARGET tgt APPEND PROPERTY
2519            COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUG_MODE>
2520          )
2521          target_compile_definitions(tgt PRIVATE $<$<CONFIG:Debug>:DEBUG_MODE>)
2522          set_property(DIRECTORY APPEND PROPERTY
2523            COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DIR_DEBUG_MODE>
2524          )
2525
2526       The  OLD behavior for this policy is to consume the content of the suf‐
2527       fixed COMPILE_DEFINITIONS_<CONFIG> target property when generating  the
2528       compilation  command. The NEW behavior for this policy is to ignore the
2529       content of the COMPILE_DEFINITIONS_<CONFIG> target property .
2530
2531       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2532       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2533       cmake_policy() command to set it to OLD or NEW explicitly.
2534
2535       NOTE:
2536          The OLD behavior of a policy is deprecated by definition and may  be
2537          removed in a future version of CMake.
2538
2539   CMP0042
2540       MACOSX_RPATH is enabled by default.
2541
2542       CMake  2.8.12  and  newer  has  support  for using @rpath in a target’s
2543       install  name.   This  was  enabled  by  setting  the  target  property
2544       MACOSX_RPATH.   The  @rpath  in  an install name is a more flexible and
2545       powerful mechanism than @executable_path or @loader_path  for  locating
2546       shared libraries.
2547
2548       CMake 3.0 and later prefer this property to be ON by default.  Projects
2549       wanting @rpath in a target’s install name may remove any setting of the
2550       INSTALL_NAME_DIR and CMAKE_INSTALL_NAME_DIR variables.
2551
2552       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2553       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2554       cmake_policy() command to set it to OLD or NEW explicitly.
2555
2556       NOTE:
2557          The  OLD behavior of a policy is deprecated by definition and may be
2558          removed in a future version of CMake.
2559
2560   CMP0041
2561       Error on relative include with generator expression.
2562
2563       Diagnostics in CMake 2.8.12 and lower silently ignored an entry in  the
2564       INTERFACE_INCLUDE_DIRECTORIES  of  a target if it contained a generator
2565       expression at any position.
2566
2567       The path entries in  that  target  property  should  not  be  relative.
2568       High-level  API  should ensure that by adding either a source directory
2569       or a install directory prefix, as appropriate.
2570
2571       As an additional diagnostic, the  INTERFACE_INCLUDE_DIRECTORIES  gener‐
2572       ated  on an IMPORTED target for the install location should not contain
2573       paths in the source directory or the build directory.
2574
2575       The OLD behavior for this policy is to ignore relative path entries  if
2576       they  contain  a generator expression. The NEW behavior for this policy
2577       is to report an error if a  generator  expression  appears  in  another
2578       location and the path is relative.
2579
2580       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2581       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2582       cmake_policy() command to set it to OLD or NEW explicitly.
2583
2584       NOTE:
2585          The  OLD behavior of a policy is deprecated by definition and may be
2586          removed in a future version of CMake.
2587
2588   CMP0040
2589       The target in the TARGET signature of add_custom_command()  must  exist
2590       and must be defined in the current directory.
2591
2592       CMake  2.8.12  and lower silently ignored a custom command created with
2593       the TARGET signature of add_custom_command() if the target  is  unknown
2594       or was defined outside the current directory.
2595
2596       The  OLD  behavior  for  this  policy  is to ignore custom commands for
2597       unknown targets.  The NEW behavior for this  policy  is  to  report  an
2598       error  if  the  target referenced in add_custom_command() is unknown or
2599       was defined outside the current directory.
2600
2601       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2602       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2603       cmake_policy() command to set it to OLD or NEW explicitly.
2604
2605       NOTE:
2606          The OLD behavior of a policy is deprecated by definition and may  be
2607          removed in a future version of CMake.
2608
2609   CMP0039
2610       Utility targets may not have link dependencies.
2611
2612       CMake  2.8.12  and lower allowed using utility targets in the left hand
2613       side position of the target_link_libraries() command. This is an  indi‐
2614       cator of a bug in user code.
2615
2616       The  OLD behavior for this policy is to ignore attempts to set the link
2617       libraries of utility targets.  The NEW behavior for this policy  is  to
2618       report  an  error  if an attempt is made to set the link libraries of a
2619       utility target.
2620
2621       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2622       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2623       cmake_policy() command to set it to OLD or NEW explicitly.
2624
2625       NOTE:
2626          The OLD behavior of a policy is deprecated by definition and may  be
2627          removed in a future version of CMake.
2628
2629   CMP0038
2630       Targets may not link directly to themselves.
2631
2632       CMake  2.8.12  and  lower  allowed  a  build  target  to link to itself
2633       directly with a target_link_libraries() call. This is an indicator of a
2634       bug in user code.
2635
2636       The  OLD behavior for this policy is to ignore targets which list them‐
2637       selves in their own link implementation.  The  NEW  behavior  for  this
2638       policy is to report an error if a target attempts to link to itself.
2639
2640       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2641       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2642       cmake_policy() command to set it to OLD or NEW explicitly.
2643
2644       NOTE:
2645          The  OLD behavior of a policy is deprecated by definition and may be
2646          removed in a future version of CMake.
2647
2648   CMP0037
2649       Target names should not be reserved and should match  a  validity  pat‐
2650       tern.
2651
2652       CMake  2.8.12  and  lower allowed creating targets using add_library(),
2653       add_executable() and add_custom_target() with unrestricted  choice  for
2654       the  target name.  Newer cmake features such as cmake-generator-expres‐
2655       sions(7) and some diagnostics expect target names to match a restricted
2656       pattern.
2657
2658       Target  names  may  contain  upper and lower case letters, numbers, the
2659       underscore character (_), dot(.), plus(+) and minus(-).  As  a  special
2660       case, ALIAS and IMPORTED targets may contain two consecutive colons.
2661
2662       Target  names reserved by one or more CMake generators are not allowed.
2663       Among others these include all, clean, help, and install.
2664
2665       Target names associated with optional features, such as test and  pack‐
2666       age,  may  also be reserved.  CMake 3.10 and below always reserve them.
2667       CMake 3.11 and above reserve them only when the  corresponding  feature
2668       is enabled (e.g. by including the CTest or CPack modules).
2669
2670       The  OLD  behavior  for  this  policy is to allow creating targets with
2671       reserved names or which do not match the  validity  pattern.   The  NEW
2672       behavior  for  this policy is to report an error if an add_* command is
2673       used with an invalid target name.
2674
2675       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2676       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2677       cmake_policy() command to set it to OLD or NEW explicitly.
2678
2679       NOTE:
2680          The OLD behavior of a policy is deprecated by definition and may  be
2681          removed in a future version of CMake.
2682
2683   CMP0036
2684       The build_name() command should not be called.
2685
2686       This  command  was  added in May 2001 to compute a name for the current
2687       operating system and compiler combination.  The command has  long  been
2688       documented   as  discouraged  and  replaced  by  the  CMAKE_SYSTEM  and
2689       CMAKE_<LANG>_COMPILER variables.
2690
2691       CMake >= 3.0 prefer that this command never be called.  The OLD  behav‐
2692       ior  for  this  policy  is  to allow the command to be called.  The NEW
2693       behavior for this policy is to issue a FATAL_ERROR when the command  is
2694       called.
2695
2696       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2697       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2698       cmake_policy() command to set it to OLD or NEW explicitly.
2699
2700       NOTE:
2701          The  OLD behavior of a policy is deprecated by definition and may be
2702          removed in a future version of CMake.
2703
2704   CMP0035
2705       The variable_requires() command should not be called.
2706
2707       This command was introduced in November 2001  to  perform  some  condi‐
2708       tional logic.  It has long been replaced by the if() command.
2709
2710       CMake  >= 3.0 prefer that this command never be called.  The OLD behav‐
2711       ior for this policy is to allow the command  to  be  called.   The  NEW
2712       behavior  for this policy is to issue a FATAL_ERROR when the command is
2713       called.
2714
2715       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2716       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2717       cmake_policy() command to set it to OLD or NEW explicitly.
2718
2719       NOTE:
2720          The OLD behavior of a policy is deprecated by definition and may  be
2721          removed in a future version of CMake.
2722
2723   CMP0034
2724       The utility_source() command should not be called.
2725
2726       This  command  was  introduced  in March 2001 to help build executables
2727       used to generate other files.  This approach has long been replaced  by
2728       add_executable() combined with add_custom_command().
2729
2730       CMake  >= 3.0 prefer that this command never be called.  The OLD behav‐
2731       ior for this policy is to allow the command  to  be  called.   The  NEW
2732       behavior  for this policy is to issue a FATAL_ERROR when the command is
2733       called.
2734
2735       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2736       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2737       cmake_policy() command to set it to OLD or NEW explicitly.
2738
2739       NOTE:
2740          The OLD behavior of a policy is deprecated by definition and may  be
2741          removed in a future version of CMake.
2742
2743   CMP0033
2744       The export_library_dependencies() command should not be called.
2745
2746       This  command  was  added  in  January 2003 to export <tgt>_LIB_DEPENDS
2747       internal CMake cache entries to a file for installation with a project.
2748       This was used at the time to allow transitive link dependencies to work
2749       for applications outside of the original build tree of a project.   The
2750       functionality  has  been superseded by the export() and install(EXPORT)
2751       commands.
2752
2753       CMake >= 3.0 prefer that this command never be called.  The OLD  behav‐
2754       ior  for  this  policy  is  to allow the command to be called.  The NEW
2755       behavior for this policy is to issue a FATAL_ERROR when the command  is
2756       called.
2757
2758       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2759       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2760       cmake_policy() command to set it to OLD or NEW explicitly.
2761
2762       NOTE:
2763          The  OLD behavior of a policy is deprecated by definition and may be
2764          removed in a future version of CMake.
2765
2766   CMP0032
2767       The output_required_files() command should not be called.
2768
2769       This command was added in June 2001 to expose  the  then-current  CMake
2770       implicit  dependency scanner.  CMake’s real implicit dependency scanner
2771       has evolved since then but is not exposed through  this  command.   The
2772       scanning  capabilities  of this command are very limited and this func‐
2773       tionality is better achieved through dedicated outside tools.
2774
2775       CMake >= 3.0 prefer that this command never be called.  The OLD  behav‐
2776       ior  for  this  policy  is  to allow the command to be called.  The NEW
2777       behavior for this policy is to issue a FATAL_ERROR when the command  is
2778       called.
2779
2780       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2781       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2782       cmake_policy() command to set it to OLD or NEW explicitly.
2783
2784       NOTE:
2785          The  OLD behavior of a policy is deprecated by definition and may be
2786          removed in a future version of CMake.
2787
2788   CMP0031
2789       The load_command() command should not be called.
2790
2791       This command was added in August 2002 to allow projects  to  add  arbi‐
2792       trary commands implemented in C or C++.  However, it does not work when
2793       the toolchain in use does not match the ABI of the CMake  process.   It
2794       has been mostly superseded by the macro() and function() commands.
2795
2796       CMake  >= 3.0 prefer that this command never be called.  The OLD behav‐
2797       ior for this policy is to allow the command  to  be  called.   The  NEW
2798       behavior  for this policy is to issue a FATAL_ERROR when the command is
2799       called.
2800
2801       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2802       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2803       cmake_policy() command to set it to OLD or NEW explicitly.
2804
2805       NOTE:
2806          The OLD behavior of a policy is deprecated by definition and may  be
2807          removed in a future version of CMake.
2808
2809   CMP0030
2810       The use_mangled_mesa() command should not be called.
2811
2812       This command was created in September 2001 to support VTK before modern
2813       CMake language and custom command capabilities.  VTK has not used it in
2814       years.
2815
2816       CMake  >= 3.0 prefer that this command never be called.  The OLD behav‐
2817       ior for this policy is to allow the command  to  be  called.   The  NEW
2818       behavior  for this policy is to issue a FATAL_ERROR when the command is
2819       called.
2820
2821       This policy was introduced in CMake version 3.0.  CMake version  3.19.7
2822       warns  when  the  policy  is  not  set  and uses OLD behavior.  Use the
2823       cmake_policy() command to set it to OLD or NEW explicitly.
2824
2825       NOTE:
2826          The OLD behavior of a policy is deprecated by definition and may  be
2827          removed in a future version of CMake.
2828
2829   CMP0029
2830       The subdir_depends() command should not be called.
2831
2832       The  implementation  of this command has been empty since December 2001
2833       but was kept in CMake for compatibility for a long time.
2834
2835       CMake >= 3.0 prefer that this command never be called.  The OLD  behav‐
2836       ior  for  this  policy  is  to allow the command to be called.  The NEW
2837       behavior for this policy is to issue a FATAL_ERROR when the command  is
2838       called.
2839
2840       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2841       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2842       cmake_policy() command to set it to OLD or NEW explicitly.
2843
2844       NOTE:
2845          The  OLD behavior of a policy is deprecated by definition and may be
2846          removed in a future version of CMake.
2847
2848   CMP0028
2849       Double colon in target name means ALIAS or IMPORTED target.
2850
2851       CMake 2.8.12 and lower allowed the use of targets and files with double
2852       colons in target_link_libraries(), with some buildsystem generators.
2853
2854       The use of double-colons is a common pattern used to namespace IMPORTED
2855       targets and ALIAS targets.  When computing the link dependencies  of  a
2856       target, the name of each dependency could either be a target, or a file
2857       on disk.  Previously, if a target was not found with a  matching  name,
2858       the  name  was considered to refer to a file on disk.  This can lead to
2859       confusing error messages if there is a typo in what should be a  target
2860       name.
2861
2862       The  OLD  behavior for this policy is to search for targets, then files
2863       on disk, even if the  search  term  contains  double-colons.   The  NEW
2864       behavior for this policy is to issue a FATAL_ERROR if a link dependency
2865       contains double-colons but is not an IMPORTED target or an  ALIAS  tar‐
2866       get.
2867
2868       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2869       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2870       cmake_policy() command to set it to OLD or NEW explicitly.
2871
2872       NOTE:
2873          The  OLD behavior of a policy is deprecated by definition and may be
2874          removed in a future version of CMake.
2875
2876   CMP0027
2877       Conditionally linked imported targets with missing include directories.
2878
2879       CMake   2.8.11   introduced   introduced   the   concept   of    INTER‐
2880       FACE_INCLUDE_DIRECTORIES, and a check at cmake time that the entries in
2881       the INTERFACE_INCLUDE_DIRECTORIES of an IMPORTED target actually exist.
2882       CMake  2.8.11  also introduced generator expression support in the tar‐
2883       get_link_libraries() command.  However, if an imported target is linked
2884       as  a  result  of a generator expression evaluation, the entries in the
2885       INTERFACE_INCLUDE_DIRECTORIES of that target were not checked for exis‐
2886       tence as they should be.
2887
2888       The  OLD  behavior of this policy is to report a warning if an entry in
2889       the INTERFACE_INCLUDE_DIRECTORIES of a generator-expression  condition‐
2890       ally linked IMPORTED target does not exist.
2891
2892       The  NEW  behavior  of this policy is to report an error if an entry in
2893       the INTERFACE_INCLUDE_DIRECTORIES of a generator-expression  condition‐
2894       ally linked IMPORTED target does not exist.
2895
2896       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2897       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2898       cmake_policy() command to set it to OLD or NEW explicitly.
2899
2900       NOTE:
2901          The  OLD behavior of a policy is deprecated by definition and may be
2902          removed in a future version of CMake.
2903
2904   CMP0026
2905       Disallow use of the LOCATION property for build targets.
2906
2907       CMake 2.8.12 and lower allowed reading  the  LOCATION  target  property
2908       (and  configuration-specific  variants) to determine the eventual loca‐
2909       tion of build targets.  This relies on the assumption that  all  neces‐
2910       sary  information is available at configure-time to determine the final
2911       location and filename of the target.  However,  this  property  is  not
2912       fully  determined  until later at generate-time.  At generate time, the
2913       $<TARGET_FILE> generator expression can be used to determine the  even‐
2914       tual LOCATION of a target output.
2915
2916       Code  which reads the LOCATION target property can be ported to use the
2917       $<TARGET_FILE> generator expression together  with  the  file(GENERATE)
2918       subcommand to generate a file containing the target location.
2919
2920       The OLD behavior for this policy is to allow reading the LOCATION prop‐
2921       erties from build-targets.  The NEW behavior for this policy is to  not
2922       to allow reading the LOCATION properties from build-targets.
2923
2924       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2925       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2926       cmake_policy() command to set it to OLD or NEW explicitly.
2927
2928       NOTE:
2929          The  OLD behavior of a policy is deprecated by definition and may be
2930          removed in a future version of CMake.
2931
2932   CMP0025
2933       Compiler id for Apple Clang is now AppleClang.
2934
2935       CMake 3.0 and above recognize that Apple Clang is a different  compiler
2936       than  upstream  Clang  and  that  they  have different version numbers.
2937       CMake  now  prefers  to  present  this  to  projects  by  setting   the
2938       CMAKE_<LANG>_COMPILER_ID variable to AppleClang instead of Clang.  How‐
2939       ever, existing projects may assume the compiler id for Apple  Clang  is
2940       just  Clang  as  it was in CMake versions prior to 3.0.  Therefore this
2941       policy determines for Apple Clang which compiler id to  report  in  the
2942       CMAKE_<LANG>_COMPILER_ID  variable  after language <LANG> is enabled by
2943       the project() or enable_language() command.  The  policy  must  be  set
2944       prior to the invocation of either command.
2945
2946       The  OLD behavior for this policy is to use compiler id Clang.  The NEW
2947       behavior for this policy is to use compiler id AppleClang.
2948
2949       This policy was introduced in CMake version 3.0.   Use  the  cmake_pol‐
2950       icy() command to set this policy to OLD or NEW explicitly.  Unlike most
2951       policies, CMake version 3.19.7 does not warn by default when this  pol‐
2952       icy  is not set and simply uses OLD behavior.  See documentation of the
2953       CMAKE_POLICY_WARNING_CMP0025 variable to control the warning.
2954
2955       NOTE:
2956          The OLD behavior of a policy is deprecated by definition and may  be
2957          removed in a future version of CMake.
2958
2959   CMP0024
2960       Disallow include export result.
2961
2962       CMake  2.8.12  and  lower allowed use of the include() command with the
2963       result of the export() command.  This relies on the assumption that the
2964       export()  command  has  an  immediate effect at configure-time during a
2965       cmake run.  Certain properties of  targets  are  not  fully  determined
2966       until  later  at  generate-time, such as the link language and complete
2967       list of link libraries.  Future refactoring will change the  effect  of
2968       the  export()  command to be executed at generate-time.  Use ALIAS tar‐
2969       gets instead in cases where the goal is to refer to targets by  another
2970       name.
2971
2972       The OLD behavior for this policy is to allow including the result of an
2973       export() command.  The NEW behavior for this policy  is  not  to  allow
2974       including the result of an export() command.
2975
2976       This  policy was introduced in CMake version 3.0.  CMake version 3.19.7
2977       warns when the policy is not  set  and  uses  OLD  behavior.   Use  the
2978       cmake_policy() command to set it to OLD or NEW explicitly.
2979
2980       NOTE:
2981          The  OLD behavior of a policy is deprecated by definition and may be
2982          removed in a future version of CMake.
2983

POLICIES INTRODUCED BY CMAKE 2.8

2985   CMP0023
2986       Plain and keyword target_link_libraries() signatures cannot be mixed.
2987
2988       CMake 2.8.12 introduced the target_link_libraries() signature using the
2989       PUBLIC,  PRIVATE,  and INTERFACE keywords to generalize the LINK_PUBLIC
2990       and LINK_PRIVATE keywords introduced in CMake 2.8.7.  Use of signatures
2991       with  any of these keywords sets the link interface of a target explic‐
2992       itly, even if empty.  This produces confusing  behavior  when  used  in
2993       combination   with   the   historical   behavior   of  the  plain  tar‐
2994       get_link_libraries() signature.  For example, consider the code:
2995
2996          target_link_libraries(mylib A)
2997          target_link_libraries(mylib PRIVATE B)
2998
2999       After the first line the link interface has not been set explicitly  so
3000       CMake  would  use  the  link  implementation, A, as the link interface.
3001       However, the second line sets the link interface to empty.  In order to
3002       avoid  this  subtle  behavior  CMake now prefers to disallow mixing the
3003       plain and keyword signatures of target_link_libraries()  for  a  single
3004       target.
3005
3006       The  OLD  behavior  for  this policy is to allow keyword and plain tar‐
3007       get_link_libraries() signatures to be mixed.  The NEW behavior for this
3008       policy is to not to allow mixing of the keyword and plain signatures.
3009
3010       This  policy  was  introduced  in  CMake version 2.8.12.  CMake version
3011       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3012       cmake_policy() command to set it to OLD or NEW explicitly.
3013
3014       NOTE:
3015          The  OLD behavior of a policy is deprecated by definition and may be
3016          removed in a future version of CMake.
3017
3018   CMP0022
3019       INTERFACE_LINK_LIBRARIES defines the link interface.
3020
3021       CMake 2.8.11 constructed the ‘link interface’ of a target from  proper‐
3022       ties  matching  (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?.   The
3023       modern way to specify config-sensitive  content  is  to  use  generator
3024       expressions  and  the  IMPORTED_ prefix makes uniform processing of the
3025       link interface  with  generator  expressions  impossible.   The  INTER‐
3026       FACE_LINK_LIBRARIES  target property was introduced as a replacement in
3027       CMake 2.8.12.  This new property is named consistently with the  INTER‐
3028       FACE_COMPILE_DEFINITIONS,   INTERFACE_INCLUDE_DIRECTORIES   and  INTER‐
3029       FACE_COMPILE_OPTIONS properties.  For in-build targets, CMake will  use
3030       the  INTERFACE_LINK_LIBRARIES property as the source of the link inter‐
3031       face only if policy CMP0022 is NEW.  When exporting a target which  has
3032       this policy set to NEW, only the INTERFACE_LINK_LIBRARIES property will
3033       be processed and generated for the IMPORTED target by default.   A  new
3034       option  to the install(EXPORT) and export commands allows export of the
3035       old-style properties for compatibility with downstream users  of  CMake
3036       versions  older  than 2.8.12.  The target_link_libraries() command will
3037       no   longer    populate    the    properties    matching    LINK_INTER‐
3038       FACE_LIBRARIES(_<CONFIG>)? if this policy is NEW.
3039
3040       Warning-free  future-compatible  code  which  works  with  CMake  2.8.7
3041       onwards can be written by using the LINK_PRIVATE and  LINK_PUBLIC  key‐
3042       words of target_link_libraries().
3043
3044       The   OLD   behavior   for   this   policy  is  to  ignore  the  INTER‐
3045       FACE_LINK_LIBRARIES property for in-build targets.   The  NEW  behavior
3046       for  this  policy  is  to use the INTERFACE_LINK_LIBRARIES property for
3047       in-build   targets,   and   ignore   the   old   properties    matching
3048       (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?.
3049
3050       This  policy  was  introduced  in  CMake version 2.8.12.  CMake version
3051       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3052       cmake_policy() command to set it to OLD or NEW explicitly.
3053
3054       NOTE:
3055          The  OLD behavior of a policy is deprecated by definition and may be
3056          removed in a future version of CMake.
3057
3058   CMP0021
3059       Fatal error on relative paths in INCLUDE_DIRECTORIES target property.
3060
3061       CMake 2.8.10.2 and lower allowed the INCLUDE_DIRECTORIES  target  prop‐
3062       erty  to  contain  relative  paths.   The  base  path for such relative
3063       entries is not well defined.  CMake 2.8.12 issues a FATAL_ERROR if  the
3064       INCLUDE_DIRECTORIES property contains a relative path.
3065
3066       The OLD behavior for this policy is not to warn about relative paths in
3067       the INCLUDE_DIRECTORIES target property.  The  NEW  behavior  for  this
3068       policy is to issue a FATAL_ERROR if INCLUDE_DIRECTORIES contains a rel‐
3069       ative path.
3070
3071       This policy was introduced in  CMake  version  2.8.12.   CMake  version
3072       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3073       cmake_policy() command to set it to OLD or NEW explicitly.
3074
3075       NOTE:
3076          The OLD behavior of a policy is deprecated by definition and may  be
3077          removed in a future version of CMake.
3078
3079   CMP0020
3080       Automatically link Qt executables to qtmain target on Windows.
3081
3082       CMake  2.8.10  and  lower required users of Qt to always specify a link
3083       dependency to the qtmain.lib static library manually on Windows.  CMake
3084       2.8.11  gained  the  ability  to  evaluate  generator expressions while
3085       determining the link dependencies from IMPORTED targets.   This  allows
3086       CMake  itself to automatically link executables which link to Qt to the
3087       qtmain.lib library when using IMPORTED Qt  targets.   For  applications
3088       already  linking  to  qtmain.lib,  this should have little impact.  For
3089       applications which supply their own alternative WinMain  implementation
3090       and  for  applications  which use the QAxServer library, this automatic
3091       linking will need to be disabled as per the documentation.
3092
3093       The OLD behavior  for  this  policy  is  not  to  link  executables  to
3094       qtmain.lib  automatically when they link to the QtCore IMPORTED target.
3095       The NEW behavior for this policy is to link executables  to  qtmain.lib
3096       automatically when they link to QtCore IMPORTED target.
3097
3098       This  policy  was  introduced  in  CMake version 2.8.11.  CMake version
3099       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3100       cmake_policy() command to set it to OLD or NEW explicitly.
3101
3102       NOTE:
3103          The  OLD behavior of a policy is deprecated by definition and may be
3104          removed in a future version of CMake.
3105
3106   CMP0019
3107       Do not re-expand variables in include and link information.
3108
3109       CMake 2.8.10 and lower re-evaluated values given to the  include_direc‐
3110       tories,  link_directories,  and  link_libraries  commands to expand any
3111       leftover variable references at the  end  of  the  configuration  step.
3112       This  was  for  strict  compatibility  with  VERY  early CMake versions
3113       because all variable references are now normally evaluated during CMake
3114       language  processing.  CMake 2.8.11 and higher prefer to skip the extra
3115       evaluation.
3116
3117       The OLD behavior for this policy  is  to  re-evaluate  the  values  for
3118       strict compatibility.  The NEW behavior for this policy is to leave the
3119       values untouched.
3120
3121       This policy was introduced in  CMake  version  2.8.11.   CMake  version
3122       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3123       cmake_policy() command to set it to OLD or NEW explicitly.
3124
3125       NOTE:
3126          The OLD behavior of a policy is deprecated by definition and may  be
3127          removed in a future version of CMake.
3128
3129   CMP0018
3130       Ignore CMAKE_SHARED_LIBRARY_<Lang>_FLAGS variable.
3131
3132       CMake  2.8.8  and lower compiled sources in SHARED and MODULE libraries
3133       using the value of the  undocumented  CMAKE_SHARED_LIBRARY_<Lang>_FLAGS
3134       platform  variable.   The  variable  contained  platform-specific flags
3135       needed to compile objects for shared libraries.  Typically it  included
3136       a  flag  such  as -fPIC for position independent code but also included
3137       other flags needed on certain platforms.  CMake 2.8.9 and higher prefer
3138       instead  to use the POSITION_INDEPENDENT_CODE target property to deter‐
3139       mine what targets should be position independent, and new  undocumented
3140       platform     variables     to     select     flags    while    ignoring
3141       CMAKE_SHARED_LIBRARY_<Lang>_FLAGS completely.
3142
3143       The default for either approach produces identical  compilation  flags,
3144       but  if  a  project modifies CMAKE_SHARED_LIBRARY_<Lang>_FLAGS from its
3145       original value this policy determines which approach to use.
3146
3147       The OLD behavior for this policy is  to  ignore  the  POSITION_INDEPEN‐
3148       DENT_CODE  property  for  all  targets  and  use  the modified value of
3149       CMAKE_SHARED_LIBRARY_<Lang>_FLAGS for SHARED and MODULE libraries.
3150
3151       The    NEW    behavior    for    this    policy    is     to     ignore
3152       CMAKE_SHARED_LIBRARY_<Lang>_FLAGS  whether  it  is  modified or not and
3153       honor the POSITION_INDEPENDENT_CODE target property.
3154
3155       This policy was introduced  in  CMake  version  2.8.9.   CMake  version
3156       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3157       cmake_policy() command to set it to OLD or NEW explicitly.
3158
3159       NOTE:
3160          The OLD behavior of a policy is deprecated by definition and may  be
3161          removed in a future version of CMake.
3162
3163   CMP0017
3164       Prefer files from the CMake module directory when including from there.
3165
3166       Starting  with  CMake 2.8.4, if a cmake-module shipped with CMake (i.e.
3167       located in the CMake module directory) calls  include()  or  find_pack‐
3168       age(),  the  files  located in the CMake module directory are preferred
3169       over the files in CMAKE_MODULE_PATH.  This makes sure that the  modules
3170       belonging  to  CMake always get those files included which they expect,
3171       and against which they were developed and tested.  In all other  cases,
3172       the  files  found  in  CMAKE_MODULE_PATH still take precedence over the
3173       ones in the CMake module directory.  The OLD behavior is to always pre‐
3174       fer  files  from  CMAKE_MODULE_PATH  over  files from the CMake modules
3175       directory.
3176
3177       This policy was introduced  in  CMake  version  2.8.4.   CMake  version
3178       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3179       cmake_policy() command to set it to OLD or NEW explicitly.
3180
3181       NOTE:
3182          The OLD behavior of a policy is deprecated by definition and may  be
3183          removed in a future version of CMake.
3184
3185   CMP0016
3186       target_link_libraries()  reports  error  if  its only argument is not a
3187       target.
3188
3189       In CMake 2.8.2 and lower the target_link_libraries()  command  silently
3190       ignored  if  it  was  called  with only one argument, and this argument
3191       wasn’t a valid target.  In CMake 2.8.3 and above it reports an error in
3192       this case.
3193
3194       This  policy  was  introduced  in  CMake  version 2.8.3.  CMake version
3195       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3196       cmake_policy() command to set it to OLD or NEW explicitly.
3197
3198       NOTE:
3199          The  OLD behavior of a policy is deprecated by definition and may be
3200          removed in a future version of CMake.
3201
3202   CMP0015
3203          link_directories() treats paths relative to the source dir.
3204
3205       In CMake 2.8.0 and lower the link_directories() command passed relative
3206       paths   unchanged  to  the  linker.   In  CMake  2.8.1  and  above  the
3207       link_directories() command prefers to  interpret  relative  paths  with
3208       respect   to   CMAKE_CURRENT_SOURCE_DIR,   which   is  consistent  with
3209       include_directories() and other commands.  The OLD  behavior  for  this
3210       policy  is  to  use relative paths verbatim in the linker command.  The
3211       NEW behavior for this policy is to convert relative paths  to  absolute
3212       paths by appending the relative path to CMAKE_CURRENT_SOURCE_DIR.
3213
3214       This  policy  was  introduced  in  CMake  version 2.8.1.  CMake version
3215       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3216       cmake_policy() command to set it to OLD or NEW explicitly.
3217
3218       NOTE:
3219          The  OLD behavior of a policy is deprecated by definition and may be
3220          removed in a future version of CMake.
3221
3222   CMP0014
3223       Input directories must have CMakeLists.txt.
3224
3225       CMake versions before 2.8 silently ignored missing CMakeLists.txt files
3226       in directories referenced by add_subdirectory() or  subdirs(), treating
3227       them as if present but empty.  In CMake 2.8.0 and above this cmake_pol‐
3228       icy() determines whether or not the case is an error.  The OLD behavior
3229       for this policy is to silently ignore the problem.   The  NEW  behavior
3230       for this policy is to report an error.
3231
3232       This  policy  was  introduced  in  CMake  version 2.8.0.  CMake version
3233       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3234       cmake_policy() command to set it to OLD or NEW explicitly.
3235
3236       NOTE:
3237          The  OLD behavior of a policy is deprecated by definition and may be
3238          removed in a future version of CMake.
3239
3240   CMP0013
3241       Duplicate binary directories are not allowed.
3242
3243       CMake 2.6.3 and below silently permitted  add_subdirectory()  calls  to
3244       create  the  same binary directory multiple times.  During build system
3245       generation files would be written and then  overwritten  in  the  build
3246       tree and could lead to strange behavior.  CMake 2.6.4 and above explic‐
3247       itly detect duplicate binary directories.  CMake 2.6.4 always considers
3248       this  case  an  error.  In CMake 2.8.0 and above this policy determines
3249       whether or not the case is an error.  The OLD behavior for this  policy
3250       is  to  allow  duplicate binary directories.  The NEW behavior for this
3251       policy is to disallow duplicate binary directories with an error.
3252
3253       This policy was introduced  in  CMake  version  2.8.0.   CMake  version
3254       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3255       cmake_policy() command to set it to OLD or NEW explicitly.
3256
3257       NOTE:
3258          The OLD behavior of a policy is deprecated by definition and may  be
3259          removed in a future version of CMake.
3260
3261   CMP0012
3262       if() recognizes numbers and boolean constants.
3263
3264       In  CMake versions 2.6.4 and lower the if() command implicitly derefer‐
3265       enced arguments corresponding to variables, even those named like  num‐
3266       bers  or  boolean  constants,  except for 0 and 1.  Numbers and boolean
3267       constants such as true, false, yes, no, on, off, y, n, notfound, ignore
3268       (all  case insensitive) were recognized in some cases but not all.  For
3269       example, the code if(TRUE) might have evaluated as false.  Numbers such
3270       as  2 were recognized only in boolean expressions like if(NOT 2) (lead‐
3271       ing to false) but not as a single-argument like if(2) (also leading  to
3272       false).   Later  versions  of CMake prefer to treat numbers and boolean
3273       constants literally, so they should not be used as variable names.
3274
3275       The OLD behavior for this policy is to implicitly dereference variables
3276       named  like  numbers  and boolean constants.  The NEW behavior for this
3277       policy is to recognize numbers and boolean constants  without  derefer‐
3278       encing variables with such names.
3279
3280       This  policy  was  introduced  in  CMake  version 2.8.0.  CMake version
3281       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3282       cmake_policy() command to set it to OLD or NEW explicitly.
3283
3284       NOTE:
3285          The  OLD behavior of a policy is deprecated by definition and may be
3286          removed in a future version of CMake.
3287

POLICIES INTRODUCED BY CMAKE 2.6

3289   CMP0011
3290       Included scripts do automatic cmake_policy() PUSH and POP.
3291
3292       In CMake 2.6.2 and below, CMake Policy settings in  scripts  loaded  by
3293       the  include()  and  find_package() commands would affect the includer.
3294       Explicit invocations of cmake_policy(PUSH) and  cmake_policy(POP)  were
3295       required  to  isolate  policy  changes and protect the includer.  While
3296       some scripts intend to affect the policies of their includer,  most  do
3297       not.  In CMake 2.6.3 and above, include() and find_package() by default
3298       PUSH and POP an entry on the policy stack around  an  included  script,
3299       but provide a NO_POLICY_SCOPE option to disable it.  This policy deter‐
3300       mines whether or not to imply NO_POLICY_SCOPE for  compatibility.   The
3301       OLD  behavior for this policy is to imply NO_POLICY_SCOPE for include()
3302       and find_package() commands.  The NEW behavior for this  policy  is  to
3303       allow the commands to do their default cmake_policy PUSH and POP.
3304
3305       This  policy  was  introduced  in  CMake  version 2.6.3.  CMake version
3306       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3307       cmake_policy() command to set it to OLD or NEW explicitly.
3308
3309       NOTE:
3310          The  OLD behavior of a policy is deprecated by definition and may be
3311          removed in a future version of CMake.
3312
3313   CMP0010
3314       Bad variable reference syntax is an error.
3315
3316       In CMake 2.6.2 and below, incorrect variable reference syntax such as a
3317       missing close-brace (${FOO) was reported but did not stop processing of
3318       CMake code.  This policy determines whether a bad variable reference is
3319       an error.  The OLD behavior for this policy is to warn about the error,
3320       leave the string untouched, and continue.  The NEW  behavior  for  this
3321       policy is to report an error.
3322
3323       If  CMP0053  is set to NEW, this policy has no effect and is treated as
3324       always being NEW.
3325
3326       This policy was introduced  in  CMake  version  2.6.3.   CMake  version
3327       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3328       cmake_policy() command to set it to OLD or NEW explicitly.
3329
3330       NOTE:
3331          The OLD behavior of a policy is deprecated by definition and may  be
3332          removed in a future version of CMake.
3333
3334   CMP0009
3335       FILE GLOB_RECURSE calls should not follow symlinks by default.
3336
3337       In CMake 2.6.1 and below, file(GLOB_RECURSE) calls would follow through
3338       symlinks, sometimes coming  up  with  unexpectedly  large  result  sets
3339       because  of  symlinks to top level directories that contain hundreds of
3340       thousands of files.
3341
3342       This policy determines whether or not to  follow  symlinks  encountered
3343       during  a file(GLOB_RECURSE) call.  The OLD behavior for this policy is
3344       to follow the symlinks.  The NEW behavior for this  policy  is  not  to
3345       follow the symlinks by default, but only if FOLLOW_SYMLINKS is given as
3346       an additional argument to the FILE command.
3347
3348       This policy was introduced  in  CMake  version  2.6.2.   CMake  version
3349       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3350       cmake_policy() command to set it to OLD or NEW explicitly.
3351
3352       NOTE:
3353          The OLD behavior of a policy is deprecated by definition and may  be
3354          removed in a future version of CMake.
3355
3356   CMP0008
3357       Libraries linked by full-path must have a valid library file name.
3358
3359       In CMake 2.4 and below it is possible to write code like
3360
3361          target_link_libraries(myexe /full/path/to/somelib)
3362
3363       where  somelib is supposed to be a valid library file name such as lib‐
3364       somelib.a or somelib.lib.  For Makefile  generators  this  produces  an
3365       error  at  build time because the dependency on the full path cannot be
3366       found.  For Visual Studio Generators IDE and Xcode generators this used
3367       to  work  by  accident because CMake would always split off the library
3368       directory and ask  the  linker  to  search  for  the  library  by  name
3369       (-lsomelib  or  somelib.lib).  Despite the failure with Makefiles, some
3370       projects have code like this and build only with Visual  Studio  and/or
3371       Xcode.  This version of CMake prefers to pass the full path directly to
3372       the native build tool, which will fail in this case because it does not
3373       name a valid library file.
3374
3375       This policy determines what to do with full paths that do not appear to
3376       name a valid library file.  The OLD behavior  for  this  policy  is  to
3377       split  the  library name from the path and ask the linker to search for
3378       it.  The NEW behavior for this policy is to trust the  given  path  and
3379       pass it directly to the native build tool unchanged.
3380
3381       This  policy  was  introduced  in  CMake  version 2.6.1.  CMake version
3382       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3383       cmake_policy() command to set it to OLD or NEW explicitly.
3384
3385       NOTE:
3386          The  OLD behavior of a policy is deprecated by definition and may be
3387          removed in a future version of CMake.
3388
3389   CMP0007
3390       list command no longer ignores empty elements.
3391
3392       This policy determines whether the list command will ignore empty  ele‐
3393       ments in the list.  CMake 2.4 and below list commands ignored all empty
3394       elements in the list.  For example, a;b;;c would have length 3 and  not
3395       4.   The OLD behavior for this policy is to ignore empty list elements.
3396       The NEW behavior for this policy is to correctly count  empty  elements
3397       in a list.
3398
3399       This  policy  was  introduced  in  CMake  version 2.6.0.  CMake version
3400       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3401       cmake_policy() command to set it to OLD or NEW explicitly.
3402
3403       NOTE:
3404          The  OLD behavior of a policy is deprecated by definition and may be
3405          removed in a future version of CMake.
3406
3407   CMP0006
3408       Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION.
3409
3410       This policy determines whether the  install(TARGETS)  command  must  be
3411       given  a  BUNDLE  DESTINATION  when  asked to install a target with the
3412       MACOSX_BUNDLE property set.  CMake 2.4 and below  did  not  distinguish
3413       application  bundles  from  normal executables when installing targets.
3414       CMake 2.6 provides a BUNDLE option to the install(TARGETS) command that
3415       specifies  rules  specific to application bundles on the Mac.  Projects
3416       should use this option when installing a target with the  MACOSX_BUNDLE
3417       property set.
3418
3419       The  OLD behavior for this policy is to fall back to the RUNTIME DESTI‐
3420       NATION if a BUNDLE DESTINATION is not given.  The NEW behavior for this
3421       policy is to produce an error if a bundle target is installed without a
3422       BUNDLE DESTINATION.
3423
3424       This policy was introduced  in  CMake  version  2.6.0.   CMake  version
3425       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3426       cmake_policy() command to set it to OLD or NEW explicitly.
3427
3428       NOTE:
3429          The OLD behavior of a policy is deprecated by definition and may  be
3430          removed in a future version of CMake.
3431
3432   CMP0005
3433       Preprocessor definition values are now escaped automatically.
3434
3435       This  policy  determines  whether  or not CMake should generate escaped
3436       preprocessor definition values added via add_definitions.   CMake  ver‐
3437       sions 2.4 and below assumed that only trivial values would be given for
3438       macros  in  add_definitions  calls.   It  did  not  attempt  to  escape
3439       non-trivial  values  such  as string literals in generated build rules.
3440       CMake versions 2.6 and above support escaping of most values, but  can‐
3441       not assume the user has not added escapes already in an attempt to work
3442       around limitations in earlier versions.
3443
3444       The OLD behavior for this policy is to place definition values given to
3445       add_definitions  directly in the generated build rules without attempt‐
3446       ing to escape anything.  The NEW behavior for this policy is to  gener‐
3447       ate correct escapes for all native build tools automatically.  See doc‐
3448       umentation of the COMPILE_DEFINITIONS target property  for  limitations
3449       of the escaping implementation.
3450
3451       This  policy  was  introduced  in  CMake  version 2.6.0.  CMake version
3452       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3453       cmake_policy() command to set it to OLD or NEW explicitly.
3454
3455       NOTE:
3456          The  OLD behavior of a policy is deprecated by definition and may be
3457          removed in a future version of CMake.
3458
3459   CMP0004
3460       Libraries linked may not have leading or trailing whitespace.
3461
3462       CMake versions 2.4 and below  silently  removed  leading  and  trailing
3463       whitespace from libraries linked with code like
3464
3465          target_link_libraries(myexe " A ")
3466
3467       This could lead to subtle errors in user projects.
3468
3469       The  OLD  behavior  for  this  policy is to silently remove leading and
3470       trailing whitespace.  The NEW behavior for this policy is  to  diagnose
3471       the  existence  of  such  whitespace as an error.  The setting for this
3472       policy used when checking the library names is that in effect when  the
3473       target is created by an add_executable() or add_library() command.
3474
3475       This  policy  was  introduced  in  CMake  version 2.6.0.  CMake version
3476       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3477       cmake_policy() command to set it to OLD or NEW explicitly.
3478
3479       NOTE:
3480          The  OLD behavior of a policy is deprecated by definition and may be
3481          removed in a future version of CMake.
3482
3483   CMP0003
3484       Libraries linked via full path no longer produce linker search paths.
3485
3486       This policy affects how libraries whose full paths are  NOT  known  are
3487       found  at link time, but was created due to a change in how CMake deals
3488       with libraries whose full paths are known.  Consider the code
3489
3490          target_link_libraries(myexe /path/to/libA.so)
3491
3492       CMake 2.4 and below implemented linking to libraries whose  full  paths
3493       are  known  by splitting them on the link line into separate components
3494       consisting of the linker search path and the library name.  The example
3495       code might have produced something like
3496
3497          ... -L/path/to -lA ...
3498
3499       in order to link to library A.  An analysis was performed to order mul‐
3500       tiple link directories such that the linker would find library A in the
3501       desired  location,  but  there  are  cases in which this does not work.
3502       CMake versions 2.6 and above use the more reliable approach of  passing
3503       the  full  path to libraries directly to the linker in most cases.  The
3504       example code now produces something like
3505
3506          ... /path/to/libA.so ....
3507
3508       Unfortunately this change can break code like
3509
3510          target_link_libraries(myexe /path/to/libA.so B)
3511
3512       where B is meant to find /path/to/libB.so.  This code is wrong  because
3513       the  user is asking the linker to find library B but has not provided a
3514       linker search path (which may be added with the  link_directories  com‐
3515       mand).   However,  with  the  old linking implementation the code would
3516       work accidentally because the linker search path added  for  library  A
3517       allowed library B to be found.
3518
3519       In  order to support projects depending on linker search paths added by
3520       linking to libraries with known full paths, the OLD behavior  for  this
3521       policy will add the linker search paths even though they are not needed
3522       for their own libraries.  When this policy is set to  OLD,  CMake  will
3523       produce a link line such as
3524
3525          ... -L/path/to /path/to/libA.so -lB ...
3526
3527       which will allow library B to be found as it was previously.  When this
3528       policy is set to NEW, CMake will produce a link line such as
3529
3530          ... /path/to/libA.so -lB ...
3531
3532       which more accurately matches what the project specified.
3533
3534       The setting for this policy used when generating the link line is  that
3535       in   effect  when  the  target  is  created  by  an  add_executable  or
3536       add_library command.  For the example described above, the code
3537
3538          cmake_policy(SET CMP0003 OLD) # or cmake_policy(VERSION 2.4)
3539          add_executable(myexe myexe.c)
3540          target_link_libraries(myexe /path/to/libA.so B)
3541
3542       will work and suppress the warning for this policy.   It  may  also  be
3543       updated to work with the corrected linking approach:
3544
3545          cmake_policy(SET CMP0003 NEW) # or cmake_policy(VERSION 2.6)
3546          link_directories(/path/to) # needed to find library B
3547          add_executable(myexe myexe.c)
3548          target_link_libraries(myexe /path/to/libA.so B)
3549
3550       Even better, library B may be specified with a full path:
3551
3552          add_executable(myexe myexe.c)
3553          target_link_libraries(myexe /path/to/libA.so /path/to/libB.so)
3554
3555       When  all  items on the link line have known paths CMake does not check
3556       this policy so it has no effect.
3557
3558       Note that the warning for this policy will be issued for  at  most  one
3559       target.  This avoids flooding users with messages for every target when
3560       setting the policy once will probably fix all targets.
3561
3562       This policy was introduced  in  CMake  version  2.6.0.   CMake  version
3563       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3564       cmake_policy() command to set it to OLD or NEW explicitly.
3565
3566       NOTE:
3567          The OLD behavior of a policy is deprecated by definition and may  be
3568          removed in a future version of CMake.
3569
3570   CMP0002
3571       Logical target names must be globally unique.
3572
3573       Targets names created with add_executable(), add_library(), or add_cus‐
3574       tom_target() are logical build target names.  Logical target names must
3575       be globally unique because:
3576
3577          - Unique names may be referenced unambiguously both in CMake
3578            code and on make tool command lines.
3579          - Logical names are used by Xcode and VS IDE generators
3580            to produce meaningful project names for the targets.
3581
3582       The  logical  name  of  executable and library targets does not have to
3583       correspond to the physical file names built.  Consider using  the  OUT‐
3584       PUT_NAME  target  property to create two targets with the same physical
3585       name while keeping logical names distinct.  Custom targets must  simply
3586       have  globally  unique  names  (unless  one  uses  the  global property
3587       ALLOW_DUPLICATE_CUSTOM_TARGETS with a Makefiles generator).
3588
3589       This policy was introduced  in  CMake  version  2.6.0.   CMake  version
3590       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3591       cmake_policy() command to set it to OLD or NEW explicitly.
3592
3593       NOTE:
3594          The OLD behavior of a policy is deprecated by definition and may  be
3595          removed in a future version of CMake.
3596
3597   CMP0001
3598       CMAKE_BACKWARDS_COMPATIBILITY should no longer be used.
3599
3600       The  behavior  is to check CMAKE_BACKWARDS_COMPATIBILITY and present it
3601       to the user.  The NEW behavior is to ignore CMAKE_BACKWARDS_COMPATIBIL‐
3602       ITY completely.
3603
3604       In  CMake  2.4 and below the variable CMAKE_BACKWARDS_COMPATIBILITY was
3605       used to request compatibility with earlier versions of CMake.  In CMake
3606       2.6  and above all compatibility issues are handled by policies and the
3607       cmake_policy() command.  However, CMake must  still  check  CMAKE_BACK‐
3608       WARDS_COMPATIBILITY for projects written for CMake 2.4 and below.
3609
3610       This  policy  was  introduced  in  CMake  version 2.6.0.  CMake version
3611       3.19.7 warns when the policy is not set and uses OLD behavior.  Use the
3612       cmake_policy() command to set it to OLD or NEW explicitly.
3613
3614       NOTE:
3615          The  OLD behavior of a policy is deprecated by definition and may be
3616          removed in a future version of CMake.
3617
3618   CMP0000
3619       A minimum required CMake version must be specified.
3620
3621       CMake requires that projects specify the version of CMake to which they
3622       have  been  written.  This policy has been put in place so users trying
3623       to build the project may be told when they need to update their  CMake.
3624       Specifying  a  version also helps the project build with CMake versions
3625       newer than that specified.  Use the cmake_minimum_required() command at
3626       the top of your main CMakeLists.txt file:
3627
3628          cmake_minimum_required(VERSION <major>.<minor>)
3629
3630       where <major>.<minor> is the version of CMake you want to support (such
3631       as 3.14).  The command will ensure that at least the given  version  of
3632       CMake  is  running  and  help  newer  versions  be  compatible with the
3633       project.  See documentation of cmake_minimum_required() for details.
3634
3635       Note that the command invocation must appear in the CMakeLists.txt file
3636       itself;  a  call  in  an included file is not sufficient.  However, the
3637       cmake_policy() command may be called to set policy CMP0000  to  OLD  or
3638       NEW  behavior  explicitly.   The OLD behavior is to silently ignore the
3639       missing invocation.  The NEW behavior is to issue an error instead of a
3640       warning.   An  included  file  may set CMP0000 explicitly to affect how
3641       this policy is enforced for the main CMakeLists.txt file.
3642
3643       This policy was introduced in CMake version 2.6.0.
3644
3645       NOTE:
3646          The OLD behavior of a policy is deprecated by definition and may  be
3647          removed in a future version of CMake.
3648
3650       2000-2021 Kitware, Inc. and Contributors
3651
3652
3653
3654
36553.19.7                           Mar 15, 2021                CMAKE-POLICIES(7)
Impressum