From b5b2fa187d189740fa897bb49e331f2f7d3e7f34 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Fri, 13 Sep 2019 12:47:50 -0700 Subject: [PATCH] libgd: Backport SOVERSION and pkgconfig changes The latter is needed for some packages to find libgd. Signed-off-by: Rosen Penev --- libs/libgd/Makefile | 4 +- ...00-cmake-add-soname-info-to-libgd.so.patch | 135 ++++++++++++++++++ ...ll-gdlib.pc-for-cmake-builds-too-164.patch | 37 +++++ 3 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 libs/libgd/patches/200-cmake-add-soname-info-to-libgd.so.patch create mode 100644 libs/libgd/patches/210-generate-install-gdlib.pc-for-cmake-builds-too-164.patch diff --git a/libs/libgd/Makefile b/libs/libgd/Makefile index b76f2615c..2bd12b7ef 100644 --- a/libs/libgd/Makefile +++ b/libs/libgd/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libgd PKG_VERSION:=2.2.5 -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE_URL:=https://github.com/$(PKG_NAME)/$(PKG_NAME)/releases/download/gd-$(PKG_VERSION)/ @@ -86,7 +86,7 @@ endif define Package/libgd/install $(INSTALL_DIR) $(1)/usr/lib - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libgd.so $(1)/usr/lib/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libgd.so* $(1)/usr/lib/ endef $(eval $(call BuildPackage,libgd)) diff --git a/libs/libgd/patches/200-cmake-add-soname-info-to-libgd.so.patch b/libs/libgd/patches/200-cmake-add-soname-info-to-libgd.so.patch new file mode 100644 index 000000000..f4af74491 --- /dev/null +++ b/libs/libgd/patches/200-cmake-add-soname-info-to-libgd.so.patch @@ -0,0 +1,135 @@ +From 5ebbd50cffc013a7dd0f3b1eaaa83d199e8e47fd Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +Date: Sun, 24 Jul 2016 00:14:20 +0530 +Subject: [PATCH] cmake: add soname info to libgd.so + +Pull out the library versioning info out of configure and into a common +script that both cmake & autotools can run. This way we have a single +source of truth for the versioning info. +--- + CMakeLists.txt | 11 +++++++++++ + config/getlib.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 25 +++++++++++-------------- + src/CMakeLists.txt | 2 ++ + 4 files changed, 66 insertions(+), 14 deletions(-) + create mode 100755 config/getlib.sh + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7c8ad34b..9fe2eb4e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -78,6 +78,17 @@ else (USE_EXT_GD) + + SET(GD_VERSION_INT "2020555") + ++ MACRO(GV_LT VER VAR) ++ execute_process( ++ COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/config/getlib.sh ${VER} ++ OUTPUT_VARIABLE ${VAR} ++ ) ++ ENDMACRO(GV_LT) ++ ++ GV_LT(SONAME GDLIB_LIB_SOVERSION) ++ GV_LT(VERSION GDLIB_LIB_VERSION) ++ MESSAGE(STATUS "gd shared lib version ${GDLIB_LIB_SOVERSION} (${GDLIB_LIB_VERSION})") ++ + SET(CMAKE_REQUIRED_INCLUDES "/usr/include" "/usr/local/include") + + include(CheckIncludeFiles) +diff --git a/config/getlib.sh b/config/getlib.sh +new file mode 100755 +index 00000000..4835cf6c +--- /dev/null ++++ b/config/getlib.sh +@@ -0,0 +1,42 @@ ++#!/bin/sh ++ ++GETVER="${0%/*}/getver.pl" ++GDLIB_MAJOR=$("${GETVER}" MAJOR) ++GDLIB_MINOR=$("${GETVER}" MINOR) ++GDLIB_REVISION=$("${GETVER}" RELEASE) ++ ++# Dynamic library version information ++# See http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info ++ ++GDLIB_LT_CURRENT=3 ++# This is the version where the soname (current above) changes. We use it ++# to reset the revision base back to zero. It's a bit of a pain, but some ++# systems restrict the revision range below to [0..255] (like OS X). ++GDLIB_PREV_MAJOR=2 ++GDLIB_PREV_MINOR=2 ++# This isn't 100% correct, but it tends to be a close enough approximation ++# for how we manage the codebase. It's rare to do a release that doesn't ++# modify the library since this project is centered around the library. ++GDLIB_LT_REVISION=$(( ((GDLIB_MAJOR - GDLIB_PREV_MAJOR) << 6) | ((GDLIB_MINOR - GDLIB_PREV_MINOR) << 3) | GDLIB_REVISION )) ++GDLIB_LT_AGE=0 ++ ++# The first three fields we feed into libtool and the OS target determines how ++# they get used. The last two fields we feed into cmake. We use the same rules ++# as Linux SONAME versioning in libtool, but cmake should handle it for us. ++case $1 in ++CURRENT) ++ printf '%s' "${GDLIB_LT_CURRENT}" ++ ;; ++REVISION) ++ printf '%s' "${GDLIB_LT_REVISION}" ++ ;; ++AGE) ++ printf '%s' "${GDLIB_LT_AGE}" ++ ;; ++VERSION) ++ printf '%s' "$(( GDLIB_LT_CURRENT - GDLIB_LT_AGE )).${GDLIB_LT_AGE}.${GDLIB_LT_REVISION}" ++ ;; ++SONAME) ++ printf '%s' "$(( GDLIB_LT_CURRENT - GDLIB_LT_AGE ))" ++ ;; ++esac +diff --git a/configure.ac b/configure.ac +index 91643bd6..c3fb034e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -34,20 +34,17 @@ AC_SUBST(GDLIB_REVISION) + AC_SUBST(GDLIB_EXTRA) + AC_SUBST(GDLIB_VERSION) + +-# Dynamic library version information +-# See http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info +- +-GDLIB_LT_CURRENT=3 +-dnl This is the version where the soname (current above) changes. We use it +-dnl to reset the revision base back to zero. It's a bit of a pain, but some +-dnl systems restrict the revision range below to [0..255] (like OS X). +-GDLIB_PREV_MAJOR=2 +-GDLIB_PREV_MINOR=2 +-dnl This isn't 100% correct, but it tends to be a close enough approximation +-dnl for how we manage the codebase. It's rare to do a release that doesn't +-dnl modify the library since this project is centered around the library. +-GDLIB_LT_REVISION=$(( ((GDLIB_MAJOR - GDLIB_PREV_MAJOR) << 6) | ((GDLIB_MINOR - GDLIB_PREV_MINOR) << 3) | GDLIB_REVISION )) +-GDLIB_LT_AGE=0 ++dnl Keep the libtool version details in an external script so cmake can ++dnl access the values too. ++define([lt_gv], [config/getlib.sh ]$1) ++m4_define([gd_LT_CURRENT], esyscmd(lt_gv(CURRENT))) ++m4_define([gd_LT_REVISION], esyscmd(lt_gv(REVISION))) ++m4_define([gd_LT_AGE], esyscmd(lt_gv(AGE))) ++ ++GDLIB_LT_CURRENT=gd_LT_CURRENT ++GDLIB_LT_REVISION=gd_LT_REVISION ++GDLIB_LT_AGE=gd_LT_AGE ++ + AC_SUBST(GDLIB_LT_CURRENT) + AC_SUBST(GDLIB_LT_REVISION) + AC_SUBST(GDLIB_LT_AGE) +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 08fd6991..a621fe1e 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -76,6 +76,8 @@ include(GNUInstallDirs) + if (BUILD_SHARED_LIBS) + add_library(${GD_LIB} ${LIBGD_SRC_FILES}) + set_target_properties(${GD_LIB} PROPERTIES ++ SOVERSION ${GDLIB_LIB_SOVERSION} ++ VERSION ${GDLIB_LIB_VERSION} + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden + ) diff --git a/libs/libgd/patches/210-generate-install-gdlib.pc-for-cmake-builds-too-164.patch b/libs/libgd/patches/210-generate-install-gdlib.pc-for-cmake-builds-too-164.patch new file mode 100644 index 000000000..78a1988ed --- /dev/null +++ b/libs/libgd/patches/210-generate-install-gdlib.pc-for-cmake-builds-too-164.patch @@ -0,0 +1,37 @@ +From dd76e8fcf2a2d7e122110444695ad20f2549420e Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +Date: Wed, 10 Jan 2018 01:56:10 -0500 +Subject: [PATCH] generate & install gdlib.pc for cmake builds too #164 + +--- + config/gdlib.pc.cmake | 9 +++++++++ + src/CMakeLists.txt | 3 +++ + 2 files changed, 12 insertions(+) + create mode 100644 config/gdlib.pc.cmake + +diff --git a/config/gdlib.pc.cmake b/config/gdlib.pc.cmake +new file mode 100644 +index 00000000..fb828882 +--- /dev/null ++++ b/config/gdlib.pc.cmake +@@ -0,0 +1,9 @@ ++libdir=@CMAKE_INSTALL_FULL_LIBDIR@ ++includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ ++ ++Name: gd ++Description: GD graphics library ++Version: @GDLIB_VERSION@ ++Cflags: -I${includedir} ++Libs.private: @LIBGD_DEP_LIBS@ ++Libs: -L${libdir} -lgd +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index a621fe1e..38fc9c42 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -174,3 +174,6 @@ install(FILES + gdfontt.h + gdfx.h + DESTINATION include) ++ ++CONFIGURE_FILE(../config/gdlib.pc.cmake gdlib.pc @ONLY) ++INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/gdlib.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")