commit:     f7989067085a38f222241fa51792b6e86fb0a06f
Author:     Anna (cybertailor) Vyalkova <cyber+gentoo <AT> sysrq <DOT> in>
AuthorDate: Tue Aug 10 21:12:13 2021 +0000
Commit:     Florian Schmaus <flow <AT> gentoo <DOT> org>
CommitDate: Tue Aug 10 21:12:13 2021 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=f7989067

net-libs/kcgi: convert static libraries to shared

Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo <AT> sysrq.in>

 net-libs/kcgi/kcgi-0.12.5.ebuild | 68 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 65 insertions(+), 3 deletions(-)

diff --git a/net-libs/kcgi/kcgi-0.12.5.ebuild b/net-libs/kcgi/kcgi-0.12.5.ebuild
index 79afbe7c8..380808248 100644
--- a/net-libs/kcgi/kcgi-0.12.5.ebuild
+++ b/net-libs/kcgi/kcgi-0.12.5.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=8
 
-inherit multiprocessing toolchain-funcs
+inherit flag-o-matic multilib multiprocessing toolchain-funcs
 
 DESCRIPTION="Minimal CGI library for web applications"
 HOMEPAGE="https://kristaps.bsd.lv/kcgi/";
@@ -32,15 +32,72 @@ DEPEND="${RDEPEND}
 
 PATCHES=( "${FILESDIR}"/${PN}-$(ver_cut 1-2)-ldflags.patch )
 
+_get_version_component_count() {
+       local cnt=( $(ver_rs 1- ' ') )
+       echo ${#cnt[@]} || die
+}
+
+static_to_shared() {
+       local libstatic=${1}
+       shift
+       local libname=$(basename ${libstatic%.a})
+       local soname=${libname}$(get_libname $(ver_cut 1-2))
+       local libdir=$(dirname ${libstatic})
+
+       einfo "Making ${soname} from ${libstatic}"
+       if [[ ${CHOST} == *-darwin* ]] ; then
+               ${LINK:-$(tc-getCC)} ${LDFLAGS}  \
+                       -dynamiclib -install_name 
"${EPREFIX}"/usr/lib/"${soname}" \
+                       -Wl,-all_load -Wl,${libstatic} \
+                       "$@" -o ${libdir}/${soname} || die "${soname} failed"
+       else
+               ${LINK:-$(tc-getCC)} ${LDFLAGS}  \
+                       -shared -Wl,-soname=${soname} \
+                       -Wl,--whole-archive ${libstatic} -Wl,--no-whole-archive 
\
+                       "$@" -o ${libdir}/${soname} || die "${soname} failed"
+
+               if [[ $(_get_version_component_count) -ge 1 ]] ; then
+                       ln -s ${soname} ${libdir}/${libname}$(get_libname 
$(ver_cut 1)) || die
+               fi
+
+               ln -s ${soname} ${libdir}/${libname}$(get_libname) || die
+       fi
+}
+
 src_prepare() {
        default
 
        # disable failing tests
        sed -e '/\s*regress\/test-debug-.*/d' -i Makefile || die
+
+       # ld: multiple definition of `dummy'
+       local deselect=( sandbox-{capsicum,darwin,pledge,seccomp-filter}.o )
+       case ${CHOST} in
+               *-linux-*)
+                       deselect=( "${deselect[@]/sandbox-seccomp-filter.o}" )
+                       ;;
+               *-darwin*)
+                       deselect=( "${deselect[@]/sandbox-darwin.o}" )
+                       ;;
+               *-freebsd*)
+                       deselect=( "${deselect[@]/sandbox-capsicum.o}" )
+                       ;;
+               *-openbsd*)
+                       deselect=( "${deselect[@]/sandbox-pledge.o}" )
+                       ;;
+       esac
+
+       for obj in "${deselect[@]}"; do
+               # elements are not deleted completely from the array
+               if [[ -n "${obj}" ]]; then
+                       sed "/${obj}/d" -i Makefile || die
+               fi
+       done
 }
 
 src_configure() {
        tc-export CC AR
+       append-cflags -fPIC
 
        # note: not an autoconf configure script
        conf_args=(
@@ -56,6 +113,12 @@ src_configure() {
 
 src_compile() {
        bmake -j$(makeopts_jobs) || die
+
+       static_to_shared libkcgi.a -lz -lmd
+       static_to_shared libkcgihtml.a
+       static_to_shared libkcgijson.a -lm
+       static_to_shared libkcgiregress.a
+       static_to_shared libkcgixml.a
 }
 
 src_test() {
@@ -69,10 +132,9 @@ src_install() {
                DATADIR="/usr/share/doc/${PF}/examples" \
                install || die
 
-       # kcgi does not install shared libraries
+       dolib.so lib*$(get_libname)*
        if ! use static-libs; then
                find "${ED}" -name '*.a' -delete || die
-               find "${ED}" -name '*.pc' -delete || die
        fi
 
        einstalldocs

Reply via email to