mirror of https://github.com/fltk/fltk.git
FLTK - Fast Light Tool Kit - https://github.com/fltk/fltk - cross platform GUI development
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
347 lines
11 KiB
347 lines
11 KiB
# |
|
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org) |
|
# Originally written by Michael Surette |
|
# |
|
# 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 |
|
# 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 |
|
# |
|
|
|
####################################################################### |
|
# Set CMake minimum version first: must be set before `project()` |
|
####################################################################### |
|
|
|
# Minimum CMake version required by FLTK 1.4 |
|
|
|
# Note 1: Linking against OBJECT libraries (fluid, test) requires |
|
# at least CMake 3.12.0 |
|
# Note 2: Used in fluid since 05/2023, |
|
# used for Windows (MSVC) shared lib builds much earlier |
|
# Note 3: More modern CMake features require 3.13...3.15 (Nov 2023) |
|
|
|
cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR) |
|
|
|
# Since CMake 3.4: enable symbol export from all executable targets |
|
# cmake_policy(SET CMP0065 OLD) |
|
|
|
####################################################################### |
|
# define the FLTK project and version |
|
####################################################################### |
|
|
|
project(FLTK VERSION 1.4.0) |
|
|
|
####################################################################### |
|
# include macro and function definitions for general usage |
|
####################################################################### |
|
|
|
include(CMake/fl_debug_var.cmake) |
|
include(CMake/fl_debug_pkg.cmake) |
|
include(CMake/fl_add_library.cmake) |
|
|
|
# right now we don't use compatibility functions |
|
# include(CMake/compatibility.cmake) |
|
|
|
if(0) |
|
fl_debug_var(FLTK_VERSION_MAJOR) |
|
fl_debug_var(FLTK_VERSION_MINOR) |
|
fl_debug_var(FLTK_VERSION_PATCH) |
|
fl_debug_var(FLTK_VERSION) |
|
fl_debug_var(CMAKE_VERSION) |
|
endif() |
|
|
|
# Set FLTK_VERSION in the cache so user projects can access it, |
|
# for instance if FLTK is built as a subproject (FetchContent) |
|
|
|
set(FLTK_VERSION ${FLTK_VERSION} CACHE STRING "FLTK version" FORCE) |
|
|
|
####################################################################### |
|
# basic setup |
|
####################################################################### |
|
include(CMake/setup.cmake) |
|
|
|
####################################################################### |
|
# check for headers, libraries and functions |
|
####################################################################### |
|
include(CMake/resources.cmake) |
|
|
|
####################################################################### |
|
# options |
|
####################################################################### |
|
include(CMake/options.cmake) |
|
|
|
####################################################################### |
|
# print (debug) several build variables and options |
|
####################################################################### |
|
|
|
set(debug_build 0) # set to 1 to show debug info |
|
|
|
if(debug_build) |
|
message("") |
|
message(STATUS "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt: set 'debug_build' to 0 to disable the following info:") |
|
fl_debug_var(WIN32) |
|
fl_debug_var(MINGW) |
|
fl_debug_var(CYGWIN) |
|
fl_debug_var(MSVC) |
|
fl_debug_var(UNIX) |
|
fl_debug_var(APPLE) |
|
fl_debug_var(CMAKE_BUILD_TYPE) |
|
fl_debug_var(CMAKE_SIZEOF_VOID_P) |
|
fl_debug_var(FLTK_OPTION_OPTIM) |
|
fl_debug_var(CMAKE_C_FLAGS) |
|
fl_debug_var(CMAKE_CXX_FLAGS) |
|
fl_debug_var(CMAKE_EXE_LINKER_FLAGS) |
|
message(STATUS "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt: end of debug_build info.") |
|
endif(debug_build) |
|
|
|
unset(debug_build) |
|
|
|
####################################################################### |
|
# Build a dummy ("empty") Cairo library for backwards compatibility. |
|
# This should be removed some time after 1.4.0 was released, maybe |
|
# in FLTK 1.4.1, 1.4.2, 1.5.0, or whatever the next minor release is. |
|
####################################################################### |
|
|
|
if(FLTK_HAVE_CAIRO) |
|
add_subdirectory(cairo) |
|
endif() |
|
|
|
####################################################################### |
|
# build the standard FLTK libraries |
|
####################################################################### |
|
|
|
add_subdirectory(src) |
|
|
|
####################################################################### |
|
# build fluid (optional) |
|
####################################################################### |
|
|
|
set(FLTK_FLUID_EXECUTABLE "") |
|
|
|
if(FLTK_BUILD_FLUID) |
|
add_subdirectory(fluid) |
|
endif(FLTK_BUILD_FLUID) |
|
|
|
# Set FLTK_FLUID_EXECUTABLE in the cache for user projects. |
|
# This can be used if FLTK has been built as a subproject. |
|
|
|
set(FLTK_FLUID_EXECUTABLE |
|
"${FLTK_FLUID_EXECUTABLE}" CACHE STRING |
|
"FLTK's 'fluid' executable") |
|
|
|
####################################################################### |
|
# build fltk-options |
|
####################################################################### |
|
|
|
if(FLTK_BUILD_FLTK_OPTIONS) |
|
add_subdirectory(fltk-options) |
|
endif(FLTK_BUILD_FLTK_OPTIONS) |
|
|
|
####################################################################### |
|
# variables shared by export and install |
|
# export.cmake creates configuration files for direct use in a built but uninstalled FLTK |
|
# install.cmake creates these files for an installed FLTK |
|
# these two would only differ in paths, so common variables are set here |
|
####################################################################### |
|
|
|
include(CMake/variables.cmake) |
|
|
|
####################################################################### |
|
# final config and export |
|
####################################################################### |
|
|
|
include(CMake/export.cmake) |
|
|
|
configure_file( |
|
${CMAKE_CURRENT_SOURCE_DIR}/fl_config.cmake.in |
|
${CMAKE_CURRENT_BINARY_DIR}/FL/fl_config.h |
|
@ONLY |
|
) |
|
|
|
####################################################################### |
|
# options to build test/demo and example programs |
|
####################################################################### |
|
|
|
if(FLTK_BUILD_TEST) |
|
add_subdirectory(test) |
|
endif(FLTK_BUILD_TEST) |
|
|
|
if(FLTK_BUILD_EXAMPLES) |
|
add_subdirectory(examples) |
|
endif(FLTK_BUILD_EXAMPLES) |
|
|
|
####################################################################### |
|
# Create and install version config file 'FLTKConfigVersion.cmake' |
|
####################################################################### |
|
|
|
include(CMakePackageConfigHelpers) |
|
|
|
write_basic_package_version_file(FLTKConfigVersion.cmake |
|
# [VERSION requiredVersion] # defaults to project version |
|
COMPATIBILITY SameMinorVersion |
|
) |
|
|
|
install(FILES |
|
${CMAKE_CURRENT_BINARY_DIR}/FLTKConfigVersion.cmake |
|
DESTINATION ${FLTK_CONFIG_PATH} |
|
) |
|
|
|
####################################################################### |
|
# installation |
|
####################################################################### |
|
|
|
include(CMake/install.cmake) |
|
|
|
####################################################################### |
|
# Generate Library Export Headers *** EXPERIMENTAL *** WIP *** |
|
####################################################################### |
|
|
|
# Enable (1) or disable (0) generation of experimental headers (WIP) |
|
set(GENERATE_EXPORT_HEADERS 0) |
|
|
|
if(FLTK_BUILD_SHARED_LIBS AND GENERATE_EXPORT_HEADERS) |
|
|
|
include(GenerateExportHeader) |
|
|
|
generate_export_header(fltk_SHARED |
|
BASE_NAME fl |
|
EXPORT_FILE_NAME FL/fltk_export.h |
|
STATIC_DEFINE FL_STATIC_LIB |
|
) |
|
|
|
if(NOT MSVC) |
|
|
|
# Visual Studio builds only one shared lib (DLL) |
|
|
|
generate_export_header(fltk_images_SHARED |
|
BASE_NAME fl_images |
|
EXPORT_FILE_NAME FL/fltk_images_export.h |
|
STATIC_DEFINE FL_STATIC_LIB |
|
) |
|
|
|
generate_export_header(fltk_forms_SHARED |
|
BASE_NAME fl_forms |
|
EXPORT_FILE_NAME FL/fltk_forms_export.h |
|
STATIC_DEFINE FL_STATIC_LIB |
|
) |
|
|
|
generate_export_header(fltk_gl_SHARED |
|
BASE_NAME fl_gl |
|
EXPORT_FILE_NAME FL/fltk_gl_export.h |
|
STATIC_DEFINE FL_STATIC_LIB |
|
) |
|
|
|
endif(NOT MSVC) |
|
|
|
endif(FLTK_BUILD_SHARED_LIBS AND GENERATE_EXPORT_HEADERS) |
|
|
|
####################################################################### |
|
# Output Build Configuration Summary |
|
####################################################################### |
|
|
|
include(FeatureSummary) # CMake Feature Summary |
|
include(CMake/fl_summary.cmake) # special FLTK summary macros |
|
|
|
# CMake Feature Summary |
|
|
|
message("") |
|
set(_descr "${PROJECT_NAME} ${FLTK_VERSION} generated by CMake ${CMAKE_VERSION}") |
|
feature_summary(WHAT ALL DESCRIPTION "Configuration Summary for ${_descr} --\n") |
|
|
|
# FLTK specific build configuration and options (see macros in fl_summary.cmake) |
|
|
|
# "title" dir build (bool) option to set |
|
fl_summary_build("Static libraries" lib TRUE "n/a") |
|
fl_summary_build("Shared libraries" lib FLTK_BUILD_SHARED_LIBS FLTK_BUILD_SHARED_LIBS) |
|
fl_summary_build("The forms library" lib FLTK_BUILD_FORMS FLTK_BUILD_FORMS) |
|
fl_summary_build("The OpenGL library" lib FLTK_USE_GL FLTK_BUILD_GL) |
|
fl_summary_build("fluid" bin FLTK_BUILD_FLUID FLTK_BUILD_FLUID) |
|
fl_summary_build("fltk-options" bin FLTK_BUILD_FLTK_OPTIONS FLTK_BUILD_FLTK_OPTIONS) |
|
|
|
fl_summary_build("Test programs" bin/test FLTK_BUILD_TEST FLTK_BUILD_TEST) |
|
fl_summary_build("Example programs" bin/examples FLTK_BUILD_EXAMPLES FLTK_BUILD_EXAMPLES) |
|
|
|
message(STATUS "") |
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "") |
|
fl_summary("Build configuration" "<unspecified>") |
|
else() |
|
fl_summary("Build configuration" "${CMAKE_BUILD_TYPE}") |
|
endif() |
|
|
|
fl_summary("Installation prefix" "${CMAKE_INSTALL_PREFIX}") |
|
|
|
message("") |
|
# "title" name system library if used |
|
fl_summary_image("Bundled Libraries" JPEG LIB_jpeg) |
|
fl_summary_image("" PNG LIB_png) |
|
fl_summary_image("" ZLIB LIB_zlib) |
|
|
|
if(FLTK_BACKEND_WAYLAND) |
|
if(USE_SYSTEM_LIBDECOR) |
|
fl_summary("" "Libdecor = System: ${SYSTEM_LIBDECOR_LINK_LIBRARIES}") |
|
else() |
|
fl_summary("" "Libdecor = Bundled") |
|
endif() |
|
endif(FLTK_BACKEND_WAYLAND) |
|
|
|
message("") |
|
|
|
if(UNIX AND NOT (APPLE AND NOT FLTK_BACKEND_X11)) |
|
|
|
if(FLTK_BACKEND_WAYLAND) |
|
if(FLTK_BACKEND_X11) |
|
fl_summary("Use Wayland" "Yes (can also run as X11 client)") |
|
else() |
|
fl_summary("Use Wayland" "Yes (cannot run as X11 client)") |
|
endif(FLTK_BACKEND_X11) |
|
else() |
|
fl_summary("Use Wayland" "No (X11 is used)") |
|
endif(FLTK_BACKEND_WAYLAND) |
|
|
|
fl_summary_yn("All drawing uses Cairo" FLTK_USE_CAIRO) |
|
|
|
fl_summary_yn("Use Pango" USE_PANGO) |
|
if(NOT USE_PANGO) |
|
fl_summary_yn("Use Xft" USE_XFT) |
|
endif() |
|
|
|
endif() |
|
|
|
set(title "Fl_Cairo_Window support") |
|
if(FLTK_HAVE_CAIROEXT) |
|
fl_summary("${title}" "Yes (extended)") |
|
elseif(FLTK_HAVE_CAIRO) |
|
fl_summary("${title}" "Yes (standard)") |
|
else() |
|
fl_summary("${title}" "No") |
|
endif() |
|
|
|
fl_summary_yn("Use std::" FLTK_USE_STD) |
|
|
|
message("") |
|
message(STATUS "End of Configuration Summary --\n") |
|
|
|
# optional info for "modern CMake" |
|
|
|
if(0) # debug built library and fluid targets |
|
message(STATUS "------------------------ TARGETS ------------------------") |
|
foreach(tgt fltk fluid fluid-cmd options options-cmd images gl forms cairo jpeg png z) |
|
if(TARGET fltk::${tgt}) |
|
message("Target: fltk::${tgt}") |
|
# fl_debug_target(fltk::${tgt}) |
|
endif() |
|
if(TARGET fltk::${tgt}-shared) |
|
message("Target: fltk::${tgt}-shared") |
|
# fl_debug_target(fltk::${tgt}-shared) |
|
endif() |
|
endforeach() |
|
message(STATUS "---------------------------------------------------------") |
|
endif()
|
|
|