early-access version 2853

This commit is contained in:
pineappleEA
2022-07-23 03:01:36 +02:00
parent 1f2b5081b5
commit 1f111bb69c
8955 changed files with 418777 additions and 999 deletions

View File

@@ -0,0 +1,14 @@
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index a366e51..257f87d 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -132,7 +132,9 @@ endif() #!MSVC
include(jxl.cmake)
# Other libraries outside the core jxl library.
+if(JPEGXL_ENABLE_TOOLS)
include(jxl_extras.cmake)
+endif()
include(jxl_threads.cmake)
# Install all the library headers from the source and the generated ones. There

View File

@@ -0,0 +1,151 @@
diff --git a/lib/jxl.cmake b/lib/jxl.cmake
--- a/lib/jxl.cmake
+++ b/lib/jxl.cmake
@@ -3,6 +3,18 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
+if(JPEGXL_ENABLE_TOOLS)
+find_package(lodepng CONFIG REQUIRED)
+endif()
+find_package(unofficial-brotli CONFIG REQUIRED)
+find_package(lcms2 CONFIG REQUIRED)
+
+foreach(brlib IN ITEMS brotlienc brotlidec brotlicommon)
+ add_library(${brlib} ALIAS unofficial::brotli::${brlib}-static)
+ add_library(${brlib}-static ALIAS unofficial::brotli::${brlib}-static)
+endforeach()
+add_library(lcms2 ALIAS lcms2::lcms2)
+
# Lists all source files for the JPEG XL decoder library. These are also used
# by the encoder: the encoder uses both dec and enc ourse files, while the
# decoder uses only dec source files.
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -88,18 +88,16 @@ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/highway/CMakeLists.txt" AND
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/highway/LICENSE"
${PROJECT_BINARY_DIR}/LICENSE.highway COPYONLY)
else()
- pkg_check_modules(HWY libhwy)
- if (NOT HWY_FOUND)
+ find_path(HWY_INCLUDE_DIRS "hwy/highway.h")
+ find_library(HWY_LINK_LIBRARIES hwy)
+ if (NOT HWY_INCLUDE_DIRS OR NOT HWY_LINK_LIBRARIES)
message(FATAL_ERROR
- "Highway library (hwy) not found. Install libhwy-dev or download it "
- "to third_party/highway from https://github.com/google/highway . "
- "Highway is required to build JPEG XL. You can run "
- "${PROJECT_SOURCE_DIR}/deps.sh to download this dependency.")
+ "Highway library (hwy) not found.")
endif()
add_library(hwy INTERFACE IMPORTED GLOBAL)
if(${CMAKE_VERSION} VERSION_LESS "3.13.5")
- set_property(TARGET hwy PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HWY_INCLUDE_DIR})
- target_link_libraries(hwy INTERFACE ${HWY_LDFLAGS})
+ set_property(TARGET hwy PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HWY_INCLUDE_DIRS})
+ target_link_libraries(hwy INTERFACE ${HWY_LINK_LIBRARIES})
set_property(TARGET hwy PROPERTY INTERFACE_COMPILE_OPTIONS ${HWY_CFLAGS_OTHER})
else()
target_include_directories(hwy INTERFACE ${HWY_INCLUDE_DIRS})
@@ -114,82 +112,12 @@ else()
endif()
# lodepng
-if( NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lodepng/lodepng.h" )
- message(FATAL_ERROR "Please run ${PROJECT_SOURCE_DIR}/deps.sh to fetch the "
- "build dependencies.")
-endif()
-include(lodepng.cmake)
-configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lodepng/LICENSE"
- ${PROJECT_BINARY_DIR}/LICENSE.lodepng COPYONLY)
+if(JPEGXL_ENABLE_TOOLS)
+find_package(lodepng CONFIG REQUIRED)
+endif()
# brotli
-if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/brotli/c/include/brotli/decode.h" OR
- JPEGXL_FORCE_SYSTEM_BROTLI)
- # Create the libbrotli* and libbrotli*-static targets.
- foreach(brlib IN ITEMS brotlienc brotlidec brotlicommon)
- # Use uppercase like "BROTLIENC" for the cmake variables
- string(TOUPPER "${brlib}" BRPREFIX)
- pkg_check_modules(${BRPREFIX} lib${brlib})
- if (${BRPREFIX}_FOUND)
- if(${CMAKE_VERSION} VERSION_LESS "3.13.5")
- add_library(${brlib} INTERFACE IMPORTED GLOBAL)
- set_property(TARGET ${brlib} PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${${BRPREFIX}_INCLUDE_DIR})
- target_link_libraries(${brlib} INTERFACE ${${BRPREFIX}_LDFLAGS})
- set_property(TARGET ${brlib} PROPERTY INTERFACE_COMPILE_OPTIONS ${${BRPREFIX}_CFLAGS_OTHER})
-
- add_library(${brlib}-static INTERFACE IMPORTED GLOBAL)
- set_property(TARGET ${brlib}-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${${BRPREFIX}_INCLUDE_DIR})
- target_link_libraries(${brlib}-static INTERFACE ${${BRPREFIX}_LDFLAGS})
- set_property(TARGET ${brlib}-static PROPERTY INTERFACE_COMPILE_OPTIONS ${${BRPREFIX}_CFLAGS_OTHER})
- else()
- add_library(${brlib} INTERFACE IMPORTED GLOBAL)
- target_include_directories(${brlib}
- INTERFACE ${${BRPREFIX}_INCLUDE_DIRS})
- target_link_libraries(${brlib}
- INTERFACE ${${BRPREFIX}_LINK_LIBRARIES})
- target_link_options(${brlib}
- INTERFACE ${${BRPREFIX}_LDFLAGS_OTHER})
- target_compile_options(${brlib}
- INTERFACE ${${BRPREFIX}_CFLAGS_OTHER})
-
- # TODO(deymo): Remove the -static library versions, this target is
- # currently needed by brunsli.cmake. When importing it this way, the
- # brotli*-static target is just an alias.
- add_library(${brlib}-static ALIAS ${brlib})
- endif()
- endif()
- unset(BRPREFIX)
- endforeach()
-
- if (BROTLIENC_FOUND AND BROTLIDEC_FOUND AND BROTLICOMMON_FOUND)
- set(BROTLI_FOUND 1)
- else()
- set(BROTLI_FOUND 0)
- endif()
-
- if (NOT BROTLI_FOUND)
- message(FATAL_ERROR
- "Brotli not found, install brotli-dev or download brotli source code to"
- " third_party/brotli from https://github.com/google/brotli. You can use"
- " ${PROJECT_SOURCE_DIR}/deps.sh to download this dependency.")
- endif ()
- if(JPEGXL_DEP_LICENSE_DIR)
- configure_file("${JPEGXL_DEP_LICENSE_DIR}/libbrotli-dev/copyright"
- ${PROJECT_BINARY_DIR}/LICENSE.brotli COPYONLY)
- endif() # JPEGXL_DEP_LICENSE_DIR
-else()
- # Compile brotli from sources.
- set(BROTLI_DISABLE_TESTS ON CACHE STRING "Disable Brotli tests")
- add_subdirectory(brotli EXCLUDE_FROM_ALL)
- configure_file("${CMAKE_CURRENT_SOURCE_DIR}/brotli/LICENSE"
- ${PROJECT_BINARY_DIR}/LICENSE.brotli COPYONLY)
- if(BROTLI_EMSCRIPTEN)
- # Brotli only defines the -static targets when using emscripten.
- foreach(brlib IN ITEMS brotlienc brotlidec brotlicommon)
- add_library(${brlib} ALIAS ${brlib}-static)
- endforeach()
- endif() # BROTLI_EMSCRIPTEN
-endif()
+find_package(unofficial-brotli CONFIG REQUIRED)
# *cms
if (JPEGXL_ENABLE_SKCMS OR JPEGXL_ENABLE_PLUGINS)
@@ -202,12 +128,7 @@ if (JPEGXL_ENABLE_SKCMS OR JPEGXL_ENABLE_PLUGINS)
${PROJECT_BINARY_DIR}/LICENSE.skcms COPYONLY)
endif ()
if (JPEGXL_ENABLE_VIEWERS OR NOT JPEGXL_ENABLE_SKCMS)
- if( NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lcms/.git" )
- message(SEND_ERROR "Please run git submodule update --init")
- endif()
- include(lcms2.cmake)
- configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lcms/COPYING"
- ${PROJECT_BINARY_DIR}/LICENSE.lcms COPYONLY)
+ find_package(lcms2 CONFIG REQUIRED)
endif()
# sjpeg

View File

@@ -0,0 +1,36 @@
diff --git a/lib/jxl.cmake b/lib/jxl.cmake
--- a/lib/jxl.cmake
+++ b/lib/jxl.cmake
@@ -487,8 +487,8 @@ if (NOT WIN32)
set_target_properties(jxl-static PROPERTIES OUTPUT_NAME "jxl")
set_target_properties(jxl_dec-static PROPERTIES OUTPUT_NAME "jxl_dec")
endif()
-install(TARGETS jxl-static DESTINATION ${CMAKE_INSTALL_LIBDIR})
-install(TARGETS jxl_dec-static DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(TARGETS jxl-static)
+install(TARGETS jxl_dec-static)
if (((NOT DEFINED "${TARGET_SUPPORTS_SHARED_LIBS}") OR
TARGET_SUPPORTS_SHARED_LIBS) AND NOT JPEGXL_STATIC)
@@ -548,8 +548,7 @@ endforeach()
# Only install libjxl shared library. The libjxl_dec is not installed since it
# contains symbols also in libjxl which would conflict if programs try to use
# both.
-install(TARGETS jxl
- DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(TARGETS jxl)
else()
add_library(jxl ALIAS jxl-static)
add_library(jxl_dec ALIAS jxl_dec-static)
diff --git a/lib/jxl_threads.cmake b/lib/jxl_threads.cmake
--- a/lib/jxl_threads.cmake
+++ b/lib/jxl_threads.cmake
@@ -43,7 +43,7 @@ set_target_properties(${_target} PROPERTIES
if (NOT WIN32)
set_target_properties(${_target} PROPERTIES OUTPUT_NAME "jxl_threads")
endif()
-install(TARGETS ${_target} DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(TARGETS ${_target})
endfunction()

View File

@@ -0,0 +1,15 @@
diff --git a/lib/jxl.cmake b/lib/jxl.cmake
index 63539cc..2e1d617 100644
--- a/lib/jxl.cmake
+++ b/lib/jxl.cmake
@@ -551,8 +551,10 @@ foreach(target IN ITEMS jxl jxl_dec)
# This hides the default visibility symbols from static libraries bundled into
# the shared library. In particular this prevents exposing symbols from hwy
# and skcms in the shared library.
+ if(NOT APPLE AND NOT MSVC)
set_property(TARGET ${target} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,--exclude-libs=ALL")
+ endif()
endforeach()
# Only install libjxl shared library. The libjxl_dec is not installed since it

117
externals/vcpkg/ports/libjxl/portfile.cmake vendored Executable file
View File

@@ -0,0 +1,117 @@
set(JPEGXL_VERSION 0.6.1)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO libjxl/libjxl
REF "v${JPEGXL_VERSION}"
SHA512 302935d722160b0b288ac63301f9e95caf82eccf6ad76c4f4da6316a0314ee3562115932b1ceacb0d02708de0a07788992d3478cae73af0b90193f5769f9fb52
HEAD_REF main
PATCHES
fix-install-directories.patch
fix-dependencies.patch
fix-link-flags.patch
disable-jxl_extras.patch
)
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
tools JPEGXL_ENABLE_TOOLS
INVERTED_FEATURES
tools CMAKE_DISABLE_FIND_PACKAGE_GIF
tools CMAKE_DISABLE_FIND_PACKAGE_JPEG
tools CMAKE_DISABLE_FIND_PACKAGE_PNG
tools CMAKE_DISABLE_FIND_PACKAGE_ZLIB
)
if(VCPKG_TARGET_IS_UWP)
string(APPEND VCPKG_C_FLAGS " -D_CRT_SECURE_NO_WARNINGS /wd4146")
string(APPEND VCPKG_CXX_FLAGS " -D_CRT_SECURE_NO_WARNINGS /wd4146")
# Temporary workaround for #9390
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
list(APPEND FEATURE_OPTIONS -DCMAKE_SYSTEM_PROCESSOR=x86)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
list(APPEND FEATURE_OPTIONS -DCMAKE_SYSTEM_PROCESSOR=AMD64)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
list(APPEND FEATURE_OPTIONS -DCMAKE_SYSTEM_PROCESSOR=ARM)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
list(APPEND FEATURE_OPTIONS -DCMAKE_SYSTEM_PROCESSOR=ARM64)
else()
message(FATAL_ERROR "Unsupported uwp VCPKG_TARGET_ARCHITECTURE \"${VCPKG_TARGET_ARCHITECTURE}\"")
endif()
# Workaround for vcpkg-cmake bug, proper fix in #21857
set(_TARGETTING_UWP 1)
endif()
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
"-DJPEGXL_VERSION=${JPEGXL_VERSION}"
-DJPEGXL_FORCE_SYSTEM_HWY=ON
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON
${FEATURE_OPTIONS}
-DJPEGXL_ENABLE_FUZZERS=OFF
-DJPEGXL_ENABLE_MANPAGES=OFF
-DJPEGXL_ENABLE_BENCHMARK=OFF
-DJPEGXL_ENABLE_EXAMPLES=OFF
-DJPEGXL_ENABLE_JNI=OFF
-DJPEGXL_ENABLE_SJPEG=OFF
-DJPEGXL_ENABLE_OPENEXR=OFF
-DJPEGXL_ENABLE_PLUGINS=OFF
-DJPEGXL_ENABLE_SKCMS=OFF
-DJPEGXL_ENABLE_TCMALLOC=OFF
-DBUILD_TESTING=OFF
-DCMAKE_DISABLE_FIND_PACKAGE_Doxygen=1
MAYBE_UNUSED_VARIABLES
CMAKE_DISABLE_FIND_PACKAGE_GIF
CMAKE_DISABLE_FIND_PACKAGE_JPEG
CMAKE_DISABLE_FIND_PACKAGE_PNG
CMAKE_DISABLE_FIND_PACKAGE_ZLIB
)
vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_fixup_pkgconfig()
if(JPEGXL_ENABLE_TOOLS)
vcpkg_copy_tools(TOOL_NAMES cjxl djxl AUTO_CLEAN)
endif()
# libjxl always builds static and dynamic libraries, so we delete the variant that we don't need
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
if(VCPKG_TARGET_IS_WINDOWS)
file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/bin"
"${CURRENT_PACKAGES_DIR}/debug/bin"
)
set(FILES_TO_REMOVE
"${CURRENT_PACKAGES_DIR}/lib/jxl.lib"
"${CURRENT_PACKAGES_DIR}/lib/jxl_threads.lib"
"${CURRENT_PACKAGES_DIR}/debug/lib/jxl.lib"
"${CURRENT_PACKAGES_DIR}/debug/lib/jxl_threads.lib"
)
else()
file(GLOB FILES_TO_REMOVE
"${CURRENT_PACKAGES_DIR}/lib/*.so*"
"${CURRENT_PACKAGES_DIR}/lib/*.dylib*"
"${CURRENT_PACKAGES_DIR}/debug/lib/*.so*"
"${CURRENT_PACKAGES_DIR}/debug/lib/*.dylib*"
)
endif()
else()
if(VCPKG_TARGET_IS_WINDOWS)
file(GLOB FILES_TO_REMOVE
"${CURRENT_PACKAGES_DIR}/lib/*-static.lib"
"${CURRENT_PACKAGES_DIR}/debug/lib/*-static.lib"
)
else()
file(GLOB FILES_TO_REMOVE
"${CURRENT_PACKAGES_DIR}/lib/*.a"
"${CURRENT_PACKAGES_DIR}/debug/lib/*.a"
)
endif()
endif()
file(REMOVE ${FILES_TO_REMOVE})
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)

29
externals/vcpkg/ports/libjxl/vcpkg.json vendored Executable file
View File

@@ -0,0 +1,29 @@
{
"name": "libjxl",
"version-semver": "0.6.1",
"port-version": 1,
"description": "JPEG XL image format reference implementation",
"homepage": "https://github.com/libjxl/libjxl",
"license": "BSD-3-Clause",
"dependencies": [
"brotli",
"highway",
"lcms",
{
"name": "vcpkg-cmake",
"host": true
}
],
"features": {
"tools": {
"description": "Build user tools: cjxl and djxl",
"dependencies": [
"giflib",
"libjpeg-turbo",
"libpng",
"lodepng",
"zlib"
]
}
}
}