# -*- mode: cmake -*-
# This file used to configure CMake variables that are used to build the
# installed examples.
# Identify that this is the build system for the installed examples.
set(BUILD_TEST ON)
set(CORE_BUILD OFF)

# =======================================================================
# Useful functions.
# =======================================================================
include(plplot_functions)

# =======================================================================
# pkg-config support as well as macros to put link flags in standard
# *.pc (pkg-config) form as well as standard fullpath form used by cmake.
# PKG_CONFIG_EXECUTABLE can be used to discover whether pkg-config was
# found or not.
# =======================================================================
include(pkg-config)

set(LIB_TAG "@LIB_TAG@")
set(INCLUDE_DIR "@INCLUDE_DIR@")
set(MATH_LIB @MATH_LIB@)
set(SH_EXECUTABLE @SH_EXECUTABLE@)

set(BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)

set(language_info_LIST @language_info_LIST@)

# This list of set commands must be consistent with language_info_LIST
# set in examples/CMakeLists.txt and configured just above.  Thus,
# some consistent maintenance of that list and the current list of set
# commands must be done on the rare occasions when a language is added
# to PLplot.  Cannot make the list of set commands automatically with
# a foreach loop because explicit configuration of each name is required.
set(ENABLE_ada @ENABLE_ada@)
set(ENABLE_c @ENABLE_c@)
set(ENABLE_cxx @ENABLE_cxx@)
set(ENABLE_d @ENABLE_d@)
set(ENABLE_f95 @ENABLE_f95@)
set(ENABLE_java @ENABLE_java@)
set(ENABLE_lua @ENABLE_lua@)
set(ENABLE_ocaml @ENABLE_ocaml@)
set(ENABLE_octave @ENABLE_octave@)
set(ENABLE_pdl @ENABLE_pdl@)
set(ENABLE_python @ENABLE_python@)
set(ENABLE_pyqt4 @ENABLE_pyqt4@)
set(ENABLE_tcl @ENABLE_tcl@)

# Interactive bindings
set(ENABLE_tk @ENABLE_tk@)
set(ENABLE_tkX @ENABLE_tkX@)
set(ENABLE_gnome2 @ENABLE_gnome2@)
set(ENABLE_wxwidgets @ENABLE_wxwidgets@)
set(ENABLE_qt @ENABLE_qt@)
if(ENABLE_python)
  set(ENABLE_pygcw @ENABLE_pygcw@)
endif(ENABLE_python)

# Check for all officially supported CMake compilers that we use with
# soft-landing support.
include(language_support)

# First field is lower-case language string, second field is
# mixed-case language string used for official CMake variables, third
# field is language string to be used in output messages, and final
# field is whether it is a fatal error if this language is missing/not
# working.
set(COMPILED_LANGUAGE_INFO_LIST
"c:C:C:ON"
"ada:Ada:Ada:OFF"
"cxx:CXX:C++:OFF"
"d:D:D:OFF"
"f95:Fortran:Fortran:OFF"
"java:Java:Java:OFF"
)

foreach(COMPILED_LANGUAGE_INFO ${COMPILED_LANGUAGE_INFO_LIST})
  string(REGEX REPLACE "^(.*):.*:.*:.*$" "\\1" language ${COMPILED_LANGUAGE_INFO})
  string(REGEX REPLACE "^.*:(.*):.*:.*$" "\\1" Language ${COMPILED_LANGUAGE_INFO})
  string(REGEX REPLACE "^.*:.*:(.*):.*$" "\\1" language_output ${COMPILED_LANGUAGE_INFO})
  string(REGEX REPLACE "^.*:.*:.*:(.*)$" "\\1" fatal_language ${COMPILED_LANGUAGE_INFO})
  if(ENABLE_${language} AND NOT PLPLOT_${Language}_COMPILER_WORKS)
    workaround_9220(${Language} PLPLOT_${Language}_COMPILER_WORKS)
    if(NOT PLPLOT_${Language}_COMPILER_WORKS)
      if(fatal_language)
	message(FATAL_ERROR "${language_output} compiler absolutely required to build this project.")
      endif(fatal_language)
      message(STATUS "WARNING: no working ${language_output} compiler so disabling ${language} examples.")
      set(ENABLE_${language} OFF CACHE BOOL "Enable ${language} bindings" FORCE)
    endif(NOT PLPLOT_${Language}_COMPILER_WORKS)
  endif(ENABLE_${language} AND NOT PLPLOT_${Language}_COMPILER_WORKS)

  if(ENABLE_${language})
    # Find and check ${Language} compiler
    enable_language(${Language} OPTIONAL)
    if(NOT CMAKE_${Language}_COMPILER_WORKS)
      if(fatal_language)
	message(FATAL_ERROR "${language_output} compiler absolutely required to build this project.")
      endif(fatal_language)
      message(STATUS "WARNING: no working ${language_output} compiler so disabling ${language} examples.")
      set(ENABLE_${language} OFF CACHE BOOL "Enable ${language} bindings" FORCE)
    endif(NOT CMAKE_${Language}_COMPILER_WORKS)
  endif(ENABLE_${language})
endforeach(COMPILED_LANGUAGE_INFO ${COMPILED_LANGUAGE_INFO_LIST})

if(ENABLE_ada)
  set(ADA_INCLUDE_DIR "@ADA_INCLUDE_DIR@")
  set(ADA_LIB_DIR "@ADA_LIB_DIR@")
endif(ENABLE_ada)

if(ENABLE_f95)
  set(F95_MOD_DIR "@F95_MOD_DIR@")
endif(ENABLE_f95)

if(ENABLE_java)
  find_package(JNI)
  set(JAR_DIR "@JAR_DIR@")
endif(ENABLE_java)

if(ENABLE_ocaml)
  set(OCAMLC @OCAMLC@)
  set(OCAMLOPT @OCAMLOPT@)
  set(OCAMLFIND @OCAMLFIND@)
  set(OCAML_HAS_CAIRO @OCAML_HAS_CAIRO@)
  set(OCAML_HAS_GTK @OCAML_HAS_GTK@)
  set(CMAKE_INSTALL_LIBDIR "@CMAKE_INSTALL_LIBDIR@")
  set(OCAML_INSTALL_DIR "@OCAML_INSTALL_DIR@")
endif(ENABLE_ocaml)

if(ENABLE_tcl OR ENABLE_tk)
  set(TCL_TCLSH @TCL_TCLSH@)
  set(MKTCLINDEX ${CMAKE_SOURCE_DIR}/tcl/mktclIndex)
  set(MKTCLINDEX_ARGS @MKTCLINDEX_ARGS@)
  # Needed to configure tclsh_standard_examples and wish_standard_examples
  set(DATA_DIR @DATA_DIR@)
endif(ENABLE_tcl OR ENABLE_tk)

if(ENABLE_tk)
  set(ENABLE_itk @ENABLE_itk@)
  set(ENABLE_itkX @ENABLE_itkX@)
  set(TCL_INCLUDE_PATH @TCL_INCLUDE_PATH@)
  set(TK_INCLUDE_PATH @TK_INCLUDE_PATH@)
  set(TCL_LIBRARY @TCL_LIBRARY@)
  set(TK_LIBRARY @TK_LIBRARY@)
endif(ENABLE_tk)

if(ENABLE_wxwidgets)
  # Use identical compile and link flags to build wxwidgets application.
  set(wxwidgets_COMPILE_FLAGS "@wxwidgets_COMPILE_FLAGS@")
  set(wxwidgets_LINK_FLAGS @wxwidgets_LINK_FLAGS@)
endif(ENABLE_wxwidgets)

if(ENABLE_qt)
  set(CORE_QT_VERSION_MAJOR @QT_VERSION_MAJOR@)
  set(CORE_QT_VERSION_MINOR @QT_VERSION_MINOR@)
  set(CORE_QT_VERSION_PATCH @QT_VERSION_PATCH@)
endif(ENABLE_qt)

set(ENABLE_DYNDRIVERS @ENABLE_DYNDRIVERS@)

set(FILE_DEVICES_LIST @FILE_DEVICES_LIST@)
# This list of set commands must be consistent with the above list which
# implies a maintenance issue.
set(PLD_pdfcairo @PLD_pdfcairo@)
set(PLD_pngcairo @PLD_pngcairo@)
set(PLD_pscairo @PLD_pscairo@)
set(PLD_epscairo @PLD_epscairo@)
set(PLD_svgcairo @PLD_svgcairo@)
set(PLD_cgm @PLD_cgm@)
set(PLD_dg300 @PLD_dg300@)
set(PLD_epsqt @PLD_epsqt@)
set(PLD_pdfqt @PLD_pdfqt@)
set(PLD_bmpqt @PLD_bmpqt@)
set(PLD_jpgqt @PLD_jpgqt@)
set(PLD_pngqt @PLD_pngqt@)
set(PLD_ppmqt @PLD_ppmqt@)
set(PLD_tiffqt @PLD_tiffqt@)
set(PLD_svgqt @PLD_svgqt@)
set(PLD_gif @PLD_gif@)
set(PLD_jpeg @PLD_jpeg@)
set(PLD_png @PLD_png@)
set(PLD_hp7470 @PLD_hp7470@)
set(PLD_hp7580 @PLD_hp7580@)
set(PLD_lj_hpgl @PLD_lj_hpgl@)
set(PLD_imp @PLD_imp@)
set(PLD_ljii @PLD_ljii@)
set(PLD_ljiip @PLD_ljiip@)
set(PLD_pbm @PLD_pbm@)
set(PLD_pdf @PLD_pdf@)
set(PLD_ps @PLD_ps@)
set(PLD_pstex @PLD_pstex@)
set(PLD_psttf @PLD_psttf@)
set(PLD_svg @PLD_svg@)
set(PLD_tek4010f @PLD_tek4010f@)
set(PLD_tek4107f @PLD_tek4107f@)
set(PLD_wxpng @PLD_wxpng@)
set(PLD_xfig @PLD_xfig@)

# These only used for testing, but not core build
set(PLD_psc @PLD_psc@)
set(PLD_psttfc @PLD_psttfc@)

set(INTERACTIVE_DEVICES_LIST @INTERACTIVE_DEVICES_LIST@)
# Set interactive devices that are needed to build certain examples.  This
# list should be consistent with INTERACTIVE_DEVICES_LIST which implies a
# maintenance issue.

set(PLD_aqt @PLD_aqt@)
set(PLD_gcw @PLD_gcw@)
set(PLD_ntk @PLD_ntk@)
set(PLD_qtwidget @PLD_qtwidget@)
set(PLD_tk @PLD_tk@)
set(PLD_wincairo @PLD_wincairo@)
set(PLD_wingcc @PLD_wingcc@)
set(PLD_wxwidgets @PLD_wxwidgets@)
set(PLD_xcairo @PLD_xcairo@)
set(PLD_xwin @PLD_xwin@)

# Set external devices that are needed to build certain examples.
set(PLD_extcairo @PLD_extcairo@)
set(PLD_extqt @PLD_extqt@)

# Needed to check if diff and tail on system for test_diff_psc target.

set(DIFF_EXECUTABLE @DIFF_EXECUTABLE@)
set(TAIL_EXECUTABLE @TAIL_EXECUTABLE@)
set(CMP_EXECUTABLE @CMP_EXECUTABLE@)

# ocaml examples build needs this.
set(USE_RPATH @USE_RPATH@)

# WIN32 and CYGWIN derived variables
set(WIN32_AND_NOT_CYGWIN @WIN32_AND_NOT_CYGWIN@)
set(WIN32_OR_CYGWIN @WIN32_OR_CYGWIN@)
