Warning, /frameworks/extra-cmake-modules/find-modules/FindGperf.cmake is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2016-2017 Pino Toscano <pino@kde.org>
0002 #
0003 # SPDX-License-Identifier: BSD-3-Clause
0004
0005 #[=======================================================================[.rst:
0006 FindGperf
0007 -----------
0008
0009 Try to find GNU gperf.
0010
0011 If the gperf executable is not in your PATH, you can provide
0012 an alternative name or full path location with the ``Gperf_EXECUTABLE``
0013 variable.
0014
0015 This will define the following variables:
0016
0017 ``Gperf_FOUND``
0018 True if gperf is available.
0019
0020 ``Gperf_EXECUTABLE``
0021 The gperf executable.
0022
0023 ``Gperf_VERSION``
0024 The gperf version. (since 5.85)
0025
0026 If ``Gperf_FOUND`` is TRUE, it will also define the following imported
0027 target:
0028
0029 ``GPerf::Gperf``
0030 The gperf executable.
0031
0032 and the following public function:
0033 ::
0034
0035 ecm_gperf_generate(<GperfInput> <OutputFile> <OutputVariable(|target (since 5.83))>
0036 [GENERATION_FLAGS <flags>])
0037
0038 Run ``gperf`` on ``<GperfInput>`` to generate ``<OutputFile>``, adding it to
0039 the ``<OutputVariable>`` variable which contains the source for the target
0040 where ``<OutputFile>`` is going to be built or, since KF 5.83, if the given
0041 argument is a target, to the list of private sources of that target. The
0042 target must not be an alias. The optional ``GENERATION_FLAGS`` argument is
0043 needed to pass extra parameters to ``gperf`` (note you cannot override that
0044 way the output file).
0045
0046 A simple invocation would be:
0047
0048 .. code-block:: cmake
0049
0050 ecm_gperf_generate(simple.gperf ${CMAKE_CURRENT_BINARY_DIR}/simple.h MySources)
0051
0052 Since 5.35.0.
0053 #]=======================================================================]
0054
0055 include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
0056
0057 ecm_find_package_version_check(Gperf)
0058
0059 # Find gperf
0060 find_program(Gperf_EXECUTABLE NAMES gperf)
0061
0062 if(Gperf_EXECUTABLE)
0063 execute_process(COMMAND ${Gperf_EXECUTABLE} -v
0064 OUTPUT_VARIABLE _version_string
0065 ERROR_QUIET
0066 OUTPUT_STRIP_TRAILING_WHITESPACE)
0067 if(_version_string MATCHES "^GNU gperf ([-0-9\\.]+)")
0068 set(Gperf_VERSION "${CMAKE_MATCH_1}")
0069 endif()
0070 unset(_version_string)
0071 else()
0072 set(Gperf_VERSION)
0073 endif()
0074
0075 include(FindPackageHandleStandardArgs)
0076 find_package_handle_standard_args(Gperf
0077 FOUND_VAR
0078 Gperf_FOUND
0079 REQUIRED_VARS
0080 Gperf_EXECUTABLE
0081 VERSION_VAR
0082 Gperf_VERSION
0083 )
0084
0085 mark_as_advanced(Gperf_EXECUTABLE)
0086
0087 if (Gperf_FOUND)
0088 if (NOT TARGET GPerf::Gperf)
0089 add_executable(GPerf::Gperf IMPORTED)
0090 set_target_properties(GPerf::Gperf PROPERTIES
0091 IMPORTED_LOCATION "${Gperf_EXECUTABLE}"
0092 )
0093 endif()
0094 endif()
0095
0096 include(FeatureSummary)
0097 set_package_properties(Gperf PROPERTIES
0098 URL "https://www.gnu.org/software/gperf/"
0099 DESCRIPTION "Perfect hash function generator"
0100 )
0101
0102 function(ecm_gperf_generate input_file output_file _target_or_sources_var)
0103 # Parse arguments
0104 set(oneValueArgs GENERATION_FLAGS)
0105 cmake_parse_arguments(ARGS "" "${oneValueArgs}" "" ${ARGN})
0106
0107 if(ARGS_UNPARSED_ARGUMENTS)
0108 message(FATAL_ERROR "Unknown keywords given to ecm_gperf_generate(): \"${ARGS_UNPARSED_ARGUMENTS}\"")
0109 endif()
0110 if (TARGET ${_target_or_sources_var})
0111 get_target_property(aliased_target ${_target_or_sources_var} ALIASED_TARGET)
0112 if(aliased_target)
0113 message(FATAL_ERROR "Target argument passed to ecm_gperf_generate must not be an alias: ${_target_or_sources_var}")
0114 endif()
0115 endif()
0116
0117 get_filename_component(_infile ${input_file} ABSOLUTE)
0118 set(_extraopts "${ARGS_GENERATION_FLAGS}")
0119 separate_arguments(_extraopts)
0120 add_custom_command(OUTPUT ${output_file}
0121 COMMAND ${Gperf_EXECUTABLE} ${_extraopts} --output-file=${output_file} ${_infile}
0122 DEPENDS ${_infile}
0123 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
0124 VERBATIM
0125 )
0126 set_property(SOURCE ${output_file} PROPERTY SKIP_AUTOMOC ON)
0127
0128 if (TARGET ${_target_or_sources_var})
0129 target_sources(${_target_or_sources_var} PRIVATE ${output_file})
0130 else()
0131 set(${_target_or_sources_var} ${${_target_or_sources_var}} ${output_file} PARENT_SCOPE)
0132 endif()
0133 endfunction()