summaryrefslogtreecommitdiff
path: root/jpeg
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2024-02-07 18:30:11 +0100
committerAlbrecht Schlosser <albrechts.fltk@online.de>2024-02-07 18:37:34 +0100
commitfd5cd809356dc73d2ede5bb2f0db25098771cb8e (patch)
tree70c82946eb7d11eba910bb387dc3bcc20abfd42c /jpeg
parent1cf6fdfa8562fafa0566e1008f74ea94f71356e4 (diff)
Introduce "Modern CMake" in FLTK
This is a big commit and there are too many changes to list them all. The main changes are: - rename all CMake build options to 'FLTK_*' - export library targets with namespace (prefix) 'fltk::' - standardize shared library target names with suffix '-shared' - set public build properties on libraries for consumers - document library names and aliases in README.CMake.txt - document changes in "Migrating Code from FLTK 1.3 to 1.4" - partial backwards compatibility for old user projects Included but not directly related changes: - fix Windows (Visual Studio) DLL build - add CMake function fl_debug_target() to show target properties - don't build test programs if FLTK is a subproject - internal: reformat CMake code: remove space before '(' Thanks to Matthias and Manolo for their help, testing, and feeback.
Diffstat (limited to 'jpeg')
-rw-r--r--jpeg/CMakeLists.txt91
1 files changed, 60 insertions, 31 deletions
diff --git a/jpeg/CMakeLists.txt b/jpeg/CMakeLists.txt
index f65f71636..c1ec4fae8 100644
--- a/jpeg/CMakeLists.txt
+++ b/jpeg/CMakeLists.txt
@@ -1,7 +1,7 @@
#
# JPEG library CMake configuration for the Fast Light Toolkit (FLTK).
#
-# Copyright 1998-2023 by Bill Spitzak and others.
+# Copyright 1998-2024 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
@@ -18,70 +18,99 @@
# (For now, let's use the mode that requires the image fit into memory.
# This is the recommended mode for Win32 anyway.)
-set (systemdependent_SRCS jmemnobs.c)
+set(systemdependent_SRCS jmemnobs.c)
# library object files common to compression and decompression
-set (common_SRCS
- jaricom.c jcomapi.c jutils.c jerror.c jmemmgr.c
+set(common_SRCS
+ jaricom.c jcomapi.c jutils.c jerror.c jmemmgr.c
)
# compression library object files
-set (compression_SRCS
- jcapimin.c jcapistd.c jcarith.c jctrans.c jcparam.c jdatadst.c jcinit.c
- jcmaster.c jcmarker.c jcmainct.c jcprepct.c jccoefct.c jccolor.c
- jcsample.c jchuff.c jcdctmgr.c jfdctfst.c jfdctflt.c
- jfdctint.c
+set(compression_SRCS
+ jcapimin.c jcapistd.c jcarith.c jctrans.c jcparam.c jdatadst.c jcinit.c
+ jcmaster.c jcmarker.c jcmainct.c jcprepct.c jccoefct.c jccolor.c
+ jcsample.c jchuff.c jcdctmgr.c jfdctfst.c jfdctflt.c
+ jfdctint.c
)
# decompression library object files
-set (decompression_SRCS
- jdapimin.c jdapistd.c jdarith.c jdtrans.c jdatasrc.c jdmaster.c
- jdinput.c jdmarker.c jdhuff.c jdmainct.c jdcoefct.c
- jdpostct.c jddctmgr.c jidctfst.c jidctflt.c jidctint.c
- jdsample.c jdcolor.c jquant1.c jquant2.c jdmerge.c
+set(decompression_SRCS
+ jdapimin.c jdapistd.c jdarith.c jdtrans.c jdatasrc.c jdmaster.c
+ jdinput.c jdmarker.c jdhuff.c jdmainct.c jdcoefct.c
+ jdpostct.c jddctmgr.c jidctfst.c jidctflt.c jidctint.c
+ jdsample.c jdcolor.c jquant1.c jquant2.c jdmerge.c
)
-list (APPEND BUILD_SRCS "${systemdependent_SRCS};${common_SRCS}")
-list (APPEND BUILD_SRCS "${compression_SRCS};${decompression_SRCS}")
+list(APPEND BUILD_SRCS "${systemdependent_SRCS};${common_SRCS}")
+list(APPEND BUILD_SRCS "${compression_SRCS};${decompression_SRCS}")
#######################################################################
+# Set common variables for static and shared builds
+#######################################################################
+
+set(_include_dirs
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:include>
+)
-# Suppress some Visual Studio compiler warnings
+# Suppress Visual Studio compiler warnings
-set (msvc_warnings /wd4267)
+set(msvc_warnings /wd4267)
#######################################################################
# Build the static library
#######################################################################
-FL_ADD_LIBRARY (fltk_jpeg STATIC "${BUILD_SRCS}")
+fl_add_library(fltk_jpeg STATIC "${BUILD_SRCS}")
+set(target fltk_jpeg)
+
+target_include_directories(${target} PUBLIC ${_include_dirs})
+
+if(MSVC)
+ target_compile_options(${target} PRIVATE ${msvc_warnings})
+endif(MSVC)
-if (MSVC)
- target_compile_options (fltk_jpeg PRIVATE ${msvc_warnings})
-endif (MSVC)
+list(APPEND FLTK_IMAGE_LIBRARIES fltk::jpeg)
+
+# Propagate to parent scope (modified by fl_add_library and here)
+set(FLTK_LIBRARIES ${FLTK_LIBRARIES} PARENT_SCOPE)
+set(FLTK_IMAGE_LIBRARIES ${FLTK_IMAGE_LIBRARIES} PARENT_SCOPE)
#######################################################################
# Build the shared library (optional)
#######################################################################
-if (OPTION_BUILD_SHARED_LIBS)
+if(FLTK_BUILD_SHARED_LIBS)
+
+ # ensure to export all symbols for Windows DLL's
+ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
+
+ fl_add_library(fltk_jpeg SHARED "${BUILD_SRCS}")
+ set(target fltk_jpeg-shared)
+
+ target_include_directories(${target} PUBLIC ${_include_dirs})
+
+ if(MSVC)
+ target_compile_options(${target} PRIVATE ${msvc_warnings})
+ endif(MSVC)
- FL_ADD_LIBRARY (fltk_jpeg SHARED "${BUILD_SRCS}")
+ list(APPEND FLTK_IMAGE_LIBRARIES_SHARED fltk::jpeg-shared)
- if (MSVC)
- target_compile_options (fltk_jpeg_SHARED PRIVATE ${msvc_warnings})
- endif (MSVC)
+ # Propagate to parent scope (modified by fl_add_library and here)
+ set(FLTK_LIBRARIES_SHARED ${FLTK_LIBRARIES_SHARED} PARENT_SCOPE)
+ set(FLTK_IMAGE_LIBRARIES_SHARED ${FLTK_IMAGE_LIBRARIES_SHARED} PARENT_SCOPE)
-endif (OPTION_BUILD_SHARED_LIBS)
+endif(FLTK_BUILD_SHARED_LIBS)
#######################################################################
# Install the library headers
#######################################################################
-install (FILES jconfig.h jerror.h jmorecfg.h jpeglib.h
- fltk_jpeg_prefix.h
- DESTINATION ${FLTK_INCLUDEDIR}/FL/images
+install(FILES
+ jconfig.h jerror.h jmorecfg.h jpeglib.h fltk_jpeg_prefix.h
+ DESTINATION
+ ${FLTK_INCLUDEDIR}/FL/images
)