Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions builtins/libjpeg/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Copyright (C) 1995-2026, Rene Brun and Fons Rademakers.
# All rights reserved.
#
# For the licensing terms see $ROOTSYS/LICENSE.
# For the list of contributors see $ROOTSYS/README/CREDITS.

# **PLEASE UPDATE ALSO THE FOLLOWING LINE WHEN UPDATING THE VERSION**
# 10 Dec 2025, https://github.com/libjpeg-turbo/libjpeg-turbo/releases/tag/3.1.3
set(ROOT_LIBJPEG_VERSION 3.1.3)
set(ROOT_LIBJPEG_HASH "3a13a5ba767dc8264bc40b185e41368a80d5d5f945944d1dbaa4b2fb0099f4e5")

set(ROOT_LIBJPEG_PREFIX ${CMAKE_BINARY_DIR}/builtins/LIBJPEG-prefix)

# Here we need two cases because the library has two different names on Linux/macOS and Windows
if(MSVC)
set(ROOT_LIBJPEG_LIBRARY ${ROOT_LIBJPEG_PREFIX}/lib/jpeg-static${CMAKE_STATIC_LIBRARY_SUFFIX})
else()
set(ROOT_LIBJPEG_LIBRARY ${ROOT_LIBJPEG_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jpeg${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()

if(WIN32 AND NOT CMAKE_GENERATOR MATCHES Ninja)
if(winrtdebug)
set(ROOT_LIBJPEG_BUILD_COMMAND_FLAGS "--config Debug")
else()
set(ROOT_LIBJPEG_BUILD_COMMAND_FLAGS "--config Release")
endif()
endif()

ExternalProject_Add(
BUILTIN_LIBJPEG
PREFIX ${ROOT_LIBJPEG_PREFIX}
URL https://root.cern/download/libjpeg-turbo-${ROOT_LIBJPEG_VERSION}.tar.gz
URL_HASH SHA256=${ROOT_LIBJPEG_HASH}
CMAKE_ARGS -G ${CMAKE_GENERATOR}
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DCMAKE_INSTALL_LIBDIR=<INSTALL_DIR>/lib
-DENABLE_SHARED=OFF
-DWITH_TURBOJPEG=OFF
-DWITH_SIMD=OFF
-DWITH_TOOLS=OFF
-DWITH_JAVA=OFF
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_LIBJPEG_BUILD_COMMAND_FLAGS}
INSTALL_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_LIBJPEG_BUILD_COMMAND_FLAGS} --target install
LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1
BUILD_BYPRODUCTS ${ROOT_LIBJPEG_LIBRARY}
TIMEOUT 600
)

file(MAKE_DIRECTORY ${ROOT_LIBJPEG_PREFIX}/include)
add_library(JPEG::JPEG IMPORTED STATIC GLOBAL)
set_target_properties(JPEG::JPEG PROPERTIES
IMPORTED_LOCATION ${ROOT_LIBJPEG_LIBRARY}
INTERFACE_INCLUDE_DIRECTORIES ${ROOT_LIBJPEG_PREFIX}/include
)
25 changes: 17 additions & 8 deletions cmake/modules/SearchInstalledSoftware.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -519,12 +519,18 @@ if(asimage)
list(APPEND ASEXTRA_LIBRARIES JPEG::JPEG)
else()
if(fail-on-missing)
message(SEND_ERROR "Dependency libjpeg not found. Please make sure it's installed on the system, or force the builtin libjpeg with '-Dbuiltin_jpeg=ON', or set '-Dfail-on-missing=OFF' to fall back to builtins if a dependency is not found.")
message(SEND_ERROR "Dependency libjpeg not found. Please make sure it's installed on the system, or force the builtin libjpeg with '-Dbuiltin_jpeg=ON', or set '-Dfail-on-missing=OFF' to fall back to builtins if a dependency is not found.")
else()
set(builtin_jpeg ON CACHE BOOL "Enabled because needed for asimage" FORCE)
endif()
endif()
endif()

if(builtin_jpeg)
add_subdirectory(builtins/libjpeg)
get_target_property(JPEG_INCLUDE_DIR JPEG::JPEG INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(JPEG_LIBRARY_LOCATION JPEG::JPEG IMPORTED_LOCATION)
endif()

if(asimage_tiff)
find_Package(TIFF)
Expand Down Expand Up @@ -556,8 +562,12 @@ if(asimage)
AFTERIMAGE
DOWNLOAD_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/graf2d/asimage/src/libAfterImage AFTERIMAGE
INSTALL_DIR ${CMAKE_BINARY_DIR}
CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DFREETYPE_INCLUDE_DIR=${FREETYPE_INCLUDE_DIR} -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}
CMAKE_ARGS -G ${CMAKE_GENERATOR}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DFREETYPE_INCLUDE_DIR=${FREETYPE_INCLUDE_DIR}
-DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}
-DJPEG_INCLUDE_DIR=${JPEG_INCLUDE_DIR}
-DJPEG_LIBRARY_LOCATION=${JPEG_LIBRARY_LOCATION}
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ASTEP_EXTRA_BUILD_ARGS}
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ASTEP_LIB_DIR}/libAfterImage.lib <INSTALL_DIR>/lib/
LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1
Expand All @@ -567,11 +577,6 @@ if(asimage)
)
set(AFTERIMAGE_INCLUDE_DIR ${CMAKE_BINARY_DIR}/AFTERIMAGE-prefix/src/AFTERIMAGE)
else()
if(NOT builtin_jpeg)
list(APPEND afterimage_extra_args --with-jpeg-includes=${JPEG_INCLUDE_DIR})
else()
list(APPEND afterimage_extra_args --with-builtin-jpeg)
endif()
if(NOT builtin_gif)
list(APPEND afterimage_extra_args --with-gif --with-gif-includes=${GIF_INCLUDE_DIR} --without-builtin-gif)
else()
Expand Down Expand Up @@ -614,6 +619,7 @@ if(asimage)
--with-ttf --with-afterbase=no
--without-svg --disable-glx
--with-jpeg
--with-jpeg-includes=${JPEG_INCLUDE_DIR}
--with-png
${afterimage_extra_args}
CC=${CMAKE_C_COMPILER} CFLAGS=${_after_cflags}
Expand All @@ -627,6 +633,9 @@ if(asimage)
set(AFTERIMAGE_INCLUDE_DIR ${CMAKE_BINARY_DIR}/AFTERIMAGE-prefix/src/AFTERIMAGE)
endif()
endif()
if(builtin_jpeg)
add_dependencies(AFTERIMAGE BUILTIN_LIBJPEG)
endif()
if(builtin_freetype)
add_dependencies(AFTERIMAGE FREETYPE)
endif()
Expand Down
2 changes: 2 additions & 0 deletions graf2d/asimage/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImage
)

target_include_directories(ASImage SYSTEM PRIVATE ${FREETYPE_INCLUDE_DIRS} ${AFTERIMAGE_INCLUDE_DIR} ${X11_INCLUDE_DIR})
target_link_libraries(ASImage PRIVATE JPEG::JPEG)

ROOT_STANDARD_LIBRARY_PACKAGE(ASImageGui
NO_INSTALL_HEADERS
Expand All @@ -60,5 +61,6 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ASImageGui
)

target_include_directories(ASImageGui SYSTEM PRIVATE ${FREETYPE_INCLUDE_DIRS} ${AFTERIMAGE_INCLUDE_DIR} ${X11_INCLUDE_DIR})
target_link_libraries(ASImageGui PRIVATE JPEG::JPEG)

ROOT_INSTALL_HEADERS()
11 changes: 3 additions & 8 deletions graf2d/asimage/src/libAfterImage/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ if(NOT EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
message(ERROR "Can't find zlib.h in ${ZLIB_INCLUDE_DIR}")
endif()

INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ${JPEG_INCLUDE_DIR})

set (LIB_DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")

Expand All @@ -44,13 +44,6 @@ SET(SRC_FILES
libpng/png.c libpng/pngmem.c libpng/pngrio.c libpng/pngset.c libpng/pngwio.c libpng/pngwutil.c
libpng/pngerror.c libpng/pngpread.c libpng/pngrtran.c libpng/pngtest.c libpng/pngwrite.c
libpng/pngget.c libpng/pngread.c libpng/pngrutil.c libpng/pngtrans.c libpng/pngwtran.c
libjpeg/jcapimin.c libjpeg/jcapistd.c libjpeg/jccoefct.c libjpeg/jccolor.c libjpeg/jcdctmgr.c libjpeg/jchuff.c libjpeg/jcinit.c
libjpeg/jcmainct.c libjpeg/jcmarker.c libjpeg/jcmaster.c libjpeg/jcomapi.c libjpeg/jcparam.c libjpeg/jcphuff.c libjpeg/jcprepct.c
libjpeg/jcsample.c libjpeg/jctrans.c libjpeg/jdapimin.c libjpeg/jdapistd.c libjpeg/jdatadst.c libjpeg/jdatasrc.c libjpeg/jdcoefct.c
libjpeg/jdcolor.c libjpeg/transupp.c libjpeg/jaricom.c libjpeg/jdarith.c libjpeg/jcarith.c libjpeg/jddctmgr.c libjpeg/jdhuff.c
libjpeg/jdinput.c libjpeg/jdmainct.c libjpeg/jdmarker.c libjpeg/jdmaster.c libjpeg/jdmerge.c libjpeg/jdpostct.c libjpeg/jdsample.c
libjpeg/jdtrans.c libjpeg/jerror.c libjpeg/jfdctflt.c libjpeg/jfdctfst.c libjpeg/jfdctint.c libjpeg/jidctflt.c libjpeg/jidctfst.c
libjpeg/jidctint.c libjpeg/jmemmgr.c libjpeg/jmemnobs.c libjpeg/jquant1.c libjpeg/jquant2.c libjpeg/jutils.c
libungif/dgif_lib.c libungif/egif_lib.c libungif/gif_err.c libungif/gifalloc.c libungif/gif_hash.c afterbase.c ascmap.c asfont.c
asimage.c asstorage.c asvisual.c blender.c bmp.c char2uni.c
export.c import.c transform.c ungif.c xcf.c ximage.c xpm.c draw.c
Expand All @@ -60,4 +53,6 @@ SET(SRC_FILES

ADD_LIBRARY(${LIB_NAME} STATIC ${H_FILES} ${SRC_FILES})

target_link_libraries(${LIB_NAME} PRIVATE ${JPEG_LIBRARY_LOCATION})

install(TARGETS ${LIB_NAME} DESTINATION ${LIB_DESTINATION})
6 changes: 1 addition & 5 deletions graf2d/asimage/src/libAfterImage/export.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,7 @@
# ifndef X_DISPLAY_MISSING
# include <X11/Xmd.h>
# endif
# ifdef HAVE_BUILTIN_JPEG
# include "libjpeg/jpeglib.h"
# else
# include <jpeglib.h>
# endif
# include <jpeglib.h>
#endif
/*#define DO_CLOCKING*/

Expand Down
6 changes: 1 addition & 5 deletions graf2d/asimage/src/libAfterImage/import.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,7 @@
# ifndef X_DISPLAY_MISSING
# include <X11/Xmd.h>
# endif
# ifdef HAVE_BUILTIN_JPEG
# include "libjpeg/jpeglib.h"
# else
# include <jpeglib.h>
# endif
# include <jpeglib.h>
#endif

#if TIME_WITH_SYS_TIME
Expand Down
Loading
Loading