bddcecd28a
This is useful if FLTK is built as a subproject, for instance by using FetchContent.
376 lines
12 KiB
CMake
376 lines
12 KiB
CMake
#
|
|
# 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)
|
|
|
|
#######################################################################
|
|
# 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 Configuration Summary
|
|
#######################################################################
|
|
|
|
include(FeatureSummary)
|
|
|
|
message("")
|
|
set(_descr "${PROJECT_NAME} ${FLTK_VERSION} generated by CMake ${CMAKE_VERSION}")
|
|
feature_summary(WHAT ALL DESCRIPTION "Configuration Summary for ${_descr} --\n")
|
|
|
|
message(STATUS "Static libraries will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
|
|
|
|
if(FLTK_BUILD_SHARED_LIBS)
|
|
message(STATUS "Shared libraries will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
|
|
else()
|
|
message(STATUS "Shared libraries will not be built (set FLTK_BUILD_SHARED_LIBS=ON to build)")
|
|
endif()
|
|
|
|
if(FLTK_BUILD_FORMS)
|
|
message(STATUS "The forms library will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
|
|
else()
|
|
message(STATUS "The forms library will not be built (set FLTK_BUILD_FORMS=ON to build)")
|
|
endif()
|
|
|
|
if(FLTK_USE_GL)
|
|
message(STATUS "The OpenGL library will be built in ${CMAKE_CURRENT_BINARY_DIR}/lib")
|
|
else()
|
|
message(STATUS "The OpenGL library will not be built (set FLTK_BUILD_GL=ON to build)")
|
|
endif()
|
|
|
|
if(FLTK_BUILD_FLUID)
|
|
message(STATUS "fluid will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/fluid")
|
|
else()
|
|
message(STATUS "fluid will not be built (set FLTK_BUILD_FLUID=ON to build)")
|
|
endif()
|
|
|
|
if(FLTK_BUILD_FLTK_OPTIONS)
|
|
message(STATUS "fltk-options will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/fltk-options")
|
|
else()
|
|
message(STATUS "fltk-options will not be built (set FLTK_BUILD_FLTK_OPTIONS=ON to build)")
|
|
endif()
|
|
|
|
if(FLTK_BUILD_TEST)
|
|
message(STATUS "Test programs will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/test")
|
|
else()
|
|
message(STATUS "Test programs will not be built (set FLTK_BUILD_TEST=ON to build)")
|
|
endif()
|
|
|
|
if(FLTK_BUILD_EXAMPLES)
|
|
message(STATUS "Example programs will be built in ${CMAKE_CURRENT_BINARY_DIR}/bin/examples")
|
|
else()
|
|
message(STATUS "Example programs will not be built (set FLTK_BUILD_EXAMPLES=ON to build)")
|
|
endif()
|
|
|
|
message(STATUS "")
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "")
|
|
message(STATUS "Build configuration : <unspecified>")
|
|
else()
|
|
message(STATUS "Build configuration : ${CMAKE_BUILD_TYPE}")
|
|
endif()
|
|
|
|
message(STATUS "")
|
|
|
|
if(FLTK_USE_BUNDLED_JPEG)
|
|
message(STATUS "Image Libraries : JPEG = Builtin")
|
|
else()
|
|
message(STATUS "Image Libraries : JPEG = System")
|
|
endif()
|
|
|
|
if(FLTK_USE_BUNDLED_PNG)
|
|
message(STATUS " : PNG = Builtin")
|
|
else()
|
|
message(STATUS " : PNG = System")
|
|
endif()
|
|
|
|
if(FLTK_USE_BUNDLED_ZLIB)
|
|
message(STATUS " : ZLIB = Builtin")
|
|
else()
|
|
message(STATUS " : ZLIB = System")
|
|
endif()
|
|
|
|
if(UNIX AND NOT (APPLE AND NOT FLTK_BACKEND_X11))
|
|
|
|
if(FLTK_BACKEND_WAYLAND)
|
|
message(STATUS "Use Wayland : Yes (if available at run-time)")
|
|
if(USE_SYSTEM_LIBDECOR)
|
|
message(STATUS "Use system libdecor : Yes")
|
|
else()
|
|
message(STATUS "Use system libdecor : No")
|
|
endif()
|
|
else()
|
|
message(STATUS "Use Wayland : No (therefore, X11 is used)")
|
|
endif()
|
|
|
|
if(FLTK_USE_CAIRO)
|
|
message(STATUS "All drawing uses Cairo : Yes")
|
|
else()
|
|
message(STATUS "All drawing uses Cairo : No")
|
|
endif()
|
|
|
|
if(USE_PANGO)
|
|
message(STATUS "Use Pango : Yes")
|
|
else()
|
|
message(STATUS "Use Pango : No")
|
|
if(USE_XFT)
|
|
message(STATUS "Use Xft : Yes")
|
|
else()
|
|
message(STATUS "Use Xft : No")
|
|
endif()
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if(FLTK_HAVE_CAIROEXT)
|
|
message(STATUS "Fl_Cairo_Window support : Yes (extended)")
|
|
elseif(FLTK_HAVE_CAIRO)
|
|
message(STATUS "Fl_Cairo_Window support : Yes (standard)")
|
|
else()
|
|
message(STATUS "Fl_Cairo_Window support : No")
|
|
endif()
|
|
|
|
if(FLTK_USE_STD)
|
|
message(STATUS "Use std:: : Yes")
|
|
else()
|
|
message(STATUS "Use std:: : No")
|
|
endif()
|
|
|
|
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()
|