# # A macro used by the CMake build system for the Fast Light Tool Kit (FLTK). # Written by Michael Surette # # Copyright 1998-2020 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 # ####################################################################### # # macro CREATE_EXAMPLE - Create a test/demo program # # Input: # # - NAME: program name, e.g. 'hello' # # - SOURCES: list of source files, separated by ';' (needs quotes) # Sources can be: # - .c/.cxx files, e.g. 'hello.cxx' # - .fl (fluid) files, e.g. 'radio.fl' # - .plist file (macOS), e.g. 'editor-Info.plist' # - .icns file (macOS Icon), e.g. 'checkers.icns' # File name (type), e.g. '.icns' matters, it is parsed internally. # Order of sources doesn't matter, multiple .cxx and .fl files are # supported, but only one .plist and .icns file. # macOS specific files are ignored on other platforms. # # - LIBRARIES: # List of libraries (CMake target names), separated by ';'. Needs # quotes if more than one library is needed, e.g. "fltk_gl;fltk" # # CREATE_EXAMPLE can have an optional fourth argument with a list of options # - the option ANDROID_OK is set if CREATE_EXAMPLE creates code for Android # builds in addition to the native build # ####################################################################### macro (CREATE_EXAMPLE NAME SOURCES LIBRARIES) set (srcs) # source files set (flsrcs) # fluid source (.fl) files set (TARGET_NAME ${NAME}) # CMake target name set (FLUID_SOURCES) # generated sources set (ICON_NAME) # macOS icon (max. one) set (PLIST) # macOS .plist file (max. one) set (RESOURCE_PATH) # macOS resource path # rename target name "help" (reserved since CMake 2.8.12 and later) # FIXME: not necessary in FLTK 1.4 but left for compatibility (06/2020) if (${TARGET_NAME} STREQUAL "help") set (TARGET_NAME "test_help") endif (${TARGET_NAME} STREQUAL "help") # filter input files for different handling (fluid, icon, plist, source) foreach (src ${SOURCES}) if ("${src}" MATCHES "\\.fl$") list (APPEND flsrcs ${src}) elseif ("${src}" MATCHES "\\.icns$") set (ICON_NAME "${src}") elseif ("${src}" MATCHES "\\.plist$") set (PLIST "${src}") else () list (APPEND srcs ${src}) endif ("${src}" MATCHES "\\.fl$") endforeach (src) if (flsrcs) FLTK_RUN_FLUID (FLUID_SOURCES "${flsrcs}") endif (flsrcs) ## FIXME ## ############################################################# ## FIXME ## The macOS specific code needs reorganization/simplification ## FIXME ## -- Albrecht (06/2020) ## FIXME ## ============================================================= ## FIXME ## Use "new" function `FLTK_SET_BUNDLE_ICON()` (?) ## FIXME ## -- see CMake/FLTK-Functions.cmake (may need some tweaks) ## FIXME ## -- ported from FLTK 1.3 (06/2020) ## FIXME ## ############################################################# if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL)) ## -- Code from FLTK 1.3 for reference (variable names adjusted): ## add_executable (${TARGET_NAME} MACOSX_BUNDLE ${srcs} ${FLUID_SOURCES} ${ICON_NAME}) ## if (ICON_NAME) ## FLTK_SET_BUNDLE_ICON (${TARGET_NAME} ${ICON_NAME}) ## endif () ## -- End of code from FLTK 1.3 if (ICON_NAME) set (RESOURCE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_NAME}.app/Contents/Resources/${ICON_NAME}") elseif (${TARGET_NAME} STREQUAL "demo") set (RESOURCE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/demo.menu") endif (ICON_NAME) if (RESOURCE_PATH) add_executable (${TARGET_NAME} MACOSX_BUNDLE ${srcs} ${FLUID_SOURCES} ${RESOURCE_PATH}) if (${TARGET_NAME} STREQUAL "demo") target_compile_definitions (demo PUBLIC USING_XCODE) endif (${TARGET_NAME} STREQUAL "demo") else () add_executable (${TARGET_NAME} MACOSX_BUNDLE ${srcs} ${FLUID_SOURCES}) endif (RESOURCE_PATH) else () add_executable (${TARGET_NAME} WIN32 ${srcs} ${FLUID_SOURCES}) endif (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL)) set_target_properties (${TARGET_NAME} PROPERTIES OUTPUT_NAME ${NAME} ) if (APPLE AND RESOURCE_PATH) if (ICON_NAME) set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME}) endif (ICON_NAME) set_target_properties (${TARGET_NAME} PROPERTIES RESOURCE ${RESOURCE_PATH}) endif (APPLE AND RESOURCE_PATH) if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL) AND PLIST) set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/${PLIST}") endif (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL) AND PLIST) target_link_libraries (${TARGET_NAME} ${LIBRARIES}) # Parse optional fourth argument 'ANDROID_OK', see description above. if (${ARGC} GREATER 3) foreach (OPTION ${ARGV3}) if (${OPTION} STREQUAL ANDROID_OK AND OPTION_CREATE_ANDROID_STUDIO_IDE) CREATE_ANDROID_IDE_FOR_TEST (${NAME} ${SOURCES} ${LIBRARIES}) endif () endforeach () endif () endmacro (CREATE_EXAMPLE NAME SOURCES LIBRARIES)