mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-03 14:20:27 +00:00
FindFLEX: Add policy CMP0098 to run flex in build tree
This commit is contained in:
@@ -51,6 +51,14 @@ The :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable may also be used
|
|||||||
to determine whether to report an error on use of deprecated macros or
|
to determine whether to report an error on use of deprecated macros or
|
||||||
functions.
|
functions.
|
||||||
|
|
||||||
|
Policies Introduced by CMake 3.17
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
CMP0098: FindFLEX runs flex in CMAKE_CURRENT_BINARY_DIR when executing. </policy/CMP0098>
|
||||||
|
|
||||||
Policies Introduced by CMake 3.16
|
Policies Introduced by CMake 3.16
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
|
|||||||
30
Help/policy/CMP0098.rst
Normal file
30
Help/policy/CMP0098.rst
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
CMP0098
|
||||||
|
-------
|
||||||
|
|
||||||
|
:module:`FindFLEX` runs ``flex`` in directory
|
||||||
|
:variable:`CMAKE_CURRENT_BINARY_DIR` when executing.
|
||||||
|
|
||||||
|
The module provides a ``FLEX_TARGET`` macro which generates FLEX output.
|
||||||
|
In CMake 3.16 and below the macro would generate a custom command that runs
|
||||||
|
``flex`` in the current source directory. CMake 3.17 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 relative to the
|
||||||
|
build tree rather than the source tree, unless the generated file is
|
||||||
|
provided as absolute path.
|
||||||
|
|
||||||
|
This policy provides compatibility for projects that have not been updated
|
||||||
|
to expect the new behavior.
|
||||||
|
|
||||||
|
The ``OLD`` behavior for this policy is for ``FLEX_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`` relative to
|
||||||
|
which implicit files are generated unless provided as absolute path.
|
||||||
|
|
||||||
|
This policy was introduced in CMake version 3.17. Use the
|
||||||
|
:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.
|
||||||
|
Unlike many 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/FindFLEX-work-dir.rst
Normal file
6
Help/release/dev/FindFLEX-work-dir.rst
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
FindFLEX-work-dir
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* The :module:`FindFLEX` module's ``FLEX_TARGET`` command now runs ``flex``
|
||||||
|
with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory.
|
||||||
|
See policy :policy:`CMP0098`.
|
||||||
@@ -142,8 +142,6 @@ if(FLEX_EXECUTABLE)
|
|||||||
#============================================================
|
#============================================================
|
||||||
#
|
#
|
||||||
macro(FLEX_TARGET Name Input Output)
|
macro(FLEX_TARGET Name Input Output)
|
||||||
set(FLEX_TARGET_outputs "${Output}")
|
|
||||||
set(FLEX_EXECUTABLE_opts "")
|
|
||||||
|
|
||||||
set(FLEX_TARGET_PARAM_OPTIONS)
|
set(FLEX_TARGET_PARAM_OPTIONS)
|
||||||
set(FLEX_TARGET_PARAM_ONE_VALUE_KEYWORDS
|
set(FLEX_TARGET_PARAM_ONE_VALUE_KEYWORDS
|
||||||
@@ -165,31 +163,68 @@ if(FLEX_EXECUTABLE)
|
|||||||
if(NOT "${FLEX_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
|
if(NOT "${FLEX_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "")
|
||||||
message(SEND_ERROR ${FLEX_TARGET_usage})
|
message(SEND_ERROR ${FLEX_TARGET_usage})
|
||||||
else()
|
else()
|
||||||
if(NOT "${FLEX_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
|
|
||||||
set(FLEX_EXECUTABLE_opts "${FLEX_TARGET_ARG_COMPILE_FLAGS}")
|
cmake_policy(GET CMP0098 _flex_CMP0098
|
||||||
separate_arguments(FLEX_EXECUTABLE_opts)
|
PARENT_SCOPE # undocumented, do not use outside of CMake
|
||||||
|
)
|
||||||
|
set(_flex_INPUT "${Input}")
|
||||||
|
if("x${_flex_CMP0098}x" STREQUAL "xNEWx")
|
||||||
|
set(_flex_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
if(NOT IS_ABSOLUTE "${_flex_INPUT}")
|
||||||
|
set(_flex_INPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_flex_INPUT}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(_flex_WORKING_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
endif()
|
endif()
|
||||||
if(NOT "${FLEX_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
|
unset(_flex_CMP0098)
|
||||||
list(APPEND FLEX_TARGET_outputs "${FLEX_TARGET_ARG_DEFINES_FILE}")
|
|
||||||
list(APPEND FLEX_EXECUTABLE_opts --header-file=${FLEX_TARGET_ARG_DEFINES_FILE})
|
set(_flex_OUTPUT "${Output}")
|
||||||
|
if(NOT IS_ABSOLUTE ${_flex_OUTPUT})
|
||||||
|
set(_flex_OUTPUT "${_flex_WORKING_DIR}/${_flex_OUTPUT}")
|
||||||
|
endif()
|
||||||
|
set(_flex_TARGET_OUTPUTS "${_flex_OUTPUT}")
|
||||||
|
|
||||||
|
set(_flex_EXE_OPTS "")
|
||||||
|
if(NOT "${FLEX_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "")
|
||||||
|
set(_flex_EXE_OPTS "${FLEX_TARGET_ARG_COMPILE_FLAGS}")
|
||||||
|
separate_arguments(_flex_EXE_OPTS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${FLEX_TARGET_outputs}
|
set(_flex_OUTPUT_HEADER "")
|
||||||
COMMAND ${FLEX_EXECUTABLE} ${FLEX_EXECUTABLE_opts} -o${Output} ${Input}
|
if(NOT "${FLEX_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
|
||||||
|
set(_flex_OUTPUT_HEADER "${FLEX_TARGET_ARG_DEFINES_FILE}")
|
||||||
|
if(IS_ABSOLUTE "${_flex_OUTPUT_HEADER}")
|
||||||
|
set(_flex_OUTPUT_HEADER_ABS "${_flex_OUTPUT_HEADER}")
|
||||||
|
else()
|
||||||
|
set(_flex_OUTPUT_HEADER_ABS "${_flex_WORKING_DIR}/${_flex_OUTPUT_HEADER}")
|
||||||
|
endif()
|
||||||
|
list(APPEND _flex_TARGET_OUTPUTS "${_flex_OUTPUT_HEADER_ABS}")
|
||||||
|
list(APPEND _flex_EXE_OPTS --header-file=${_flex_OUTPUT_HEADER_ABS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_filename_component(_flex_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
|
||||||
|
add_custom_command(OUTPUT ${_flex_TARGET_OUTPUTS}
|
||||||
|
COMMAND ${FLEX_EXECUTABLE} ${_flex_EXE_OPTS} -o${_flex_OUTPUT} ${_flex_INPUT}
|
||||||
VERBATIM
|
VERBATIM
|
||||||
DEPENDS ${Input}
|
DEPENDS ${_flex_INPUT}
|
||||||
COMMENT "[FLEX][${Name}] Building scanner with flex ${FLEX_VERSION}"
|
COMMENT "[FLEX][${Name}] Building scanner with ${_flex_EXE_NAME_WE} ${FLEX_VERSION}"
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
WORKING_DIRECTORY ${_flex_WORKING_DIR})
|
||||||
|
|
||||||
set(FLEX_${Name}_DEFINED TRUE)
|
set(FLEX_${Name}_DEFINED TRUE)
|
||||||
set(FLEX_${Name}_OUTPUTS ${Output})
|
set(FLEX_${Name}_OUTPUTS ${_flex_TARGET_OUTPUTS})
|
||||||
set(FLEX_${Name}_INPUT ${Input})
|
set(FLEX_${Name}_INPUT ${_flex_INPUT})
|
||||||
set(FLEX_${Name}_COMPILE_FLAGS ${FLEX_EXECUTABLE_opts})
|
set(FLEX_${Name}_COMPILE_FLAGS ${_flex_EXE_OPTS})
|
||||||
if("${FLEX_TARGET_ARG_DEFINES_FILE}" STREQUAL "")
|
set(FLEX_${Name}_OUTPUT_HEADER ${_flex_OUTPUT_HEADER})
|
||||||
set(FLEX_${Name}_OUTPUT_HEADER "")
|
|
||||||
else()
|
unset(_flex_EXE_NAME_WE)
|
||||||
set(FLEX_${Name}_OUTPUT_HEADER ${FLEX_TARGET_ARG_DEFINES_FILE})
|
unset(_flex_EXE_OPTS)
|
||||||
endif()
|
unset(_flex_INPUT)
|
||||||
|
unset(_flex_OUTPUT)
|
||||||
|
unset(_flex_OUTPUT_HEADER)
|
||||||
|
unset(_flex_OUTPUT_HEADER_ABS)
|
||||||
|
unset(_flex_TARGET_OUTPUTS)
|
||||||
|
unset(_flex_WORKING_DIR)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
#============================================================
|
#============================================================
|
||||||
|
|||||||
@@ -290,7 +290,10 @@ class cmMakefile;
|
|||||||
SELECT(POLICY, CMP0097, \
|
SELECT(POLICY, CMP0097, \
|
||||||
"ExternalProject_Add with GIT_SUBMODULES \"\" initializes no " \
|
"ExternalProject_Add with GIT_SUBMODULES \"\" initializes no " \
|
||||||
"submodules.", \
|
"submodules.", \
|
||||||
3, 16, 0, cmPolicies::WARN)
|
3, 16, 0, cmPolicies::WARN) \
|
||||||
|
SELECT(POLICY, CMP0098, \
|
||||||
|
"FindFLEX runs flex in CMAKE_CURRENT_BINARY_DIR when executing.", 3, \
|
||||||
|
17, 0, cmPolicies::WARN)
|
||||||
|
|
||||||
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
|
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
|
||||||
#define CM_FOR_EACH_POLICY_ID(POLICY) \
|
#define CM_FOR_EACH_POLICY_ID(POLICY) \
|
||||||
|
|||||||
Reference in New Issue
Block a user