fltk/CMake/fl_debug_var.cmake
Albrecht Schlosser fd5cd80935 Introduce "Modern CMake" in FLTK
This is a big commit and there are too many changes to list them all.
The main changes are:

- rename all CMake build options to 'FLTK_*'
- export library targets with namespace (prefix) 'fltk::'
- standardize shared library target names with suffix '-shared'
- set public build properties on libraries for consumers
- document library names and aliases in README.CMake.txt
- document changes in "Migrating Code from FLTK 1.3 to 1.4"
- partial backwards compatibility for old user projects

Included but not directly related changes:

- fix Windows (Visual Studio) DLL build
- add CMake function fl_debug_target() to show target properties
- don't build test programs if FLTK is a subproject
- internal: reformat CMake code: remove space before '('

Thanks to Matthias and Manolo for their help, testing, and feeback.
2024-02-07 18:37:34 +01:00

116 lines
3.5 KiB
CMake

#
# Function used by the CMake build system for the Fast Light Tool Kit (FLTK).
#
# 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
#
#######################################################################
# fl_expand_name - a function to expand a variable name with spaces
#######################################################################
#
# This function returns a string comprising of the given name and
# enough spaces to have at least the given minimal length (min_len).
# Currently min_len must not be greater than 50.
#
# If the string is already at least min_len it is not changed,
# otherwise the string is returned to the given variable (out)
# in the parent scope.
#
# Syntax:
# fl_expand_name (out in min_len)
#
# Example:
# fl_expand_name (var WIN32 30)
# fl_expand_name (var UNIX 40)
#
#######################################################################
function (fl_expand_name out in min_len)
string(LENGTH "${in}" len)
if(len LESS min_len)
set(spaces " ")
set(temp "${in}")
set(temp "${in}${spaces}${spaces}")
string(SUBSTRING "${temp}" 0 ${min_len} temp)
set(${out} "${temp}" PARENT_SCOPE)
endif()
endfunction (fl_expand_name)
#######################################################################
# fl_debug_var - a function to output debugging info
#######################################################################
#
# This function displays the name and value of a CMake variable.
# The variable name is expanded with spaces to be (at least)
# <min_len> (currently 30) characters wide for better readability.
# VARNAME must be a string literal, e.g. WIN32 or "WIN32".
#
# Syntax:
# fl_debug_var(VARNAME)
#
# Example:
# fl_debug_var(WIN32)
# fl_debug_var("UNIX")
#
#######################################################################
function (fl_debug_var name)
set(var "${name}")
fl_expand_name(var "${name}" 40)
message(STATUS "${var} = '${${name}}'")
endfunction (fl_debug_var)
#######################################################################
# fl_debug_target - a function to output info about a target
#######################################################################
#
# This function displays properties of a CMake target.
#
# Currently there's a fixed number of properties.
#
# Syntax:
# fl_debug_target(target)
#
# Example:
# fl_debug_target(fltk)
# fl_debug_target(fluid)
# fl_debug_target(fltk_image)
# fl_debug_target(fltk::forms)
#
#######################################################################
function (fl_debug_target name)
message(STATUS "+++ fl_debug_target (${name})")
set(var "${name}")
fl_expand_name(var "${name}" 40)
if(TARGET ${name})
message(STATUS "${var} = <target>")
foreach(prop
ALIASED_TARGET
INTERFACE_INCLUDE_DIRECTORIES
INTERFACE_LINK_DIRECTORIES
INTERFACE_LINK_LIBRARIES)
get_target_property (${prop} ${name} ${prop})
if(NOT ${prop})
set(${prop} "")
endif()
fl_debug_var(${prop})
endforeach()
else()
message(STATUS "${var} = <not a target>")
endif()
message(STATUS "")
endfunction (fl_debug_target)