News - Logiciels Libres

Gentoo profile 17 : Failed to emerge sys-libs/libcxxrt-0.0_p20160922

Par , le dans Logiciels Libres - 2 Commentaires
Gentoo profile 17 : Failed to emerge sys-libs/libcxxrt-0.0_p20160922
Salut à tous,

Lors de la mise à jour du profil de Gentoo vers la version 17, il peut y avoir un petit bug avec le paquet sys-libs/libcxxrt.

Il y a en effet un bogue dans certains cas (que je n'ai rencontré que sur la Gentoo MATE graphique).

Il faut donc patcher manuellement et localement.

Pour cela, créer le /etc/portage/patches pour tous les ebuilds (cf la source en bas d'article) :

Code BASH :
vi /etc/portage/bashrc


Code BASH :
pre_src_prepare() {
    [[ ${EAPI:-0} == [012345] ]] || return
    if ! type estack_push > /dev/null 2>&1; then
        local estack_names="eshopts_push eshopts_pop evar_push evar_push_set evar_pop estack_push estack_pop"
        source <(awk "/^# @(FUNCTION|VARIABLE): / { p = 0 } /^# @(FUNCTION|VARIABLE): (${estack_names// /|})\$/ { p = 1 } p { print }" ${PORTDIR}/eclass/estack.eclass)
    fi
    if ! type epatch_user > /dev/null 2>&1; then
        local epatch_names="EPATCH_SOURCE EPATCH_USER_SOURCE epatch_user_death_notice epatch_user epatch"
        source <(awk "/^# @(FUNCTION|VARIABLE): / { p = 0 } /^# @(FUNCTION|VARIABLE): (${epatch_names// /|})\$/ { p = 1 } p { print }" ${PORTDIR}/eclass/epatch.eclass)
    fi
    epatch_user
    for name in $epatch_names; do
        unset $name
    done
    for name in $estack_names; do
        unset $name
    done
}


Recharger ce fichier pour qu'il soit pris en compte dans bash :

Code BASH :
source /etc/portage/bashrc


Ensuite créer le dossier «patches» pour le nom et la catégorie de notre ebuild :

Code BASH :
mkdir -p /etc/portage/patches/sys-libs/libcxxrt-0.0_p20160922/ 


Ensuite, créer un fichier de patch, par exemple 01-bug-profile17.patch

Code BASH :
vi  /etc/portage/patches/sys-libs/libcxxrt-0.0_p20160922/01-bug-profile17.patch


Code BASH :
diff --git a/src/memory.cc b/src/memory.cc
index 9fa9d2a..0fb4f55 100644
--- a/src/memory.cc
+++ b/src/memory.cc
@@ -151,4 +151,21 @@ void operator delete[](void * ptr) NOEXCEPT
     ::operator delete(ptr);
 }
 
+// C++14 additional delete operators
 
+#if __cplusplus >= 201402L
+
+__attribute__((weak))
+void operator delete(void * ptr, std::size_t) NOEXCEPT
+{
+    ::operator delete(ptr);
+}
+
+
+__attribute__((weak))
+void operator delete[](void * ptr, std::size_t) NOEXCEPT
+{
+    ::operator delete(ptr);
+}
+
+#endif


Le patch provient de https://github.com/pathscale/libcxxrt/commit/db54f535fc67703b2993b9b2d3fc7ede7a608936

Ensuite, on reprend la mise à jour du world

Code BASH :
emerge -r


Et voilà :magic: