diff --git a/cmake/FindWrapJpeg.cmake b/cmake/FindWrapJpeg.cmake new file mode 100644 index 00000000000..194296e3a63 --- /dev/null +++ b/cmake/FindWrapJpeg.cmake @@ -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" +) diff --git a/cmake/FindWrapSystemJpeg.cmake b/cmake/FindWrapSystemJpeg.cmake new file mode 100644 index 00000000000..2853654ea11 --- /dev/null +++ b/cmake/FindWrapSystemJpeg.cmake @@ -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) diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt index 56b81bb7aff..68113d8baca 100644 --- a/src/3rdparty/CMakeLists.txt +++ b/src/3rdparty/CMakeLists.txt @@ -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() diff --git a/src/3rdparty/libjpeg/CMakeLists.txt b/src/3rdparty/libjpeg/CMakeLists.txt new file mode 100644 index 00000000000..3235c57d102 --- /dev/null +++ b/src/3rdparty/libjpeg/CMakeLists.txt @@ -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 + $ +) + +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() + diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake index 611928d13ad..cbb3af0cf2a 100644 --- a/src/gui/configure.cmake +++ b/src/gui/configure.cmake @@ -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) diff --git a/src/plugins/imageformats/jpeg/CMakeLists.txt b/src/plugins/imageformats/jpeg/CMakeLists.txt index a5ce61b5a0d..bb5a78fa40c 100644 --- a/src/plugins/imageformats/jpeg/CMakeLists.txt +++ b/src/plugins/imageformats/jpeg/CMakeLists.txt @@ -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:: -# 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 -)