Reorder CMake build options for better order of include directories

This is only one minor step to remove issues of some CMake options
that can cause conflicting include directories ("-I..." switches).

See implementation note in CMake/options.cmake.
This commit is contained in:
Albrecht Schlosser 2022-04-06 20:08:10 +02:00
parent 6c07d7b597
commit b4bbc53c5e
1 changed files with 144 additions and 108 deletions

View File

@ -15,6 +15,38 @@
# https://www.fltk.org/bugs.php
#
#######################################################################
# Important implementation note for FLTK developers
#######################################################################
#
# *FIXME* In the current version of FLTK's CMake build files we're
# using 'include_directories()' to define directories that must be
# used in compile commands (typically "-Idirectories").
#
# include_directories() is a global command that affects *all* source
# files in the current directory and all subdirectories. This can lead
# to conflicts and should be replaced with target_include_directories()
# which can be applied to particular targets and source files only.
#
# This could remove some of these potential build conflicts, for
# instance # if the bundled image libs and Cairo or Pango are used
# together (Pango depends on Cairo and Cairo depends on libpng).
# However, this is not a proper solution!
#
# That said, order of "-I..." switches matters, and therefore the
# bundled libraries (png, jpeg, zlib) *must* appear before any other
# include_directories() statements that might introduce conflicts.
# Currently 'resources.cmake' is included before this file and thus
# 'include_directories (${FREETYPE_PATH})' is executed before this
# file but this doesn't matter.
#
# This *MUST* be fixed using target_include_directories() as
# appropriate but this would need a major rework.
#
# Albrecht-S April 6, 2022
#
#######################################################################
set (DEBUG_OPTIONS_CMAKE 0)
if (DEBUG_OPTIONS_CMAKE)
message (STATUS "[** options.cmake **]")
@ -46,6 +78,118 @@ set (OPTION_ABI_VERSION ""
set (FL_ABI_VERSION ${OPTION_ABI_VERSION})
#######################################################################
# Bundled Library Options
#######################################################################
option (OPTION_USE_SYSTEM_ZLIB "use system zlib" ON)
if (APPLE)
option (OPTION_USE_SYSTEM_LIBJPEG "use system libjpeg" OFF)
option (OPTION_USE_SYSTEM_LIBPNG "use system libpng" OFF)
else ()
option (OPTION_USE_SYSTEM_LIBJPEG "use system libjpeg" ON)
option (OPTION_USE_SYSTEM_LIBPNG "use system libpng" ON)
endif ()
#######################################################################
# Bundled Compression Library : zlib
#######################################################################
if (OPTION_USE_SYSTEM_ZLIB)
find_package (ZLIB)
endif ()
if (OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
set (FLTK_USE_BUILTIN_ZLIB FALSE)
set (FLTK_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
include_directories (${ZLIB_INCLUDE_DIRS})
else()
if (OPTION_USE_SYSTEM_ZLIB)
message (STATUS "cannot find system zlib library - using built-in\n")
endif ()
add_subdirectory (zlib)
set (FLTK_USE_BUILTIN_ZLIB TRUE)
set (FLTK_ZLIB_LIBRARIES fltk_z)
set (ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/zlib)
endif ()
set (HAVE_LIBZ 1)
#######################################################################
# Bundled Image Library : libjpeg
#######################################################################
if (OPTION_USE_SYSTEM_LIBJPEG)
find_package (JPEG)
endif ()
if (OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
set (FLTK_USE_BUILTIN_JPEG FALSE)
set (FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
include_directories (${JPEG_INCLUDE_DIR})
else ()
if (OPTION_USE_SYSTEM_LIBJPEG)
message (STATUS "cannot find system jpeg library - using built-in\n")
endif ()
add_subdirectory (jpeg)
set (FLTK_USE_BUILTIN_JPEG TRUE)
set (FLTK_JPEG_LIBRARIES fltk_jpeg)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/jpeg)
endif ()
set (HAVE_LIBJPEG 1)
#######################################################################
# Bundled Image Library : libpng
#######################################################################
if (OPTION_USE_SYSTEM_LIBPNG)
find_package (PNG)
endif ()
if (OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
set (FLTK_USE_BUILTIN_PNG FALSE)
set (FLTK_PNG_LIBRARIES ${PNG_LIBRARIES})
include_directories (${PNG_INCLUDE_DIRS})
add_definitions (${PNG_DEFINITIONS})
set (_INCLUDE_SAVED ${CMAKE_REQUIRED_INCLUDES})
list (APPEND CMAKE_REQUIRED_INCLUDES ${PNG_INCLUDE_DIRS})
# Note: we do not check for <libpng/png.h> explicitly.
# This is assumed to exist if we have PNG_FOUND and don't find <png.h>
# FIXME - Force search by unsetting the chache variable. Maybe use
# FIXME - another cache variable to check for option changes?
unset (HAVE_PNG_H CACHE) # force search
check_include_file (png.h HAVE_PNG_H)
mark_as_advanced (HAVE_PNG_H)
set (CMAKE_REQUIRED_INCLUDES ${_INCLUDE_SAVED})
unset (_INCLUDE_SAVED)
else ()
if (OPTION_USE_SYSTEM_LIBPNG)
message (STATUS "cannot find system png library - using built-in\n")
endif ()
add_subdirectory (png)
set (FLTK_USE_BUILTIN_PNG TRUE)
set (FLTK_PNG_LIBRARIES fltk_png)
set (HAVE_PNG_H 1)
set (HAVE_PNG_GET_VALID 1)
set (HAVE_PNG_SET_TRNS_TO_ALPHA 1)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/png)
endif ()
set (HAVE_LIBPNG 1)
#######################################################################
if (UNIX)
option (OPTION_CREATE_LINKS "create backwards compatibility links" OFF)
@ -365,114 +509,6 @@ if (debug_threads)
endif (debug_threads)
unset (debug_threads)
#######################################################################
# Image Library Options
#######################################################################
option (OPTION_USE_SYSTEM_ZLIB "use system zlib" ON)
if (APPLE)
option (OPTION_USE_SYSTEM_LIBJPEG "use system libjpeg" OFF)
option (OPTION_USE_SYSTEM_LIBPNG "use system libpng" OFF)
else ()
option (OPTION_USE_SYSTEM_LIBJPEG "use system libjpeg" ON)
option (OPTION_USE_SYSTEM_LIBPNG "use system libpng" ON)
endif ()
#######################################################################
# Image Library : ZLIB
#######################################################################
if (OPTION_USE_SYSTEM_ZLIB)
find_package (ZLIB)
endif ()
if (OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
set (FLTK_USE_BUILTIN_ZLIB FALSE)
set (FLTK_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
include_directories (${ZLIB_INCLUDE_DIRS})
else()
if (OPTION_USE_SYSTEM_ZLIB)
message (STATUS "cannot find system zlib library - using built-in\n")
endif ()
add_subdirectory (zlib)
set (FLTK_USE_BUILTIN_ZLIB TRUE)
set (FLTK_ZLIB_LIBRARIES fltk_z)
set (ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/zlib)
endif ()
set (HAVE_LIBZ 1)
#######################################################################
if (OPTION_USE_SYSTEM_LIBJPEG)
find_package (JPEG)
endif ()
if (OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
set (FLTK_USE_BUILTIN_JPEG FALSE)
set (FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
include_directories (${JPEG_INCLUDE_DIR})
else ()
if (OPTION_USE_SYSTEM_LIBJPEG)
message (STATUS "cannot find system jpeg library - using built-in\n")
endif ()
add_subdirectory (jpeg)
set (FLTK_USE_BUILTIN_JPEG TRUE)
set (FLTK_JPEG_LIBRARIES fltk_jpeg)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/jpeg)
endif ()
set (HAVE_LIBJPEG 1)
#######################################################################
if (OPTION_USE_SYSTEM_LIBPNG)
find_package (PNG)
endif ()
if (OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
set (FLTK_USE_BUILTIN_PNG FALSE)
set (FLTK_PNG_LIBRARIES ${PNG_LIBRARIES})
include_directories (${PNG_INCLUDE_DIRS})
add_definitions (${PNG_DEFINITIONS})
set (_INCLUDE_SAVED ${CMAKE_REQUIRED_INCLUDES})
list (APPEND CMAKE_REQUIRED_INCLUDES ${PNG_INCLUDE_DIRS})
# Note: we do not check for <libpng/png.h> explicitly.
# This is assumed to exist if we have PNG_FOUND and don't find <png.h>
# FIXME - Force search by unsetting the chache variable. Maybe use
# FIXME - another cache variable to check for option changes?
unset (HAVE_PNG_H CACHE) # force search
check_include_file (png.h HAVE_PNG_H)
mark_as_advanced (HAVE_PNG_H)
set (CMAKE_REQUIRED_INCLUDES ${_INCLUDE_SAVED})
unset (_INCLUDE_SAVED)
else ()
if (OPTION_USE_SYSTEM_LIBPNG)
message (STATUS "cannot find system png library - using built-in\n")
endif ()
add_subdirectory (png)
set (FLTK_USE_BUILTIN_PNG TRUE)
set (FLTK_PNG_LIBRARIES fltk_png)
set (HAVE_PNG_H 1)
set (HAVE_PNG_GET_VALID 1)
set (HAVE_PNG_SET_TRNS_TO_ALPHA 1)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/png)
endif ()
set (HAVE_LIBPNG 1)
#######################################################################
if (X11_Xinerama_FOUND)