Doomed to Wordpress

Serious Reflections During the Life of Jeremy Fisher

   

Subscribe
Subscribe to a syndicated feed of my weblog, brought to you by the wonders of RSS.

Flavours
There's more than one way to view this weblog; try these flavours on for size.

  • index
  • circa 1993
  • RSS
  • Links
    These are a few links to my other sites.

  • Ставропигиальныя Пластинки
  • Анкылым
  • Русское Шрифтовое Зало
  • Gopher (Proxied)
  • More about Gopher
  •        

    2020/10/24 pkgsrc c++11

    Взялся теперь собирать inkscape. Постепенно прихожу к выводу, что pkgsrc всё же годится для мелких консольных программ, не для сложных и графических (lynx ранее собрался быстро и вообще без проблем). И опять источник бед — новшества и нестандартные средства сборки. В данном случае пришлось столько помучиться с c++11, что в конце концов я вынужден был явно добавить в /usr/pkg/etc/mk.conf:

    GCC_REQD+=     5
    

    (где-то в зависимостях было видимо указано gcc5, но крайне сложно проверить их все, чтобы понять, где) — потому что по умолчанию почему-то c++11 в USE_LANGUAGES никак не переключает версию gcc. Способа задать что-то подобное для любых пакетов, но только при определённых условиях (.if !empty(USE_LANGUAGES:Mc++11) или вообще .if !empty(USE_LANGUAGES:Mc++)), не нашёл. Да и некоторые авторы пакетов почему-то ошибочно считают, что gcc 4.7 для сборки их пакета на c++11 достаточно. Но это оказывается не так! Да мало того, некоторые из них даже не удосуживаются упомянуть c++11 в USE_LANGUAGES, хотя configure явным образом проверяет компилятор на поддержку c++11.

    В одном случае пакет надеется на наличие libbacktrace в Linux, но у меня, например, в Wheezy его нет. Здесь хочу записать, что конструкция PLIST.backtrace= no не сработала: очевидно, надо, чтобы переменная имела пустое значение, я в итоге просто закомментировал PLIST.backtrace= yes. (Это пакет boost-libs.)

    Поскольку я устал выставлять в Makefile'ах пропущенное c++11 и, кроме того, в cairomm возникла проблема при линковке, когда почему-то libtool не находил libstdc++.la из gcc 4.9, потому что в worl/.buildlink оказывалось gcc48, я решил внимательнее почитать https://wiki.netbsd.org/pkgsrc/gcc/.

    If PKGSRC_GCC_VERSION and PKGSRC_GXX_VERSION are not set, the system
    will behave much as before. As a possible exception, builds may still
    fail if the required version is greater than the base system
    version. So far the only known reason to avoid setting these variable
    is if pkgsrc gcc cannot be built.
    
    Each of c99, c++, c++11, and c++14 will be associated with a minimum
    gcc version, such that almost all programs declaring that language can
    be built with that version.
    

    Но это всё, как я понимаю, теория, предложения. В реальности такого не происходит.

    When the base system is almost new enough, the decision about the
    default is more complicated. A key example is gcc 4.8, found in NetBSD
    7. Firefox requires gcc 4.9, and all programs using c++14 also need a
    newer version. One options is to choose 4.8, resulting in firefox
    failing, as well as all c++14 programs. Another is to choose 4.9, but
    this makes little sense because c++14 programs will still fail, and
    the general rule of moving to the most recent generally-acceptable
    version applies, which currently leads to gcc5.
    

    Итог такой, что придётся всё-таки собирать все пакеты одним компилятором. (В этом своя логика, конечно, есть. Но вот в венде разве требуется, чтобы все программы в системе были собраны одной версией компилятора?!) И придётся повышать его версию, как только найдётся хоть один пакет на c++, которому требуется более новая версия. И пересобирать после этого все пакеты на c++ из-за бесконечных перекрёстных зависимостей.

    В общем-то, установка gcc5 по умолчанию решила если не все проблемы, то все, которые могли бы возникнуть в ближайшее время (и с этими настройками я ещё собрал qgis). Печальное обстоятельство, свидетельствующее об удручающем состоянии даже компилируемых языков в наши дни, но, увы, пока что неизбежное, если я не хочу зарыться в эти дебри с головой и навсегда.

    Ещё интересные статьи (правда, 2015 года) о логике выбора версии gcc в pkgsrc:

    https://atomicules.co.uk/2015/10/17/Adventures-in-Pkgsrc-Build-System-and-GCC-Selection-Part-1.html

    https://atomicules.co.uk/2015/11/02/Adventures-in-Pkgsrc-Build-System-and-GCC-Selection-Part-2.html

    NB: bmake show-depends-dirs покажет гораздо больше зависимостей, чем просто show-depends — включая, как я понимаю, build и tool depends.

    В целом итог невразумительный. Архитектура и идея мне нравится, но на сборку 3 программ ушло почти 3 недели.

    #pkgsrc #gcc #inkscape #qgis

    permanent link