LINUX.ORG.RU

dev-libs/boost и c++11

 


0

1

Столкнулся (при сборке openmw) с вот этим багом буста. Если коротко, то надо либо собирать буст с c++11, либо собирать пользовательский код без c++11, либо специальный дефайн (-DBOOST_NO_CXX11_SCOPED_ENUMS). Workaround понятен и не интересен. Посмотрел в

tear ~ # emerge -p =dev-libs/boost-1.55.0-r1

These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[ebuild   R   ~] dev-libs/boost-1.55.0-r1:0/1.55.0  USE="doc icu nls threads -context -debug -mpi -python -static-libs -tools" PYTHON_TARGETS="python2_7 python3_2 python3_3 (-python2_6)" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB
tear ~ #

USE флага c++11 не увидел, посмотрел в ebuild:

tear ~ # grep -i cxx /usr/portage/dev-libs/boost/boost-1.55.0-r1.ebuild 
        mpi? ( || ( sys-cluster/openmpi[cxx] sys-cluster/mpich2[cxx,threads] ) )
                compiler_executable="$(tc-getCXX)"
                compiler_executable="$(tc-getCXX)"
using ${compiler} : ${compiler_version} : ${compiler_executable} : <cflags>"${CFLAGS}" <cxxflags>"${CXXFLAGS}" <linkflags>"${LDFLAGS}" ;
                if [[ $($(tc-getCXX) -v) == *trunk* ]]; then
                        compilerVersion=$($(tc-getCXX) -v | sed '1q' \
                compilerExecutable=$(tc-getCXX)
        append-cxxflags -std=gnu++98
tear ~ # grep -i std /usr/portage/dev-libs/boost/boost-1.55.0-r1.ebuild 
        append-cxxflags -std=gnu++98
        # boost's build system truely sucks for not having a destdir.  Because for
tear ~ #

Увидел <cxxflags>"${CXXFLAGS}"

Вопрос: идеологически верно добавлять c++11 к своим системным (или в env) CXXFLAGS или просить на багзилле добавить юз к ебилдам буста?

cast Pinkbyte qnikst

★★★★★

На мой взгляд, идеологически верно добавить юз. Потому что это локальная настройка, а не системная.

devsdc ★★
()

Выжимка из ChangeLog:

08 Nov 2012; Diego E. Pettenò <flameeyes@gentoo.org> +boost-1.52.0-r1.ebuild, -boost-1.52.0.ebuild, metadata.xml: Simplify bjam handling; use the unversioned commands from boost- build-1.52.0-r1; force-disabled C++11 support;

Затем курим как меняется ABI при использовании C++11 и какие грабли могут быть и понимаем, почему в своё время был запилен вот такой костыль в ебилде boost:

        # Do _not_ use C++11 yet, make sure to force GNU C++ 98 standard.
        append-cxxflags -std=gnu++98

Если ты уверен что всё будет ОК, копируй ебилд в локальный оверлей и выпиливай данный костыль. Потом рекомендую перебрать всё, что зависит от boost-а, во избежании возможных проблем с ABI.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Затем курим как меняется ABI при использовании C++11 и какие грабли могут быть и понимаем, почему в своё время был запилен вот такой костыль в ебилде boost:

Ух, какая жесть. Спасибо за пояснения. Пожалуй пока костылем обойдусь.

Если ты уверен что всё будет ОК, копируй ебилд в локальный оверлей и выпиливай данный костыль. Потом рекомендую перебрать всё, что зависит от boost-а, во избежании возможных проблем с ABI.

Но попробовать стоит, да :)

Stil ★★★★★
() автор топика
25 октября 2015 г.
Ответ на: комментарий от Pinkbyte

Если ты уверен что всё будет ОК, копируй ебилд в локальный оверлей и выпиливай данный костыль. Потом рекомендую перебрать всё, что зависит от boost-а, во избежании возможных проблем с ABI.

Я тут столкнулся с ещё одним кейсом для которого понадобился boost/c++11 и таки решился на

 [ ~ ] $ grep CXXFLAGS /etc/portage/make.conf
CXXFLAGS="${CFLAGS} -std=c++11"
 [ ~ ] $ 

Костыль с форсом стандарта из буста разумеется был выпилен (как и из ICU, в которой он тоже обнаружился).

И, соответственно:

 [ ~ ] # emerge -uDNae @world

Итого не собралось (по любым причинам):

=games-util/grfcodec-6.0.4
=kde-frameworks/kdbusaddons-5.15.0
=dev-lang/spidermonkey-1.8.5-r4
=app-text/libetonyek-0.1.3
=net-print/cups-filters-1.0.71
=kde-base/kdelibs-4.14.13-r1
=media-video/vlc-2.1.5-r1
=media-gfx/blender-2.72b-r3
=media-gfx/inkscape-0.48.5-r1
=dev-util/oprofile-0.9.9-r1
=media-libs/x265-1.8-r3
=dev-qt/qtscript-4.8.7
=dev-qt/qtwebkit-4.8.7

Т.е. совсем немного и не критичный софт.

Резюмируя: имхо, C++11 ABI уже вполне юзабелен на системном уровне.

// Если вдруг тебе интересно :)

Stil ★★★★★
() автор топика
Последнее исправление: Stil (всего исправлений: 2)
Ответ на: комментарий от Stil

Спасибо за тест! К сожалению я не настолько хорошо разбираюсь в такой низкоуровневой штуке, чтобы делать какие-то далекоидущие выводы. Но, судя по новостям с gcc 4.8 в Gentoo уже потихоньку внедряют новый ABI, так что рано или поздно эти костыли таки придётся выпилить.

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.