xenial (7) ecm-modules.7.gz

Provided by: extra-cmake-modules_5.18.0-0ubuntu1_amd64 bug

NAME

       ecm-modules - ECM Modules Reference

INTRODUCTION

       Extra  CMake  Modules (ECM) provides various modules that provide useful functions for CMake scripts. ECM
       actually provides three types of modules that can be used from  CMake  scripts:  those  that  extend  the
       functionality  of  the  find_package  command  are  documented in ecm-find-modules(7); those that provide
       standard settings for software produced by the KDE community are documented in  ecm-kde-modules(7).   The
       rest provide macros and functions for general use by CMake scripts and are documented here.

       To  use  these  modules,  you  need  to  tell  CMake  to  find  the  ECM  package,  and  then  add either
       ${ECM_MODULE_PATH} or ${ECM_MODULE_DIR} to the CMAKE_MODULE_PATH variable:

          find_package(ECM REQUIRED NO_MODULE)
          set(CMAKE_MODULE_PATH ${ECM_MODULE_DIR})

       Using ${ECM_MODULE_PATH} will also make the find modules and KDE modules available.

       Note that there are also toolchain modules, documented in ecm-toolchains(7), but these are used by  users
       building the software rather than developers writing CMake scripts.

ALL MODULES

   ECMAddAppIcon
       Add icons to executable files and packages.

          ecm_add_app_icon(<sources_var>
                           ICONS <icon> [<icon> [...]])

       The given icons, whose names must match the pattern:

          <size>-<other_text>.png

       will  be  added  to  the executable target whose sources are specified by <sources_var> on platforms that
       support it (Windows and Mac OS X).

       <size> is a numeric pixel size (typically 16, 32, 48, 64, 128 or 256).  <other_text>  can  be  any  other
       text. See the platform notes below for any recommendations about icon sizes.

       Windows notes

              • Icons are compiled into the executable using a resource file.

              • Icons  may  not  show  up  in  Windows  Explorer  if  the  executable  target  does not have the
                WIN32_EXECUTABLE property set.

              • The tool png2ico is required. See FindPng2Ico.

              • Supported sizes: 16, 32, 48, 64, 128.

       Mac OS X notes

              • The executable target must have the MACOSX_BUNDLE property set.

              • Icons are added to the bundle.

              • The tool iconutil (provided by Apple) is required.

              • Supported sizes: 16, 32, 64, 128, 256, 512, 1024.

              • At least a 128x128px icon is required.

              • Larger  sizes  are  automatically  used  to   substitute   for   smaller   sizes   on   "Retina"
                (high-resolution)  displays.  For example, a 32px icon, if provided, will be used as a 32px icon
                on standard-resolution  displays,  and  as  a  16px-equivalent  icon  (with  an  "@2x"  tag)  on
                high-resolution displays.

              • This  function sets the MACOSX_BUNDLE_ICON_FILE variable to the name of the generated icns file,
                so that  it  will  be  used  as  the  MACOSX_BUNDLE_ICON_FILE  target  property  when  you  call
                add_executable.

       Since 1.7.0.

   ECMAddTests
       Convenience functions for adding tests.

          ecm_add_tests(<sources> LINK_LIBRARIES <library> [<library> [...]]
                                  [NAME_PREFIX <prefix>]
                                  [GUI]
                                  [TARGET_NAMES_VAR <target_names_var>]
                                  [TEST_NAMES_VAR <test_names_var>])

       A  convenience function for adding multiple tests, each consisting of a single source file. For each file
       in <sources>, an executable target will be created (the name of which will be the basename of the  source
       file). This will be linked against the libraries given with LINK_LIBRARIES. Each executable will be added
       as a test with the same name.

       If NAME_PREFIX is given, this prefix will be prepended to the test names, but not the target names. As  a
       result,  it  will not prevent clashes between tests with the same name in different parts of the project,
       but it can be used to give an indication of where to look for a failing test.

       If the flag GUI is passed the test binaries will be GUI executables,  otherwise  the  resulting  binaries
       will  be console applications (regardless of the value of CMAKE_WIN32_EXECUTABLE or CMAKE_MACOSX_BUNDLE).
       Be aware that this changes the executable entry point on Windows (although some frameworks, such  as  Qt,
       abstract this difference away).

       The  TARGET_NAMES_VAR  and  TEST_NAMES_VAR arguments, if given, should specify a variable name to receive
       the list of generated target and test names, respectively. This makes it convenient to  apply  properties
       to them as a whole, for example, using set_target_properties() or  set_tests_properties().

       The  generated  target  executables  will  have the effects of ecm_mark_as_test() (from the ECMMarkAsTest
       module) applied to it.

          ecm_add_test(<sources> LINK_LIBRARIES <library> [<library> [...]]
                                 [TEST_NAME <name>]
                                 [NAME_PREFIX <prefix>]
                                 [GUI])

       This is a single-test form of ecm_add_tests that allows multiple source files to be  used  for  a  single
       test.  If using multiple source files, TEST_NAME must be given; this will be used for both the target and
       test names (and, as with ecm_add_tests(), the NAME_PREFIX argument will be prepended to the test name).

       Since pre-1.0.0.

   ECMCoverageOption
       Allow users to easily enable GCov code coverage support.

       Code coverage allows you to check how much of your codebase is covered by your tests. This  module  makes
       it easy to build with support for GCov.

       When  this  module  is  included,  a BUILD_COVERAGE option is added (default OFF). Turning this option on
       enables GCC's coverage instrumentation, and links against libgcov.

       Note that this will probably break the build if you are not using GCC.

       Since 1.3.0.

   ECMCreateQmFromPoFiles
       WARNING:
          This module is deprecated and will be removed by ECM 1.0. Use ECMPoQmTools instead.

       Generate QTranslator (.qm) catalogs from Gettext (.po) catalogs.

          ecm_create_qm_from_po_files(PO_FILES <file1>... <fileN>
                                      [CATALOG_NAME <catalog_name>]
                                      [INSTALL_DESTINATION <install_destination>])

       Creates the necessary rules to compile .po files into .qm files, and install them.

       The .qm files are installed in <install_destination>/<lang>/LC_MESSAGES, where  <install_destination>  is
       the INSTALL_DESTINATION argument and <lang> is extracted from the "Language" field inside the .po file.

       INSTALL_DESTINATION    defaults    to    ${LOCALE_INSTALL_DIR}    if    defined,    otherwise   it   uses
       ${CMAKE_INSTALL_LOCALEDIR} if that is defined, otherwise it uses share/locale.

       CATALOG_NAME defines the name of the installed .qm  files.  If  set,  .qm  files  will  be  installed  as
       <catalog_name>.qm. If not set .qm files will be named after the name of their source .po file.

       Setting the catalog name is useful when all .po files for a target are kept in a single source directory.
       For example, the "mylib" probject might keep all its translations in a "po" directory, like this:

          po/
              es.po
              fr.po

       Without setting CATALOG_NAME, those .po will be turned into .qm and installed as:

          share/locale/fr/LC_MESSAGES/fr.qm
          share/locale/es/LC_MESSAGES/es.qm

       If CATALOG_NAME is set to "mylib", they will be installed as:

          share/locale/fr/LC_MESSAGES/mylib.qm
          share/locale/es/LC_MESSAGES/mylib.qm

       Which is what the loader created by ecm_create_qm_loader() expects.

       ecm_create_qm_from_po_files() creates a "translation" target. This target builds all .po files  into  .qm
       files.

          ecm_create_qm_loader(<source_files_var> <catalog_name>)

       ecm_create_qm_loader()  generates  a  C++  file  which  ensures  translations are automatically loaded at
       startup. The path of the .cpp file is appended to <source_files_var>.  Typical usage is like:

          set(mylib_SRCS foo.cpp bar.cpp)
          ecm_create_qm_loader(mylib_SRCS mylib)
          add_library(mylib ${mylib_SRCS})

       This generates a C++ file  which  loads  "mylib.qm"  at  startup,  assuming  it  has  been  installed  by
       ecm_create_qm_from_po_files(), and compiles it into mylib.

       Since pre-1.0.0.

   ECMEnableSanitizers
       Enable compiler sanitizer flags.

       The following sanitizers are supported:

       • Address Sanitizer

       • Memory Sanitizer

       • Thread Sanitizer

       • Leak Sanitizer

       • Undefined Behaviour Sanitizer

       All of them are implemented in Clang, depending on your version, and there is an work in progress in GCC,
       where some of them are currently implemented.

       This module will check your current compiler version to see if it supports the sanitizers that  you  want
       to enable

   Usage
       Simply add:

          include(ECMEnableSanitizers)

       to  your CMakeLists.txt. Note that this module is included in KDECompilerSettings, so projects using that
       module do not need to also include this one.

       The sanitizers are not enabled by default. Instead, you must set ECM_ENABLE_SANITIZERS  (either  in  your
       CMakeLists.txt  or  on  the command line) to a semicolon-separated list of sanitizers you wish to enable.
       The options are:

       • address

       • memory

       • thread

       • leak

       • undefined

       The sanitizers "address", "memory" and "thread" are mutually exclusive.  You cannot enable two of them in
       the same build.

       "leak" requires the  "address" sanitizer.

       NOTE:
          To  reduce  the  overhead  induced  by  the instrumentation of the sanitizers, it is advised to enable
          compiler optimizations (-O1 or higher).

   Example
       This is an example of usage:

          mkdir build
          cd build
          cmake -DECM_ENABLE_SANITIZERS='address;leak;undefined' ..

       NOTE:
          Most of the sanitizers will require Clang. To enable it, use:

              -DCMAKE_CXX_COMPILER=clang++

       Since 1.3.0.

   ECMFindModuleHelpers
       Helper macros for find modules: ecm_find_package_version_check(), ecm_find_package_parse_components() and
       ecm_find_package_handle_library_components().

          ecm_find_package_version_check(<name>)

       Prints  warnings if the CMake version or the project's required CMake version is older than that required
       by extra-cmake-modules.

          ecm_find_package_parse_components(<name>
              RESULT_VAR <variable>
              KNOWN_COMPONENTS <component1> [<component2> [...]]
              [SKIP_DEPENDENCY_HANDLING])

       This macro will populate <variable> with a list of  components  found  in  <name>_FIND_COMPONENTS,  after
       checking  that  all  those  components  are  in  the  list  of KNOWN_COMPONENTS; if there are any unknown
       components, it will print an error or warning (depending on the value of <name>_FIND_REQUIRED)  and  call
       return().

       The  order  of  components  in  <variable>  is  guaranteed  to  match  the  order  they are listed in the
       KNOWN_COMPONENTS argument.

       If SKIP_DEPENDENCY_HANDLING is not set, for each component the variable <name>_<component>_component_deps
       will  be  checked for dependent components.  If <component> is listed in <name>_FIND_COMPONENTS, then all
       its (transitive) dependencies will also be added to <variable>.

          ecm_find_package_handle_library_components(<name>
              COMPONENTS <component> [<component> [...]]
              [SKIP_DEPENDENCY_HANDLING])
              [SKIP_PKG_CONFIG])

       Creates an imported library target for each component.  The  operation  of  this  macro  depends  on  the
       presence of a number of CMake variables.

       The    <name>_<component>_lib    variable    should    contain    the   name   of   this   library,   and
       <name>_<component>_header variable should contain the name of a header file associated with it  (whatever
       relative  path is normally passed to '#include').  ecm_find_package_components() will then search for the
       library and include directory (creating appropriate cache  variables)  and  create  an  imported  library
       target named <name>::<component>.

       Additional variables can be used to provide additional information:

       If  SKIP_PKG_CONFIG,  the  <name>_<component>_pkg_config  variable  is  set, and pkg-config is found, the
       pkg-config module given by <name>_<component>_pkg_config will be searched for and used to help locate the
       library and header file.  It will also be used to set <name>_<component>_VERSION.

       Note  that  if version information is found via pkg-config, <name>_<component>_FIND_VERSION can be set to
       require a particular version for each component.

       If SKIP_DEPENDENCY_HANDLING is not set, the INTERFACE_LINK_LIBRARIES property of the imported target  for
       <component>   will   be   set   to   contain   the   imported   targets  for  the  components  listed  in
       <name>_<component>_component_deps.  <component>_FOUND will also be set to false if any of the  compoments
       in    <name>_<component>_component_deps    are    not   found.    This   requires   the   components   in
       <name>_<component>_component_deps to be listed before <component> in the COMPONENTS argument.

       The following variables will be set:

       <name>_TARGETS
              the imported targets

       <name>_LIBRARIES
              the found libraries

       <name>_INCLUDE_DIRS
              the combined required include directories for the components

       <name>_DEFINITIONS
              the "other" CFLAGS provided by pkg-config, if any

       <name>_VERSION
              the value of <name>_<component>_VERSION for the first component that has this variable  set  (note
              that  components  are  searched  for in the order they are passed to the macro), although if it is
              already set, it will not be altered

       Note that these variables are never cleared, so if ecm_find_package_handle_library_components() is called
       multiple  times  with  different  components  (typically  because  of multiple find_package() calls) then
       <name>_TARGETS, for example, will contain all the targets found in any call (although no duplicates).

       Since pre-1.0.0.

   ECMGenerateHeaders
       Generate C/C++ CamelCase forwarding headers.

          ecm_generate_headers(<camelcase_forwarding_headers_var>
              HEADER_NAMES <CamelCaseName> [<CamelCaseName> [...]]
              [ORIGINAL <CAMELCASE|LOWERCASE>]
              [OUTPUT_DIR <output_dir>]
              [PREFIX <prefix>]
              [REQUIRED_HEADERS <variable>]
              [COMMON_HEADER <HeaderName>]
              [RELATIVE <relative_path>])

       For each CamelCase header name passed to HEADER_NAMES, a file of that name will be  generated  that  will
       include  a  version with .h appended.  For example, the generated header ClassA will include classa.h (or
       ClassA.h,  see  ORIGINAL).   If  a  CamelCaseName  consists  of  multiple  comma-separated  files,   e.g.
       ClassA,ClassB,ClassC,  then  multiple camelcase header files will be generated which are redirects to the
       first  header  file.   The  file   locations   of   these   generated   headers   will   be   stored   in
       <camelcase_forwarding_headers_var>.

       ORIGINAL  specifies  how  the name of the original header is written: lowercased or also camelcased.  The
       default is LOWERCASE. Since 1.8.0.

       PREFIX places the generated headers in subdirectories.  This should be  a  CamelCase  name  like  KParts,
       which  will  cause  the  CamelCase  forwarding  headers  to  be  placed  in  the  KParts  directory (e.g.
       KParts/Part).  It will also, for the convenience of code in the source distribution, generate  forwarding
       headers  based  on  the  original  names  (e.g.  kparts/part.h).   This  allows  includes  like "#include
       <kparts/part.h>"  to  be  used  before  installation,  as  long  as  the  include_directories   are   set
       appropriately.

       OUTPUT_DIR  specifies  where  the  files will be generated; this should be within the build directory. By
       default, ${CMAKE_CURRENT_BINARY_DIR} will be used.  This option can be used to avoid file conflicts.

       REQUIRED_HEADERS specifies an output variable name where all the required headers  will  be  appended  so
       that they can be installed together with the generated ones.  This is mostly intended as a convenience so
       that adding  a  new  header  to  a  project  only  requires  specifying  the  CamelCase  variant  in  the
       CMakeLists.txt file; the original variant will then be added to this variable.

       COMMON_HEADER generates an additional convenience header which includes all other header files.

       The   RELATIVE   argument   indicates   where   the   original   headers   can   be   found  relative  to
       CMAKE_CURRENT_SOURCE_DIR.   It  does  not  affect  the  generated   CamelCase   forwarding   files,   but
       ecm_generate_headers()  uses it when checking that the original header exists, and to generate originally
       named forwarding headers when PREFIX is set.

       To allow other parts of the  source  distribution  (eg:  tests)  to  use  the  generated  headers  before
       installation,  it  may  be  desirable  to  set the INCLUDE_DIRECTORIES property for the library target to
       output_dir.  For example, if OUTPUT_DIR is CMAKE_CURRENT_BINARY_DIR (the default), you could do

          target_include_directories(MyLib PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>")

       Example usage (without PREFIX):

          ecm_generate_headers(
              MyLib_FORWARDING_HEADERS
              HEADERS
                  MLFoo
                  MLBar
                  # etc
              REQUIRED_HEADERS MyLib_HEADERS
              COMMON_HEADER MLGeneral
          )
          install(FILES ${MyLib_FORWARDING_HEADERS} ${MyLib_HEADERS}
                  DESTINATION ${CMAKE_INSTALL_PREFIX}/include
                  COMPONENT Devel)

       Example usage (with PREFIX):

          ecm_generate_headers(
              MyLib_FORWARDING_HEADERS
              HEADERS
                  Foo
                  # several classes are contained in bar.h, so generate
                  # additional files
                  Bar,BarList
                  # etc
              PREFIX MyLib
              REQUIRED_HEADERS MyLib_HEADERS
          )
          install(FILES ${MyLib_FORWARDING_HEADERS}
                  DESTINATION ${CMAKE_INSTALL_PREFIX}/include/MyLib
                  COMPONENT Devel)
          install(FILES ${MyLib_HEADERS}
                  DESTINATION ${CMAKE_INSTALL_PREFIX}/include/mylib
                  COMPONENT Devel)

       Since pre-1.0.0.

   ECMGeneratePkgConfigFile
       Generate a pkg-config file for the benefit of autotools-based projects.

          ecm_generate_pkgconfig_file(BASE_NAME <baseName>
                                [LIB_NAME <libName>]
                                [DEPS "<dep> [<dep> [...]]"]
                                [FILENAME_VAR <filename_variable>]
                                [INCLUDE_INSTALL_DIR <dir>]
                                [LIB_INSTALL_DIR <dir>]
                                [DEFINES -D<variable=value>...]
                                [INSTALL])

       BASE_NAME is the name of the module. It's the name projects will use to find the module.

       LIB_NAME is the name of the library that is  being  exported.  If  undefined,  it  will  default  to  the
       BASE_NAME. That means the LIB_NAME will be set as the name field as well as the library to link to.

       FILENAME_VAR  is specified with a variable name. This variable will receive the location of the generated
       file will be set, within the build directory. This way  it  can  be  used  in  case  some  processing  is
       required. See also INSTALL.

       INCLUDE_INSTALL_DIR  specifies  where  the  includes  will  be  installed. If it's not specified, it will
       default to INSTALL_INCLUDEDIR, CMAKE_INSTALL_INCLUDEDIR or just "include/" in case  they  are  specified,
       with the BASE_NAME postfixed.

       LIB_INSTALL_DIR specifies where the library is being installed. If it's not specified, it will default to
       LIB_INSTALL_DIR, CMAKE_INSTALL_LIBDIR or just "lib/" in case they are specified.

       DEFINES is a list of preprocessor defines that it is  recommended  users  of  the  library  pass  to  the
       compiler when using it.

       INSTALL  will  cause  the module to be installed to the pkgconfig subdirectory of LIB_INSTALL_DIR, unless
       the ECM_PKGCONFIG_INSTALL_DIR cache variable is set to something different. Note that the first  call  to
       ecm_generate_pkgconfig_file  with  the INSTALL argument will cause ECM_PKGCONFIG_INSTALL_DIR to be set to
       the cache, and will be used in any subsequent calls.

       To properly use this macro a version needs to be set.  To  retrieve  it,  ECM_PKGCONFIG_INSTALL_DIR  uses
       PROJECT_VERSION.  To  set  it,  use  the  project()  command  (only  available  since  CMake  3.0) or the
       ecm_setup_version() macro.

       Example usage:

          ecm_generate_pkgconfig_file(
              BASE_NAME KF5Archive
              DEPS Qt5Core
              FILENAME_VAR pkgconfig_filename
              INSTALL
          )

       Since 1.3.0.

   ECMGeneratePriFile
       Generate a .pri file for the benefit of qmake-based projects.

       As well as the function below, this module creates the cache variable  ECM_MKSPECS_INSTALL_DIR  and  sets
       the  default value to mkspecs/modules.  This assumes Qt and the current project are both installed to the
       same non-system prefix.  Packagers  who  use  -DCMAKE_INSTALL_PREFIX=/usr  will  certainly  want  to  set
       ECM_MKSPECS_INSTALL_DIR to something like share/qt5/mkspecs/modules.

       The  main  thing  is  that  this  should  be the modules subdirectory of either the default qmake mkspecs
       directory or of a directory that will be in the $QMAKEPATH environment variable when qmake is run.

          ecm_generate_pri_file(BASE_NAME <baseName>
                                LIB_NAME <libName>
                                [DEPS "<dep> [<dep> [...]]"]
                                [FILENAME_VAR <filename_variable>]
                                [INCLUDE_INSTALL_DIR <dir>]
                                [LIB_INSTALL_DIR <dir>])

       If your CMake project produces a Qt-based library, you may expect there to be applications that  wish  to
       use  it  that  use  a qmake-based build system, rather than a CMake-based one.  Creating a .pri file will
       make use of your library convenient for them, in much the same way that CMake config  files  make  things
       convenient for CMake-based applications.

       ecm_generate_pri_file()  generates  just such a file.  It requires the PROJECT_VERSION_STRING variable to
       be set.  This is typically set by ECMSetupVersion, although the project()  command  in  CMake  3.0.0  and
       later can also set this.

       BASE_NAME  specifies  the  name  qmake  project  (.pro)  files  should  use  to refer to the library (eg:
       KArchive).  LIB_NAME is the  name  of  the  actual  library  to  link  to  (ie:  the  first  argument  to
       add_library()).   DEPS  is a space-separated list of the base names of other libraries (for Qt libraries,
       use the same names you use with the QT variable in a qmake project file,  such  as  "core"  for  QtCore).
       FILENAME_VAR specifies the name of a variable to store the path to the generated file in.

       INCLUDE_INSTALL_DIR  is  the path (relative to CMAKE_INSTALL_PREFIX) that include files will be installed
       to. It defaults to ${INCLUDE_INSTALL_DIR}/<baseName> if the INCLUDE_INSTALL_DIR variable is set. If  that
       variable  is  not  set,  the  CMAKE_INSTALL_INCLUDEDIR  variable  is used instead, and if neither are set
       include is used.  LIB_INSTALL_DIR operates similarly for the  installation  location  for  libraries;  it
       defaults to ${LIB_INSTALL_DIR}, ${CMAKE_INSTALL_LIBDIR} or lib, in that order.

       Example usage:

          ecm_generate_pri_file(
              BASE_NAME KArchive
              LIB_NAME KF5KArchive
              DEPS "core"
              FILENAME_VAR pri_filename
          )
          install(FILES ${pri_filename} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})

       A qmake-based project that wished to use this would then do:

          QT += KArchive

       in their .pro file.

       Since pre-1.0.0.

   ECMInstallIcons
       Installs  icons,  sorting  them into the correct directories according to the FreeDesktop.org icon naming
       specification.

          ecm_install_icons(ICONS <icon> [<icon> [...]]
                            DESTINATION <icon_install_dir>
                            [LANG <l10n_code>]
                            [THEME <theme>])

       The given icons, whose names must match the pattern:

          <size>-<group>-<name>.<ext>

       will be installed to the appropriate subdirectory of DESTINATION according to  the  FreeDesktop.org  icon
       naming  scheme.  By default, they are installed to the "hicolor" theme, but this can be changed using the
       THEME argument.  If the icons are localized, the  LANG  argument  can  be  used  to  install  them  in  a
       locale-specific directory.

       <size> is a numeric pixel size (typically 16, 22, 32, 48, 64, 128 or 256) or sc for scalable (SVG) files,
       <group> is one of the standard  FreeDesktop.org  icon  groups  (actions,  animations,  apps,  categories,
       devices, emblems, emotes, intl, mimetypes, places, status) and <ext> is one of .png, .mng or .svgz.

       The typical installation directory is share/icons.

          ecm_install_icons(ICONS 22-actions-menu_new.png
                            DESTINATION share/icons)

       The       above       code      will      install      the      file      22-actions-menu_new.png      as
       ${CMAKE_INSTALL_PREFIX}/share/icons/<theme>/22x22/actions/menu_new.png

       Users of the KDEInstallDirs module would normally use ${ICON_INSTALL_DIR} as the DESTINATION, while users
       of the GNUInstallDirs module should use ${CMAKE_INSTALL_DATAROOTDIR}/icons.

       An old form of arguments will also be accepted:

          ecm_install_icons(<icon_install_dir> [<l10n_code>])

       This matches files named like:

          <theme><size>-<group>-<name>.<ext>

       where  <theme>  is  one of * hi for hicolor * lo for locolor * cr for the Crystal icon theme * ox for the
       Oxygen icon theme * br for the Breeze icon theme

       With    this    syntax,    the    file    hi22-actions-menu_new.png    would    be     installed     into
       <icon_install_dir>/hicolor/22x22/actions/menu_new.png

       Since pre-1.0.0.

   ECMMarkAsTest
       Marks a target as only being required for tests.

          ecm_mark_as_test(<target1> [<target2> [...]])

       This  will  cause  the  specified targets to not be built unless either BUILD_TESTING is set to ON or the
       user invokes the buildtests target.

       BUILD_TESTING is created as a cache variable by the CTest module and by the KDECMakeSettings module.

       Since pre-1.0.0.

   ECMMarkNonGuiExecutable
       Marks an executable target as not being a GUI application.

          ecm_mark_nongui_executable(<target1> [<target2> [...]])

       This will indicate to CMake that the specified targets should not be  included  in  a  MACOSX_BUNDLE  and
       should not be WIN32_EXECUTABLEs.  On platforms other than MacOS X or Windows, this will have no effect.

       Since pre-1.0.0.

   ECMOptionalAddSubdirectory
       Make subdiretories optional.

          ecm_optional_add_subdirectory(<dir>)

       This  behaves  like add_subdirectory(), except that it does not complain if the directory does not exist.
       Additionally, if the directory does exist, it creates an option to allow the user to skip it.

       This is useful for "meta-projects" that combine several mostly-independent sub-projects.

       If the CMake variable DISABLE_ALL_OPTIONAL_SUBDIRECTORIES is set to TRUE for the first CMake run  on  the
       project,  all  optional  subdirectories will be disabled by default (but can of course be enabled via the
       respective options).  For example, the following will disable all optional subdirectories except the  one
       named "foo":

          cmake -DDISABLE_ALL_OPTIONAL_SUBDIRECTORIES=TRUE -DBUILD_foo=TRUE myproject

       Since pre-1.0.0.

   ECMPackageConfigHelpers
       Helper macros for generating CMake package config files.

       write_basic_package_version_file()  is  the  same  as  the  one provided by the CMakePackageConfigHelpers
       module in CMake; see that module's documentation for more information.

          ecm_configure_package_config_file(<input> <output>
              INSTALL_DESTINATION <path>
              [PATH_VARS <var1> [<var2> [...]]
              [NO_SET_AND_CHECK_MACRO]
              [NO_CHECK_REQUIRED_COMPONENTS_MACRO])

       This behaves in the same way as configure_package_config_file() from CMake 2.8.12, except that it adds an
       extra  helper  macro:  find_dependency().  It  is  highly recommended that you read the documentation for
       CMakePackageConfigHelpers for more information, particularly with regard to the PATH_VARS argument.

       Note that there is no argument that will disable the find_dependency() macro; if you do not require  this
       macro, you should use configure_package_config_file from the CMakePackageConfigHelpers module.

       CMake 3.0 includes a CMakeFindDependencyMacro module that provides the find_dependency() macro (which you
       can include() in your package config file), so this file is only useful for projects wishing  to  provide
       config files that will work with CMake 2.8.12.

   Additional Config File Macros
          find_dependency(<dep> [<version> [EXACT]])

       find_dependency() should be used instead of find_package() to find package dependencies.  It forwards the
       correct parameters for EXACT, QUIET and REQUIRED which were passed to the original  find_package()  call.
       It also sets an informative diagnostic message if the dependency could not be found.

       Since pre-1.0.0.

   ECMPoQmTools
       This   module  provides  the  ecm_process_po_files_as_qm  and  ecm_install_po_files_as_qm  functions  for
       generating QTranslator (.qm) catalogs from Gettext (.po) catalogs, and the ecm_create_qm_loader  function
       for generating the necessary code to load them in a Qt application or library.

          ecm_process_po_files_as_qm(<lang> [ALL]
                                     [INSTALL_DESTINATION <install_destination>]
                                     PO_FILES <pofile> [<pofile> [...]])

       Compile .po files into .qm files for the given language.

       If INSTALL_DESTINATION is given, the .qm files are installed in <install_destination>/<lang>/LC_MESSAGES.
       Typically, <install_destination> is set to share/locale.

       ecm_process_po_files_as_qm creates a "translations" target. This target builds all  .po  files  into  .qm
       files.   If  ALL  is  specified,  these rules are added to the "all" target (and so the .qm files will be
       built by default).

          ecm_create_qm_loader(<source_files_var> <catalog_name>)

       Generates C++ code which ensures translations are automatically loaded at startup.  The  generated  files
       are appended to <source_files_var>.

       It    assumes    that    the    .qm    file    for   the   language   code   <lang>   is   installed   as
       <sharedir>/locale/<lang>/LC_MESSAGES/<catalog_name>.qm, where <sharedir> is one of the directories  given
       by the GenericDataLocation of QStandardPaths.

       Typical usage is like:

          set(mylib_SRCS foo.cpp bar.cpp)
          ecm_create_qm_loader(mylib_SRCS mylib)
          add_library(mylib ${mylib_SRCS})

          ecm_install_po_files_as_qm(<podir>)

       Searches for .po files and installs them to the standard location.

       This  is a convenience function which relies on all .po files being kept in <podir>/<lang>/, where <lang>
       is the language the .po files are written in.

       For example, given the following directory structure:

          po/
            fr/
              mylib.po

       ecm_install_po_files_as_qm(po)    compiles    mylib.po    into    mylib.mo    and    installs    it    in
       <install_destination>/fr/LC_MESSAGES.    <install_destination>   defaults   to  ${LOCALE_INSTALL_DIR}  if
       defined, otherwise it uses ${CMAKE_INSTALL_LOCALEDIR} if that is defined, otherwise it uses share/locale.

       Since pre-1.0.0.

   ECMQtDeclareLoggingCategory
       Generate declarations for logging categories in Qt5.

          ecm_qt_declare_logging_category(<sources_var>
                                          HEADER <filename>
                                          IDENTIFIER <identifier>
                                          CATEGORY_NAME <category_name>
                                          [DEFAULT_SEVERITY
                                               <Debug|Info|Warning|
                                                Critical|Fatal>])

       A header file, <filename>, will be generated along with a corresponding source file, which will be  added
       to  <sources_var>.  These  will provide a QLoggingCategory category that can be referred to from C++ code
       using <identifier>, and from the logging configuration using <category_name>.

       If <filename> is not absolute, it will be taken relative to the current binary directory.

       If the code is compiled against Qt 5.4 or later, by default it will only log output that is at least  the
       severity  specified  by DEFAULT_SEVERITY, or "Warning" level if DEFAULT_SEVERITY is not given. Note that,
       due to a bug in Qt 5.5, "Info" may be treated as more severe than "Fatal".

       <identifier> may include namespaces (eg: foo::bar::IDENT).

       Starting with Frameworks 5.18, the generated header also includes the <QDebug> header, so you don't  have
       to put extra #include <QDebug> anymore in your code.

       Since 5.14.0.

   ECMSetupVersion
       Handle library version information.

          ecm_setup_version(<version>
                            VARIABLE_PREFIX <prefix>
                            [SOVERSION <soversion>]
                            [VERSION_HEADER <filename>]
                            [PACKAGE_VERSION_FILE <filename> [COMPATIBILITY <compat>]] )

       This  parses  a  version  string and sets up a standard set of version variables.  It can optionally also
       create a C version header file and a CMake package version file to install along with the library.

       If the <version> argument is of the form  <major>.<minor>.<patch>  (or  <major>.<minor>.<patch>.<tweak>),
       The following CMake variables are set:

          <prefix>_VERSION_MAJOR  - <major>
          <prefix>_VERSION_MINOR  - <minor>
          <prefix>_VERSION_PATCH  - <patch>
          <prefix>_VERSION        - <version>
          <prefix>_VERSION_STRING - <version> (for compatibility: use <prefix>_VERSION instead)
          <prefix>_SOVERSION      - <soversion>, or <major> if SOVERSION was not given

       If CMake policy CMP0048 is not NEW, the following CMake variables will also be set:
          PROJECT_VERSION_MAJOR    - <major> PROJECT_VERSION_MINOR   - <minor> PROJECT_VERSION_PATCH   - <patch>
          PROJECT_VERSION         -  <version>  PROJECT_VERSION_STRING   -  <version>  (for  compatibility:  use
          PROJECT_VERSION instead)

       If the VERSION_HEADER option is used, a simple C header is generated with the given filename. If filename
       is a relative path, it is interpreted as relative  to  CMAKE_CURRENT_BINARY_DIR.   The  generated  header
       contains the following macros:

          <prefix>_VERSION_MAJOR  - <major> as an integer
          <prefix>_VERSION_MINOR  - <minor> as an integer
          <prefix>_VERSION_PATCH  - <patch> as an integer
          <prefix>_VERSION_STRING - <version> as a C string
          <prefix>_VERSION        - the version as an integer

       <prefix>_VERSION  has  <patch>  in  the  bottom  8  bits,  <minor>  in the next 8 bits and <major> in the
       remaining bits.  Note that <patch> and <minor> must be less than 256.

       If the PACKAGE_VERSION_FILE option is used, a simple CMake package version  file  is  created  using  the
       write_basic_package_version_file()  macro  provided by CMake. It should be installed in the same location
       as the Config.cmake file of the library so that it can be found by find_package().  If the filename is  a
       relative  path,  it  is  interpreted  as relative to CMAKE_CURRENT_BINARY_DIR. The optional COMPATIBILITY
       option is forwarded to write_basic_package_version_file(), and defaults to AnyNewerVersion.

       If CMake policy CMP0048 is NEW, an alternative form of the command is available:

          ecm_setup_version(PROJECT
                            [VARIABLE_PREFIX <prefix>]
                            [SOVERSION <soversion>]
                            [VERSION_HEADER <filename>]
                            [PACKAGE_VERSION_FILE <filename>] )

       This will use the version information set by the project()  command.   VARIABLE_PREFIX  defaults  to  the
       project  name.  Note that PROJECT must be the first argument.  In all other respects, it behaves like the
       other form of the command.

       Since pre-1.0.0.

       COMPATIBLITY option available since 1.6.0.

   ECMUninstallTarget
       Add an uninstall target.

       By including this module, an uninstall target will be added to your CMake project. This will  remove  all
       files  installed  (or  updated)  by a previous invocation of the install target. It will not remove files
       created or modified  by  an  install(SCRIPT)  or  install(CODE)  command;  you  should  create  a  custom
       uninstallation target for these and use add_dependency to make the uninstall target depend on it:

          include(ECMUninstallTarget)
          install(SCRIPT install-foo.cmake)
          add_custom_target(uninstall_foo COMMAND ${CMAKE_COMMAND} -P uninstall-foo.cmake)
          add_dependency(uninstall uninstall_foo)

       The  target  will  fail if the install target has not yet been run (so it is not possible to run CMake on
       the project and then immediately run the uninstall target).

       WARNING:
          CMake deliberately does not provide an uninstall target by default on the basis that such a target has
          the potential to remove important files from a user's computer. Use with caution.

       Since 1.7.0.

   ECMUseFindModules
       Selectively use some of the find modules provided by extra-cmake-modules.

       This module is automatically available once extra-cmake-modules has been found, so it is not necessary to
       include(ECMUseFindModules) explicitly.

          ecm_use_find_modules(DIR <dir>
                               MODULES module1.cmake [module2.cmake [...]]
                               [NO_OVERRIDE])

       This allows selective use of the find modules provided by ECM, including deferring to CMake's versions of
       those  modules  if  it has them.  Rather than adding ${ECM_FIND_MODULE_DIR} to CMAKE_MODULE_PATH, you use
       ecm_use_find_modules() to copy the modules you want to  a  local  (build)  directory,  and  add  that  to
       CMAKE_MODULE_PATH.

       The  find  modules given to MODULES will be copied to the directory given by DIR (which should be located
       in ${CMAKE_BINARY_DIR} and added to CMAKE_MODULE_PATH).  If NO_OVERRIDE is given, only modules  not  also
       provided by CMake will be copied.

       Example:

          find_package(ECM REQUIRED)
          ecm_use_find_modules(
              DIR ${CMAKE_BINARY_DIR}/cmake
              MODULES FindEGL.cmake
              NO_OVERRIDE
          )
          set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/cmake)

       This example will make FindEGL.cmake available in your project, but only as long as it is not yet part of
       CMake. Calls to find_package(EGL) will then make use of this copied module (or the  CMake  module  if  it
       exists).

       Another  possible  use  for this macro is to take copies of find modules that can be installed along with
       config files if they are required as a dependency (for example, if targets provided by  the  find  module
       are in the link interface of a library).

       Since pre-1.0.0.

SEE ALSO

       ecm(7), ecm-find-modules(7), ecm-kde-modules(7)

       KDE Developers