#
# CMakeLists.txt used to build example apps by the CMake build system
#
# Copyright 2020-2023 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file.  If this
# file is missing or damaged, see the license at:
#
#     https://www.fltk.org/COPYING.php
#
# Please see the following page on how to report bugs and issues:
#
#     https://www.fltk.org/bugs.php
#
################################################################################

include (../CMake/fl_create_example.cmake)
include (../CMake/FLTK-Functions.cmake)

set (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/../bin/examples)
file (MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})

################################################################################

# create separate lists of all source (.cxx) files
# depending on the required FLTK and system libraries

############################################################
# simple examples w/o extra libs
############################################################

set (SIMPLE_SOURCES
  browser-simple
  callbacks
  chart-simple
  draggable-group
  grid-simple
  howto-add_fd-and-popen
  howto-browser-with-icons
  howto-drag-and-drop
  howto-draw-an-x
  howto-flex-simple
  howto-menu-with-images
  howto-parse-args
  howto-remap-numpad-keyboard-keys
  howto-text-over-image-button
  menubar-add
  nativefilechooser-simple
  nativefilechooser-simple-app
  progress-simple
  shapedwindow
  simple-terminal
  table-as-container
  table-simple
  table-sort
  table-spreadsheet
  table-spreadsheet-with-keyboard-nav
  table-with-keynav
  table-with-right-column-stretch-fit
  tabs-simple
  textdisplay-with-colors
  texteditor-simple
  texteditor-with-dynamic-colors
  tree-as-container
  tree-custom-draw-items
  tree-custom-sort
  tree-of-tables
  tree-simple
  wizard-simple
)

############################################################
# simple FLUID examples w/o extra libs
############################################################

set (FLUID_SOURCES
  fluid-callback
)

############################################################
# examples requiring fltk_images
############################################################

set (IMAGE_SOURCES
  animgifimage
  animgifimage-play
  animgifimage-resize
  animgifimage-simple
  howto-simple-svg
)

############################################################
# examples requiring cairo
############################################################

set (CAIRO_SOURCES
  cairo-draw-x
)

############################################################
# examples requiring OpenGL + libGLEW
############################################################

set (OPENGL_SOURCES
  OpenGL3-glut-test
  OpenGL3test
)

############################################################
# create simple example programs
############################################################

foreach (src ${SIMPLE_SOURCES})
  CREATE_EXAMPLE (${src} ${src}.cxx fltk)
endforeach (src)

############################################################
# create FLUID example programs
############################################################

foreach (src ${FLUID_SOURCES})
  CREATE_EXAMPLE (${src} ${src}.fl fltk)
endforeach (src)

############################################################
# create example programs with fltk_images library
############################################################

foreach (src ${IMAGE_SOURCES})
  CREATE_EXAMPLE (${src} ${src}.cxx "fltk_images;fltk")
endforeach (src)

############################################################
# create example programs requiring cairo
############################################################

if (FLTK_HAVE_CAIRO)
  set (cairo_libs "fltk;cairo")
  if (TARGET fltk_cairo)
    set (cairo_libs fltk_cairo ${cairo_libs})
  endif ()
else ()
  set(cairo_libs "fltk")
endif ()

foreach (src ${CAIRO_SOURCES})
  CREATE_EXAMPLE (${src} ${src}.cxx "${cairo_libs}")
endforeach (src)

############################################################
# create example programs with OpenGL + libGLEW
############################################################

# Note: macOS does not need libGLEW

if (APPLE AND (NOT OPTION_APPLE_X11))
  if (NOT LIB_GLEW)
    set (LIB_GLEW TRUE)
  endif ()
  set (REQUIRED_LIBS fltk_gl fltk ${OPENGL_LIBRARIES})
else ()
  set (REQUIRED_LIBS fltk_gl fltk ${LIB_GLEW} ${OPENGL_LIBRARIES})
endif ()

if (OPENGL_FOUND AND LIB_GLEW)
  foreach (src ${OPENGL_SOURCES})
    CREATE_EXAMPLE (${src} ${src}.cxx "${REQUIRED_LIBS}")
  endforeach (src)
else ()
  message (STATUS
    "OpenGL or libGLEW not present: OpenGL example programs will not be built.")
  fl_debug_var (OPENGL_FOUND)
  fl_debug_var (LIB_GLEW)
  message ("")
endif (OPENGL_FOUND AND LIB_GLEW)

unset (REQUIRED_LIBS)
