понедельник, 29 января 2018 г.

CentOS и cmake: this file requires compiler and library support for the iso c++ 2011 standard

Даже после установки devtoolset-7 софт может не собираться, выдавая
this file requires compiler and library support for the iso c++ 2011 standard
Была найдена такая штука:

# http://stackoverflow.com/questions/10851247/how-to-activate-c-11-in-cmake
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    add_definitions(-std=c++11)
elseif(COMPILER_SUPPORTS_CXX0X)
    add_definitions(-std=c++0x)
else()
    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

Вставляем в CMakeLists.txt поближе к началу, собираем.

Хотя мелькал и такой вариант
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

ручной вариант
$ cmake -DCMAKE_CXX_FLAGS=-std=c++11 ..

CentOS 7 и gcc разных версий

Штатный gcc - 4.8, что уже весьма старо, а тот же гугл обожает говнокодить на свежем с++17. Впрочем, можно поставить и более свежие версии. под центос 6, тут действуем по аналогии.

yum -y install centos-release-scl
yum search devtoolset
Будет огромный список, который делится на части по версиям. В частности, devtoolset-3 это gcc 4.9, -4 это 5.3 итд.
На самом деле, ставить целиком devtoolset-x не нужно, обычно достаточно только
devtoolset-3-gcc
devtoolset-3-gcc-с++

Дальше переключаем версию, несколько вариантов
1) scl enable devtoolset-3 bash
2) /opt/rh/devtoolset-3/enable
3) update-alternatives --install /usr/bin/gcc-4.9 gcc-4.9 /opt/rh/devtoolset-3/root/usr/bin/gcc 10
update-alternatives --install /usr/bin/g++-4.9 g++-4.9 /opt/rh/devtoolset-3/root/usr/bin/g++ 10
(тут уже сначала надо смотреть, что куда ставится, зато потом переключать можно глобально)

А посмотреть, какая версия в каком тулсете, можно так:
$ yum info devtoolset-4-gcc |grep Version
Version     : 5.3.1

пятница, 26 января 2018 г.

cmake и многопоточность

Косяк cmake в том, что он собирает в 1 поток.
https://blog.kitware.com/cmake-building-with-all-your-cores/
Для решения - генерируем через -G файлы под ninja или make и собираем уже ими.

вторник, 23 января 2018 г.

CentOS 7 и gyp: ImportError: No module named cmake

GYP (generate your projects) is a build automation tool. GYP is created by Google to generate native IDE project files (such as Visual Studio Code and Xcode) for building the Chromium web browser and is licensed as open source software using the BSD software license.

The functionality of GYP is similar to the CMake build tool. GYP processes a file that contains a JSON dictionary[1] in order to generate one or more target project make files. The single source .GYP file is generic while the target files are specific to each targeted build tool.

Потребовалось для некоторых задач использовать gyp (wiki, 2) с опцией --format=cmake, но молвит нам компилятор ImportError: No module named cmake
Также не помогла установка python-pip && pip install cmake. Копать надо в сторону самого gyp:
$ ls -la /usr/lib/python2.7/site-packages/gyp/generator/cmake*
ls: cannot access /usr/lib/python2.7/site-packages/gyp/generator/cmake*: No such file or directory

То есть просто нет данного функционала в самом gyp. Но заглянув например сюда - мы этот модуль видим.

Быстрое введение в mock

mock это утилита для сборки, наподобие rpmbuild, но в чистом окружении.

https://github.com/xvitaly/tgbuild/blob/master/doc/build_using_mock.md

https://blog.packagecloud.io/eng/2015/05/11/building-rpm-packages-with-mock/

Список реп (для ключа -r) можно посмотреть тут
/etc/mock/

В случае с centos ставим примерно так
Подготовка
yum install -y epel-release
yum install rpm-build rpmdevtools mock
usermod -a -G mock some_builder_user
mock -r epel-7-x86_64 init

Сборка своего пакета
rpmbuild -bs some_package.spec
mock -r epel-7-x86_64 some_package.src.rpm
и результат будет в /var/lib/mock/epel-7-x86_64/result

Чтобы сделать сборку со своей репой, в /etc/mock копируем нужный файл и добавляем внутрь свои репы, а потом в -r указываем наше новое название.

среда, 17 января 2018 г.

debian: ispmanager 4 + letsencrypt

Есть штатный модуль интеграции, но он доступен только с версии 5.65, а нам надо под более адекватную 4 версию.
Можно конечно поставить сервис, сгенерировать сертификаты, скопировать их из файлов и добавить через панель, а потом каждые 2 месяца обновлять... Но можно сделать проще!

понедельник, 1 января 2018 г.