From owner-freebsd-ports@FreeBSD.ORG Thu Jan 23 20:00:23 2014 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id ADAFEA97 for ; Thu, 23 Jan 2014 20:00:23 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B89771464 for ; Thu, 23 Jan 2014 20:00:22 +0000 (UTC) Received: from mandree.no-ip.org ([78.49.107.212]) by mail.gmx.com (mrgmx103) with ESMTPSA (Nemesis) id 0Lrw2c-1VAif23Vpm-013boV for ; Thu, 23 Jan 2014 21:00:14 +0100 Received: from [IPv6:::1] (localhost6.localdomain6 [IPv6:::1]) by apollo.emma.line.org (Postfix) with ESMTP id E417F23D0FE for ; Thu, 23 Jan 2014 21:00:12 +0100 (CET) Message-ID: <52E174CC.1020801@gmx.de> Date: Thu, 23 Jan 2014 21:00:12 +0100 From: Matthias Andree User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: freebsd-ports@freebsd.org Subject: Re: USE_GCC doesn't set rpath References: <52DEE7EE.6010909@rawbw.com> <52DF0346.6000108@ShaneWare.Biz> <52E167BF.8050103@rawbw.com> In-Reply-To: X-Enigmail-Version: 1.5.2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K0:0YHUg0jqZQ6NTxW8PXyBqZ67ZUl49Qo7Wr/zXVzzJHfHG4YOEu3 vyL3AotzgLf0zXkoAklrMc0UjrvTdFqdsAuMNMZxrIWS0TIaqDKlRqsicCClbv2klieg+30 hPAElWwVPbzvcXDKKY8Wfnn98G/eOyMngQO3QW2q/6sZi9p97vGI5DFcgeQDZ+Hx9yJEH93 YjaFVrg4iraw9GoD/D2OQ== X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Jan 2014 20:00:23 -0000 Am 23.01.2014 20:53, schrieb Bernhard Fr=F6hlich: > Am 23.01.2014 20:04 schrieb "Yuri" : >> >> On 01/21/2014 15:31, Shane Ambler wrote: >>> >>> I think you will find that qbittorrent will need to be built with the >>> same gcc version as libtorrent-rasterbar. >>> >>> I believe qbittorrent is loading /usr/lib/libstdc++.so.6 then it load= s >>> libtorrent-rasterbar.so.7 which tries to load libstdc++ and it is giv= en >>> the already open copy which doesn't have GLIBCXX_3.4.15 that it needs= to >>> run. >> >> >> Yes, you are right, thst's what is happening. >> So if any dependency has USE_GCC set, all dependent packages should al= so > have USE_GCC set. Can ports build infrastructure automatically set USE_= GCC > for dependent ports? Because doing this by hand in each port is tedious= and > error prone. >> >> Yuri >=20 > No it can't right now and this is why we need a ports compiler. Right n= ow > we are hiding this problems by the fact that we are able to build 95% > percent of the tree with clang and everyone is happy. We add dozens of > patches to compile with clang or add this rpath workarounds to even mor= e > ports just because nobody wants to acknowledge that this is shit and wo= n't > work properly unless really everything is build with one compiler. No reason to use offensive language. We can technically provide/use different ports compilers, the only thing is that we need to make sure to separate ports by their ABI. I. e. clang-built C++ ports require clang-built C++ requisites. Meaning that you may need to install the same library twice, once with GCC47 ABI, once with clang ABI - and of course the rpath needs to be set accordingly= . Possibly we also need to provide only static versions of compiler-dependent libs (such as libcompiler-rt for clang and libgcc* for GCC) to overcome the particular problem Bernhard is describing. Again, this mostly affects C++ ports, and to a lesser extent Objective-C ports. > The rpath stuff is only a workaround that works in a few cases but it > doesn't work in all cases. You will still see very hard to diagnose run= time > crashes. If the ABIs are not compatible, then linking should not work - for instance, if I compile rawtherapee with GCC, it will not link against requisites built with clang.