mirror of
https://github.com/openappsec/openappsec.git
synced 2026-01-17 16:00:26 +03:00
update code to support brotli
This commit is contained in:
224
cmake/FindBrotli.cmake
Normal file
224
cmake/FindBrotli.cmake
Normal file
@@ -0,0 +1,224 @@
|
||||
# FindBrotli.cmake
|
||||
#
|
||||
# Supports COMPONENTS:
|
||||
# decoder, encoder, common
|
||||
#
|
||||
# Exports targets:
|
||||
# Brotli::decoder
|
||||
# Brotli::encoder
|
||||
# Brotli::common
|
||||
#
|
||||
# Optional variables:
|
||||
# BROTLI_ROOT_DIR
|
||||
# BROTLI_USE_STATIC_LIBS
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Version handling (not supported)
|
||||
# ------------------------------------------------------------
|
||||
if(Brotli_FIND_VERSION)
|
||||
set(_brotli_version_error_msg "FindBrotli.cmake does not support version checking.")
|
||||
if(Brotli_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "${_brotli_version_error_msg}")
|
||||
elseif(NOT Brotli_FIND_QUIETLY)
|
||||
message(WARNING "${_brotli_version_error_msg}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Component dependencies
|
||||
# ------------------------------------------------------------
|
||||
if(Brotli_FIND_REQUIRED_decoder OR Brotli_FIND_REQUIRED_encoder)
|
||||
set(Brotli_FIND_REQUIRED_common TRUE)
|
||||
endif()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Static library preference
|
||||
# ------------------------------------------------------------
|
||||
if(BROTLI_USE_STATIC_LIBS)
|
||||
set(_brotli_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
if(WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a)
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Optional pkg-config
|
||||
# ------------------------------------------------------------
|
||||
find_package(PkgConfig QUIET)
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Includes
|
||||
# ------------------------------------------------------------
|
||||
find_path(Brotli_INCLUDE_DIR
|
||||
NAMES
|
||||
brotli/decode.h
|
||||
brotli/encode.h
|
||||
HINTS
|
||||
${BROTLI_ROOT_DIR}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
includes
|
||||
)
|
||||
mark_as_advanced(Brotli_INCLUDE_DIR)
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Internal state
|
||||
# ------------------------------------------------------------
|
||||
set(_brotli_req_vars "")
|
||||
|
||||
# For figuring out the real (non-ALIAS) targets when using pkg-config
|
||||
set(_brotli_decoder_real_target "")
|
||||
set(_brotli_encoder_real_target "")
|
||||
set(_brotli_common_real_target "")
|
||||
|
||||
if(BROTLI_USE_STATIC_LIBS)
|
||||
set(_brotli_stat_str "_STATIC")
|
||||
else()
|
||||
set(_brotli_stat_str "")
|
||||
endif()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Components loop
|
||||
# ------------------------------------------------------------
|
||||
foreach(_listvar "common;common" "decoder;dec" "encoder;enc")
|
||||
list(GET _listvar 0 _component)
|
||||
list(GET _listvar 1 _libname)
|
||||
|
||||
# ---- pkg-config path ----
|
||||
if(PKG_CONFIG_FOUND)
|
||||
if(BROTLI_USE_STATIC_LIBS)
|
||||
pkg_check_modules(
|
||||
Brotli_${_component}_STATIC
|
||||
QUIET
|
||||
GLOBAL
|
||||
IMPORTED_TARGET
|
||||
libbrotli${_libname}
|
||||
)
|
||||
else()
|
||||
pkg_check_modules(
|
||||
Brotli_${_component}
|
||||
QUIET
|
||||
GLOBAL
|
||||
IMPORTED_TARGET
|
||||
libbrotli${_libname}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If pkg-config created an imported target, make our alias to it.
|
||||
if(TARGET PkgConfig::Brotli_${_component}${_brotli_stat_str})
|
||||
add_library(
|
||||
Brotli::${_component}
|
||||
ALIAS
|
||||
PkgConfig::Brotli_${_component}${_brotli_stat_str}
|
||||
)
|
||||
|
||||
# Save the underlying real target name for later linkage fixes
|
||||
set(_brotli_${_component}_real_target "PkgConfig::Brotli_${_component}${_brotli_stat_str}")
|
||||
|
||||
set(Brotli_${_component}_FOUND TRUE)
|
||||
|
||||
if(Brotli_FIND_REQUIRED_${_component})
|
||||
# For FindPackageHandleStandardArgs: ensure libraries are actually present
|
||||
if(BROTLI_USE_STATIC_LIBS)
|
||||
list(APPEND _brotli_req_vars Brotli_${_component}_STATIC_LIBRARIES)
|
||||
else()
|
||||
list(APPEND _brotli_req_vars Brotli_${_component}_LINK_LIBRARIES)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# ---- find_library path ----
|
||||
if(Brotli_FIND_REQUIRED_${_component})
|
||||
list(APPEND _brotli_req_vars Brotli_${_component})
|
||||
endif()
|
||||
|
||||
if(BROTLI_USE_STATIC_LIBS)
|
||||
set(_brotli_names
|
||||
brotli${_libname}-static
|
||||
libbrotli${_libname}-static
|
||||
)
|
||||
else()
|
||||
set(_brotli_names
|
||||
brotli${_libname}
|
||||
libbrotli${_libname}
|
||||
)
|
||||
endif()
|
||||
|
||||
find_library(Brotli_${_component}
|
||||
NAMES ${_brotli_names}
|
||||
HINTS ${BROTLI_ROOT_DIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
lib64
|
||||
libs
|
||||
libs64
|
||||
lib/x86_64-linux-gnu
|
||||
)
|
||||
mark_as_advanced(Brotli_${_component})
|
||||
|
||||
if(Brotli_${_component})
|
||||
set(Brotli_${_component}_FOUND TRUE)
|
||||
|
||||
add_library(Brotli::${_component} UNKNOWN IMPORTED)
|
||||
set_target_properties(Brotli::${_component} PROPERTIES
|
||||
IMPORTED_LOCATION "${Brotli_${_component}}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${Brotli_INCLUDE_DIR}"
|
||||
)
|
||||
|
||||
# In this branch, our target is real (not ALIAS), so it can be linked later.
|
||||
set(_brotli_${_component}_real_target "Brotli::${_component}")
|
||||
else()
|
||||
set(Brotli_${_component}_FOUND FALSE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Link decoder/encoder → common (but never on ALIAS targets)
|
||||
# ------------------------------------------------------------
|
||||
if(_brotli_common_real_target)
|
||||
foreach(_comp decoder encoder)
|
||||
if(_brotli_${_comp}_real_target)
|
||||
# Only link if the target is NOT an ALIAS
|
||||
get_target_property(_aliased ${_brotli_${_comp}_real_target} ALIASED_TARGET)
|
||||
if(NOT _aliased)
|
||||
target_link_libraries(${_brotli_${_comp}_real_target} INTERFACE ${_brotli_common_real_target})
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Aggregate convenience variables
|
||||
# ------------------------------------------------------------
|
||||
set(Brotli_LIBRARIES "")
|
||||
foreach(_comp decoder encoder common)
|
||||
if(TARGET Brotli::${_comp})
|
||||
list(APPEND Brotli_LIBRARIES Brotli::${_comp})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Final package check (FIXED: use _brotli_req_vars)
|
||||
# ------------------------------------------------------------
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Brotli
|
||||
FOUND_VAR
|
||||
Brotli_FOUND
|
||||
REQUIRED_VARS
|
||||
Brotli_INCLUDE_DIR
|
||||
${_brotli_req_vars}
|
||||
HANDLE_COMPONENTS
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Restore suffixes
|
||||
# ------------------------------------------------------------
|
||||
if(BROTLI_USE_STATIC_LIBS)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_brotli_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user