All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [git commit branch/2018.02.x] woff2: fix static builds
@ 2018-10-05 13:17 Peter Korsgaard
  0 siblings, 0 replies; only message in thread
From: Peter Korsgaard @ 2018-10-05 13:17 UTC (permalink / raw)
  To: buildroot

commit: https://git.buildroot.net/buildroot/commit/?id=b66cc0c7b2099ce208b7800252cf6732619d3c69
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/2018.02.x

Include a patch to make CMake correctly find the Brotli libraries when
they have been built as static libraries.

Fixes:
- http://autobuild.buildroot.net/results/f1c4b5aeb12af7b7a3e8ae01c219004ecd9befd6/
- http://autobuild.buildroot.net/results/74d20ff38766466623cc4a9eb18afcda831bc20b/

Signed-off-by: Adrian Perez de Castro <aperez@igalia.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
(cherry picked from commit 0ceb847af5955eac911935a1f1f2f444523eece6)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
---
 ...e-multiple-libraries-being-returned-for-B.patch | 80 ++++++++++++++++++++++
 package/woff2/woff2.mk                             |  7 ++
 2 files changed, 87 insertions(+)

diff --git a/package/woff2/0001-CMake-Handle-multiple-libraries-being-returned-for-B.patch b/package/woff2/0001-CMake-Handle-multiple-libraries-being-returned-for-B.patch
new file mode 100644
index 0000000000..142eab2718
--- /dev/null
+++ b/package/woff2/0001-CMake-Handle-multiple-libraries-being-returned-for-B.patch
@@ -0,0 +1,80 @@
+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
+
diff --git a/package/woff2/woff2.mk b/package/woff2/woff2.mk
index 23b88a5e9a..b2ff33fe98 100644
--- a/package/woff2/woff2.mk
+++ b/package/woff2/woff2.mk
@@ -14,4 +14,11 @@ WOFF2_DEPENDENCIES = brotli
 WOFF2_CONF_OPTS = \
 	-DNOISY_LOGGING=OFF
 
+# The CMake build files for woff2 manually set some RPATH handling options
+# which make the installation steps fail with static builds, so pass this
+# to prevent any attempt of mangling RPATH that CMake would do.
+ifneq ($(BR2_SHARED_LIBS),y)
+WOFF2_CONF_OPTS += -DCMAKE_SKIP_RPATH=ON
+endif
+
 $(eval $(cmake-package))

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2018-10-05 13:17 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-05 13:17 [Buildroot] [git commit branch/2018.02.x] woff2: fix static builds Peter Korsgaard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.