Add wrapping build of the bundled libjpeg

Similar to how it is done libpng etc. This is a backport from 6.4: it is a partial cherry-pick of be2745e4788cecb0d3122081e3328e4b66923609.

This prepares for merging the update to version 3.0.0 of libjpeg-turbo, which includes significant building changes.

Change-Id: I7ce0c91c673695bdbc522e125a7d425e799095fe
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Eirik Aavitsland 2023-08-25 10:45:03 +02:00
parent e0540f768e
commit ed0b4dc994
6 changed files with 125 additions and 85 deletions

11
cmake/FindWrapJpeg.cmake Normal file
View File

@ -0,0 +1,11 @@
include(QtFindWrapHelper NO_POLICY_SCOPE)
qt_find_package_system_or_bundled(wrap_jpeg
FRIENDLY_PACKAGE_NAME "Jpeg"
WRAP_PACKAGE_TARGET "WrapJpeg::WrapJpeg"
WRAP_PACKAGE_FOUND_VAR_NAME "WrapJpeg_FOUND"
BUNDLED_PACKAGE_NAME "BundledLibjpeg"
BUNDLED_PACKAGE_TARGET "BundledLibjpeg"
SYSTEM_PACKAGE_NAME "WrapSystemJpeg"
SYSTEM_PACKAGE_TARGET "WrapSystemJpeg::WrapSystemJpeg"
)

View File

@ -0,0 +1,32 @@
if(TARGET WrapSystemJpeg::WrapSystemJpeg)
set(WrapSystemJpeg_FOUND TRUE)
return()
endif()
set(WrapSystemJpeg_REQUIRED_VARS __jpeg_found)
find_package(JPEG ${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION} QUIET)
set(__jpeg_target_name "JPEG::JPEG")
if(JPEG_FOUND AND TARGET "${__jpeg_target_name}")
set(__jpeg_found TRUE)
endif()
if(JPEG_LIBRARIES)
list(PREPEND WrapSystemJpeg_REQUIRED_VARS JPEG_LIBRARIES)
endif()
if(JPEG_VERSION)
set(WrapSystemJpeg_VERSION "${JPEG_VERSION}")
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(WrapSystemJpeg
REQUIRED_VARS ${WrapSystemJpeg_REQUIRED_VARS}
VERSION_VAR WrapSystemJpeg_VERSION)
if(WrapSystemJpeg_FOUND)
add_library(WrapSystemJpeg::WrapSystemJpeg INTERFACE IMPORTED)
target_link_libraries(WrapSystemJpeg::WrapSystemJpeg
INTERFACE "${__jpeg_target_name}")
endif()
unset(__jpeg_target_name)
unset(__jpeg_found)

View File

@ -6,6 +6,11 @@ if(QT_FEATURE_gui AND QT_FEATURE_png AND NOT QT_FEATURE_system_png)
endif()
qt_install_3rdparty_library_wrap_config_extra_file(BundledLibpng)
if(QT_FEATURE_gui AND QT_FEATURE_jpeg AND NOT QT_FEATURE_system_jpeg)
add_subdirectory(libjpeg)
endif()
qt_install_3rdparty_library_wrap_config_extra_file(BundledLibjpeg)
if(QT_FEATURE_gui AND QT_FEATURE_freetype AND NOT QT_FEATURE_system_freetype)
add_subdirectory(freetype)
endif()

74
src/3rdparty/libjpeg/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,74 @@
qt_internal_add_3rdparty_library(BundledLibjpeg
QMAKE_LIB_NAME libjpeg
STATIC
INSTALL
SOURCES
src/jaricom.c
src/jcapimin.c
src/jcapistd.c
src/jcarith.c
src/jccoefct.c
src/jccolor.c
src/jcdctmgr.c
src/jchuff.c
src/jcinit.c
src/jcmainct.c
src/jcmarker.c
src/jcmaster.c
src/jcomapi.c
src/jcparam.c
src/jcphuff.c
src/jcprepct.c
src/jcsample.c
src/jctrans.c
src/jdapimin.c
src/jdapistd.c
src/jdarith.c
src/jdatadst.c
src/jdatasrc.c
src/jdcoefct.c
src/jdcolor.c
src/jddctmgr.c
src/jdhuff.c
src/jdinput.c
src/jdmainct.c
src/jdmarker.c
src/jdmaster.c
src/jdmerge.c
src/jdphuff.c
src/jdpostct.c
src/jdsample.c
src/jdtrans.c
src/jerror.c
src/jfdctflt.c
src/jfdctfst.c
src/jfdctint.c
src/jidctflt.c
src/jidctfst.c
src/jidctint.c
src/jidctred.c
src/jmemmgr.c
src/jmemnobs.c
src/jquant1.c
src/jquant2.c
src/jsimd_none.c
src/jutils.c
INCLUDE_DIRECTORIES
src
PUBLIC_INCLUDE_DIRECTORIES
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
)
qt_disable_warnings(BundledLibjpeg)
qt_set_symbol_visibility_hidden(BundledLibjpeg)
qt_internal_extend_target(BundledLibjpeg CONDITION MSVC
DEFINES
_CRT_SECURE_NO_WARNINGS
)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU"
OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"
OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
target_compile_options(BundledLibjpeg PRIVATE "-Wno-unused-parameter")
endif()

View File

@ -44,7 +44,7 @@ qt_add_qmake_lib_dependency(fontconfig freetype)
qt_find_package(gbm PROVIDED_TARGETS gbm::gbm MODULE_NAME gui QMAKE_LIB gbm)
qt_find_package(WrapSystemHarfbuzz 2.6.0 PROVIDED_TARGETS WrapSystemHarfbuzz::WrapSystemHarfbuzz MODULE_NAME gui QMAKE_LIB harfbuzz)
qt_find_package(Libinput PROVIDED_TARGETS Libinput::Libinput MODULE_NAME gui QMAKE_LIB libinput)
qt_find_package(JPEG PROVIDED_TARGETS JPEG::JPEG MODULE_NAME gui QMAKE_LIB libjpeg)
qt_find_package(WrapSystemJpeg PROVIDED_TARGETS WrapSystemJpeg::WrapSystemJpeg MODULE_NAME gui QMAKE_LIB libjpeg)
qt_find_package(WrapSystemMd4c PROVIDED_TARGETS WrapSystemMd4c::WrapSystemMd4c MODULE_NAME gui QMAKE_LIB libmd4c)
qt_find_package(WrapSystemPNG PROVIDED_TARGETS WrapSystemPNG::WrapSystemPNG MODULE_NAME gui QMAKE_LIB libpng)
if(QT_FEATURE_system_zlib)

View File

@ -1,6 +1,6 @@
# Generated from jpeg.pro.
qt_find_package(JPEG) # special case
qt_find_package(WrapJpeg PROVIDED_TARGETS WrapJpeg::WrapJpeg)
#####################################################################
## QJpegPlugin Plugin:
@ -17,6 +17,7 @@ qt_internal_add_plugin(QJpegPlugin
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
WrapJpeg::WrapJpeg
)
# Fails to build on Windows with a static Qt, PCH enabled and
@ -25,86 +26,3 @@ qt_internal_add_plugin(QJpegPlugin
if(WIN32 AND NOT BUILD_SHARED_LIBS)
qt_update_ignore_pch_source(QJpegPlugin "qjpeghandler.cpp")
endif()
#### Keys ignored in scope 1:.:.:jpeg.pro:<TRUE>:
# OTHER_FILES = "jpeg.json"
## Scopes:
#####################################################################
qt_internal_extend_target(QJpegPlugin CONDITION QT_FEATURE_system_jpeg
LIBRARIES
JPEG::JPEG
)
qt_internal_extend_target(QJpegPlugin CONDITION NOT QT_FEATURE_system_jpeg
SOURCES
../../../3rdparty/libjpeg/src/jaricom.c
../../../3rdparty/libjpeg/src/jcapimin.c
../../../3rdparty/libjpeg/src/jcapistd.c
../../../3rdparty/libjpeg/src/jcarith.c
../../../3rdparty/libjpeg/src/jccoefct.c
../../../3rdparty/libjpeg/src/jccolor.c
../../../3rdparty/libjpeg/src/jcdctmgr.c
../../../3rdparty/libjpeg/src/jchuff.c
../../../3rdparty/libjpeg/src/jcinit.c
../../../3rdparty/libjpeg/src/jcmainct.c
../../../3rdparty/libjpeg/src/jcmarker.c
../../../3rdparty/libjpeg/src/jcmaster.c
../../../3rdparty/libjpeg/src/jcomapi.c
../../../3rdparty/libjpeg/src/jcparam.c
../../../3rdparty/libjpeg/src/jcphuff.c
../../../3rdparty/libjpeg/src/jcprepct.c
../../../3rdparty/libjpeg/src/jcsample.c
../../../3rdparty/libjpeg/src/jctrans.c
../../../3rdparty/libjpeg/src/jdapimin.c
../../../3rdparty/libjpeg/src/jdapistd.c
../../../3rdparty/libjpeg/src/jdarith.c
../../../3rdparty/libjpeg/src/jdatadst.c
../../../3rdparty/libjpeg/src/jdatasrc.c
../../../3rdparty/libjpeg/src/jdcoefct.c
../../../3rdparty/libjpeg/src/jdcolor.c
../../../3rdparty/libjpeg/src/jddctmgr.c
../../../3rdparty/libjpeg/src/jdhuff.c
../../../3rdparty/libjpeg/src/jdinput.c
../../../3rdparty/libjpeg/src/jdmainct.c
../../../3rdparty/libjpeg/src/jdmarker.c
../../../3rdparty/libjpeg/src/jdmaster.c
../../../3rdparty/libjpeg/src/jdmerge.c
../../../3rdparty/libjpeg/src/jdphuff.c
../../../3rdparty/libjpeg/src/jdpostct.c
../../../3rdparty/libjpeg/src/jdsample.c
../../../3rdparty/libjpeg/src/jdtrans.c
../../../3rdparty/libjpeg/src/jerror.c
../../../3rdparty/libjpeg/src/jfdctflt.c
../../../3rdparty/libjpeg/src/jfdctfst.c
../../../3rdparty/libjpeg/src/jfdctint.c
../../../3rdparty/libjpeg/src/jidctflt.c
../../../3rdparty/libjpeg/src/jidctfst.c
../../../3rdparty/libjpeg/src/jidctint.c
../../../3rdparty/libjpeg/src/jidctred.c
../../../3rdparty/libjpeg/src/jmemmgr.c
../../../3rdparty/libjpeg/src/jmemnobs.c
../../../3rdparty/libjpeg/src/jquant1.c
../../../3rdparty/libjpeg/src/jquant2.c
../../../3rdparty/libjpeg/src/jsimd_none.c
../../../3rdparty/libjpeg/src/jutils.c
INCLUDE_DIRECTORIES
../../../3rdparty/libjpeg/src
)
# special case begin
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU"
OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"
OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
target_compile_options(QJpegPlugin PRIVATE "-Wno-unused-parameter")
endif()
# special case end
#### Keys ignored in scope 5:.:../../../3rdparty:../../../3rdparty/libjpeg.pri:GCC:
# QMAKE_CFLAGS_WARN_ON = "-Wno-unused-parameter" "-Wno-main"
qt_internal_extend_target(QJpegPlugin CONDITION MSVC AND NOT QT_FEATURE_system_jpeg
DEFINES
_CRT_SECURE_NO_WARNINGS
)