summaryrefslogtreecommitdiff
path: root/CMake/fl_create_example.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'CMake/fl_create_example.cmake')
-rw-r--r--CMake/fl_create_example.cmake181
1 files changed, 85 insertions, 96 deletions
diff --git a/CMake/fl_create_example.cmake b/CMake/fl_create_example.cmake
index be1b27608..7e930ee9b 100644
--- a/CMake/fl_create_example.cmake
+++ b/CMake/fl_create_example.cmake
@@ -2,7 +2,7 @@
# A function used by the CMake build system for the Fast Light Tool Kit (FLTK).
# Originally written by Michael Surette
#
-# Copyright 1998-2023 by Bill Spitzak and others.
+# Copyright 1998-2024 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
@@ -17,7 +17,7 @@
################################################################################
#
-# function CREATE_EXAMPLE - Create a test/demo (example) program
+# function fl_create_example - Create a test/demo (example) program
#
# Input:
#
@@ -27,9 +27,9 @@
# Sources can be:
# - .c/.cxx files, e.g. 'hello.cxx'
# - .fl (fluid) files, e.g. 'radio.fl'
-# - .plist file (macOS), e.g. 'editor.plist'
-# - .icns file (macOS Icon), e.g. 'checkers.icns'
-# - .rc file (Windows resource file, e.g. icon definition)
+# - .plist file(macOS), e.g. 'editor.plist'
+# - .icns file(macOS Icon), e.g. 'checkers.icns'
+# - .rc file(Windows resource file, e.g. icon definition)
#
# Order of sources doesn't matter, multiple .cxx and .fl files are
# supported, but only one .plist and one .icns file.
@@ -42,127 +42,127 @@
# These files must reside in the subdirectory 'mac-resources'.
#
# - LIBRARIES:
-# List of libraries (CMake target names), separated by ';'. Needs
-# quotes if more than one library is required, e.g. "fltk_gl;fltk"
-#
-# CREATE_EXAMPLE can have an optional fourth argument with a list of options
-# - these options are currently not used
+# List of libraries (CMake target names), separated by ';'. Must be
+# quoted if more than one library is required, e.g. "fltk::gl;fltk::images"
#
################################################################################
-function (CREATE_EXAMPLE NAME SOURCES LIBRARIES)
+function (fl_create_example NAME SOURCES LIBRARIES)
- set (srcs) # source files
- set (flsrcs) # fluid source (.fl) files
- set (TARGET_NAME ${NAME}) # CMake target name
- set (ICON_NAME) # macOS icon (max. one)
- set (PLIST) # macOS .plist file (max. one)
- set (ICON_PATH) # macOS icon resource path
+ set(srcs) # source files
+ set(flsrcs) # fluid source (.fl) files
+ set(TARGET_NAME ${NAME}) # CMake target name
+ set(ICON_NAME) # macOS icon (max. one)
+ set(PLIST) # macOS .plist file(max. one)
+ set(ICON_PATH) # macOS icon resource path
# create macOS bundle? 0 = no, 1 = yes
- if (APPLE AND (NOT OPTION_APPLE_X11))
- set (MAC_BUNDLE 1)
- else ()
- set (MAC_BUNDLE 0)
- endif (APPLE AND (NOT OPTION_APPLE_X11))
-
- # rename target name "help" (reserved since CMake 2.8.12)
- # 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")
+ if(APPLE AND NOT FLTK_BACKEND_X11)
+ set(MAC_BUNDLE 1)
+ else()
+ set(MAC_BUNDLE 0)
+ endif()
# 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)
+ 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)
# generate source files from .fl files, add output to sources
- if (flsrcs)
- if (NOT FLTK_FLUID_EXECUTABLE)
+ if(flsrcs)
+ if(NOT FLTK_FLUID_EXECUTABLE)
message(STATUS "Example app \"${NAME}\" will not be built. FLUID executable not found.")
return ()
- endif ()
+ endif()
FLTK_RUN_FLUID (FLUID_SOURCES "${flsrcs}")
- list (APPEND srcs ${FLUID_SOURCES})
- unset (FLUID_SOURCES)
- endif (flsrcs)
+ list(APPEND srcs ${FLUID_SOURCES})
+ unset(FLUID_SOURCES)
+ endif(flsrcs)
# set macOS (icon) resource path if applicable
- if (MAC_BUNDLE AND ICON_NAME)
- set (ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/mac-resources/${ICON_NAME}")
- endif (MAC_BUNDLE AND ICON_NAME)
+ if(MAC_BUNDLE AND ICON_NAME)
+ set(ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/mac-resources/${ICON_NAME}")
+ endif(MAC_BUNDLE AND ICON_NAME)
##############################################################################
# add executable target and set properties (all platforms)
##############################################################################
- if (MAC_BUNDLE)
+ if(MAC_BUNDLE)
add_executable (${TARGET_NAME} MACOSX_BUNDLE ${srcs} ${ICON_PATH})
- else ()
+ else()
add_executable (${TARGET_NAME} WIN32 ${srcs})
- endif (MAC_BUNDLE)
+ endif(MAC_BUNDLE)
set_target_properties (${TARGET_NAME} PROPERTIES OUTPUT_NAME ${NAME})
- target_link_libraries (${TARGET_NAME} ${LIBRARIES})
+ target_link_libraries (${TARGET_NAME} PRIVATE ${LIBRARIES})
# make sure we're "exporting" global symbols like 'fl_disable_wayland',
# see also README.Wayland.txt and CMake policy CMP0065.
set_target_properties (${TARGET_NAME} PROPERTIES ENABLE_EXPORTS TRUE)
- # we must link all programs with cairo if option CAIROEXT is enabled
- if (FLTK_HAVE_CAIROEXT)
- target_link_libraries (${TARGET_NAME} ${PKG_CAIRO_LIBRARIES})
- endif ()
+ ### *FIXME* Remove the entire 'if' block below when verified:
+
+ if(0) # This should no longer be necessary (implied by linking the libs)
+
+ # we must link all programs with Cairo if option CAIROEXT is enabled
+ if(FLTK_HAVE_CAIROEXT)
+ target_link_libraries(${TARGET_NAME} PRIVATE ${PKG_CAIRO_LIBRARIES})
+ endif()
+
+ if(FLTK_HAVE_CAIRO AND PKG_CAIRO_LIBRARY_DIRS)
+ target_link_directories(${TARGET_NAME} PRIVATE ${PKG_CAIRO_LIBRARY_DIRS})
+ endif()
- if (FLTK_HAVE_CAIRO AND PKG_CAIRO_LIBRARY_DIRS)
- target_link_directories (${TARGET_NAME} PUBLIC ${PKG_CAIRO_LIBRARY_DIRS})
- endif ()
+ endif() # This should no longer be necessary (implied by linking the libs)
- if (USE_GDIPLUS) # can only be true on Windows
- target_link_libraries (${TARGET_NAME} gdiplus)
- endif ()
+ # Search the current binary directory for header files created by CMake
+ # or fluid and the source folder for other headers included by test programs
- if (MAC_BUNDLE)
- if (PLIST)
- set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST
+ target_include_directories(${TARGET_NAME} PRIVATE
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+
+ if(MAC_BUNDLE)
+ if(PLIST)
+ set_target_properties(${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST
"${CMAKE_CURRENT_SOURCE_DIR}/mac-resources/${PLIST}")
endif()
string(REPLACE "_" "-" FLTK_BUNDLE_ID "org.fltk.${TARGET_NAME}")
- set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${TARGET_NAME}")
- set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "${FLTK_BUNDLE_ID}")
- set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${FLTK_BUNDLE_ID}")
+ set_target_properties(${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${TARGET_NAME}")
+ set_target_properties(${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "${FLTK_BUNDLE_ID}")
+ set_target_properties(${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${FLTK_BUNDLE_ID}")
- if (ICON_NAME)
- set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
- set_target_properties (${TARGET_NAME} PROPERTIES RESOURCE ${ICON_PATH})
- endif ()
- endif ()
+ if(ICON_NAME)
+ set_target_properties(${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
+ set_target_properties(${TARGET_NAME} PROPERTIES RESOURCE ${ICON_PATH})
+ endif()
+ endif()
##############################################################################
# Copy macOS "bundle wrapper" (shell script) to target directory.
# The "custom command" will be executed "POST_BUILD".
##############################################################################
- if (MAC_BUNDLE)
- set (WRAPPER "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/${TARGET_NAME}")
+ if(MAC_BUNDLE)
+ set(WRAPPER "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/${TARGET_NAME}")
- add_custom_command (
+ add_custom_command(
TARGET ${TARGET_NAME} POST_BUILD
COMMAND cp ${FLTK_SOURCE_DIR}/CMake/macOS-bundle-wrapper.in ${WRAPPER}
COMMAND chmod u+x,g+x,o+x ${WRAPPER}
@@ -170,29 +170,18 @@ function (CREATE_EXAMPLE NAME SOURCES LIBRARIES)
# COMMENT "Creating macOS bundle wrapper script ${WRAPPER}"
VERBATIM
)
- unset (WRAPPER)
- endif (MAC_BUNDLE)
+ unset(WRAPPER)
+ endif(MAC_BUNDLE)
- if (MSVC AND TARGET fltk_SHARED)
- set (DllDir "$<SHELL_PATH:$<TARGET_FILE_DIR:fltk_SHARED>>")
- ## fl_debug_var (DllDir)
+ ##############################################################################
+ # MSVC: Add fltk-shared (DLL) path to Environment 'PATH' for debugging
+ ##############################################################################
+
+ if(MSVC AND TARGET fltk-shared)
+ set(DllDir "$<SHELL_PATH:$<TARGET_FILE_DIR:fltk-shared>>")
set_target_properties(${TARGET_NAME} PROPERTIES
VS_DEBUGGER_ENVIRONMENT "PATH=${DllDir};$ENV{PATH}"
)
endif()
- ######################################################################
- # Parse optional fourth argument, see description above.
- ######################################################################
-
- # code left commented out as an example
-
- # *unused* # if (${ARGC} GREATER 3)
- # *unused* # foreach (OPTION ${ARGV3})
- # *unused* # if (${OPTION} STREQUAL "xxx")
- # *unused* # # do something ...
- # *unused* # endif ()
- # *unused* # endforeach ()
- # *unused* # endif ()
-
endfunction ()