# FindFLTK

Finds the Fast Light Toolkit (FLTK), a cross-platform toolkit for GUI development.

FLTK uses CMake-based build system and provides a package configuration file for projects to find it. As of its 1.4.0 version it also provides Imported Targets that encapsulate usage requirements. For example, `fltk::fltk`, which can be linked to project targets where FLTK is needed. This module takes that into account and first attempts to find FLTK in config mode. If the configuration file is not available, it falls back to module mode and searches standard locations. See also to the official FLTK documentation for more information, how to use FLTK with CMake.

Added in version 3.11: Debug and Release library variants are found separately and use per-configuration variables.

## Result Variables

This module defines the following variables:

`FLTK_FOUND`

  Boolean indicating whether FLTK is found.

`FLTK_LIBRARIES`

  Libraries needed to link against to use FLTK.

`FLTK_WRAP_UI`

  Boolean indicating whether the `fluid` executable is found. This variable is available only if FLTK is found in module mode and can be used, for example, to conditionally invoke the `fltk_wrap_ui()` command if it is needed and available.

## Cache Variables

The following cache variables are also available to set or use:

`FLTK_FLUID_EXECUTABLE`

  The path to the `fluid` binary tool.

`FLTK_INCLUDE_DIR`

  The include directory containing header files needed to use FLTK.

`FLTK_BASE_LIBRARY_RELEASE`

  Added in version 3.11.

  The path to the release (optimized) FLTK base library.

`FLTK_BASE_LIBRARY_DEBUG`

  Added in version 3.11.

  The path to the debug FLTK base library.

`FLTK_GL_LIBRARY_RELEASE`

  Added in version 3.11.

  The path to the release (optimized) FLTK GL library.

`FLTK_GL_LIBRARY_DEBUG`

  Added in version 3.11.

  The path to the debug FLTK GL library.

`FLTK_FORMS_LIBRARY_RELEASE`

  Added in version 3.11.

  The path to the release (optimized) FLTK Forms library.

`FLTK_FORMS_LIBRARY_DEBUG`

  Added in version 3.11.

  The path to the debug FLTK Forms library.

`FLTK_IMAGES_LIBRARY_RELEASE`

  Added in version 3.11.

  The path to the release (optimized) FLTK Images protobuf library.

`FLTK_IMAGES_LIBRARY_DEBUG`

  Added in version 3.11.

  The path to the debug FLTK Images library.

## Input Variables

By default, this module searches for all FLTK libraries and its `fluid` executable. The following variables can be set before calling `find_package(FLTK)` to indicate which elements are optional for a successful configuration:

`FLTK_SKIP_FLUID`

  Set to boolean true to mark the `fluid` executable as optional.

`FLTK_SKIP_FORMS`

  Set to boolean true to mark the FLTK Forms library as optional; it will therefore not be included in the `FLTK_LIBRARIES` result variable.

`FLTK_SKIP_IMAGES`

  Set to boolean true to mark the FLTK Image library as optional; it will therefore not be included in the `FLTK_LIBRARIES` result variable.

`FLTK_SKIP_OPENGL`

  Set to boolean true to mark the FLTK OpenGL library as optional; it will therefore not be included in the `FLTK_LIBRARIES` result variable.

## Examples

Finding FLTK and conditionally creating a `fltk::fltk` imported interface target, if it is not provided by the upstream FLTK package. Imported target can then be linked to a project target:

    find_package(FLTK)

    if(FLTK_FOUND AND NOT TARGET fltk::fltk)
      add_library(fltk::fltk INTERFACE IMPORTED)
      set_target_properties(
        fltk::fltk
        PROPERTIES
          INTERFACE_INCLUDE_DIRECTORIES "${FLTK_INCLUDE_DIR}"
          INTERFACE_LINK_LIBRARIES "${FLTK_LIBRARIES}"
      )
    endif()

    target_link_libraries(project_target PRIVATE fltk::fltk)