| From 9a6d50b3f355c1e4d72a235aa0bac4856dff1785 Mon Sep 17 00:00:00 2001 |
| From: Adrian Perez de Castro <aperez@igalia.com> |
| Date: Tue, 27 Mar 2018 19:59:23 +0100 |
| Subject: [PATCH] CMake: Handle multiple libraries being returned for Brotli |
| |
| Brotli is built as three libraries: libbrotlienc, libbrotlidec, and |
| libbrotlicommon. When requesting the linker flags using pkg-config for |
| e.g. libbrotlidec, it will return both libbrotlidec and libbrotlicommon. |
| The FindBrotli*.cmake files ignore the names of the libraries returned |
| by pkg-config, and hardcode only the libbrotli{enc,dec} names. While |
| this is fine when using shared libraries (they contain an entry for |
| libbrotlicommon as required library in their headers), it will cause |
| linker errors when Brotli has been built as static libraries, due to |
| the missing symbols from libbrotlicommon being unknown to the linker. |
| |
| This fixes FindBrotli*.cmake files by using the library names reported |
| by pkg-config (instead of hardcoding them), and applying find_library() |
| to each of the libraries to find their absolute paths. If any of the |
| libraries is missing, the corresponding BROTLI{ENC,DEC}_LIBRARIES is |
| unset to let find_package_handle_standard_args() report an error. |
| --- |
| cmake/FindBrotliDec.cmake | 13 +++++++++---- |
| cmake/FindBrotliEnc.cmake | 14 ++++++++++---- |
| 2 files changed, 19 insertions(+), 8 deletions(-) |
| |
| Signed-off-by: Adrian Perez de Castro <aperez@igalia.com> |
| Upstream-Status: Submitted [https://github.com/google/woff2/pull/112] |
| |
| diff --git a/cmake/FindBrotliDec.cmake b/cmake/FindBrotliDec.cmake |
| index abb06f4..9cbb415 100644 |
| --- a/cmake/FindBrotliDec.cmake |
| +++ b/cmake/FindBrotliDec.cmake |
| @@ -18,10 +18,15 @@ find_path(BROTLIDEC_INCLUDE_DIRS |
| HINTS ${PC_BROTLIDEC_INCLUDEDIR} |
| ) |
| |
| -find_library(BROTLIDEC_LIBRARIES |
| - NAMES brotlidec |
| - HINTS ${PC_BROTLIDEC_LIBDIR} |
| -) |
| +set(BROTLIDEC_LIBRARIES "") |
| +foreach(_lib ${PC_BROTLIDEC_LIBRARIES}) |
| + find_library(PC_BROTLIDEC_PATH_${_lib} ${_lib} HINTS ${PC_BROTLIDEC_LIBRARY_DIRS}) |
| + if(NOT PC_BROTLIDEC_PATH_${_lib}) |
| + unset(BROTLIDEC_LIBRARIES) |
| + break() |
| + endif() |
| + list(APPEND BROTLIDEC_LIBRARIES "${PC_BROTLIDEC_PATH_${_lib}}") |
| +endforeach() |
| |
| include(FindPackageHandleStandardArgs) |
| find_package_handle_standard_args(BrotliDec |
| diff --git a/cmake/FindBrotliEnc.cmake b/cmake/FindBrotliEnc.cmake |
| index 4be347d..55f3932 100644 |
| --- a/cmake/FindBrotliEnc.cmake |
| +++ b/cmake/FindBrotliEnc.cmake |
| @@ -18,10 +18,16 @@ find_path(BROTLIENC_INCLUDE_DIRS |
| HINTS ${PC_BROTLIENC_INCLUDEDIR} |
| ) |
| |
| -find_library(BROTLIENC_LIBRARIES |
| - NAMES brotlienc |
| - HINTS ${PC_BROTLIENC_LIBDIR} |
| -) |
| +set(BROTLIENC_LIBRARIES "") |
| +foreach(_lib ${PC_BROTLIENC_LIBRARIES}) |
| + find_library(PC_BROTLIENC_PATH_${_lib} ${_lib} |
| + HINTS ${PC_BROTLIENC_LIBRARY_DIRS}) |
| + if(NOT PC_BROTLIENC_PATH_${_lib}) |
| + unset(BROTLIENC_LIBRARIES) |
| + break() |
| + endif() |
| + list(APPEND BROTLIENC_LIBRARIES "${PC_BROTLIENC_PATH_${_lib}}") |
| +endforeach() |
| |
| include(FindPackageHandleStandardArgs) |
| find_package_handle_standard_args(BrotliEnc |
| -- |
| 2.16.3 |
| |