CMake: refactor and reformat CMake files

- raise minimum CMake version from 2.6.3 to 3.2.3 (Jun 01, 2015)
- indent all CMake files according to the CMP (2 col.)
- refactor FLTK version number definitions and usage
- unify CMake and autoconf/configure variable names:
  - FL_VERSION -> FLTK_VERSION
  - FL_MAJOR_VERSION -> FLTK_VERSION_MAJOR
  - etc. for _MINOR_ and _PATCH_, respectively
  - note: this does not affect FL_VERSION etc. in source code
- generate "export headers" for all libraries (experimental: OFF)
- port some forgotten goodies from branch-1.3 to master
- merge and improve macro 'create_example' (WIP)
- remove "temporary" options and code for older CMake versions
- include and use 'GenerateExportHeader' (experimental, WIP: OFF)
  - note: created header files are not yet used
- build only *one* DLL with Visual Studio (tested, works)
  - similar to the bundled IDE projects in 1.3.x
- add some dynamically linked test/demo programs ('*-shared')
  if shared libraries are built (WIP)
- split 'macros.cmake': use one file per macro
This commit is contained in:
Albrecht Schlosser 2020-06-13 15:19:27 +02:00
parent 5442503077
commit 720b84ef9d
26 changed files with 1490 additions and 1222 deletions

View File

@ -0,0 +1,55 @@
#
# FLTK-Functions.cmake
# 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
#
#######################################################################
# functions used by the build system and exported for the end-user
#######################################################################
# USAGE: FLTK_RUN_FLUID TARGET_NAME "FLUID_SOURCE [.. FLUID_SOURCE]"
function (FLTK_RUN_FLUID TARGET SOURCES)
set (CXX_FILES)
foreach (src ${SOURCES})
if ("${src}" MATCHES "\\.fl$")
string(REGEX REPLACE "(.*).fl" \\1 basename ${src})
add_custom_command(
OUTPUT "${basename}.cxx" "${basename}.h"
COMMAND fluid -c ${CMAKE_CURRENT_SOURCE_DIR}/${src}
DEPENDS ${src}
MAIN_DEPENDENCY ${src}
)
list (APPEND CXX_FILES "${basename}.cxx")
endif ("${src}" MATCHES "\\.fl$")
set (${TARGET} ${CXX_FILES} PARENT_SCOPE)
endforeach ()
endfunction (FLTK_RUN_FLUID TARGET SOURCES)
#######################################################################
# sets the bundle icon for OSX bundles
function (FLTK_SET_BUNDLE_ICON TARGET ICON_PATH)
get_filename_component (ICON_NAME "${ICON_PATH}" NAME)
set_target_properties ("${TARGET}" PROPERTIES
MACOSX_BUNDLE_ICON_FILE "${ICON_NAME}"
RESOURCE "${ICON_PATH}"
)
endfunction (FLTK_SET_BUNDLE_ICON TARGET ICON_PATH)
#
# End of file
#

View File

@ -2,7 +2,7 @@
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2018 by Bill Spitzak and others.
# 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
@ -18,104 +18,112 @@
#######################################################################
# final config and export
#######################################################################
# Set the fluid executable path
if(CMAKE_CROSSCOMPILING)
find_file(FLUID_PATH
NAMES fluid fluid.exe
PATHS ENV PATH
NO_CMAKE_FIND_ROOT_PATH
)
add_executable(fluid IMPORTED)
set(FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
set(FLUID) # no export
set_target_properties(fluid
PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
)
else()
add_subdirectory(fluid)
set(FLTK_FLUID_EXECUTABLE fluid)
set(FLUID fluid) # export
endif(CMAKE_CROSSCOMPILING)
if (CMAKE_CROSSCOMPILING)
find_file(FLUID_PATH
NAMES fluid fluid.exe
PATHS ENV PATH
NO_CMAKE_FIND_ROOT_PATH
)
add_executable(fluid IMPORTED)
set (FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
set (FLUID) # no export
set_target_properties(fluid
PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
)
else ()
add_subdirectory(fluid)
set (FLTK_FLUID_EXECUTABLE fluid)
set (FLUID fluid) # export
endif (CMAKE_CROSSCOMPILING)
add_subdirectory(src)
# generate FLTK-Targets.cmake for build directory use
export(TARGETS ${FLUID} ${FLTK_LIBRARIES} FILE ${CMAKE_CURRENT_BINARY_DIR}/FLTK-Targets.cmake)
# generate FLTK-Functions.cmake for build directory use
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/CMake/FLTK-Functions.cmake
${CMAKE_CURRENT_BINARY_DIR}/FLTK-Functions.cmake
COPYONLY
)
# generate FLTKConfig.cmake for build directory use
set(INCLUDE_DIRS "${FLTK_INCLUDE_DIRS}")
set(CONFIG_PATH ${CMAKE_CURRENT_BINARY_DIR})
set (INCLUDE_DIRS "${FLTK_INCLUDE_DIRS}")
set (CONFIG_PATH ${CMAKE_CURRENT_BINARY_DIR})
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/FLTKConfig.cmake
@ONLY
${CMAKE_CURRENT_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/FLTKConfig.cmake
@ONLY
)
# generate UseFLTK.cmake for build directory use
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/CMake/UseFLTK.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/UseFLTK.cmake
@ONLY
${CMAKE_CURRENT_SOURCE_DIR}/CMake/UseFLTK.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/UseFLTK.cmake
@ONLY
)
# generate fltk-config for build directory use
set(prefix ${CMAKE_CURRENT_BINARY_DIR})
set(exec_prefix "\${prefix}")
set(includedir "${CMAKE_CURRENT_SOURCE_DIR}")
set(BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
set(libdir "\${exec_prefix}/lib")
set(srcdir ".")
set (prefix ${CMAKE_CURRENT_BINARY_DIR})
set (exec_prefix "\${prefix}")
set (includedir "${CMAKE_CURRENT_SOURCE_DIR}")
set (BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
set (libdir "\${exec_prefix}/lib")
set (srcdir ".")
set(LIBNAME "${libdir}/libfltk.a")
set (LIBNAME "${libdir}/libfltk.a")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/fltk-config.in"
"${CMAKE_CURRENT_BINARY_DIR}/fltk-config"
@ONLY
"${CMAKE_CURRENT_SOURCE_DIR}/fltk-config.in"
"${CMAKE_CURRENT_BINARY_DIR}/fltk-config"
@ONLY
)
if (UNIX)
execute_process(COMMAND chmod 755 fltk-config
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)
endif (UNIX)
# prepare some variables for config.h
if(IS_ABSOLUTE "${FLTK_DATADIR}")
set(PREFIX_DATA "${FLTK_DATADIR}/fltk")
else(IS_ABSOLUTE "${FLTK_DATADIR}")
set(PREFIX_DATA "${CMAKE_INSTALL_PREFIX}/${FLTK_DATADIR}/fltk")
endif(IS_ABSOLUTE "${FLTK_DATADIR}")
if (IS_ABSOLUTE "${FLTK_DATADIR}")
set (PREFIX_DATA "${FLTK_DATADIR}/fltk")
else (IS_ABSOLUTE "${FLTK_DATADIR}")
set (PREFIX_DATA "${CMAKE_INSTALL_PREFIX}/${FLTK_DATADIR}/fltk")
endif (IS_ABSOLUTE "${FLTK_DATADIR}")
if(IS_ABSOLUTE "${FLTK_DOCDIR}")
set(PREFIX_DOC "${FLTK_DOCDIR}/fltk")
else(IS_ABSOLUTE "${FLTK_DOCDIR}")
set(PREFIX_DOC "${CMAKE_INSTALL_PREFIX}/${FLTK_DOCDIR}/fltk")
endif(IS_ABSOLUTE "${FLTK_DOCDIR}")
if (IS_ABSOLUTE "${FLTK_DOCDIR}")
set (PREFIX_DOC "${FLTK_DOCDIR}/fltk")
else (IS_ABSOLUTE "${FLTK_DOCDIR}")
set (PREFIX_DOC "${CMAKE_INSTALL_PREFIX}/${FLTK_DOCDIR}/fltk")
endif (IS_ABSOLUTE "${FLTK_DOCDIR}")
set(CONFIG_H_IN configh.cmake.in)
set(CONFIG_H config.h)
set (CONFIG_H_IN configh.cmake.in)
set (CONFIG_H config.h)
# generate config.h
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_H_IN}"
"${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_H}"
@ONLY
"${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_H_IN}"
"${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_H}"
@ONLY
)
if(OPTION_CREATE_LINKS)
# Set PREFIX_INCLUDE to the proper value.
if(IS_ABSOLUTE ${FLTK_INCLUDEDIR})
set(PREFIX_INCLUDE ${FLTK_INCLUDEDIR})
else()
set(PREFIX_INCLUDE "${CMAKE_INSTALL_PREFIX}/${FLTK_INCLUDEDIR}")
endif(IS_ABSOLUTE ${FLTK_INCLUDEDIR})
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/install-symlinks.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/install-symlinks.cmake"
@ONLY
)
endif(OPTION_CREATE_LINKS)
if (OPTION_CREATE_LINKS)
# Set PREFIX_INCLUDE to the proper value.
if (IS_ABSOLUTE ${FLTK_INCLUDEDIR})
set (PREFIX_INCLUDE ${FLTK_INCLUDEDIR})
else ()
set (PREFIX_INCLUDE "${CMAKE_INSTALL_PREFIX}/${FLTK_INCLUDEDIR}")
endif (IS_ABSOLUTE ${FLTK_INCLUDEDIR})
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/install-symlinks.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/install-symlinks.cmake"
@ONLY
)
endif (OPTION_CREATE_LINKS)

123
CMake/fl_add_library.cmake Normal file
View File

@ -0,0 +1,123 @@
#
# 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
#
#######################################################################
# FL_ADD_LIBRARY - add a static or shared library to the build
#######################################################################
macro (FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
if (${LIBTYPE} STREQUAL "SHARED")
set (TARGET_NAME ${LIBNAME}_SHARED)
else ()
set (TARGET_NAME ${LIBNAME})
endif (${LIBTYPE} STREQUAL "SHARED")
if (MSVC)
set (OUTPUT_NAME_DEBUG "${LIBNAME}d")
set (OUTPUT_NAME_RELEASE "${LIBNAME}")
else ()
set (OUTPUT_NAME_DEBUG "${LIBNAME}")
set (OUTPUT_NAME_RELEASE "${LIBNAME}")
endif (MSVC)
add_library(${TARGET_NAME} ${LIBTYPE} ${LIBFILES})
# target properties for all libraries
set_target_properties(${TARGET_NAME}
PROPERTIES
CLEAN_DIRECT_OUTPUT TRUE
COMPILE_DEFINITIONS "FL_LIBRARY"
)
# additional target properties for static libraries
if (${LIBTYPE} STREQUAL "STATIC")
set_target_properties(${TARGET_NAME}
PROPERTIES
OUTPUT_NAME ${LIBNAME}
OUTPUT_NAME_DEBUG ${OUTPUT_NAME_DEBUG}
OUTPUT_NAME_RELEASE ${OUTPUT_NAME_RELEASE}
)
endif (${LIBTYPE} STREQUAL "STATIC")
# additional target properties for shared (dynamic) libraries (DLL's)
if (${LIBTYPE} STREQUAL "SHARED")
set_target_properties(${TARGET_NAME}
PROPERTIES
VERSION ${FLTK_VERSION}
SOVERSION ${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}
OUTPUT_NAME ${LIBNAME}
OUTPUT_NAME_DEBUG ${OUTPUT_NAME_DEBUG}
OUTPUT_NAME_RELEASE ${OUTPUT_NAME_RELEASE}
)
# MSVC only:
if (MSVC)
set_target_properties(${TARGET_NAME}
PROPERTIES
OUTPUT_NAME lib${LIBNAME}
OUTPUT_NAME_DEBUG lib${OUTPUT_NAME_DEBUG}
OUTPUT_NAME_RELEASE lib${OUTPUT_NAME_RELEASE}
# PREFIX "lib" # for MSVC static/shared coexistence *DOES NOT WORK*
)
endif (MSVC)
endif (${LIBTYPE} STREQUAL "SHARED")
# Debug library output names (optional)
set (DEBUG_ONAME 0)
if (DEBUG_ONAME)
get_target_property (XX_ONAME ${TARGET_NAME} OUTPUT_NAME)
get_target_property (XX_ONAME_DEBUG ${TARGET_NAME} OUTPUT_NAME_DEBUG)
get_target_property (XX_ONAME_RELEASE ${TARGET_NAME} OUTPUT_NAME_RELEASE)
fl_debug_var (TARGET_NAME)
fl_debug_var (XX_ONAME)
fl_debug_var (XX_ONAME_DEBUG)
fl_debug_var (XX_ONAME_RELEASE)
message (STATUS "---")
endif (DEBUG_ONAME)
if (MSVC)
if (OPTION_LARGE_FILE)
set_target_properties(${TARGET_NAME}
PROPERTIES
LINK_FLAGS /LARGEADDRESSAWARE
)
endif (OPTION_LARGE_FILE)
if (${LIBTYPE} STREQUAL "SHARED")
set_target_properties(${TARGET_NAME}
PROPERTIES
COMPILE_DEFINITIONS "FL_DLL"
)
endif (${LIBTYPE} STREQUAL "SHARED")
endif (MSVC)
install (TARGETS ${TARGET_NAME}
EXPORT FLTK-Targets
RUNTIME DESTINATION ${FLTK_BINDIR}
LIBRARY DESTINATION ${FLTK_LIBDIR}
ARCHIVE DESTINATION ${FLTK_LIBDIR}
)
list (APPEND FLTK_LIBRARIES "${TARGET_NAME}")
set (FLTK_LIBRARIES ${FLTK_LIBRARIES} PARENT_SCOPE)
endmacro (FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)

View File

@ -0,0 +1,145 @@
#
# 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)

47
CMake/fl_debug_var.cmake Normal file
View File

@ -0,0 +1,47 @@
#
# 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
#
#######################################################################
# fl_debug_var - a macro to output debugging info
#######################################################################
#
# This macro displays the name and value of a CMake variable.
# The variable name is expanded with spaces to be (at least)
# <min_len> (currently 24) 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")
#
#######################################################################
macro (fl_debug_var name)
set (min_len 24)
set (var "${name}")
string(LENGTH "${var}" len)
while (len LESS min_len)
# add one space until min_len is reached
# ** string(APPEND var " ") # requires CMake 3.4.x (otherwise loop...)
set (var "${var} ")
string(LENGTH "${var}" len)
endwhile (len LESS min_len)
message (STATUS "${var} = '${${name}}'")
endmacro (fl_debug_var)

View File

@ -2,7 +2,7 @@
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2018 by Bill Spitzak and others.
# 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
@ -25,92 +25,103 @@ configure_file(
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
@ONLY
)
add_custom_target(uninstall
add_custom_target (uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/FL
DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
PATTERN ".svn" EXCLUDE
install (DIRECTORY
${CMAKE_CURRENT_SOURCE_DIR}/FL
DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/FL
DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
install (DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}/FL
DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
)
if(OPTION_CREATE_LINKS)
install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/install-symlinks.cmake)
endif(OPTION_CREATE_LINKS)
if (OPTION_CREATE_LINKS)
install (SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/install-symlinks.cmake)
endif (OPTION_CREATE_LINKS)
# generate FLTKConfig.cmake for installed directory use
set(INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
set (INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
set(CONFIG_PATH ${CMAKE_INSTALL_PREFIX}/${FLTK_CONFIG_PATH})
set (CONFIG_PATH ${CMAKE_INSTALL_PREFIX}/${FLTK_CONFIG_PATH})
install(EXPORT FLTK-Targets
DESTINATION ${FLTK_CONFIG_PATH}
FILE FLTK-Targets.cmake
install (EXPORT FLTK-Targets
DESTINATION ${FLTK_CONFIG_PATH}
FILE FLTK-Targets.cmake
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/etc/FLTKConfig.cmake
@ONLY
${CMAKE_CURRENT_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/etc/FLTKConfig.cmake
@ONLY
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/etc/FLTKConfig.cmake
DESTINATION ${FLTK_CONFIG_PATH}
install (FILES
${CMAKE_CURRENT_BINARY_DIR}/etc/FLTKConfig.cmake
DESTINATION ${FLTK_CONFIG_PATH}
)
install (FILES
${CMAKE_CURRENT_SOURCE_DIR}/CMake/FLTK-Functions.cmake
DESTINATION ${FLTK_CONFIG_PATH}
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/CMake/UseFLTK.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/etc/UseFLTK.cmake
@ONLY
${CMAKE_CURRENT_SOURCE_DIR}/CMake/UseFLTK.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/etc/UseFLTK.cmake
@ONLY
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/etc/UseFLTK.cmake
DESTINATION ${FLTK_CONFIG_PATH}
# Deprecated: install UseFLTK.cmake with deprecation warnings only
install (FILES
${CMAKE_CURRENT_BINARY_DIR}/etc/UseFLTK.cmake
DESTINATION ${FLTK_CONFIG_PATH}
)
# generate fltk-config
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix "\${prefix}")
set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
set(BINARY_DIR)
set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
set(srcdir ".")
set (prefix ${CMAKE_INSTALL_PREFIX})
set (exec_prefix "\${prefix}")
set (includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
set (BINARY_DIR)
set (libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
set (srcdir ".")
set(LIBNAME "${libdir}/libfltk.a")
set (LIBNAME "${libdir}/libfltk.a")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/fltk-config.in"
"${CMAKE_CURRENT_BINARY_DIR}/bin/fltk-config"
@ONLY
)
if(UNIX)
execute_process(COMMAND chmod 755 fltk-config
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
)
endif(UNIX)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/bin/fltk-config
DESTINATION ${FLTK_BINDIR}
"${CMAKE_CURRENT_SOURCE_DIR}/fltk-config.in"
"${CMAKE_CURRENT_BINARY_DIR}/bin/fltk-config"
@ONLY
)
if(UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))
macro(INSTALL_MAN FILE LEVEL)
install(FILES
if (UNIX)
execute_process (COMMAND chmod 755 fltk-config
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
)
endif (UNIX)
install (PROGRAMS
${CMAKE_CURRENT_BINARY_DIR}/bin/fltk-config
DESTINATION ${FLTK_BINDIR}
)
if (UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))
macro(INSTALL_MAN FILE LEVEL)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/documentation/src/${FILE}.man
DESTINATION ${FLTK_MANDIR}/man${LEVEL}
RENAME ${FILE}.${LEVEL}
)
endmacro(INSTALL_MAN FILE LEVEL)
)
endmacro (INSTALL_MAN FILE LEVEL)
INSTALL_MAN(fluid 1)
INSTALL_MAN(fltk-config 1)
INSTALL_MAN(fltk 3)
INSTALL_MAN(blocks 6)
INSTALL_MAN(checkers 6)
INSTALL_MAN(sudoku 6)
INSTALL_MAN (fluid 1)
INSTALL_MAN (fltk-config 1)
INSTALL_MAN (fltk 3)
INSTALL_MAN (blocks 6)
INSTALL_MAN (checkers 6)
INSTALL_MAN (sudoku 6)
endif(UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))
endif (UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))

View File

@ -1,204 +0,0 @@
#
# Macros used by the CMake build system for the Fast Light Tool Kit (FLTK).
# Written by Michael Surette
#
# Copyright 1998-2018 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
#
#######################################################################
# macros used for debugging purposes
#######################################################################
# This macro displays the name and value of a CMake variable.
# The variable name is expanded with spaces to be (at least)
# <min_len> (currently 24) 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")
#
macro (fl_debug_var name)
set (min_len 24)
set (var "${name}")
string(LENGTH "${var}" len)
while (len LESS min_len)
# add one space until min_len is reached
# ** string(APPEND var " ") # requires CMake 3.4.x (otherwise loop...)
set (var "${var} ")
string(LENGTH "${var}" len)
endwhile (len LESS min_len)
message (STATUS "${var} = '${${name}}'")
endmacro (fl_debug_var)
#######################################################################
# macros used by the build system
#######################################################################
macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
if (${LIBTYPE} STREQUAL "SHARED")
set (TARGET_NAME ${LIBNAME}_SHARED)
else ()
set (TARGET_NAME ${LIBNAME})
endif (${LIBTYPE} STREQUAL "SHARED")
if (MSVC)
set (DEBUG_OUTPUT_NAME "${LIBNAME}d")
else ()
set (DEBUG_OUTPUT_NAME "${LIBNAME}")
endif (MSVC)
add_library(${TARGET_NAME} ${LIBTYPE} ${LIBFILES})
set_target_properties(${TARGET_NAME}
PROPERTIES
OUTPUT_NAME ${LIBNAME}
DEBUG_OUTPUT_NAME ${DEBUG_OUTPUT_NAME}
CLEAN_DIRECT_OUTPUT TRUE
COMPILE_DEFINITIONS "FL_LIBRARY"
)
if (${LIBTYPE} STREQUAL "SHARED")
set_target_properties(${TARGET_NAME}
PROPERTIES
OUTPUT_NAME ${LIBNAME}
DEBUG_OUTPUT_NAME ${DEBUG_OUTPUT_NAME}
VERSION ${FLTK_VERSION_FULL}
SOVERSION ${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}
PREFIX "lib" # for MSVC static/shared coexistence
)
endif (${LIBTYPE} STREQUAL "SHARED")
if (MSVC)
if (OPTION_LARGE_FILE)
set_target_properties(${TARGET_NAME}
PROPERTIES
LINK_FLAGS /LARGEADDRESSAWARE
)
endif (OPTION_LARGE_FILE)
if (${LIBTYPE} STREQUAL "SHARED")
set_target_properties(${TARGET_NAME}
PROPERTIES
COMPILE_DEFINITIONS "FL_DLL"
)
endif (${LIBTYPE} STREQUAL "SHARED")
endif (MSVC)
install(TARGETS ${TARGET_NAME}
EXPORT FLTK-Targets
RUNTIME DESTINATION ${FLTK_BINDIR}
LIBRARY DESTINATION ${FLTK_LIBDIR}
ARCHIVE DESTINATION ${FLTK_LIBDIR}
)
list(APPEND FLTK_LIBRARIES "${TARGET_NAME}")
set (FLTK_LIBRARIES ${FLTK_LIBRARIES} PARENT_SCOPE)
endmacro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
#######################################################################
# USAGE: FLTK_RUN_FLUID TARGET_NAME "FLUID_SOURCE [.. FLUID_SOURCE]"
function(FLTK_RUN_FLUID TARGET SOURCES)
set (CXX_FILES)
foreach(src ${SOURCES})
if ("${src}" MATCHES "\\.fl$")
string(REGEX REPLACE "(.*).fl" \\1 basename ${src})
add_custom_command(
OUTPUT "${basename}.cxx" "${basename}.h"
COMMAND fluid -c ${CMAKE_CURRENT_SOURCE_DIR}/${src}
DEPENDS ${src}
MAIN_DEPENDENCY ${src}
)
list(APPEND CXX_FILES "${basename}.cxx")
endif ("${src}" MATCHES "\\.fl$")
set (${TARGET} ${CXX_FILES} PARENT_SCOPE)
endforeach(src)
endfunction(FLTK_RUN_FLUID TARGET SOURCES)
#######################################################################
macro(CREATE_EXAMPLE NAME SOURCES LIBRARIES)
set (srcs) # source files
set (flsrcs) # fluid source files
set (tname ${NAME}) # target name
set (oname ${NAME}) # output (executable) name
foreach(src ${SOURCES})
if ("${src}" MATCHES "\\.fl$")
list(APPEND flsrcs ${src})
else ()
list(APPEND srcs ${src})
endif ("${src}" MATCHES "\\.fl$")
endforeach(src)
set (FLUID_SOURCES)
if (flsrcs)
FLTK_RUN_FLUID(FLUID_SOURCES "${flsrcs}")
endif (flsrcs)
if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
unset (RESOURCE_PATH)
if (${tname} STREQUAL "blocks" OR ${tname} STREQUAL "checkers" OR ${tname} STREQUAL "sudoku")
set (ICON_NAME ${tname}.icns)
set (RESOURCE_PATH "${PROJECT_SOURCE_DIR}/test/${tname}.app/Contents/Resources/${ICON_NAME}")
elseif (${tname} STREQUAL "demo")
set (RESOURCE_PATH "${PROJECT_SOURCE_DIR}/test/demo.menu")
endif (${tname} STREQUAL "blocks" OR ${tname} STREQUAL "checkers" OR ${tname} STREQUAL "sudoku")
if (DEFINED RESOURCE_PATH)
add_executable(${tname} MACOSX_BUNDLE ${srcs} ${FLUID_SOURCES} ${RESOURCE_PATH})
if (${tname} STREQUAL "demo")
target_compile_definitions(demo PUBLIC USING_XCODE)
endif (${tname} STREQUAL "demo")
else ()
add_executable(${tname} MACOSX_BUNDLE ${srcs} ${FLUID_SOURCES})
endif (DEFINED RESOURCE_PATH)
else ()
add_executable(${tname} WIN32 ${srcs} ${FLUID_SOURCES})
endif (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
set_target_properties(${tname}
PROPERTIES OUTPUT_NAME ${oname}
)
if (APPLE AND DEFINED RESOURCE_PATH)
if (NOT ${tname} STREQUAL "demo")
set_target_properties(${tname} PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
endif (NOT ${tname} STREQUAL "demo")
set_target_properties(${tname} PROPERTIES RESOURCE ${RESOURCE_PATH})
endif (APPLE AND DEFINED RESOURCE_PATH)
if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL) AND ${tname} STREQUAL "editor")
set_target_properties("editor" PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/test/editor-Info.plist" )
endif(APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL) AND ${tname} STREQUAL "editor")
target_link_libraries(${tname} ${LIBRARIES})
# 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 Androids
# builds in addition to the native build
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)
#######################################################################

View File

@ -22,50 +22,34 @@ if (DEBUG_OPTIONS_CMAKE)
fl_debug_var (FLTK_LDLIBS)
endif (DEBUG_OPTIONS_CMAKE)
#######################################################################
# *Temporary* option to modify header file searches
#######################################################################
# Note: The old, deprecated behavior (ON) was to use find_file() for
# header searches, the new behavior (ON) is to use check_include_files()
# which seems to be more reliable but more difficult to set up and
# slower because it uses a compilation test. Default is "new" (OFF).
# This option should be removed as soon as the new search strategy
# is considered stable.
# Currently used only in resources.cmake.
#######################################################################
option(USE_FIND_FILE
"Deprecated: use find_file() for header searches. Should be OFF."
OFF
)
mark_as_advanced(USE_FIND_FILE)
#######################################################################
# options
#######################################################################
set(OPTION_OPTIM ""
CACHE STRING
"custom optimization flags"
)
add_definitions(${OPTION_OPTIM})
set (OPTION_OPTIM ""
CACHE STRING
"custom optimization flags"
)
add_definitions (${OPTION_OPTIM})
#######################################################################
set(OPTION_ARCHFLAGS ""
CACHE STRING
"custom architecture flags"
)
add_definitions(${OPTION_ARCHFLAGS})
set (OPTION_ARCHFLAGS ""
CACHE STRING
"custom architecture flags"
)
add_definitions (${OPTION_ARCHFLAGS})
#######################################################################
set(OPTION_ABI_VERSION ""
CACHE STRING
"FLTK ABI Version FL_ABI_VERSION: 1xxyy for 1.x.y (xx,yy with leading zero)"
)
set(FL_ABI_VERSION ${OPTION_ABI_VERSION})
set (OPTION_ABI_VERSION ""
CACHE STRING
"FLTK ABI Version FL_ABI_VERSION: 1xxyy for 1.x.y (xx,yy with leading zero)"
)
set (FL_ABI_VERSION ${OPTION_ABI_VERSION})
#######################################################################
#######################################################################
if (UNIX)
option(OPTION_CREATE_LINKS "create backwards compatibility links" OFF)
option (OPTION_CREATE_LINKS "create backwards compatibility links" OFF)
list (APPEND FLTK_LDLIBS -lm)
endif (UNIX)
#######################################################################
@ -107,105 +91,105 @@ if (OPTION_APPLE_SDL)
endif (OPTION_APPLE_SDL)
#######################################################################
option(OPTION_USE_POLL "use poll if available" OFF)
mark_as_advanced(OPTION_USE_POLL)
option (OPTION_USE_POLL "use poll if available" OFF)
mark_as_advanced (OPTION_USE_POLL)
if(OPTION_USE_POLL)
CHECK_FUNCTION_EXISTS(poll USE_POLL)
endif(OPTION_USE_POLL)
if (OPTION_USE_POLL)
CHECK_FUNCTION_EXISTS(poll USE_POLL)
endif (OPTION_USE_POLL)
#######################################################################
option(OPTION_BUILD_SHARED_LIBS
"Build shared libraries(in addition to static libraries)"
OFF
)
option (OPTION_BUILD_SHARED_LIBS
"Build shared libraries(in addition to static libraries)"
OFF
)
#######################################################################
option(OPTION_BUILD_EXAMPLES "build example programs" ON)
option(OPTION_PRINT_SUPPORT "allow print support" ON)
option(OPTION_FILESYSTEM_SUPPORT "allow file system support" ON)
option (OPTION_BUILD_EXAMPLES "build example programs" ON)
option (OPTION_PRINT_SUPPORT "allow print support" ON)
option (OPTION_FILESYSTEM_SUPPORT "allow file system support" ON)
#######################################################################
if (DOXYGEN_FOUND)
option(OPTION_BUILD_HTML_DOCUMENTATION "build html docs" ON)
option(OPTION_INSTALL_HTML_DOCUMENTATION "install html docs" OFF)
option (OPTION_BUILD_HTML_DOCUMENTATION "build html docs" ON)
option (OPTION_INSTALL_HTML_DOCUMENTATION "install html docs" OFF)
option(OPTION_INCLUDE_DRIVER_DOCUMENTATION "include driver (developer) docs" OFF)
mark_as_advanced(OPTION_INCLUDE_DRIVER_DOCUMENTATION)
option (OPTION_INCLUDE_DRIVER_DOCUMENTATION "include driver (developer) docs" OFF)
mark_as_advanced (OPTION_INCLUDE_DRIVER_DOCUMENTATION)
if (LATEX_FOUND)
option(OPTION_BUILD_PDF_DOCUMENTATION "build pdf docs" ON)
option(OPTION_INSTALL_PDF_DOCUMENTATION "install pdf docs" OFF)
endif (LATEX_FOUND)
if (LATEX_FOUND)
option (OPTION_BUILD_PDF_DOCUMENTATION "build pdf docs" ON)
option (OPTION_INSTALL_PDF_DOCUMENTATION "install pdf docs" OFF)
endif (LATEX_FOUND)
endif (DOXYGEN_FOUND)
if(OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
add_subdirectory(documentation)
endif(OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
if (OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
add_subdirectory (documentation)
endif (OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
#######################################################################
include(FindPkgConfig)
include (FindPkgConfig)
option(OPTION_CAIRO "use lib Cairo" OFF)
option(OPTION_CAIROEXT
"use FLTK code instrumentation for Cairo extended use" OFF
)
option (OPTION_CAIRO "use lib Cairo" OFF)
option (OPTION_CAIROEXT
"use FLTK code instrumentation for Cairo extended use" OFF
)
if ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
pkg_search_module(PKG_CAIRO cairo)
pkg_search_module (PKG_CAIRO cairo)
endif ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
if (PKG_CAIRO_FOUND)
set (FLTK_HAVE_CAIRO 1)
add_subdirectory(cairo)
list(APPEND FLTK_LDLIBS -lcairo -lpixman-1)
include_directories(${PKG_CAIRO_INCLUDE_DIRS})
string(REPLACE ";" " " CAIROFLAGS "${PKG_CAIRO_CFLAGS}")
set (FLTK_HAVE_CAIRO 1)
add_subdirectory (cairo)
list (APPEND FLTK_LDLIBS -lcairo -lpixman-1)
include_directories (${PKG_CAIRO_INCLUDE_DIRS})
string (REPLACE ";" " " CAIROFLAGS "${PKG_CAIRO_CFLAGS}")
if (LIB_CAIRO AND OPTION_CAIROEXT)
set(FLTK_USE_CAIRO 1)
set(FLTK_CAIRO_FOUND TRUE)
else ()
set(FLTK_CAIRO_FOUND FALSE)
endif (LIB_CAIRO AND OPTION_CAIROEXT)
if (LIB_CAIRO AND OPTION_CAIROEXT)
set (FLTK_USE_CAIRO 1)
set (FLTK_CAIRO_FOUND TRUE)
else ()
set (FLTK_CAIRO_FOUND FALSE)
endif (LIB_CAIRO AND OPTION_CAIROEXT)
else ()
if (OPTION_CAIRO OR OPTION_CAIROEXT)
message(STATUS "*** Cairo was requested but not found - please check your cairo installation")
message(STATUS "*** or disable options OPTION_CAIRO and OPTION_CAIRO_EXT.")
message(FATAL_ERROR "*** Terminating: missing Cairo libs or headers.")
endif (OPTION_CAIRO OR OPTION_CAIROEXT)
if (OPTION_CAIRO OR OPTION_CAIROEXT)
message (STATUS "*** Cairo was requested but not found - please check your cairo installation")
message (STATUS "*** or disable options OPTION_CAIRO and OPTION_CAIRO_EXT.")
message (FATAL_ERROR "*** Terminating: missing Cairo libs or headers.")
endif (OPTION_CAIRO OR OPTION_CAIROEXT)
endif (PKG_CAIRO_FOUND)
#######################################################################
option(OPTION_USE_SVG "read/write SVG files" ON)
option (OPTION_USE_SVG "read/write SVG files" ON)
if(OPTION_USE_SVG)
set(FLTK_USE_SVG 1)
endif(OPTION_USE_SVG)
if (OPTION_USE_SVG)
set (FLTK_USE_SVG 1)
endif (OPTION_USE_SVG)
#######################################################################
set(HAVE_GL LIB_GL OR LIB_MesaGL)
set (HAVE_GL LIB_GL OR LIB_MesaGL)
if(HAVE_GL)
option(OPTION_USE_GL "use OpenGL" ON)
endif(HAVE_GL)
if (HAVE_GL)
option (OPTION_USE_GL "use OpenGL" ON)
endif (HAVE_GL)
if(OPTION_USE_GL)
if(OPTION_APPLE_X11)
set(OPENGL_FOUND TRUE)
set(OPENGL_LIBRARIES -L${PATH_TO_XLIBS} -lGLU -lGL)
set(HAVE_GL_GLU_H /opt/X11/include/GL/glu.h)
elseif(OPTION_APPLE_SDL)
set(OPENGL_FOUND FALSE)
else()
include(FindOpenGL)
if(APPLE)
set(HAVE_GL_GLU_H ${HAVE_OPENGL_GLU_H})
endif(APPLE)
endif(OPTION_APPLE_X11)
if (OPTION_USE_GL)
if (OPTION_APPLE_X11)
set (OPENGL_FOUND TRUE)
set (OPENGL_LIBRARIES -L${PATH_TO_XLIBS} -lGLU -lGL)
find_file (HAVE_GL_GLU_H GL/glu.h PATHS /opt/X11/include)
elseif (OPTION_APPLE_SDL)
set (OPENGL_FOUND FALSE)
else()
include (FindOpenGL)
if (APPLE)
set (HAVE_GL_GLU_H ${HAVE_OPENGL_GLU_H})
endif (APPLE)
endif (OPTION_APPLE_X11)
else ()
set(OPENGL_FOUND FALSE)
endif(OPTION_USE_GL)
set (OPENGL_FOUND FALSE)
endif (OPTION_USE_GL)
if (OPENGL_FOUND)
set (CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}/GL)
@ -256,44 +240,44 @@ endif (OPTION_LARGE_FILE)
# before this file is included (or set to 0 for WIN32).
if (WIN32 AND NOT CYGWIN)
# set(HAVE_PTHREAD_H 0) # (see resources.cmake)
set(OPTION_USE_THREADS FALSE)
# set (HAVE_PTHREAD_H 0) # (see resources.cmake)
set (OPTION_USE_THREADS FALSE)
else ()
option(OPTION_USE_THREADS "use multi-threading with pthreads" ON)
option (OPTION_USE_THREADS "use multi-threading with pthreads" ON)
endif (WIN32 AND NOT CYGWIN)
# initialize more variables
set(USE_THREADS 0)
set(HAVE_PTHREAD 0)
set(FLTK_PTHREADS_FOUND FALSE)
set (USE_THREADS 0)
set (HAVE_PTHREAD 0)
set (FLTK_PTHREADS_FOUND FALSE)
if (OPTION_USE_THREADS)
include(FindThreads)
include (FindThreads)
if (CMAKE_HAVE_THREADS_LIBRARY)
add_definitions("-D_THREAD_SAFE -D_REENTRANT")
set(USE_THREADS 1)
set(FLTK_THREADS_FOUND TRUE)
add_definitions ("-D_THREAD_SAFE -D_REENTRANT")
set (USE_THREADS 1)
set (FLTK_THREADS_FOUND TRUE)
endif (CMAKE_HAVE_THREADS_LIBRARY)
if (CMAKE_USE_PTHREADS_INIT AND NOT WIN32)
set(HAVE_PTHREAD 1)
set (HAVE_PTHREAD 1)
if (NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
endif (NOT APPLE)
list(APPEND FLTK_LDLIBS -lpthread)
list(APPEND FLTK_CFLAGS -D_THREAD_SAFE -D_REENTRANT)
set(FLTK_PTHREADS_FOUND TRUE)
list (APPEND FLTK_LDLIBS -lpthread)
list (APPEND FLTK_CFLAGS -D_THREAD_SAFE -D_REENTRANT)
set (FLTK_PTHREADS_FOUND TRUE)
else()
set(HAVE_PTHREAD 0)
set(HAVE_PTHREAD_H 0)
set(FLTK_PTHREADS_FOUND FALSE)
endif(CMAKE_USE_PTHREADS_INIT AND NOT WIN32)
set (HAVE_PTHREAD 0)
set (HAVE_PTHREAD_H 0)
set (FLTK_PTHREADS_FOUND FALSE)
endif (CMAKE_USE_PTHREADS_INIT AND NOT WIN32)
else (OPTION_USE_THREADS)
set(HAVE_PTHREAD_H 0)
set (HAVE_PTHREAD_H 0)
endif (OPTION_USE_THREADS)
@ -323,7 +307,7 @@ if (ZLIB_FOUND)
set (FLTK_BUILTIN_ZLIB_FOUND FALSE)
else()
if (OPTION_USE_SYSTEM_ZLIB)
message(STATUS "\ncannot find system zlib library - using built-in\n")
message (STATUS "\ncannot find system zlib library - using built-in\n")
endif (OPTION_USE_SYSTEM_ZLIB)
add_subdirectory (zlib)
@ -347,9 +331,9 @@ if (OPTION_USE_SYSTEM_LIBJPEG)
endif (OPTION_USE_SYSTEM_LIBJPEG)
if (JPEG_FOUND)
set(FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
include_directories(${JPEG_INCLUDE_DIR})
set(FLTK_BUILTIN_JPEG_FOUND FALSE)
set (FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
include_directories (${JPEG_INCLUDE_DIR})
set (FLTK_BUILTIN_JPEG_FOUND FALSE)
else ()
if (OPTION_USE_SYSTEM_LIBJPEG)
message (STATUS "\ncannot find system jpeg library - using built-in\n")
@ -396,101 +380,101 @@ endif (PNG_FOUND)
set (HAVE_LIBPNG 1)
#######################################################################
if(X11_Xinerama_FOUND)
option(OPTION_USE_XINERAMA "use lib Xinerama" ON)
endif(X11_Xinerama_FOUND)
if (X11_Xinerama_FOUND)
option (OPTION_USE_XINERAMA "use lib Xinerama" ON)
endif (X11_Xinerama_FOUND)
if(OPTION_USE_XINERAMA)
set(HAVE_XINERAMA ${X11_Xinerama_FOUND})
include_directories(${X11_Xinerama_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXinerama)
set(FLTK_XINERAMA_FOUND TRUE)
if (OPTION_USE_XINERAMA)
set (HAVE_XINERAMA ${X11_Xinerama_FOUND})
include_directories (${X11_Xinerama_INCLUDE_PATH})
list (APPEND FLTK_LDLIBS -lXinerama)
set (FLTK_XINERAMA_FOUND TRUE)
else()
set(FLTK_XINERAMA_FOUND FALSE)
endif(OPTION_USE_XINERAMA)
set (FLTK_XINERAMA_FOUND FALSE)
endif (OPTION_USE_XINERAMA)
#######################################################################
if(X11_Xfixes_FOUND)
option(OPTION_USE_XFIXES "use lib Xfixes" ON)
endif(X11_Xfixes_FOUND)
if (X11_Xfixes_FOUND)
option (OPTION_USE_XFIXES "use lib Xfixes" ON)
endif (X11_Xfixes_FOUND)
if(OPTION_USE_XFIXES)
set(HAVE_XFIXES ${X11_Xfixes_FOUND})
include_directories(${X11_Xfixes_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXfixes)
set(FLTK_XFIXES_FOUND TRUE)
if (OPTION_USE_XFIXES)
set (HAVE_XFIXES ${X11_Xfixes_FOUND})
include_directories (${X11_Xfixes_INCLUDE_PATH})
list (APPEND FLTK_LDLIBS -lXfixes)
set (FLTK_XFIXES_FOUND TRUE)
else()
set(FLTK_XFIXES_FOUND FALSE)
endif(OPTION_USE_XFIXES)
set (FLTK_XFIXES_FOUND FALSE)
endif (OPTION_USE_XFIXES)
#######################################################################
if(X11_Xcursor_FOUND)
option(OPTION_USE_XCURSOR "use lib Xcursor" ON)
endif(X11_Xcursor_FOUND)
if (X11_Xcursor_FOUND)
option (OPTION_USE_XCURSOR "use lib Xcursor" ON)
endif (X11_Xcursor_FOUND)
if(OPTION_USE_XCURSOR)
set(HAVE_XCURSOR ${X11_Xcursor_FOUND})
include_directories(${X11_Xcursor_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXcursor)
set(FLTK_XCURSOR_FOUND TRUE)
if (OPTION_USE_XCURSOR)
set (HAVE_XCURSOR ${X11_Xcursor_FOUND})
include_directories (${X11_Xcursor_INCLUDE_PATH})
list (APPEND FLTK_LDLIBS -lXcursor)
set (FLTK_XCURSOR_FOUND TRUE)
else()
set(FLTK_XCURSOR_FOUND FALSE)
endif(OPTION_USE_XCURSOR)
set (FLTK_XCURSOR_FOUND FALSE)
endif (OPTION_USE_XCURSOR)
#######################################################################
if(X11_Xft_FOUND)
option(OPTION_USE_XFT "use lib Xft" ON)
option(OPTION_USE_PANGO "use lib Pango" OFF)
endif(X11_Xft_FOUND)
if (X11_Xft_FOUND)
option (OPTION_USE_XFT "use lib Xft" ON)
option (OPTION_USE_PANGO "use lib Pango" OFF)
endif (X11_Xft_FOUND)
# test option compatibility: Pango requires Xft
if (OPTION_USE_PANGO)
if (NOT X11_Xft_FOUND)
message(STATUS "Pango requires Xft but Xft library or headers could not be found.")
message(STATUS "Please install Xft development files and try again or disable OPTION_USE_PANGO.")
message(FATAL_ERROR "*** Aborting ***")
message (STATUS "Pango requires Xft but Xft library or headers could not be found.")
message (STATUS "Please install Xft development files and try again or disable OPTION_USE_PANGO.")
message (FATAL_ERROR "*** Aborting ***")
else ()
if (NOT OPTION_USE_XFT)
message(STATUS "Pango requires Xft but usage of Xft was disabled.")
message(STATUS "Please enable OPTION_USE_XFT and try again or disable OPTION_USE_PANGO.")
message(FATAL_ERROR "*** Aborting ***")
message (STATUS "Pango requires Xft but usage of Xft was disabled.")
message (STATUS "Please enable OPTION_USE_XFT and try again or disable OPTION_USE_PANGO.")
message (FATAL_ERROR "*** Aborting ***")
endif (NOT OPTION_USE_XFT)
endif (NOT X11_Xft_FOUND)
endif (OPTION_USE_PANGO)
#######################################################################
if(X11_Xft_FOUND AND OPTION_USE_PANGO)
if (X11_Xft_FOUND AND OPTION_USE_PANGO)
pkg_check_modules(PANGOXFT pangoxft)
# message(STATUS "PANGOXFT_FOUND=" ${PANGOXFT_FOUND})
if(PANGOXFT_FOUND)
include_directories(${PANGOXFT_INCLUDE_DIRS})
# message (STATUS "PANGOXFT_FOUND=" ${PANGOXFT_FOUND})
if (PANGOXFT_FOUND)
include_directories (${PANGOXFT_INCLUDE_DIRS})
find_library(HAVE_LIB_PANGO pango-1.0 ${CMAKE_LIBRARY_PATH})
find_library(HAVE_LIB_PANGOXFT pangoxft-1.0 ${CMAKE_LIBRARY_PATH})
set(USE_PANGO TRUE)
list(APPEND FLTK_LDLIBS -lpango-1.0 -lpangoxft-1.0 -lgobject-2.0)
set (USE_PANGO TRUE)
list (APPEND FLTK_LDLIBS -lpango-1.0 -lpangoxft-1.0 -lgobject-2.0)
else(PANGOXFT_FOUND)
#this covers Debian, Ubuntu, FreeBSD, NetBSD, Darwin
if(APPLE AND OPTION_APPLE_X11)
find_file(FINK_PREFIX NAMES /opt/sw /sw)
list(APPEND CMAKE_INCLUDE_PATH ${FINK_PREFIX}/include)
list(APPEND CMAKE_LIBRARY_PATH ${FINK_PREFIX}/lib)
endif(APPLE AND OPTION_APPLE_X11)
# this covers Debian, Ubuntu, FreeBSD, NetBSD, Darwin
if (APPLE AND OPTION_APPLE_X11)
find_file(FINK_PREFIX NAMES /opt/sw /sw)
list (APPEND CMAKE_INCLUDE_PATH ${FINK_PREFIX}/include)
list (APPEND CMAKE_LIBRARY_PATH ${FINK_PREFIX}/lib)
endif (APPLE AND OPTION_APPLE_X11)
find_file(HAVE_PANGO_H pango-1.0/pango/pango.h ${CMAKE_INCLUDE_PATH})
find_file(HAVE_PANGOXFT_H pango-1.0/pango/pangoxft.h ${CMAKE_INCLUDE_PATH})
if(HAVE_PANGO_H AND HAVE_PANGOXFT_H)
if (HAVE_PANGO_H AND HAVE_PANGOXFT_H)
find_library(HAVE_LIB_PANGO pango-1.0 ${CMAKE_LIBRARY_PATH})
find_library(HAVE_LIB_PANGOXFT pangoxft-1.0 ${CMAKE_LIBRARY_PATH})
if(APPLE)
set(HAVE_LIB_GOBJECT TRUE)
if (APPLE)
set (HAVE_LIB_GOBJECT TRUE)
else()
find_library(HAVE_LIB_GOBJECT gobject-2.0 ${CMAKE_LIBRARY_PATH})
endif(APPLE)
endif(HAVE_PANGO_H AND HAVE_PANGOXFT_H)
if(HAVE_LIB_PANGO AND HAVE_LIB_PANGOXFT AND HAVE_LIB_GOBJECT)
set(USE_PANGO TRUE)
# message(STATUS "USE_PANGO=" ${USE_PANGO})
endif (APPLE)
endif (HAVE_PANGO_H AND HAVE_PANGOXFT_H)
if (HAVE_LIB_PANGO AND HAVE_LIB_PANGOXFT AND HAVE_LIB_GOBJECT)
set (USE_PANGO TRUE)
# message (STATUS "USE_PANGO=" ${USE_PANGO})
# remove last 3 components of HAVE_PANGO_H and put in PANGO_H_PREFIX
get_filename_component(PANGO_H_PREFIX ${HAVE_PANGO_H} PATH)
get_filename_component(PANGO_H_PREFIX ${PANGO_H_PREFIX} PATH)
@ -499,84 +483,80 @@ if(X11_Xft_FOUND AND OPTION_USE_PANGO)
get_filename_component(PANGOLIB_DIR ${HAVE_LIB_PANGO} PATH)
# glib.h is usually in ${PANGO_H_PREFIX}/glib-2.0/ ...
find_path(GLIB_H_PATH glib.h ${PANGO_H_PREFIX}/glib-2.0)
if(NOT GLIB_H_PATH) # ... but not under NetBSD
if (NOT GLIB_H_PATH) # ... but not under NetBSD
find_path(GLIB_H_PATH glib.h ${PANGO_H_PREFIX}/glib/glib-2.0)
endif(NOT GLIB_H_PATH)
include_directories(${PANGO_H_PREFIX}/pango-1.0 ${GLIB_H_PATH} ${PANGOLIB_DIR}/glib-2.0/include)
list(APPEND FLTK_LDLIBS -lpango-1.0 -lpangoxft-1.0 -lgobject-2.0)
endif (NOT GLIB_H_PATH)
include_directories (${PANGO_H_PREFIX}/pango-1.0 ${GLIB_H_PATH} ${PANGOLIB_DIR}/glib-2.0/include)
list (APPEND FLTK_LDLIBS -lpango-1.0 -lpangoxft-1.0 -lgobject-2.0)
if (APPLE)
set(LDFLAGS "${LDFLAGS} -L${FINK_PREFIX}/lib")
set (LDFLAGS "${LDFLAGS} -L${FINK_PREFIX}/lib")
endif (APPLE)
endif(HAVE_LIB_PANGO AND HAVE_LIB_PANGOXFT AND HAVE_LIB_GOBJECT)
endif(PANGOXFT_FOUND)
endif(X11_Xft_FOUND AND OPTION_USE_PANGO)
endif (HAVE_LIB_PANGO AND HAVE_LIB_PANGOXFT AND HAVE_LIB_GOBJECT)
endif (PANGOXFT_FOUND)
endif (X11_Xft_FOUND AND OPTION_USE_PANGO)
if(OPTION_USE_XFT)
set(USE_XFT X11_Xft_FOUND)
list(APPEND FLTK_LDLIBS -lXft)
set(FLTK_XFT_FOUND TRUE)
if(APPLE AND OPTION_APPLE_X11)
find_library(LIB_fontconfig fontconfig "/opt/X11/lib")
endif(APPLE AND OPTION_APPLE_X11)
if (OPTION_USE_XFT)
set (USE_XFT X11_Xft_FOUND)
list (APPEND FLTK_LDLIBS -lXft)
set (FLTK_XFT_FOUND TRUE)
if (APPLE AND OPTION_APPLE_X11)
find_library(LIB_fontconfig fontconfig "/opt/X11/lib")
endif (APPLE AND OPTION_APPLE_X11)
else()
set(FLTK_XFT_FOUND FALSE)
endif(OPTION_USE_XFT)
set (FLTK_XFT_FOUND FALSE)
endif (OPTION_USE_XFT)
#######################################################################
if(X11_Xrender_FOUND)
option(OPTION_USE_XRENDER "use lib Xrender" ON)
endif(X11_Xrender_FOUND)
if (X11_Xrender_FOUND)
option (OPTION_USE_XRENDER "use lib Xrender" ON)
endif (X11_Xrender_FOUND)
if(OPTION_USE_XRENDER)
set(HAVE_XRENDER ${X11_Xrender_FOUND})
if(HAVE_XRENDER)
include_directories(${X11_Xrender_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXrender)
set(FLTK_XRENDER_FOUND TRUE)
else(HAVE_XRENDER)
set(FLTK_XRENDER_FOUND FALSE)
endif(HAVE_XRENDER)
if (OPTION_USE_XRENDER)
set (HAVE_XRENDER ${X11_Xrender_FOUND})
if (HAVE_XRENDER)
include_directories (${X11_Xrender_INCLUDE_PATH})
list (APPEND FLTK_LDLIBS -lXrender)
set (FLTK_XRENDER_FOUND TRUE)
else(HAVE_XRENDER)
set (FLTK_XRENDER_FOUND FALSE)
endif (HAVE_XRENDER)
else(OPTION_USE_XRENDER)
set(FLTK_XRENDER_FOUND FALSE)
endif(OPTION_USE_XRENDER)
set (FLTK_XRENDER_FOUND FALSE)
endif (OPTION_USE_XRENDER)
#######################################################################
if(X11_FOUND)
option(OPTION_USE_XDBE "use lib Xdbe" ON)
endif(X11_FOUND)
if (X11_FOUND)
option (OPTION_USE_XDBE "use lib Xdbe" ON)
endif (X11_FOUND)
if(OPTION_USE_XDBE AND HAVE_XDBE_H)
set(HAVE_XDBE 1)
set(FLTK_XDBE_FOUND TRUE)
if (OPTION_USE_XDBE AND HAVE_XDBE_H)
set (HAVE_XDBE 1)
set (FLTK_XDBE_FOUND TRUE)
else()
set(FLTK_XDBE_FOUND FALSE)
endif(OPTION_USE_XDBE AND HAVE_XDBE_H)
set (FLTK_XDBE_FOUND FALSE)
endif (OPTION_USE_XDBE AND HAVE_XDBE_H)
#######################################################################
set(FL_NO_PRINT_SUPPORT FALSE)
if(X11_FOUND AND NOT OPTION_PRINT_SUPPORT)
set(FL_NO_PRINT_SUPPORT TRUE)
endif(X11_FOUND AND NOT OPTION_PRINT_SUPPORT)
set (FL_NO_PRINT_SUPPORT FALSE)
if (X11_FOUND AND NOT OPTION_PRINT_SUPPORT)
set (FL_NO_PRINT_SUPPORT TRUE)
endif (X11_FOUND AND NOT OPTION_PRINT_SUPPORT)
#######################################################################
#######################################################################
set(FL_CFG_NO_FILESYSTEM_SUPPORT TRUE)
if(OPTION_FILESYSTEM_SUPPORT)
set(FL_CFG_NO_FILESYSTEM_SUPPORT FALSE)
endif(OPTION_FILESYSTEM_SUPPORT)
set (FL_CFG_NO_FILESYSTEM_SUPPORT TRUE)
if (OPTION_FILESYSTEM_SUPPORT)
set (FL_CFG_NO_FILESYSTEM_SUPPORT FALSE)
endif (OPTION_FILESYSTEM_SUPPORT)
#######################################################################
#######################################################################
option (OPTION_CREATE_ANDROID_STUDIO_IDE "create files needed to compile FLtk for Android" OFF)
option (OPTION_CREATE_ANDROID_STUDIO_IDE "create files needed to compile FLTK for Android" OFF)
#######################################################################
#######################################################################
# prior to CMake 3.0 this feature was buggy
if(NOT CMAKE_VERSION VERSION_LESS 3.0.0)
option(CMAKE_SUPPRESS_REGENERATION
"suppress rules to re-run CMake on rebuild" OFF)
mark_as_advanced(CMAKE_SUPPRESS_REGENERATION)
endif(NOT CMAKE_VERSION VERSION_LESS 3.0.0)
option (CMAKE_SUPPRESS_REGENERATION "suppress rules to re-run CMake on rebuild" OFF)
mark_as_advanced (CMAKE_SUPPRESS_REGENERATION)
#######################################################################
# Debugging ...
@ -587,7 +567,6 @@ if (DEBUG_OPTIONS_CMAKE)
fl_debug_var (LIBS)
fl_debug_var (GLLIBS)
fl_debug_var (FLTK_LDLIBS)
fl_debug_var (USE_FIND_FILE)
fl_debug_var (OPENGL_FOUND)
fl_debug_var (OPENGL_INCLUDE_DIR)
fl_debug_var (OPENGL_LIBRARIES)

View File

@ -1,8 +1,8 @@
#
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Resource definitions to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2018 by Bill Spitzak and others.
# 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
@ -19,38 +19,17 @@
# check for headers, libraries and functions
#######################################################################
# The following code is work in progress (as of Feb 2018) - AlbrechtS
# The cache option USE_FIND_FILE can be set to ON to switch back to the old
# behavior that tries to find headers by find_file() which appears to be
# error prone at least under Windows when MSYS2 and MinGW are both
# installed on one system.
# If USE_FIND_FILE is OFF (new behavior), then headers are searched for by
# check_include_files() which tries to compile a small file to test if
# the header file can be used. In some cases this needs more than one
# header in a list because another header must be included before the
# header being searched for.
# Example: X11/Xlib.h must be included before X11/Xregion.h so Xregion.h
# can be compiled successfully.
# If CMAKE_REQUIRED_QUIET is 1 (default) the search is mostly quiet, if
# it is 0 (or not defined) check_include_files() is more verbose and
# the result of the search is logged with fl_debug_var().
# If CMAKE_REQUIRED_QUIET is 1 (default) the search is mostly quiet,
# if it is 0 (or not defined) check_include_files() is more verbose
# and the result of the search is logged with fl_debug_var().
# This is useful for debugging.
set (CMAKE_REQUIRED_QUIET 1)
include(CheckIncludeFiles)
# The following macro is used to switch between old and new behavior.
# Once this is stable (USE_FIND_FILE = 0) the unused part may be removed.
include (CheckIncludeFiles)
macro (fl_find_header VAR HEADER)
if (USE_FIND_FILE)
find_file (${VAR} "${HEADER}")
else (USE_FIND_FILE)
check_include_files("${HEADER}" ${VAR})
endif (USE_FIND_FILE)
check_include_files ("${HEADER}" ${VAR})
if (NOT CMAKE_REQUIRED_QUIET)
fl_debug_var (${VAR})
endif (NOT CMAKE_REQUIRED_QUIET)
@ -70,17 +49,12 @@ fl_find_header (HAVE_STRINGS_H strings.h)
fl_find_header (HAVE_SYS_SELECT_H sys/select.h)
fl_find_header (HAVE_SYS_STDTYPES_H sys/stdtypes.h)
if (USE_FIND_FILE)
fl_find_header (HAVE_X11_XREGION_H "X11/Xregion.h")
fl_find_header (HAVE_XDBE_H "X11/extensions/Xdbe.h")
else ()
fl_find_header (HAVE_X11_XREGION_H "X11/Xlib.h;X11/Xregion.h")
fl_find_header (HAVE_XDBE_H "X11/Xlib.h;X11/extensions/Xdbe.h")
endif()
fl_find_header (HAVE_X11_XREGION_H "X11/Xlib.h;X11/Xregion.h")
fl_find_header (HAVE_XDBE_H "X11/Xlib.h;X11/extensions/Xdbe.h")
if (WIN32 AND NOT CYGWIN)
# we don't use pthreads on Windows (except for Cygwin, see options.cmake)
set(HAVE_PTHREAD_H 0)
set (HAVE_PTHREAD_H 0)
else ()
fl_find_header (HAVE_PTHREAD_H pthread.h)
endif (WIN32 AND NOT CYGWIN)
@ -111,20 +85,20 @@ if (MSVC)
set (MSVC_RERUN_MESSAGE FALSE)
if (NOT HAVE_GL_GLU_H)
message(STATUS "Warning: Header file GL/glu.h was not found.")
message (STATUS "Warning: Header file GL/glu.h was not found.")
set (HAVE_GL_GLU_H 1)
set (MSVC_RERUN_MESSAGE TRUE)
endif (NOT HAVE_GL_GLU_H)
if (NOT HAVE_LOCALE_H)
message(STATUS "Warning: Header file locale.h was not found.")
message (STATUS "Warning: Header file locale.h was not found.")
set (HAVE_LOCALE_H 1)
set (MSVC_RERUN_MESSAGE TRUE)
endif (NOT HAVE_LOCALE_H)
if (MSVC_RERUN_MESSAGE)
message(STATUS "The FLTK team recommends to rerun CMake from a")
message(STATUS "\"Developer Command Prompt for Visual Studio xxxx\"")
message (STATUS "The FLTK team recommends to rerun CMake from a")
message (STATUS "\"Developer Command Prompt for Visual Studio xxxx\"")
endif (MSVC_RERUN_MESSAGE)
unset (MSVC_RERUN_MESSAGE)
@ -139,24 +113,25 @@ endif (MSVC)
# once we found the first suitable header file.
fl_find_header (HAVE_DIRENT_H dirent.h)
if(NOT HAVE_DIRENT_H)
fl_find_header (HAVE_SYS_NDIR_H sys/ndir.h)
if(NOT HAVE_SYS_NDIR_H)
fl_find_header (HAVE_SYS_DIR_H sys/dir.h)
if(NOT HAVE_SYS_DIR_H)
fl_find_header (HAVE_NDIR_H ndir.h)
endif(NOT HAVE_SYS_DIR_H)
endif(NOT HAVE_SYS_NDIR_H)
endif(NOT HAVE_DIRENT_H)
mark_as_advanced(HAVE_ALSA_ASOUNDLIB_H HAVE_DIRENT_H HAVE_DLFCN_H)
mark_as_advanced(HAVE_GL_GLU_H)
mark_as_advanced(HAVE_LIBPNG_PNG_H HAVE_LOCALE_H HAVE_NDIR_H)
mark_as_advanced(HAVE_OPENGL_GLU_H HAVE_PNG_H HAVE_PTHREAD_H)
mark_as_advanced(HAVE_STDIO_H HAVE_STRINGS_H HAVE_SYS_DIR_H)
mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
mark_as_advanced(HAVE_SYS_STDTYPES_H HAVE_XDBE_H)
mark_as_advanced(HAVE_X11_XREGION_H)
if (NOT HAVE_DIRENT_H)
fl_find_header (HAVE_SYS_NDIR_H sys/ndir.h)
if (NOT HAVE_SYS_NDIR_H)
fl_find_header (HAVE_SYS_DIR_H sys/dir.h)
if (NOT HAVE_SYS_DIR_H)
fl_find_header (HAVE_NDIR_H ndir.h)
endif (NOT HAVE_SYS_DIR_H)
endif (NOT HAVE_SYS_NDIR_H)
endif (NOT HAVE_DIRENT_H)
mark_as_advanced (HAVE_ALSA_ASOUNDLIB_H HAVE_DIRENT_H HAVE_DLFCN_H)
mark_as_advanced (HAVE_GL_GLU_H)
mark_as_advanced (HAVE_LIBPNG_PNG_H HAVE_LOCALE_H HAVE_NDIR_H)
mark_as_advanced (HAVE_OPENGL_GLU_H HAVE_PNG_H HAVE_PTHREAD_H)
mark_as_advanced (HAVE_STDIO_H HAVE_STRINGS_H HAVE_SYS_DIR_H)
mark_as_advanced (HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
mark_as_advanced (HAVE_SYS_STDTYPES_H HAVE_XDBE_H)
mark_as_advanced (HAVE_X11_XREGION_H)
#----------------------------------------------------------------------
# The following code is used to find the include path for freetype
@ -164,104 +139,104 @@ mark_as_advanced(HAVE_X11_XREGION_H)
# where to find freetype headers
find_path(FREETYPE_PATH freetype.h PATH_SUFFIXES freetype2)
find_path(FREETYPE_PATH freetype/freetype.h PATH_SUFFIXES freetype2)
find_path (FREETYPE_PATH freetype.h PATH_SUFFIXES freetype2)
find_path (FREETYPE_PATH freetype/freetype.h PATH_SUFFIXES freetype2)
if (FREETYPE_PATH)
include_directories(${FREETYPE_PATH})
include_directories (${FREETYPE_PATH})
endif (FREETYPE_PATH)
mark_as_advanced(FREETYPE_PATH)
mark_as_advanced (FREETYPE_PATH)
#######################################################################
# libraries
find_library(LIB_CAIRO cairo)
find_library(LIB_dl dl)
find_library(LIB_fontconfig fontconfig)
find_library(LIB_freetype freetype)
find_library(LIB_GL GL)
find_library(LIB_MesaGL MesaGL)
find_library(LIB_jpeg jpeg)
find_library(LIB_png png)
find_library(LIB_zlib z)
find_library (LIB_CAIRO cairo)
find_library (LIB_dl dl)
find_library (LIB_fontconfig fontconfig)
find_library (LIB_freetype freetype)
find_library (LIB_GL GL)
find_library (LIB_MesaGL MesaGL)
find_library (LIB_jpeg jpeg)
find_library (LIB_png png)
find_library (LIB_zlib z)
mark_as_advanced(LIB_CAIRO LIB_dl LIB_fontconfig LIB_freetype)
mark_as_advanced(LIB_GL LIB_MesaGL)
mark_as_advanced(LIB_jpeg LIB_png LIB_zlib)
mark_as_advanced (LIB_CAIRO LIB_dl LIB_fontconfig LIB_freetype)
mark_as_advanced (LIB_GL LIB_MesaGL)
mark_as_advanced (LIB_jpeg LIB_png LIB_zlib)
#######################################################################
# functions
include(CheckFunctionExists)
include (CheckFunctionExists)
# save CMAKE_REQUIRED_LIBRARIES (is this really necessary ?)
if(DEFINED CMAKE_REQUIRED_LIBRARIES)
set(SAVED_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
else(DEFINED CMAKE_REQUIRED_LIBRARIES)
unset(SAVED_REQUIRED_LIBRARIES)
endif(DEFINED CMAKE_REQUIRED_LIBRARIES)
set(CMAKE_REQUIRED_LIBRARIES)
if (DEFINED CMAKE_REQUIRED_LIBRARIES)
set (SAVED_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
else (DEFINED CMAKE_REQUIRED_LIBRARIES)
unset (SAVED_REQUIRED_LIBRARIES)
endif (DEFINED CMAKE_REQUIRED_LIBRARIES)
set (CMAKE_REQUIRED_LIBRARIES)
if(HAVE_DLFCN_H)
set(HAVE_DLFCN_H 1)
endif(HAVE_DLFCN_H)
if (HAVE_DLFCN_H)
set (HAVE_DLFCN_H 1)
endif (HAVE_DLFCN_H)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS})
CHECK_FUNCTION_EXISTS(dlsym HAVE_DLSYM)
set(CMAKE_REQUIRED_LIBRARIES)
set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS})
CHECK_FUNCTION_EXISTS (dlsym HAVE_DLSYM)
set (CMAKE_REQUIRED_LIBRARIES)
CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV)
CHECK_FUNCTION_EXISTS (localeconv HAVE_LOCALECONV)
if(LIB_png)
set(CMAKE_REQUIRED_LIBRARIES ${LIB_png})
CHECK_FUNCTION_EXISTS(png_get_valid HAVE_PNG_GET_VALID)
CHECK_FUNCTION_EXISTS(png_set_tRNS_to_alpha HAVE_PNG_SET_TRNS_TO_ALPHA)
set(CMAKE_REQUIRED_LIBRARIES)
endif(LIB_png)
if (LIB_png)
set (CMAKE_REQUIRED_LIBRARIES ${LIB_png})
CHECK_FUNCTION_EXISTS (png_get_valid HAVE_PNG_GET_VALID)
CHECK_FUNCTION_EXISTS (png_set_tRNS_to_alpha HAVE_PNG_SET_TRNS_TO_ALPHA)
set (CMAKE_REQUIRED_LIBRARIES)
endif (LIB_png)
CHECK_FUNCTION_EXISTS(scandir HAVE_SCANDIR)
CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
CHECK_FUNCTION_EXISTS (scandir HAVE_SCANDIR)
CHECK_FUNCTION_EXISTS (snprintf HAVE_SNPRINTF)
# not really true but we convert strcasecmp calls to _stricmp calls in flstring.h
if(MSVC)
set(HAVE_STRCASECMP 1)
endif(MSVC)
if (MSVC)
set (HAVE_STRCASECMP 1)
endif (MSVC)
CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
CHECK_FUNCTION_EXISTS (strcasecmp HAVE_STRCASECMP)
CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY)
CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
CHECK_FUNCTION_EXISTS (strlcat HAVE_STRLCAT)
CHECK_FUNCTION_EXISTS (strlcpy HAVE_STRLCPY)
CHECK_FUNCTION_EXISTS (vsnprintf HAVE_VSNPRINTF)
if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
set(MSG "POSIX compatible scandir")
message(STATUS "Looking for ${MSG}")
if (HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
set (MSG "POSIX compatible scandir")
message (STATUS "Looking for ${MSG}")
try_compile(V
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/posixScandir.cxx
)
if(V)
message(STATUS "${MSG} - found")
set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
if (V)
message (STATUS "${MSG} - found")
set (HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
else()
message(STATUS "${MSG} - not found")
set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
endif(V)
endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
mark_as_advanced(HAVE_SCANDIR_POSIX)
message (STATUS "${MSG} - not found")
set (HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
endif (V)
endif (HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
mark_as_advanced (HAVE_SCANDIR_POSIX)
# restore CMAKE_REQUIRED_LIBRARIES (is this really necessary ?)
if(DEFINED SAVED_REQUIRED_LIBRARIES)
set(CMAKE_REQUIRED_LIBRARIES ${SAVED_REQUIRED_LIBRARIES})
unset(SAVED_REQUIRED_LIBRARIES)
if (DEFINED SAVED_REQUIRED_LIBRARIES)
set (CMAKE_REQUIRED_LIBRARIES ${SAVED_REQUIRED_LIBRARIES})
unset (SAVED_REQUIRED_LIBRARIES)
else(DEFINED SAVED_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_LIBRARIES)
endif(DEFINED SAVED_REQUIRED_LIBRARIES)
unset (CMAKE_REQUIRED_LIBRARIES)
endif (DEFINED SAVED_REQUIRED_LIBRARIES)
#######################################################################
# packages
# Doxygen: necessary for HTML and PDF docs
find_package(Doxygen)
find_package (Doxygen)
# LaTex: necessary for PDF docs (note: FindLATEX doesn't return LATEX_FOUND)
@ -270,15 +245,15 @@ find_package(Doxygen)
set (LATEX_FOUND)
if (DOXYGEN_FOUND)
find_package(LATEX)
find_package (LATEX)
if (LATEX_COMPILER AND NOT LATEX_FOUND)
set(LATEX_FOUND YES)
set (LATEX_FOUND YES)
endif (LATEX_COMPILER AND NOT LATEX_FOUND)
endif (DOXYGEN_FOUND)
# message("Doxygen found : ${DOXYGEN_FOUND}")
# message("LaTex found : ${LATEX_FOUND}")
# message("LaTex Compiler : ${LATEX_COMPILER}")
# message ("Doxygen found : ${DOXYGEN_FOUND}")
# message ("LaTex found : ${LATEX_FOUND}")
# message ("LaTex Compiler : ${LATEX_COMPILER}")
# Cleanup: unset local variables

View File

@ -2,7 +2,7 @@
# CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2018 by Bill Spitzak and others.
# 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
@ -19,52 +19,37 @@
# basic setup
#######################################################################
# The FLTK version
set(FLTK_VERSION_MAJOR "1")
set(FLTK_VERSION_MINOR "4")
set(FLTK_VERSION_PATCH "0")
set(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}")
set(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
set(ARCHIVE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
set (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
set (LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
set (ARCHIVE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
# Search for modules in the FLTK source dir first
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
set(FLTK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${FLTK_INCLUDE_DIRS})
set (FLTK_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
include_directories (${FLTK_INCLUDE_DIRS})
# Remember root of FLTK source directory in case we're in a subdirectory.
# Used for instance to find the source directory for doxygen docs
set(FLTK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set (FLTK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
# Setup install locations
if(CMAKE_VERSION VERSION_GREATER 2.8.4)
# Use GNUInstallDirs if available.
include(GNUInstallDirs)
else()
# Else set reasonable defaults.
set(CMAKE_INSTALL_BINDIR bin)
set(CMAKE_INSTALL_LIBDIR lib)
set(CMAKE_INSTALL_INCLUDEDIR include)
set(CMAKE_INSTALL_DATADIR share)
set(CMAKE_INSTALL_MANDIR share/man)
endif(CMAKE_VERSION VERSION_GREATER 2.8.4)
# Setup install locations (requires CMake 2.8.4)
set(FLTK_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH
"Binary install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH
"Library install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH
"Public header install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_DATADIR ${CMAKE_INSTALL_DATADIR} CACHE PATH
"Non-arch data install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_MANDIR ${CMAKE_INSTALL_MANDIR} CACHE PATH
"Manual install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_DOCDIR ${CMAKE_INSTALL_DATADIR}/doc CACHE PATH
"Non-arch doc install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
include(GNUInstallDirs)
set (FLTK_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH
"Binary install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set (FLTK_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH
"Library install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set (FLTK_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH
"Public header install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set (FLTK_DATADIR ${CMAKE_INSTALL_DATADIR} CACHE PATH
"Non-arch data install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set (FLTK_MANDIR ${CMAKE_INSTALL_MANDIR} CACHE PATH
"Manual install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set (FLTK_DOCDIR ${CMAKE_INSTALL_DATADIR}/doc CACHE PATH
"Non-arch doc install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
#######################################################################
@ -72,56 +57,56 @@ set(FLTK_DOCDIR ${CMAKE_INSTALL_DATADIR}/doc CACHE PATH
#######################################################################
# set where config files go
if(WIN32 AND NOT CYGWIN)
set(FLTK_CONFIG_PATH CMake)
elseif(APPLE AND NOT OPTION_APPLE_X11)
set(FLTK_CONFIG_PATH FLTK.framework/Resources/CMake)
else()
set(FLTK_CONFIG_PATH ${FLTK_DATADIR}/fltk)
endif(WIN32 AND NOT CYGWIN)
if (WIN32 AND NOT CYGWIN)
set (FLTK_CONFIG_PATH CMake)
elseif (APPLE AND NOT OPTION_APPLE_X11)
set (FLTK_CONFIG_PATH FLTK.framework/Resources/CMake)
else ()
set (FLTK_CONFIG_PATH ${FLTK_DATADIR}/fltk)
endif (WIN32 AND NOT CYGWIN)
include(TestBigEndian)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
if(APPLE)
set(HAVE_STRCASECMP 1)
set(HAVE_DIRENT_H 1)
set(HAVE_SNPRINTF 1)
set(HAVE_VSNPRINTF 1)
set(HAVE_SCANDIR 1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
if(OPTION_APPLE_X11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U__APPLE__")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U__APPLE__")
if(${CMAKE_SYSTEM_VERSION} VERSION_GREATER 16.9.0)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBCPP_HAS_THREAD_API_PTHREAD")
endif(${CMAKE_SYSTEM_VERSION} VERSION_GREATER 16.9.0)
elseif(OPTION_APPLE_SDL)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2_INCLUDE_DIRS} -U__APPLE__")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SDL2_INCLUDE_DIRS} -U__APPLE__")
else()
set(__APPLE_QUARTZ__ 1)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa")
endif(OPTION_APPLE_X11)
endif(APPLE)
if (APPLE)
set (HAVE_STRCASECMP 1)
set (HAVE_DIRENT_H 1)
set (HAVE_SNPRINTF 1)
set (HAVE_VSNPRINTF 1)
set (HAVE_SCANDIR 1)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
if (OPTION_APPLE_X11)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U__APPLE__")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U__APPLE__")
if (${CMAKE_SYSTEM_VERSION} VERSION_GREATER 16.9.0)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBCPP_HAS_THREAD_API_PTHREAD")
endif (${CMAKE_SYSTEM_VERSION} VERSION_GREATER 16.9.0)
elseif (OPTION_APPLE_SDL)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2_INCLUDE_DIRS} -U__APPLE__")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SDL2_INCLUDE_DIRS} -U__APPLE__")
else ()
set (__APPLE_QUARTZ__ 1)
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa")
endif (OPTION_APPLE_X11)
endif (APPLE)
if(WIN32)
# we do no longer define WIN32 or _WIN32 (since FLTK 1.4.0)
# ... but if we did, we'd define _WIN32 (since FLTK 1.4.0)
# add_definitions(-D_WIN32)
if(MSVC)
add_definitions(-DWIN32_LEAN_AND_MEAN)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
set(BORDER_WIDTH 2)
endif(MSVC)
if(CMAKE_C_COMPILER_ID STREQUAL GNU)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-subsystem,windows")
endif(CMAKE_C_COMPILER_ID STREQUAL GNU)
if(MINGW AND EXISTS /mingw)
list(APPEND CMAKE_PREFIX_PATH /mingw)
endif(MINGW AND EXISTS /mingw)
endif(WIN32)
if (WIN32)
# we do no longer define WIN32 or _WIN32 (since FLTK 1.4.0)
# ... but if we did, we'd define _WIN32 (since FLTK 1.4.0)
# add_definitions (-D_WIN32)
if (MSVC)
add_definitions (-DWIN32_LEAN_AND_MEAN)
add_definitions (-D_CRT_SECURE_NO_WARNINGS)
set (BORDER_WIDTH 2)
endif (MSVC)
if (CMAKE_C_COMPILER_ID STREQUAL GNU)
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-subsystem,windows")
endif (CMAKE_C_COMPILER_ID STREQUAL GNU)
if (MINGW AND EXISTS /mingw)
list(APPEND CMAKE_PREFIX_PATH /mingw)
endif (MINGW AND EXISTS /mingw)
endif (WIN32)
#######################################################################
# size of ints
@ -130,24 +115,24 @@ include(CheckTypeSize)
CHECK_TYPE_SIZE(short SIZEOF_SHORT)
CHECK_TYPE_SIZE(int SIZEOF_INT)
CHECK_TYPE_SIZE(long SIZEOF_LONG)
CHECK_TYPE_SIZE("long long" HAVE_LONG_LONG)
CHECK_TYPE_SIZE("long long" HAVE_LONG_LONG)
if(${SIZEOF_SHORT} MATCHES "^2$")
set(U16 "unsigned short")
endif(${SIZEOF_SHORT} MATCHES "^2$")
if (${SIZEOF_SHORT} MATCHES "^2$")
set (U16 "unsigned short")
endif (${SIZEOF_SHORT} MATCHES "^2$")
if(${SIZEOF_INT} MATCHES "^4$")
set(U32 "unsigned")
else()
if(${SIZEOF_LONG} MATCHES "^4$")
set(U32 "unsigned long")
endif(${SIZEOF_LONG} MATCHES "^4$")
endif(${SIZEOF_INT} MATCHES "^4$")
if (${SIZEOF_INT} MATCHES "^4$")
set (U32 "unsigned")
else ()
if (${SIZEOF_LONG} MATCHES "^4$")
set (U32 "unsigned long")
endif (${SIZEOF_LONG} MATCHES "^4$")
endif (${SIZEOF_INT} MATCHES "^4$")
if(${SIZEOF_INT} MATCHES "^8$")
set(U64 "unsigned")
else()
if(${SIZEOF_LONG} MATCHES "^8$")
set(U64 "unsigned long")
endif(${SIZEOF_LONG} MATCHES "^8$")
endif(${SIZEOF_INT} MATCHES "^8$")
if (${SIZEOF_INT} MATCHES "^8$")
set (U64 "unsigned")
else ()
if (${SIZEOF_LONG} MATCHES "^8$")
set (U64 "unsigned long")
endif (${SIZEOF_LONG} MATCHES "^8$")
endif (${SIZEOF_INT} MATCHES "^8$")

View File

@ -2,7 +2,7 @@
# This file sets variables for common use in export.cmake and install.cmake
# Written by Michael Surette
#
# Copyright 1998-2018 by Bill Spitzak and others.
# 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
@ -16,9 +16,6 @@
#
#######################################################################
set (FL_MAJOR_VERSION ${FLTK_VERSION_MAJOR})
set (FL_MINOR_VERSION ${FLTK_VERSION_MINOR})
set (FL_PATCH_VERSION ${FLTK_VERSION_PATCH})
set (DEBUG_VARIABLES_CMAKE 0)
if (DEBUG_VARIABLES_CMAKE)
@ -83,66 +80,66 @@ set (IMAGELIBS)
set (STATICIMAGELIBS)
if (FLTK_BUILTIN_JPEG_FOUND)
list(APPEND IMAGELIBS -lfltk_jpeg)
list(APPEND STATICIMAGELIBS \$libdir/libfltk_jpeg.a)
list (APPEND IMAGELIBS -lfltk_jpeg)
list (APPEND STATICIMAGELIBS \$libdir/libfltk_jpeg.a)
else ()
if (LIB_jpeg)
list(APPEND IMAGELIBS -ljpeg)
list(APPEND STATICIMAGELIBS -ljpeg)
list (APPEND IMAGELIBS -ljpeg)
list (APPEND STATICIMAGELIBS -ljpeg)
endif (LIB_jpeg)
endif (FLTK_BUILTIN_JPEG_FOUND)
if (FLTK_BUILTIN_PNG_FOUND)
list(APPEND IMAGELIBS -lfltk_png)
list(APPEND STATICIMAGELIBS \$libdir/libfltk_png.a)
list (APPEND IMAGELIBS -lfltk_png)
list (APPEND STATICIMAGELIBS \$libdir/libfltk_png.a)
else ()
if (LIB_png)
list(APPEND IMAGELIBS -lpng)
list(APPEND STATICIMAGELIBS -lpng)
list (APPEND IMAGELIBS -lpng)
list (APPEND STATICIMAGELIBS -lpng)
endif (LIB_png)
endif (FLTK_BUILTIN_PNG_FOUND)
if (FLTK_BUILTIN_ZLIB_FOUND)
list(APPEND IMAGELIBS -lfltk_z)
list(APPEND STATICIMAGELIBS \$libdir/libfltk_z.a)
list (APPEND IMAGELIBS -lfltk_z)
list (APPEND STATICIMAGELIBS \$libdir/libfltk_z.a)
else ()
if (LIB_zlib)
list(APPEND IMAGELIBS -lz)
list(APPEND STATICIMAGELIBS -lz)
list (APPEND IMAGELIBS -lz)
list (APPEND STATICIMAGELIBS -lz)
endif (LIB_zlib)
endif (FLTK_BUILTIN_ZLIB_FOUND)
string(REPLACE ";" " " IMAGELIBS "${IMAGELIBS}")
string(REPLACE ";" " " STATICIMAGELIBS "${STATICIMAGELIBS}")
string (REPLACE ";" " " IMAGELIBS "${IMAGELIBS}")
string (REPLACE ";" " " STATICIMAGELIBS "${STATICIMAGELIBS}")
#######################################################################
set(CC ${CMAKE_C_COMPILER})
set(CXX ${CMAKE_CXX_COMPILER})
set (CC ${CMAKE_C_COMPILER})
set (CXX ${CMAKE_CXX_COMPILER})
set(ARCHFLAGS ${OPTION_ARCHFLAGS})
set (ARCHFLAGS ${OPTION_ARCHFLAGS})
string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_UPPER)
if (${BUILD_UPPER})
set (CFLAGS "${CMAKE_C_FLAGS_${BUILD_UPPER}} ${CFLAGS}")
endif (${BUILD_UPPER})
set(CFLAGS "${OPTION_OPTIM} ${CMAKE_C_FLAGS} ${CFLAGS}")
foreach(arg ${FLTK_CFLAGS})
set(CFLAGS "${CFLAGS} ${arg}")
endforeach(arg ${FLTK_CFLAGS})
set (CFLAGS "${OPTION_OPTIM} ${CMAKE_C_FLAGS} ${CFLAGS}")
foreach (arg ${FLTK_CFLAGS})
set (CFLAGS "${CFLAGS} ${arg}")
endforeach (arg ${FLTK_CFLAGS})
set(CXXFLAGS "${CFLAGS}")
set (CXXFLAGS "${CFLAGS}")
foreach(arg ${FLTK_LDLIBS})
set(LINK_LIBS "${LINK_LIBS} ${arg}")
endforeach(arg ${FLTK_LDLIBS})
foreach (arg ${FLTK_LDLIBS})
set (LINK_LIBS "${LINK_LIBS} ${arg}")
endforeach (arg ${FLTK_LDLIBS})
set(LIBS "${LINK_LIBS}")
set (LIBS "${LINK_LIBS}")
if (${CMAKE_SYSTEM_NAME} STREQUAL "AIX")
set(SHAREDSUFFIX "_s")
set (SHAREDSUFFIX "_s")
else ()
set(SHAREDSUFFIX "")
set (SHAREDSUFFIX "")
endif (${CMAKE_SYSTEM_NAME} STREQUAL "AIX")
if (DEBUG_VARIABLES_CMAKE)

View File

@ -2,7 +2,7 @@
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2018 by Bill Spitzak and others.
# 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
@ -15,64 +15,87 @@
# https://www.fltk.org/bugs.php
#
# Prevent annoying warning under Cygwin; this must be before project().
# Remove when CMake >= 2.8.4 is required
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
#######################################################################
# set CMake minimum version (must be before `project()`
#######################################################################
project(FLTK)
cmake_minimum_required(VERSION 2.6.3)
# Note: previous (1.3.x) minimum version
# cmake_minimum_required (VERSION 2.6.3)
# Note: minimum CMake version required by GNUInstallDirs
# cmake_minimum_required (VERSION 2.8.4)
# Minimum CMake version required by FLTK 1.4 (06/2020, work in progress)
cmake_minimum_required (VERSION 3.2.3 FATAL_ERROR)
#######################################################################
# define some macros
# define the FLTK project and version
#######################################################################
include(CMake/macros.cmake)
project (FLTK VERSION 1.4.0)
#######################################################################
# include macro definitions of generally used macros
#######################################################################
include (CMake/fl_debug_var.cmake)
include (CMake/fl_add_library.cmake)
if (false)
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 (FLTK_VERSION)
endif (false)
#######################################################################
# basic setup
#######################################################################
include(CMake/setup.cmake)
include (CMake/setup.cmake)
#######################################################################
# check for headers, libraries and functions
#######################################################################
include(CMake/resources.cmake)
include (CMake/resources.cmake)
#######################################################################
# options
#######################################################################
include(CMake/options.cmake)
include (CMake/options.cmake)
#######################################################################
# Android Studio setup
#######################################################################
if (OPTION_CREATE_ANDROID_STUDIO_IDE)
include(CMake/android.cmake)
include (CMake/android.cmake)
endif (OPTION_CREATE_ANDROID_STUDIO_IDE)
#######################################################################
# 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(ANDROID)
fl_debug_var(CMAKE_BUILD_TYPE)
fl_debug_var(CMAKE_SIZEOF_VOID_P)
fl_debug_var(OPTION_OPTIM)
fl_debug_var(CMAKE_C_FLAGS)
fl_debug_var(CMAKE_CXX_FLAGS)
fl_debug_var(CMAKE_EXE_LINKER_FLAGS)
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 (ANDROID)
fl_debug_var (CMAKE_BUILD_TYPE)
fl_debug_var (CMAKE_SIZEOF_VOID_P)
fl_debug_var (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)
#######################################################################
@ -81,25 +104,25 @@ unset (debug_build)
# 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)
include (CMake/variables.cmake)
#######################################################################
# final config and export
#######################################################################
include(CMake/export.cmake)
include (CMake/export.cmake)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/abi-version.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/FL/abi-version.h
@ONLY
)
configure_file (
${CMAKE_CURRENT_SOURCE_DIR}/abi-version.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/FL/abi-version.h
@ONLY
)
#######################################################################
# build examples - these have to be built after fluid is built/imported
#######################################################################
if(OPTION_BUILD_EXAMPLES)
add_subdirectory(test)
endif(OPTION_BUILD_EXAMPLES)
if (OPTION_BUILD_EXAMPLES)
add_subdirectory (test)
endif (OPTION_BUILD_EXAMPLES)
#######################################################################
# Android Studio wrapup
@ -111,4 +134,47 @@ endif (OPTION_CREATE_ANDROID_STUDIO_IDE)
#######################################################################
# installation
#######################################################################
include(CMake/install.cmake)
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 (OPTION_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 (OPTION_BUILD_SHARED_LIBS AND GENERATE_EXPORT_HEADERS)

View File

@ -552,9 +552,9 @@ add_executable(CubeView WIN32 CubeMain.cxx CubeView.cxx CubeViewUI.cxx)
target_link_libraries(CubeView fltk fltk_gl)
---
You can repeat the add_custom_command for each fluid file or if you have
a large number of them see the CMake/macros.cmake function FLTK_RUN_FLUID
for an example of how to run it in a loop.
You can repeat the add_custom_command for each fluid file or if you
have a large number of them see the CMake/FLTK-Functions.cmake function
FLTK_RUN_FLUID for an example of how to run it in a loop.
The two lines

View File

@ -56,19 +56,20 @@ case $host_os in
esac
dnl FLTK library versions...
FL_MAJOR_VERSION=1
FL_MINOR_VERSION=4
FL_PATCH_VERSION=0
FL_DSO_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}
FL_ABI_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}.0
FL_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}.${FL_PATCH_VERSION}
FLTK_VERSION_MAJOR=1
FLTK_VERSION_MINOR=4
FLTK_VERSION_PATCH=0
FLTK_VERSION=${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}.${FLTK_VERSION_PATCH}
AC_SUBST(FL_MAJOR_VERSION)
AC_SUBST(FL_MINOR_VERSION)
AC_SUBST(FL_PATCH_VERSION)
FL_DSO_VERSION=${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}
FL_ABI_VERSION=${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}.0
AC_SUBST(FLTK_VERSION_MAJOR)
AC_SUBST(FLTK_VERSION_MINOR)
AC_SUBST(FLTK_VERSION_PATCH)
AC_SUBST(FLTK_VERSION)
AC_SUBST(FL_DSO_VERSION)
AC_SUBST(FL_ABI_VERSION)
AC_SUBST(FL_VERSION)
AC_SUBST(ARCHFLAGS)
AC_SUBST(OPTIM)

View File

@ -16,8 +16,6 @@
set (DOCS)
set (FL_VERSION "${FLTK_VERSION_FULL}")
if (OPTION_INCLUDE_DRIVER_DOCUMENTATION)
set (DRIVER_DOCS "DriverDev")
else ()
@ -30,34 +28,34 @@ endif ()
if (OPTION_BUILD_HTML_DOCUMENTATION)
list(APPEND DOCS html)
list (APPEND DOCS html)
# generate Doxygen file "Doxyfile"
# generate Doxygen file "Doxyfile"
set(GENERATE_HTML YES)
set(GENERATE_LATEX NO)
set(LATEX_HEADER "")
set (GENERATE_HTML YES)
set (GENERATE_LATEX NO)
set (LATEX_HEADER "")
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
@ONLY
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
@ONLY
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/tiny.png
${CMAKE_CURRENT_BINARY_DIR}/html/tiny.png
COPYONLY
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/tiny.png
${CMAKE_CURRENT_BINARY_DIR}/html/tiny.png
COPYONLY
)
# generate html docs
# generate html docs
add_custom_target(html
# ALL
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating HTML documentation" VERBATIM
)
add_custom_target (html
# ALL
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating HTML documentation" VERBATIM
)
endif (OPTION_BUILD_HTML_DOCUMENTATION)
@ -67,52 +65,51 @@ endif (OPTION_BUILD_HTML_DOCUMENTATION)
if (OPTION_BUILD_PDF_DOCUMENTATION)
list(APPEND DOCS pdf)
list (APPEND DOCS pdf)
# generate Doxygen file "Doxybook"
# generate Doxygen file "Doxybook"
set(GENERATE_HTML NO)
set(GENERATE_LATEX YES)
set(LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex")
set (GENERATE_HTML NO)
set (GENERATE_LATEX YES)
set (LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex")
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxybook
@ONLY
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxybook
@ONLY
)
# generate LaTeX header fltk-book.tex
# generate LaTeX header fltk-book.tex
set(FL_VERSION ${FLTK_VERSION_FULL})
set(DOXY_VERSION ${DOXYGEN_VERSION})
execute_process(COMMAND date +%Y
OUTPUT_VARIABLE YEAR
)
set (DOXY_VERSION ${DOXYGEN_VERSION})
execute_process (COMMAND date +%Y
OUTPUT_VARIABLE YEAR
)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-book.tex.in
${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
@ONLY
)
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-book.tex.in
${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
@ONLY
)
# generate fltk.pdf
# generate fltk.pdf
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
COMMAND ${DOXYGEN_EXECUTABLE} Doxybook
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_pdf
COMMAND cp -f latex/refman.pdf fltk.pdf
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating PDF documentation" VERBATIM
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
COMMAND ${DOXYGEN_EXECUTABLE} Doxybook
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_pdf
COMMAND cp -f latex/refman.pdf fltk.pdf
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating PDF documentation" VERBATIM
)
# add target 'pdf'
# add target 'pdf'
add_custom_target(pdf
# ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
)
add_custom_target (pdf
# ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
)
endif(OPTION_BUILD_PDF_DOCUMENTATION)
endif (OPTION_BUILD_PDF_DOCUMENTATION)
#----------------------------------
# add target 'docs' for all docs
@ -120,10 +117,10 @@ endif(OPTION_BUILD_PDF_DOCUMENTATION)
if (DOCS)
add_custom_target(docs
# ALL
DEPENDS ${DOCS}
)
add_custom_target(docs
# ALL
DEPENDS ${DOCS}
)
endif (DOCS)
@ -133,16 +130,16 @@ endif (DOCS)
if (OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
DESTINATION ${FLTK_DATADIR}/doc/fltk
)
install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
DESTINATION ${FLTK_DATADIR}/doc/fltk
)
endif (OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION)
if (OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
DESTINATION ${FLTK_DATADIR}/doc/fltk/
)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
DESTINATION ${FLTK_DATADIR}/doc/fltk/
)
endif (OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION)

View File

@ -25,7 +25,7 @@ DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME = "FLTK @FL_VERSION@"
PROJECT_NAME = "FLTK @FLTK_VERSION@"
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or

View File

@ -132,7 +132,7 @@ uninstall-linux uninstall-osx:
Doxyfile: Doxyfile.in
echo "Generating Doxyfile ..."
sed -e's,@FL_VERSION@,$(FL_VERSION),' \
sed -e's,@FLTK_VERSION@,$(FLTK_VERSION),' \
-e's,@GENERATE_HTML@,YES,' \
-e's,@GENERATE_LATEX@,NO,' \
-e's, @LATEX_HEADER@,,' \
@ -142,7 +142,7 @@ Doxyfile: Doxyfile.in
Doxybook: Doxyfile.in
echo "Generating Doxybook ..."
sed -e's,@FL_VERSION@,$(FL_VERSION),' \
sed -e's,@FLTK_VERSION@,$(FLTK_VERSION),' \
-e's,@GENERATE_HTML@,NO,' \
-e's,@GENERATE_LATEX@,YES,' \
-e's,@LATEX_HEADER@,src/fltk-book.tex,' \
@ -183,6 +183,6 @@ src/fltk-book.tex: src/fltk-book.tex.in
DOXY_VERSION=`$(DOXYDOC) --version`; \
YEAR=`date +%Y`; \
sed -e"s/@YEAR@/$$YEAR/g" \
-e"s/@FL_VERSION@/$(FL_VERSION)/g" \
-e"s/@FLTK_VERSION@/$(FLTK_VERSION)/g" \
-e"s/@DOXY_VERSION@/$$DOXY_VERSION/g" \
< $< > $@

View File

@ -127,7 +127,7 @@
\begin{titlepage}
\vspace*{5cm}
\begin{center}%
{\Huge FLTK @FL_VERSION@ Programming Manual}\\
{\Huge FLTK @FLTK_VERSION@ Programming Manual}\\
\vspace*{2cm}
\begin{DoxyImageNoCaption}
\mbox{\includegraphics[width=6cm]{FL200.png}}

View File

@ -17,9 +17,9 @@
# https://www.fltk.org/bugs.php
#
MAJOR_VERSION=@FL_MAJOR_VERSION@
MINOR_VERSION=@FL_MINOR_VERSION@
PATCH_VERSION=@FL_PATCH_VERSION@
MAJOR_VERSION=@FLTK_VERSION_MAJOR@
MINOR_VERSION=@FLTK_VERSION_MINOR@
PATCH_VERSION=@FLTK_VERSION_PATCH@
VERSION="$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION"
APIVERSION="$MAJOR_VERSION.$MINOR_VERSION"

View File

@ -21,7 +21,7 @@
%vendor FLTK Development Team
%license COPYING
%readme README.txt
%version @FL_MAJOR_VERSION@.@FL_MINOR_VERSION@.@FL_PATCH_VERSION@
%version @FLTK_VERSION_MAJOR@.@FLTK_VERSION_MINOR@.@FLTK_VERSION_PATCH@
%description The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
%description cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11),
%description Microsoft(r) Windows(r), and MacOS(r) X. FLTK provides modern

View File

@ -14,7 +14,7 @@
# https://www.fltk.org/bugs.php
#
%define version @FL_MAJOR_VERSION@.@FL_MINOR_VERSION@.@FL_PATCH_VERSION@
%define version @FLTK_VERSION_MAJOR@.@FLTK_VERSION_MINOR@.@FLTK_VERSION_PATCH@
%define release 1
%define prefix /usr

View File

@ -1,7 +1,7 @@
#
# CMakeLists.txt to build fluid for the FLTK project using CMake (www.cmake.org)
#
# Copyright 1998-2018 by Bill Spitzak and others.
# 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
@ -14,85 +14,84 @@
# https://www.fltk.org/bugs.php
#
if (NOT ANDROID)
if(NOT ANDROID)
set(CPPFILES
CodeEditor.cxx
Fl_Function_Type.cxx
Fl_Group_Type.cxx
Fl_Menu_Type.cxx
Fl_Type.cxx
Fl_Widget_Type.cxx
Fl_Window_Type.cxx
Fluid_Image.cxx
about_panel.cxx
align_widget.cxx
alignment_panel.cxx
code.cxx
factory.cxx
file.cxx
fluid.cxx
function_panel.cxx
template_panel.cxx
undo.cxx
widget_panel.cxx
set (CPPFILES
CodeEditor.cxx
Fl_Function_Type.cxx
Fl_Group_Type.cxx
Fl_Menu_Type.cxx
Fl_Type.cxx
Fl_Widget_Type.cxx
Fl_Window_Type.cxx
Fluid_Image.cxx
about_panel.cxx
align_widget.cxx
alignment_panel.cxx
code.cxx
factory.cxx
file.cxx
fluid.cxx
function_panel.cxx
template_panel.cxx
undo.cxx
widget_panel.cxx
)
# ExternalCodeEditor: platform specific files
if (WIN32)
list(APPEND CPPFILES ExternalCodeEditor_WIN32.cxx)
list (APPEND CPPFILES ExternalCodeEditor_WIN32.cxx)
else ()
list(APPEND CPPFILES ExternalCodeEditor_UNIX.cxx)
list (APPEND CPPFILES ExternalCodeEditor_UNIX.cxx)
endif (WIN32)
if(APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
set(ICON_NAME fluid.icns)
set(ICON_PATH "${PROJECT_SOURCE_DIR}/fluid/fluid.app/Contents/Resources/${ICON_NAME}")
if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
set (ICON_NAME fluid.icns)
set (ICON_PATH "${PROJECT_SOURCE_DIR}/fluid/fluid.app/Contents/Resources/${ICON_NAME}")
add_executable(fluid MACOSX_BUNDLE ${CPPFILES} ${ICON_PATH})
else()
else ()
add_executable(fluid WIN32 ${CPPFILES})
endif(APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
endif (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
target_link_libraries(fluid fltk fltk_images fltk_forms)
# install fluid
if(APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
# create bundle
set_target_properties(fluid PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/fluid/fluid.app/Contents/Info.plist")
set_target_properties(fluid PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
set_target_properties(fluid PROPERTIES RESOURCE ${ICON_PATH})
set_target_properties (fluid PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/fluid/fluid.app/Contents/Info.plist")
set_target_properties (fluid PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
set_target_properties (fluid PROPERTIES RESOURCE ${ICON_PATH})
# install
install(TARGETS fluid DESTINATION ${FLTK_BINDIR})
install (TARGETS fluid DESTINATION ${FLTK_BINDIR})
else()
install(TARGETS fluid
install (TARGETS fluid
EXPORT FLTK-Targets
RUNTIME DESTINATION ${FLTK_BINDIR}
LIBRARY DESTINATION ${FLTK_LIBDIR}
ARCHIVE DESTINATION ${FLTK_LIBDIR}
)
endif(APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
)
endif (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
# install desktop files
if(UNIX)
install(FILES fluid.desktop
DESTINATION ${FLTK_DATADIR}/applications
)
# Install mime-type file. x-fluid.desktop method is deprecated.
install(FILES fluid.xml
DESTINATION ${FLTK_DATADIR}/mime/packages
)
if (UNIX)
install (FILES fluid.desktop
DESTINATION ${FLTK_DATADIR}/applications
)
# Install mime-type file (x-fluid.desktop method is deprecated)
install (FILES fluid.xml
DESTINATION ${FLTK_DATADIR}/mime/packages
)
# Install desktop icons.
foreach(icon 32 48 64 128)
install(FILES icons/fluid-${icon}.png
DESTINATION ${FLTK_DATADIR}/icons/hicolor/${icon}x${icon}/apps
RENAME fluid.png
)
endforeach()
endif(UNIX)
# Install desktop icons
foreach (icon 32 48 64 128)
install (FILES icons/fluid-${icon}.png
DESTINATION ${FLTK_DATADIR}/icons/hicolor/${icon}x${icon}/apps
RENAME fluid.png
)
endforeach()
endif (UNIX)
endif(NOT ANDROID)
endif (NOT ANDROID)

View File

@ -16,13 +16,9 @@
# FLTK version numbers
FL_MAJOR_VERSION = @FL_MAJOR_VERSION@
FL_MINOR_VERSION = @FL_MINOR_VERSION@
FL_PATCH_VERSION = @FL_PATCH_VERSION@
FL_VERSION = @FLTK_VERSION@
FL_DSO_VERSION = @FL_DSO_VERSION@
FL_ABI_VERSION = @FL_ABI_VERSION@
FL_VERSION = @FL_VERSION@
# FLTK configuration options: BUILD = { WIN | OSX | X11 | XFT }

View File

@ -173,7 +173,7 @@ list (APPEND HEADER_FILES
${CMAKE_CURRENT_BINARY_DIR}/../config.h
)
set (GL_HEADER_FILES) # FIXME: not (yet?) defined
set (GL_HEADER_FILES) # FIXME: not (yet?) defined
if ((USE_X11 OR USE_SDL) AND NOT OPTION_PRINT_SUPPORT)
set (PSFILES
@ -221,6 +221,7 @@ if (USE_X11)
drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx
)
endif (USE_XFT)
set (DRIVER_HEADER_FILES
drivers/Posix/Fl_Posix_System_Driver.H
drivers/X11/Fl_X11_Screen_Driver.H
@ -294,7 +295,7 @@ elseif (ANDROID)
# Android
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set (DRIVER_FILES
drivers/Android/Fl_Android_Application.cxx
@ -361,7 +362,7 @@ set (CPPFILES
${DRIVER_FILES}
)
set (FLCPPFILES
set (FORMS_FILES
forms_compatibility.cxx
forms_bitmap.cxx
forms_free.cxx
@ -453,15 +454,15 @@ if (WIN32)
endif (WIN32)
if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
set (MMFILES
Fl_cocoa.mm
drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm
Fl_Native_File_Chooser_MAC.mm
Fl_MacOS_Sys_Menu_Bar.mm
)
set (MMFILES
Fl_cocoa.mm
drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm
Fl_Native_File_Chooser_MAC.mm
Fl_MacOS_Sys_Menu_Bar.mm
)
else()
set (MMFILES
)
set (MMFILES
)
endif (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
@ -475,7 +476,7 @@ list (APPEND SHARED_FILES ${HEADER_FILES} ${DRIVER_HEADER_FILES})
set (STATIC_FILES ${SHARED_FILES})
if (WIN32)
list (APPEND STATIC_FILES fl_call_main.c)
list (APPEND STATIC_FILES fl_call_main.c)
endif (WIN32)
add_definitions(-DFL_LIBRARY)
@ -487,162 +488,188 @@ add_definitions(-DFL_LIBRARY)
set (OPTIONAL_LIBS)
if (LIB_dl)
list (APPEND OPTIONAL_LIBS ${LIB_dl})
list (APPEND OPTIONAL_LIBS ${LIB_dl})
endif (LIB_dl)
if (USE_THREADS)
list (APPEND OPTIONAL_LIBS ${CMAKE_THREAD_LIBS_INIT})
list (APPEND OPTIONAL_LIBS ${CMAKE_THREAD_LIBS_INIT})
endif (USE_THREADS)
if (USE_X11)
list (APPEND OPTIONAL_LIBS ${X11_LIBRARIES})
list (APPEND OPTIONAL_LIBS ${X11_LIBRARIES})
endif (USE_X11)
if (USE_SDL)
list (APPEND OPTIONAL_LIBS ${SDL2_LIBRARY})
endif(USE_SDL)
list (APPEND OPTIONAL_LIBS ${SDL2_LIBRARY})
endif (USE_SDL)
if (WIN32)
list (APPEND OPTIONAL_LIBS comctl32 ws2_32)
list (APPEND OPTIONAL_LIBS comctl32 ws2_32)
endif (WIN32)
if (FLTK_HAVE_CAIRO)
list (APPEND OPTIONAL_LIBS fltk_cairo ${PKG_CAIRO_LIBRARIES})
list (APPEND OPTIONAL_LIBS fltk_cairo ${PKG_CAIRO_LIBRARIES})
ENDif (FLTK_HAVE_CAIRO)
if (HAVE_XINERAMA)
list (APPEND OPTIONAL_LIBS ${X11_Xinerama_LIB})
list (APPEND OPTIONAL_LIBS ${X11_Xinerama_LIB})
endif (HAVE_XINERAMA)
if (HAVE_XFIXES)
list (APPEND OPTIONAL_LIBS ${X11_Xfixes_LIB})
list (APPEND OPTIONAL_LIBS ${X11_Xfixes_LIB})
endif (HAVE_XFIXES)
if (HAVE_XCURSOR)
list (APPEND OPTIONAL_LIBS ${X11_Xcursor_LIB})
list (APPEND OPTIONAL_LIBS ${X11_Xcursor_LIB})
endif (HAVE_XCURSOR)
if (HAVE_XRENDER)
list (APPEND OPTIONAL_LIBS ${X11_Xrender_LIB})
list (APPEND OPTIONAL_LIBS ${X11_Xrender_LIB})
endif (HAVE_XRENDER)
if (USE_PANGO)
list (APPEND OPTIONAL_LIBS ${HAVE_LIB_PANGO} ${HAVE_LIB_PANGOXFT})
if(NOT APPLE)
list (APPEND OPTIONAL_LIBS ${HAVE_LIB_GOBJECT} )
endif(NOT APPLE)
endif(USE_PANGO)
if (NOT APPLE)
list (APPEND OPTIONAL_LIBS ${HAVE_LIB_GOBJECT} )
endif (NOT APPLE)
endif (USE_PANGO)
if (USE_XFT)
list (APPEND OPTIONAL_LIBS ${X11_Xft_LIB})
if (LIB_fontconfig)
list (APPEND OPTIONAL_LIBS ${LIB_fontconfig})
endif (LIB_fontconfig)
list (APPEND OPTIONAL_LIBS ${X11_Xft_LIB})
if (LIB_fontconfig)
list (APPEND OPTIONAL_LIBS ${LIB_fontconfig})
endif (LIB_fontconfig)
endif (USE_XFT)
#######################################################################
FL_ADD_LIBRARY(fltk STATIC "${STATIC_FILES}")
target_link_libraries(fltk ${OPTIONAL_LIBS})
FL_ADD_LIBRARY (fltk STATIC "${STATIC_FILES}")
target_link_libraries (fltk ${OPTIONAL_LIBS})
#######################################################################
FL_ADD_LIBRARY(fltk_forms STATIC "${FLCPPFILES}")
target_link_libraries(fltk_forms fltk)
FL_ADD_LIBRARY (fltk_forms STATIC "${FORMS_FILES}")
target_link_libraries (fltk_forms fltk)
#######################################################################
FL_ADD_LIBRARY(fltk_images STATIC "${IMGCPPFILES}")
target_link_libraries(fltk_images fltk)
FL_ADD_LIBRARY (fltk_images STATIC "${IMGCPPFILES}")
target_link_libraries (fltk_images fltk)
if (OPTION_USE_SYSTEM_LIBJPEG)
target_link_libraries(fltk_images ${FLTK_JPEG_LIBRARIES})
target_link_libraries (fltk_images ${FLTK_JPEG_LIBRARIES})
else()
target_link_libraries(fltk_images fltk_jpeg)
target_link_libraries (fltk_images fltk_jpeg)
endif (OPTION_USE_SYSTEM_LIBJPEG)
if (OPTION_USE_SYSTEM_ZLIB)
target_link_libraries(fltk_images ${FLTK_ZLIB_LIBRARIES})
target_link_libraries (fltk_images ${FLTK_ZLIB_LIBRARIES})
else()
target_link_libraries(fltk_images fltk_z)
target_link_libraries (fltk_images fltk_z)
endif (OPTION_USE_SYSTEM_ZLIB)
if (OPTION_USE_SYSTEM_LIBPNG)
target_link_libraries(fltk_images ${FLTK_PNG_LIBRARIES})
target_link_libraries (fltk_images ${FLTK_PNG_LIBRARIES})
else()
target_link_libraries(fltk_images fltk_png)
target_link_libraries (fltk_images fltk_png)
endif (OPTION_USE_SYSTEM_LIBPNG)
#######################################################################
if (OPENGL_FOUND)
FL_ADD_LIBRARY(fltk_gl STATIC "${GLCPPFILES};${GL_HEADER_FILES};${GL_DRIVER_HEADER_FILES}")
target_link_libraries(fltk_gl fltk ${OPENGL_LIBRARIES})
FL_ADD_LIBRARY (fltk_gl STATIC "${GLCPPFILES};${GL_HEADER_FILES};${GL_DRIVER_HEADER_FILES}")
target_link_libraries (fltk_gl fltk ${OPENGL_LIBRARIES})
endif (OPENGL_FOUND)
#######################################################################
# Build shared libraries (optional)
#######################################################################
# Shared libraries, part 1: everything except Visual Studio (MSVC)
#######################################################################
# Note to devs: As of 08 Aug 2016 we can build shared libs (dlls)
# under Windows with Visual Studio (MSVC) but we can't link for instance
# fltk_images_SHARED with fltk_SHARED - we have to use fltk, i.e. the
# "static" object library instead. I don't know how to fix this, but
# at least we can build shared libraries (dlls) with Visual Studio.
# AlbrechtS
if (OPTION_BUILD_SHARED_LIBS AND NOT MSVC)
if (OPTION_BUILD_SHARED_LIBS)
FL_ADD_LIBRARY (fltk SHARED "${SHARED_FILES}")
target_link_libraries (fltk_SHARED ${OPTIONAL_LIBS})
FL_ADD_LIBRARY(fltk SHARED "${SHARED_FILES}")
target_link_libraries(fltk_SHARED ${OPTIONAL_LIBS})
###################################################################
###################################################################
FL_ADD_LIBRARY (fltk_forms SHARED "${FORMS_FILES}")
target_link_libraries (fltk_forms_SHARED fltk_SHARED)
FL_ADD_LIBRARY(fltk_forms SHARED "${FLCPPFILES}")
if (MSVC)
target_link_libraries(fltk_forms_SHARED fltk)
else ()
target_link_libraries(fltk_forms_SHARED fltk_SHARED)
endif (MSVC)
###################################################################
###################################################################
FL_ADD_LIBRARY (fltk_images SHARED "${IMGCPPFILES}")
target_link_libraries (fltk_images_SHARED fltk_SHARED)
FL_ADD_LIBRARY(fltk_images SHARED "${IMGCPPFILES}")
if (MSVC)
target_link_libraries(fltk_images_SHARED fltk)
else ()
target_link_libraries(fltk_images_SHARED fltk_SHARED)
endif (MSVC)
if (OPTION_USE_SYSTEM_LIBJPEG)
target_link_libraries (fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
else()
target_link_libraries (fltk_images_SHARED fltk_jpeg_SHARED)
endif (OPTION_USE_SYSTEM_LIBJPEG)
if (OPTION_USE_SYSTEM_LIBJPEG)
target_link_libraries(fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
else()
target_link_libraries(fltk_images_SHARED fltk_jpeg_SHARED)
endif (OPTION_USE_SYSTEM_LIBJPEG)
if (OPTION_USE_SYSTEM_LIBPNG)
target_link_libraries (fltk_images_SHARED ${FLTK_PNG_LIBRARIES})
else()
target_link_libraries (fltk_images_SHARED fltk_png_SHARED)
endif (OPTION_USE_SYSTEM_LIBPNG)
if (OPTION_USE_SYSTEM_LIBPNG)
target_link_libraries(fltk_images_SHARED ${FLTK_PNG_LIBRARIES})
else()
target_link_libraries(fltk_images_SHARED fltk_png_SHARED)
endif (OPTION_USE_SYSTEM_LIBPNG)
if (OPTION_USE_SYSTEM_ZLIB)
target_link_libraries (fltk_images_SHARED ${FLTK_ZLIB_LIBRARIES})
else()
target_link_libraries (fltk_images_SHARED fltk_z_SHARED)
endif (OPTION_USE_SYSTEM_ZLIB)
if (OPTION_USE_SYSTEM_ZLIB)
target_link_libraries(fltk_images_SHARED ${FLTK_ZLIB_LIBRARIES})
else()
target_link_libraries(fltk_images_SHARED fltk_z_SHARED)
endif (OPTION_USE_SYSTEM_ZLIB)
###################################################################
###################################################################
if (OPENGL_FOUND)
FL_ADD_LIBRARY (fltk_gl SHARED "${GLCPPFILES};${GL_HEADER_FILES};${GL_DRIVER_HEADER_FILES}")
target_link_libraries (fltk_gl_SHARED fltk_SHARED ${OPENGL_LIBRARIES})
endif (OPENGL_FOUND)
if (OPENGL_FOUND)
FL_ADD_LIBRARY(fltk_gl SHARED "${GLCPPFILES};${GL_HEADER_FILES};${GL_DRIVER_HEADER_FILES}")
if (MSVC)
target_link_libraries(fltk_gl_SHARED fltk ${OPENGL_LIBRARIES})
else ()
target_link_libraries(fltk_gl_SHARED fltk_SHARED ${OPENGL_LIBRARIES})
endif (MSVC)
endif (OPENGL_FOUND)
endif (OPTION_BUILD_SHARED_LIBS)
endif (OPTION_BUILD_SHARED_LIBS AND NOT MSVC)
#######################################################################
# Shared libraries, part 2: Visual Studio (MSVC)
#######################################################################
# Note to devs: As of June 2020 we can't build separate shared libs (DLL's)
# under Windows with Visual Studio (MSVC) but we can build one big DLL
# that comprises all FLTK and optional PNG, JPEG, and ZLIB libs.
# AlbrechtS
if (OPTION_BUILD_SHARED_LIBS AND MSVC)
set (SOURCES ${SHARED_FILES} ${FORMS_FILES} ${IMGCPPFILES})
if (OPENGL_FOUND)
list (APPEND SOURCES ${GLCPPFILES} ${GL_HEADER_FILES} ${GL_DRIVER_HEADER_FILES})
endif (OPENGL_FOUND)
FL_ADD_LIBRARY (fltk SHARED "${SOURCES}")
target_link_libraries (fltk_SHARED ${OPTIONAL_LIBS})
if (OPTION_USE_SYSTEM_LIBJPEG)
target_link_libraries (fltk_SHARED ${FLTK_JPEG_LIBRARIES})
else()
target_link_libraries (fltk_SHARED fltk_jpeg_SHARED)
endif (OPTION_USE_SYSTEM_LIBJPEG)
if (OPTION_USE_SYSTEM_LIBPNG)
target_link_libraries (fltk_SHARED ${FLTK_PNG_LIBRARIES})
else()
target_link_libraries (fltk_SHARED fltk_png_SHARED)
endif (OPTION_USE_SYSTEM_LIBPNG)
if (OPTION_USE_SYSTEM_ZLIB)
target_link_libraries (fltk_SHARED ${FLTK_ZLIB_LIBRARIES})
else()
target_link_libraries (fltk_SHARED fltk_z_SHARED)
endif (OPTION_USE_SYSTEM_ZLIB)
if (OPENGL_FOUND)
target_link_libraries (fltk_SHARED ${OPENGL_LIBRARIES})
endif (OPENGL_FOUND)
endif (OPTION_BUILD_SHARED_LIBS AND MSVC)
#######################################################################

View File

@ -14,7 +14,7 @@
# https://www.fltk.org/bugs.php
#
# Note: see ../configure.in and/or ../makeinclude for definition of
# Note: see ../configure.ac and/or ../makeinclude for definition of
# FL_VERSION (x.y.z), FL_ABI_VERSION (x.y.0), and FL_DSO_VERSION (x.y)
CPPFILES = \

View File

@ -1,7 +1,7 @@
#
# CMakeLists.txt used to build test and demo apps by the CMake build system
#
# Copyright 2004-2019 by Bill Spitzak and others.
# Copyright 2004-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
@ -15,120 +15,184 @@
#
#######################################################################
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/../bin/examples)
set (EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/../bin/examples)
include (../CMake/FLTK-Functions.cmake)
include (../CMake/fl_create_example.cmake)
#######################################################################
# audio libs for test apps
if(WIN32)
set(AUDIOLIBS winmm)
elseif(APPLE)
set(AUDIOLIBS "-framework CoreAudio")
elseif(HAVE_ALSA_ASOUNDLIB_H)
if (WIN32)
set (AUDIOLIBS winmm)
elseif (APPLE)
set (AUDIOLIBS "-framework CoreAudio")
elseif (HAVE_ALSA_ASOUNDLIB_H)
find_library(LIB_asound asound)
if(LIB_asound)
set(AUDIOLIBS ${LIB_asound})
endif(LIB_asound)
endif(WIN32)
if (LIB_asound)
set (AUDIOLIBS ${LIB_asound})
endif (LIB_asound)
endif (WIN32)
#######################################################################
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
)
#######################################################################
# Add the ANDROID_OK option if the example can be compiled for Android
# as well as for other platforms.
if(NOT ANDROID)
CREATE_EXAMPLE(adjuster adjuster.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(arc arc.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(animated animated.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(ask ask.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(bitmap bitmap.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(blocks blocks.cxx "fltk;${AUDIOLIBS}")
CREATE_EXAMPLE(boxtype boxtype.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(browser browser.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(button button.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(buttons buttons.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(checkers "checkers.cxx;checkers_pieces.fl" "fltk_images;fltk" ANDROID_OK)
CREATE_EXAMPLE(clock clock.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(colbrowser colbrowser.cxx fltk)
CREATE_EXAMPLE(color_chooser color_chooser.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(cursor cursor.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(curve curve.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(demo demo.cxx fltk)
CREATE_EXAMPLE(device device.cxx "fltk;fltk_images")
CREATE_EXAMPLE(doublebuffer doublebuffer.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(editor editor.cxx fltk ANDROID_OK)
CREATE_EXAMPLE(fast_slow fast_slow.fl fltk ANDROID_OK)
CREATE_EXAMPLE(file_chooser file_chooser.cxx "fltk_images;fltk")
CREATE_EXAMPLE(fonts fonts.cxx fltk)
CREATE_EXAMPLE(forms forms.cxx "fltk_forms;fltk")
CREATE_EXAMPLE(hello hello.cxx fltk)
CREATE_EXAMPLE(help_dialog help_dialog.cxx "fltk_images;fltk")
CREATE_EXAMPLE(icon icon.cxx fltk)
CREATE_EXAMPLE(iconize iconize.cxx fltk)
CREATE_EXAMPLE(image image.cxx fltk)
CREATE_EXAMPLE(inactive inactive.fl fltk)
CREATE_EXAMPLE(input input.cxx fltk)
CREATE_EXAMPLE(input_choice input_choice.cxx fltk)
CREATE_EXAMPLE(keyboard "keyboard.cxx;keyboard_ui.fl" fltk)
CREATE_EXAMPLE(label label.cxx fltk)
CREATE_EXAMPLE(line_style line_style.cxx fltk)
CREATE_EXAMPLE(list_visuals list_visuals.cxx fltk)
CREATE_EXAMPLE(mandelbrot "mandelbrot_ui.fl;mandelbrot.cxx" fltk)
CREATE_EXAMPLE(menubar menubar.cxx fltk)
CREATE_EXAMPLE(message message.cxx fltk)
CREATE_EXAMPLE(minimum minimum.cxx fltk)
CREATE_EXAMPLE(native-filechooser native-filechooser.cxx "fltk_images;fltk")
CREATE_EXAMPLE(navigation navigation.cxx fltk)
CREATE_EXAMPLE(output output.cxx fltk)
CREATE_EXAMPLE(overlay overlay.cxx fltk)
CREATE_EXAMPLE(pack pack.cxx fltk)
CREATE_EXAMPLE(pixmap pixmap.cxx fltk)
CREATE_EXAMPLE(pixmap_browser pixmap_browser.cxx "fltk_images;fltk")
CREATE_EXAMPLE(preferences preferences.fl fltk)
CREATE_EXAMPLE(offscreen offscreen.cxx fltk)
CREATE_EXAMPLE(radio radio.fl fltk)
CREATE_EXAMPLE(resize resize.fl fltk)
CREATE_EXAMPLE(resizebox resizebox.cxx fltk)
CREATE_EXAMPLE(rotated_text rotated_text.cxx fltk)
CREATE_EXAMPLE(scroll scroll.cxx fltk)
CREATE_EXAMPLE(subwindow subwindow.cxx fltk)
CREATE_EXAMPLE(sudoku sudoku.cxx "fltk_images;fltk;${AUDIOLIBS}")
CREATE_EXAMPLE(symbols symbols.cxx fltk)
CREATE_EXAMPLE(tabs tabs.fl fltk)
CREATE_EXAMPLE(table table.cxx fltk)
CREATE_EXAMPLE(threads threads.cxx fltk)
CREATE_EXAMPLE(tile tile.cxx fltk)
CREATE_EXAMPLE(tiled_image tiled_image.cxx fltk)
CREATE_EXAMPLE(tree tree.fl fltk)
CREATE_EXAMPLE(twowin twowin.cxx fltk)
CREATE_EXAMPLE(utf8 utf8.cxx fltk)
CREATE_EXAMPLE(valuators valuators.fl fltk)
CREATE_EXAMPLE(unittests unittests.cxx fltk)
CREATE_EXAMPLE(windowfocus windowfocus.cxx fltk)
CREATE_EXAMPLE(fltk-versions ../examples/fltk-versions.cxx fltk)
if (NOT ANDROID)
CREATE_EXAMPLE (adjuster adjuster.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (arc arc.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (animated animated.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (ask ask.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (bitmap bitmap.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (blocks blocks.cxx "fltk;${AUDIOLIBS}")
CREATE_EXAMPLE (boxtype boxtype.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (browser browser.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (button button.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (buttons buttons.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (checkers "checkers.cxx;checkers_pieces.fl" "fltk_images;fltk" ANDROID_OK)
CREATE_EXAMPLE (clock clock.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (colbrowser colbrowser.cxx fltk)
CREATE_EXAMPLE (color_chooser color_chooser.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (cursor cursor.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (curve curve.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (demo demo.cxx fltk)
CREATE_EXAMPLE (device device.cxx "fltk_images;fltk")
CREATE_EXAMPLE (doublebuffer doublebuffer.cxx fltk ANDROID_OK)
CREATE_EXAMPLE (editor "editor.cxx;editor-Info.plist" fltk ANDROID_OK)
CREATE_EXAMPLE (fast_slow fast_slow.fl fltk ANDROID_OK)
CREATE_EXAMPLE (file_chooser file_chooser.cxx "fltk_images;fltk")
CREATE_EXAMPLE (fonts fonts.cxx fltk)
CREATE_EXAMPLE (forms forms.cxx "fltk_forms;fltk")
CREATE_EXAMPLE (hello hello.cxx fltk)
CREATE_EXAMPLE (help_dialog help_dialog.cxx "fltk_images;fltk")
CREATE_EXAMPLE (icon icon.cxx fltk)
CREATE_EXAMPLE (iconize iconize.cxx fltk)
CREATE_EXAMPLE (image image.cxx fltk)
CREATE_EXAMPLE (inactive inactive.fl fltk)
CREATE_EXAMPLE (input input.cxx fltk)
CREATE_EXAMPLE (input_choice input_choice.cxx fltk)
CREATE_EXAMPLE (keyboard "keyboard.cxx;keyboard_ui.fl" fltk)
CREATE_EXAMPLE (label label.cxx fltk)
CREATE_EXAMPLE (line_style line_style.cxx fltk)
CREATE_EXAMPLE (list_visuals list_visuals.cxx fltk)
CREATE_EXAMPLE (mandelbrot "mandelbrot_ui.fl;mandelbrot.cxx" fltk)
CREATE_EXAMPLE (menubar menubar.cxx fltk)
CREATE_EXAMPLE (message message.cxx fltk)
CREATE_EXAMPLE (minimum minimum.cxx fltk)
CREATE_EXAMPLE (native-filechooser native-filechooser.cxx "fltk_images;fltk")
CREATE_EXAMPLE (navigation navigation.cxx fltk)
CREATE_EXAMPLE (output output.cxx fltk)
CREATE_EXAMPLE (overlay overlay.cxx fltk)
CREATE_EXAMPLE (pack pack.cxx fltk)
CREATE_EXAMPLE (pixmap pixmap.cxx fltk)
CREATE_EXAMPLE (pixmap_browser pixmap_browser.cxx "fltk_images;fltk")
CREATE_EXAMPLE (preferences preferences.fl fltk)
CREATE_EXAMPLE (offscreen offscreen.cxx fltk)
CREATE_EXAMPLE (radio radio.fl fltk)
CREATE_EXAMPLE (resize resize.fl fltk)
CREATE_EXAMPLE (resizebox resizebox.cxx fltk)
CREATE_EXAMPLE (rotated_text rotated_text.cxx fltk)
CREATE_EXAMPLE (scroll scroll.cxx fltk)
CREATE_EXAMPLE (subwindow subwindow.cxx fltk)
CREATE_EXAMPLE (sudoku sudoku.cxx "fltk_images;fltk;${AUDIOLIBS}")
CREATE_EXAMPLE (symbols symbols.cxx fltk)
CREATE_EXAMPLE (tabs tabs.fl fltk)
CREATE_EXAMPLE (table table.cxx fltk)
CREATE_EXAMPLE (threads threads.cxx fltk)
CREATE_EXAMPLE (tile tile.cxx fltk)
CREATE_EXAMPLE (tiled_image tiled_image.cxx fltk)
CREATE_EXAMPLE (tree tree.fl fltk)
CREATE_EXAMPLE (twowin twowin.cxx fltk)
CREATE_EXAMPLE (utf8 utf8.cxx fltk)
CREATE_EXAMPLE (valuators valuators.fl fltk)
CREATE_EXAMPLE (unittests unittests.cxx fltk)
CREATE_EXAMPLE (windowfocus windowfocus.cxx fltk)
CREATE_EXAMPLE (fltk-versions ../examples/fltk-versions.cxx fltk)
# OpenGL demos...
if(OPENGL_FOUND)
CREATE_EXAMPLE(CubeView "CubeMain.cxx;CubeView.cxx;CubeViewUI.fl" "fltk_gl;fltk")
CREATE_EXAMPLE(cube cube.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE(fractals "fractals.cxx;fracviewer.cxx" "fltk_gl;fltk")
CREATE_EXAMPLE(fullscreen fullscreen.cxx "fltk_gl;fltk")
CREATE_EXAMPLE(glpuzzle glpuzzle.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE(gl_overlay gl_overlay.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE(shape shape.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
endif(OPENGL_FOUND)
if (OPENGL_FOUND)
CREATE_EXAMPLE (CubeView "CubeMain.cxx;CubeView.cxx;CubeViewUI.fl" "fltk_gl;fltk")
CREATE_EXAMPLE (cube cube.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE (fractals "fractals.cxx;fracviewer.cxx" "fltk_gl;fltk")
CREATE_EXAMPLE (fullscreen fullscreen.cxx "fltk_gl;fltk")
CREATE_EXAMPLE (glpuzzle glpuzzle.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE (gl_overlay gl_overlay.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE (shape shape.cxx "fltk_gl;fltk;${OPENGL_LIBRARIES}")
endif (OPENGL_FOUND)
# Cairo demo - must also be built w/o Cairo (displays a message box)
if (FLTK_HAVE_CAIRO)
CREATE_EXAMPLE(cairo_test cairo_test.cxx "fltk_cairo;fltk")
CREATE_EXAMPLE (cairo_test cairo_test.cxx "fltk_cairo;fltk")
else ()
CREATE_EXAMPLE(cairo_test cairo_test.cxx fltk)
CREATE_EXAMPLE (cairo_test cairo_test.cxx fltk)
endif (FLTK_HAVE_CAIRO)
endif(NOT ANDROID)
# /EXPERIMENTAL/ Build some of the demo programs linked against the shared lib(s)
if (OPTION_BUILD_SHARED_LIBS)
if (MSVC) # MS Visual C++ aka. Visual Studio
# We need to link with fl_call_main.c, but this must not be compiled with
# macro FL_DLL, whereas the other source file(s) must be compiled with FL_DLL
# to link against the shared libs.
#
# ;-) I *love* Visual Studio (MSVC) ;-)
#
# Trick: build an object library with just this one file and link the executable
# against the shared library plus this object library. Another way would be to
# add the extra source file fl_call_main.c to the source files of all targets
# and set the FL_DLL compile_definition property only on the main *source* files
# but this doesn't work since the same file must be compiled for the "static"
# and the "shared" target, for instance hello.cxx for "hello" and "hello-shared".
add_library (CALL_MAIN OBJECT EXCLUDE_FROM_ALL ../src/fl_call_main.c)
# define a list of shared targets so we can set COMPILE_DEFINITIONS in a loop
set (SHARED_TARGETS)
CREATE_EXAMPLE (hello-shared hello.cxx "fltk_SHARED;CALL_MAIN")
CREATE_EXAMPLE (pixmap_browser-shared pixmap_browser.cxx "fltk_SHARED;CALL_MAIN")
CREATE_EXAMPLE (unittests-shared unittests.cxx "fltk_SHARED;CALL_MAIN")
list (APPEND SHARED_TARGETS hello pixmap_browser unittests)
if (OPENGL_FOUND)
CREATE_EXAMPLE (glpuzzle-shared glpuzzle.cxx "fltk_SHARED;CALL_MAIN;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE (shape-shared shape.cxx "fltk_SHARED;CALL_MAIN;${OPENGL_LIBRARIES}")
list (APPEND SHARED_TARGETS glpuzzle shape)
endif (OPENGL_FOUND)
# apply property COMPILE_DEFINITIONS in a loop for all necessary source files
foreach (tgt ${SHARED_TARGETS})
target_compile_definitions (${tgt}-shared PRIVATE "FL_DLL")
endforeach ()
else () # not MSVC
CREATE_EXAMPLE (hello-shared hello.cxx fltk_SHARED)
CREATE_EXAMPLE (pixmap_browser-shared pixmap_browser.cxx "fltk_images_SHARED;fltk_SHARED")
CREATE_EXAMPLE (unittests-shared unittests.cxx fltk_SHARED)
if (OPENGL_FOUND)
CREATE_EXAMPLE (glpuzzle-shared glpuzzle.cxx "fltk_gl_SHARED;fltk_SHARED;${OPENGL_LIBRARIES}")
CREATE_EXAMPLE (shape-shared shape.cxx "fltk_gl_SHARED;fltk_SHARED;${OPENGL_LIBRARIES}")
endif (OPENGL_FOUND)
endif (MSVC) # (not MSVC)
endif (OPTION_BUILD_SHARED_LIBS)
endif (NOT ANDROID)
# We need some support files for the demo programs:
@ -140,34 +204,31 @@ endif(NOT ANDROID)
# prepare for a "better" test file installation path
set (TESTFILE_PATH ${EXECUTABLE_OUTPUT_PATH})
# *FIXME* *DEBUG*
# message ("test/CMakeLists.txt: EXECUTABLE_OUTPUT_PATH = '${EXECUTABLE_OUTPUT_PATH}'")
# message ("test/CMakeLists.txt: TESTFILE_PATH = '${TESTFILE_PATH}'")
# fl_debug_var (TESTFILE_PATH)
# use a target filename to make sure the target directory gets created
configure_file(demo.menu ${TESTFILE_PATH}/demo.menu COPYONLY)
configure_file (demo.menu ${TESTFILE_PATH}/demo.menu COPYONLY)
# use target directory only to avoid redundancy
configure_file(rgb.txt ${TESTFILE_PATH} COPYONLY)
configure_file(help_dialog.html ${TESTFILE_PATH} COPYONLY)
configure_file(browser.cxx ${TESTFILE_PATH} COPYONLY)
configure_file(editor.cxx ${TESTFILE_PATH} COPYONLY)
# use target directory only (no filename) to avoid redundancy
configure_file (rgb.txt ${TESTFILE_PATH} COPYONLY)
configure_file (help_dialog.html ${TESTFILE_PATH} COPYONLY)
configure_file (browser.cxx ${TESTFILE_PATH} COPYONLY)
configure_file (editor.cxx ${TESTFILE_PATH} COPYONLY)
# Apple macOS creates bundles instead of executables and needs a little bit
# more help for demos to run correctly
if(APPLE AND NOT OPTION_APPLE_X11)
if (APPLE AND NOT OPTION_APPLE_X11)
# make the menu structure part of the app
target_sources(demo PRIVATE demo.menu)
set_target_properties(demo PROPERTIES MACOSX_BUNDLE TRUE RESOURCE demo.menu )
# make the menu structure part of the app
target_sources (demo PRIVATE demo.menu)
set_target_properties (demo PROPERTIES MACOSX_BUNDLE TRUE RESOURCE demo.menu)
# add a sample RGB file that otherwise only exists under X11
target_sources(colbrowser PRIVATE rgb.txt)
set_target_properties(colbrowser PROPERTIES MACOSX_BUNDLE TRUE RESOURCE rgb.txt )
# add a sample RGB file that otherwise only exists under X11
target_sources (colbrowser PRIVATE rgb.txt)
set_target_properties (colbrowser PROPERTIES MACOSX_BUNDLE TRUE RESOURCE rgb.txt)
# help_dialog displays an html file as an example
target_sources(help_dialog PRIVATE help_dialog.html)
set_target_properties(help_dialog PROPERTIES MACOSX_BUNDLE TRUE RESOURCE help_dialog.html )
# help_dialog displays an html file as an example
target_sources (help_dialog PRIVATE help_dialog.html)
set_target_properties (help_dialog PROPERTIES MACOSX_BUNDLE TRUE RESOURCE help_dialog.html)
endif(APPLE AND NOT OPTION_APPLE_X11)
endif (APPLE AND NOT OPTION_APPLE_X11)