CMakeLists.txt (3479B)
1 # Copyright (c) the JPEG XL Project Authors. All rights reserved. 2 # 3 # Use of this source code is governed by a BSD-style 4 # license that can be found in the LICENSE file. 5 6 find_package(PkgConfig) 7 pkg_check_modules(Gdk-Pixbuf IMPORTED_TARGET gdk-pixbuf-2.0>=2.36) 8 9 include(GNUInstallDirs) 10 11 if (NOT Gdk-Pixbuf_FOUND) 12 message(WARNING "GDK Pixbuf development libraries not found, \ 13 the Gdk-Pixbuf plugin will not be built") 14 return () 15 endif () 16 17 add_library(pixbufloader-jxl MODULE pixbufloader-jxl.c) 18 19 # Mark all symbols as hidden by default. The PkgConfig::Gdk-Pixbuf dependency 20 # will cause fill_info and fill_vtable entry points to be made public. 21 set_target_properties(pixbufloader-jxl PROPERTIES 22 CXX_VISIBILITY_PRESET hidden 23 VISIBILITY_INLINES_HIDDEN 1 24 ) 25 26 # Note: This only needs the decoder library, but we don't install the decoder 27 # shared library. 28 target_link_libraries(pixbufloader-jxl jxl jxl_threads lcms2 PkgConfig::Gdk-Pixbuf) 29 30 execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} gdk-pixbuf-2.0 --variable gdk_pixbuf_moduledir --define-variable=prefix=${CMAKE_INSTALL_PREFIX} OUTPUT_VARIABLE GDK_PIXBUF_MODULEDIR OUTPUT_STRIP_TRAILING_WHITESPACE) 31 install(TARGETS pixbufloader-jxl DESTINATION "${GDK_PIXBUF_MODULEDIR}") 32 33 # Instead of the following, we might instead add the 34 # mime type image/jxl to 35 # /usr/share/thumbnailers/gdk-pixbuf-thumbnailer.thumbnailer 36 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/jxl.thumbnailer DESTINATION "${CMAKE_INSTALL_DATADIR}/thumbnailers/") 37 38 if(BUILD_TESTING AND NOT CMAKE_CROSSCOMPILING) 39 pkg_check_modules(Gdk IMPORTED_TARGET gdk-2.0) 40 if (Gdk_FOUND) 41 # Test for loading a .jxl file using the pixbufloader library via GDK. This 42 # requires to have the image/jxl mime type and loader library configured, 43 # which we do in a fake environment in the CMAKE_CURRENT_BINARY_DIR. 44 add_executable(pixbufloader_test pixbufloader_test.cc) 45 target_link_libraries(pixbufloader_test PkgConfig::Gdk) 46 47 # Create a mime cache for test. 48 add_custom_command( 49 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/mime/mime.cache" 50 COMMAND env XDG_DATA_HOME=${CMAKE_CURRENT_BINARY_DIR} 51 xdg-mime install --novendor 52 "${CMAKE_SOURCE_DIR}/plugins/mime/image-jxl.xml" 53 DEPENDS "${CMAKE_SOURCE_DIR}/plugins/mime/image-jxl.xml" 54 ) 55 add_custom_target(pixbufloader_test_mime 56 DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/mime/mime.cache" 57 ) 58 add_dependencies(pixbufloader_test pixbufloader_test_mime) 59 60 # Use a fake X server to run the test if xvfb is installed. 61 find_program (XVFB_PROGRAM xvfb-run) 62 if(XVFB_PROGRAM) 63 set(XVFB_PROGRAM_PREFIX "${XVFB_PROGRAM};-a") 64 else() 65 set(XVFB_PROGRAM_PREFIX "") 66 endif() 67 68 # libX11.so and libgdk-x11-2.0.so are not compiled with MSAN -> report 69 # use-of-uninitialized-value for string some internal string value. 70 # TODO(eustas): investigate direct memory leak (32 bytes). 71 if (NOT (SANITIZER STREQUAL "msan") AND NOT (SANITIZER STREQUAL "asan")) 72 add_test( 73 NAME pixbufloader_test_jxl 74 COMMAND 75 ${XVFB_PROGRAM_PREFIX} $<TARGET_FILE:pixbufloader_test> 76 "${CMAKE_CURRENT_SOURCE_DIR}/loaders_test.cache" 77 "${JPEGXL_TEST_DATA_PATH}/jxl/blending/cropped_traffic_light.jxl" 78 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 79 ) 80 set_tests_properties(pixbufloader_test_jxl PROPERTIES SKIP_RETURN_CODE 254) 81 endif() 82 endif() # Gdk_FOUND 83 endif() # BUILD_TESTING