diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2020-06-13 15:19:27 +0200 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2020-07-15 00:34:53 +0200 |
| commit | 720b84ef9d086245f5119d143202a2661a78ca53 (patch) | |
| tree | 26bcd11ffa797c3c01917507e9204fbc9f9b45aa | |
| parent | 54425030774eb04b29c749ffa85d224c8bbfcc34 (diff) | |
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
| -rw-r--r-- | CMake/FLTK-Functions.cmake | 55 | ||||
| -rw-r--r-- | CMake/export.cmake | 138 | ||||
| -rw-r--r-- | CMake/fl_add_library.cmake | 123 | ||||
| -rw-r--r-- | CMake/fl_create_example.cmake | 145 | ||||
| -rw-r--r-- | CMake/fl_debug_var.cmake | 47 | ||||
| -rw-r--r-- | CMake/install.cmake | 121 | ||||
| -rw-r--r-- | CMake/macros.cmake | 204 | ||||
| -rw-r--r-- | CMake/options.cmake | 469 | ||||
| -rw-r--r-- | CMake/resources.cmake | 221 | ||||
| -rw-r--r-- | CMake/setup.cmake | 201 | ||||
| -rw-r--r-- | CMake/variables.cmake | 61 | ||||
| -rw-r--r-- | CMakeLists.txt | 140 | ||||
| -rw-r--r-- | README.CMake.txt | 6 | ||||
| -rw-r--r-- | configure.ac | 23 | ||||
| -rw-r--r-- | documentation/CMakeLists.txt | 135 | ||||
| -rw-r--r-- | documentation/Doxyfile.in | 2 | ||||
| -rw-r--r-- | documentation/Makefile | 6 | ||||
| -rw-r--r-- | documentation/src/fltk-book.tex.in | 2 | ||||
| -rw-r--r-- | fltk-config.in | 6 | ||||
| -rw-r--r-- | fltk.list.in | 2 | ||||
| -rw-r--r-- | fltk.spec.in | 2 | ||||
| -rw-r--r-- | fluid/CMakeLists.txt | 109 | ||||
| -rw-r--r-- | makeinclude.in | 6 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 233 | ||||
| -rw-r--r-- | src/Makefile | 2 | ||||
| -rw-r--r-- | test/CMakeLists.txt | 291 |
26 files changed, 1509 insertions, 1241 deletions
diff --git a/CMake/FLTK-Functions.cmake b/CMake/FLTK-Functions.cmake new file mode 100644 index 000000000..cf7b0ae1a --- /dev/null +++ b/CMake/FLTK-Functions.cmake @@ -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 +# diff --git a/CMake/export.cmake b/CMake/export.cmake index d6c07564a..6e8bc5dd6 100644 --- a/CMake/export.cmake +++ b/CMake/export.cmake @@ -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) diff --git a/CMake/fl_add_library.cmake b/CMake/fl_add_library.cmake new file mode 100644 index 000000000..29baa9562 --- /dev/null +++ b/CMake/fl_add_library.cmake @@ -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) diff --git a/CMake/fl_create_example.cmake b/CMake/fl_create_example.cmake new file mode 100644 index 000000000..6fa14c4e9 --- /dev/null +++ b/CMake/fl_create_example.cmake @@ -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) diff --git a/CMake/fl_debug_var.cmake b/CMake/fl_debug_var.cmake new file mode 100644 index 000000000..4cecf3c7a --- /dev/null +++ b/CMake/fl_debug_var.cmake @@ -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) diff --git a/CMake/install.cmake b/CMake/install.cmake index 0ab8e6073..c01f19d4d 100644 --- a/CMake/install.cmake +++ b/CMake/install.cmake @@ -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 + "${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} + +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 +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)) diff --git a/CMake/macros.cmake b/CMake/macros.cmake deleted file mode 100644 index b91b80b89..000000000 --- a/CMake/macros.cmake +++ /dev/null @@ -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) - -####################################################################### diff --git a/CMake/options.cmake b/CMake/options.cmake index 63412ebc3..0c13fa9a6 100644 --- a/CMake/options.cmake +++ b/CMake/options.cmake @@ -23,49 +23,33 @@ if (DEBUG_OPTIONS_CMAKE) 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}") - - 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) + 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) 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) - -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) + 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) else() - 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(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) + 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 (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) diff --git a/CMake/resources.cmake b/CMake/resources.cmake index 4539f6f87..f5878e206 100644 --- a/CMake/resources.cmake +++ b/CMake/resources.cmake @@ -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) + +if (NOT HAVE_DIRENT_H) fl_find_header (HAVE_SYS_NDIR_H sys/ndir.h) - if(NOT HAVE_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) + 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) + 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) - -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) +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) ####################################################################### # 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 diff --git a/CMake/setup.cmake b/CMake/setup.cmake index 8935ed2bf..db661a54f 100644 --- a/CMake/setup.cmake +++ b/CMake/setup.cmake @@ -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}) - -# 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) - -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.") +set (FLTK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + +# Setup install locations (requires CMake 2.8.4) + +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(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 (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) ####################################################################### # 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) - -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 "^8$") - set(U64 "unsigned") -else() - if(${SIZEOF_LONG} MATCHES "^8$") - set(U64 "unsigned long") - endif(${SIZEOF_LONG} MATCHES "^8$") -endif(${SIZEOF_INT} MATCHES "^8$") +CHECK_TYPE_SIZE("long long" HAVE_LONG_LONG) + +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 "^8$") + set (U64 "unsigned") +else () + if (${SIZEOF_LONG} MATCHES "^8$") + set (U64 "unsigned long") + endif (${SIZEOF_LONG} MATCHES "^8$") +endif (${SIZEOF_INT} MATCHES "^8$") diff --git a/CMake/variables.cmake b/CMake/variables.cmake index ebafe7b10..7ff8a53e1 100644 --- a/CMake/variables.cmake +++ b/CMake/variables.cmake @@ -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) diff --git a/CMakeLists.txt b/CMakeLists.txt index 172a949d0..281d6b440 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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()` +####################################################################### + +# 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 the FLTK project and version +####################################################################### -project(FLTK) -cmake_minimum_required(VERSION 2.6.3) +project (FLTK VERSION 1.4.0) ####################################################################### -# define some macros +# include macro definitions of generally used macros ####################################################################### -include(CMake/macros.cmake) + +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) diff --git a/README.CMake.txt b/README.CMake.txt index 57c0cc9b0..f64a80a83 100644 --- a/README.CMake.txt +++ b/README.CMake.txt @@ -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 diff --git a/configure.ac b/configure.ac index 921b17814..692c3d706 100644 --- a/configure.ac +++ b/configure.ac @@ -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} - -AC_SUBST(FL_MAJOR_VERSION) -AC_SUBST(FL_MINOR_VERSION) -AC_SUBST(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} + +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) diff --git a/documentation/CMakeLists.txt b/documentation/CMakeLists.txt index 66546cfa6..c240531e5 100644 --- a/documentation/CMakeLists.txt +++ b/documentation/CMakeLists.txt @@ -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) diff --git a/documentation/Doxyfile.in b/documentation/Doxyfile.in index 893f3bd28..80c9dafaa 100644 --- a/documentation/Doxyfile.in +++ b/documentation/Doxyfile.in @@ -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 diff --git a/documentation/Makefile b/documentation/Makefile index a1c370799..5e95ad5b8 100644 --- a/documentation/Makefile +++ b/documentation/Makefile @@ -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" \ < $< > $@ diff --git a/documentation/src/fltk-book.tex.in b/documentation/src/fltk-book.tex.in index e1568d6d6..880d06ead 100644 --- a/documentation/src/fltk-book.tex.in +++ b/documentation/src/fltk-book.tex.in @@ -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}} diff --git a/fltk-config.in b/fltk-config.in index c98d2b538..bf0bdef4e 100644 --- a/fltk-config.in +++ b/fltk-config.in @@ -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" diff --git a/fltk.list.in b/fltk.list.in index 08877ba28..89c61426b 100644 --- a/fltk.list.in +++ b/fltk.list.in @@ -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 diff --git a/fltk.spec.in b/fltk.spec.in index d13e6b5d9..d0fca8bbe 100644 --- a/fltk.spec.in +++ b/fltk.spec.in @@ -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 diff --git a/fluid/CMakeLists.txt b/fluid/CMakeLists.txt index e730f274c..30b105891 100644 --- a/fluid/CMakeLists.txt +++ b/fluid/CMakeLists.txt @@ -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) diff --git a/makeinclude.in b/makeinclude.in index 7980ac06b..e00baa8ea 100644 --- a/makeinclude.in +++ b/makeinclude.in @@ -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 } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b7597f74c..d3ef3940c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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) +####################################################################### + +if (OPTION_BUILD_SHARED_LIBS AND NOT MSVC) + + 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_images SHARED "${IMGCPPFILES}") + target_link_libraries (fltk_images_SHARED fltk_SHARED) + + 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_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) + +endif (OPTION_BUILD_SHARED_LIBS AND NOT MSVC) + +####################################################################### +# Shared libraries, part 2: 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. +# 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) - - FL_ADD_LIBRARY(fltk SHARED "${SHARED_FILES}") - target_link_libraries(fltk_SHARED ${OPTIONAL_LIBS}) - - ################################################################### - - 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}") - 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_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 (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) +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) ####################################################################### diff --git a/src/Makefile b/src/Makefile index 0cbde688f..bb4b6af79 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 = \ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f47f33b93..5b6cd575f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -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) |
