mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 19:30:13 -06:00
FindBISON: Add policy CMP0088 to run bison in build tree
This commit is contained in:
committed by
Brad King
parent
f5da1bb349
commit
5000fed5af
@@ -57,6 +57,7 @@ Policies Introduced by CMake 3.14
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
CMP0088: FindBISON runs bison in CMAKE_CURRENT_BINARY_DIR when executing. </policy/CMP0088>
|
||||
CMP0087: install(SCRIPT | CODE) supports generator expressions. </policy/CMP0087>
|
||||
CMP0086: UseSWIG honors SWIG_MODULE_NAME via -module flag. </policy/CMP0086>
|
||||
CMP0085: IN_LIST generator expression handles empty list items. </policy/CMP0085>
|
||||
|
||||
29
Help/policy/CMP0088.rst
Normal file
29
Help/policy/CMP0088.rst
Normal file
@@ -0,0 +1,29 @@
|
||||
CMP0088
|
||||
-------
|
||||
|
||||
:module:`FindBISON` runs bison in :variable:`CMAKE_CURRENT_BINARY_DIR`
|
||||
when executing.
|
||||
|
||||
The module provides a ``BISON_TARGET`` macro which generates BISON output.
|
||||
In CMake 3.13 and below the macro would generate a custom command that runs
|
||||
``bison`` in the source directory. CMake 3.14 and later prefer to run it
|
||||
in the build directory and use :variable:`CMAKE_CURRENT_BINARY_DIR` as the
|
||||
``WORKING_DIRECTORY`` of its :command:`add_custom_command` invocation.
|
||||
This ensures that any implicitly generated file is written to the build
|
||||
tree rather than the source.
|
||||
|
||||
This policy provides compatibility for projects that have not been updated
|
||||
to expect the new behavior.
|
||||
|
||||
The ``OLD`` behavior for this policy is for ``BISON_TARGET`` to use
|
||||
the current source directory for the ``WORKING_DIRECTORY`` and where
|
||||
to generate implicit files. The ``NEW`` behavior of this policy is to
|
||||
use the current binary directory for the ``WORKING_DIRECTORY`` and where
|
||||
to generate implicit files.
|
||||
|
||||
This policy was introduced in CMake version 3.14. Use the
|
||||
:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
|
||||
Unlike most policies, CMake version |release| does *not* warn
|
||||
when this policy is not set and simply uses ``OLD`` behavior.
|
||||
|
||||
.. include:: DEPRECATED.txt
|
||||
6
Help/release/dev/bison_target_policy.rst
Normal file
6
Help/release/dev/bison_target_policy.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
bison_target_policy
|
||||
-------------------
|
||||
|
||||
* The :module:`FindBISON` module's ``BISON_TARGET`` command now runs ``bison``
|
||||
with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory.
|
||||
See policy :policy:`CMP0088`.
|
||||
@@ -151,7 +151,15 @@ if(BISON_EXECUTABLE)
|
||||
list(APPEND BISON_TARGET_cmdopt "--report-file=${BISON_TARGET_verbose_file}")
|
||||
endif()
|
||||
if(NOT IS_ABSOLUTE "${BISON_TARGET_verbose_file}")
|
||||
set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_SOURCE_DIR}/${BISON_TARGET_verbose_file}")
|
||||
cmake_policy(GET CMP0088 _BISON_CMP0088
|
||||
PARENT_SCOPE # undocumented, do not use outside of CMake
|
||||
)
|
||||
if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
|
||||
set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_BINARY_DIR}/${BISON_TARGET_verbose_file}")
|
||||
else()
|
||||
set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_SOURCE_DIR}/${BISON_TARGET_verbose_file}")
|
||||
endif()
|
||||
unset(_BISON_CMP0088)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
@@ -159,6 +167,15 @@ if(BISON_EXECUTABLE)
|
||||
# adds a custom command and sets
|
||||
# BISON_TARGET_cmdopt, BISON_TARGET_extraoutputs
|
||||
macro(BISON_TARGET_option_verbose Name BisonOutput filename)
|
||||
cmake_policy(GET CMP0088 _BISON_CMP0088
|
||||
PARENT_SCOPE # undocumented, do not use outside of CMake
|
||||
)
|
||||
set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
|
||||
set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
unset(_BISON_CMP0088)
|
||||
|
||||
list(APPEND BISON_TARGET_cmdopt "--verbose")
|
||||
list(APPEND BISON_TARGET_outputs
|
||||
"${BISON_TARGET_verbose_file}")
|
||||
@@ -166,8 +183,9 @@ if(BISON_EXECUTABLE)
|
||||
if(IS_ABSOLUTE "${filename}")
|
||||
set(BISON_TARGET_verbose_extra_file "${filename}")
|
||||
else()
|
||||
set(BISON_TARGET_verbose_extra_file "${CMAKE_CURRENT_SOURCE_DIR}/${filename}")
|
||||
set(BISON_TARGET_verbose_extra_file "${_BISON_WORKING_DIRECTORY}/${filename}")
|
||||
endif()
|
||||
|
||||
add_custom_command(OUTPUT ${BISON_TARGET_verbose_extra_file}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${BISON_TARGET_verbose_file}"
|
||||
@@ -176,10 +194,11 @@ if(BISON_EXECUTABLE)
|
||||
DEPENDS
|
||||
"${BISON_TARGET_verbose_file}"
|
||||
COMMENT "[BISON][${Name}] Copying bison verbose table to ${filename}"
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
WORKING_DIRECTORY ${_BISON_WORKING_DIRECTORY})
|
||||
list(APPEND BISON_TARGET_extraoutputs
|
||||
"${BISON_TARGET_verbose_extra_file}")
|
||||
unset(BISON_TARGET_verbose_extra_file)
|
||||
unset(_BISON_WORKING_DIRECTORY)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
@@ -234,12 +253,23 @@ if(BISON_EXECUTABLE)
|
||||
|
||||
list(APPEND BISON_TARGET_outputs "${BISON_TARGET_output_header}")
|
||||
|
||||
cmake_policy(GET CMP0088 _BISON_CMP0088
|
||||
PARENT_SCOPE # undocumented, do not use outside of CMake
|
||||
)
|
||||
set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
if("x${_BISON_CMP0088}x" STREQUAL "xNEWx")
|
||||
set(_BISON_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
unset(_BISON_CMP0088)
|
||||
|
||||
add_custom_command(OUTPUT ${BISON_TARGET_outputs}
|
||||
COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${BisonInput}
|
||||
VERBATIM
|
||||
DEPENDS ${BisonInput}
|
||||
COMMENT "[BISON][${Name}] Building parser with bison ${BISON_VERSION}"
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
WORKING_DIRECTORY ${_BISON_WORKING_DIRECTORY})
|
||||
|
||||
unset(_BISON_WORKING_DIRECTORY)
|
||||
|
||||
# define target variables
|
||||
set(BISON_${Name}_DEFINED TRUE)
|
||||
|
||||
@@ -258,6 +258,9 @@ class cmMakefile;
|
||||
SELECT(POLICY, CMP0087, \
|
||||
"Install CODE|SCRIPT allow the use of generator " \
|
||||
"expressions.", \
|
||||
3, 14, 0, cmPolicies::WARN) \
|
||||
SELECT(POLICY, CMP0088, \
|
||||
"FindBISON runs bison in CMAKE_CURRENT_BINARY_DIR when executing.", \
|
||||
3, 14, 0, cmPolicies::WARN)
|
||||
|
||||
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
|
||||
|
||||
Reference in New Issue
Block a user