Не собирается Kepka

Ответить
Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 28 сен 2019, 11:56

Решил я собрать Kepka - клиент телеграма. Все зависимости на месте, но в процессе сборки вылезло такое:

Код: Выделить всё

[ 25%] Building CXX object Telegram/SourceFiles/codegen/style/CMakeFiles/codegen_style.dir/parsed_file.cpp.o
/home/zeffanyx/Sources/kepka/Telegram/SourceFiles/codegen/style/parsed_file.cpp: В функции «uchar codegen::style::{anonymous}::toGray(uchar, uchar, uchar)»:
/home/zeffanyx/Sources/kepka/Telegram/SourceFiles/codegen/style/parsed_file.cpp:84:9: ошибка: «clamp» не является элементом «std»
  return std::clamp(int(0.21 * r + 0.72 * g + 0.07 * b), 0, 255);
         ^
make[2]: *** [Telegram/SourceFiles/codegen/style/CMakeFiles/codegen_style.dir/build.make:115: Telegram/SourceFiles/codegen/style/CMakeFiles/codegen_style.dir/parsed_file.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/Makefile2:1710: Telegram/SourceFiles/codegen/style/CMakeFiles/codegen_style.dir/all] Ошибка 2
make: *** [Makefile:141: all] Ошибка 2
Это может быть из-за старого GCC в Росе? Или дело в другом?

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 13:33

Zeffanyx писал(а):
28 сен 2019, 11:56
Решил я собрать Kepka - клиент телеграма.
Заинтересовало... Смотрю... (но в Debian 10).
Сборка там Cmake - у вас прошла нормально? как делали?
(Я сейчас смотрю сборку, и с зависимостями под Linux там не так просто - в GIT сами они отрабатывают под Windows, их HELP там - фигня)

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 14:13

Zeffanyx писал(а):
28 сен 2019, 11:56
Это может быть из-за старого GCC в Росе? Или дело в другом?
Вообще то, они сами в проекте используют компилятор Clang:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/ThirdParty/GSL$ cat README.md | grep LLVM
* Windows using Clang/LLVM 3.6
* GNU/Linux using Clang/LLVM 3.6
* OS X Sierra 10.12.4 using Apple LLVM version 8.1.0 (Clang-802.0.42)
* OS X High Sierra 10.13.2 (17C88) using Apple LLVM version 9.0.0 (clang-900.0.39.2)
* FreeBSD 10.x with Clang/LLVM 3.6
А Clang может использовать как GNU C++ библиотеку (опция -stdlib=libstdc++), так и свою собственную. и с новой библиотекой C++ (опция -stdlib=libc++). См.: Clang на эту тему.
Как вариант: можете легко установить Clang, и делать сборку с ним.

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 14:36

Zeffanyx писал(а):
28 сен 2019, 11:56
Решил я собрать Kepka
Судя по их GIT-репозиторию, проект пишется профессионально очень посредственно: всё в кучу и сшито белыми нитками... Собираются такие проекты заведомо трудно, там работы и работы...
Но в их же GIT HELP - читайте:
- remove some Qt and custom types in favor of using C++ Standard Library types and classes;
- clang-format;

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 16:27

VictorR2007 писал(а):
30 сен 2019, 16:07
Я некоторые пакеты собираю с clang, так как с gcc5 они уже не собираются.
Установить и использовать Clang вместо GCC - проблем нет (с Clang и kernel Linux собирают).
Вопрос в том, что применительно к проекту Kepka это не так просто - там всё очень сырое.

Интересующиеся см.:
Clang - там есть и где взять, и как установить, и как использовать...
Последний раз редактировалось Olej 30 сен 2019, 16:58, всего редактировалось 1 раз.

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 16:58

Zeffanyx писал(а):
28 сен 2019, 11:56
Решил я собрать Kepka - клиент телеграма.
Вообще то, почти всегда, когда сборка организовывается через Cmake + компиляция делается Clang - можно с сильными основаниями предполагать, что авторы всё это отрабатывают в Windows, а с Cmake/Clang рассчитывают "въехать" в Linux/POSIX за счёт межплатформенной совместимости и минимальными доработками...
Не люблю я такие проекты! :Yahoo!:
В Kepka README.md читаем:
## Supported systems
* Windows 7 - Windows 10 (**not** RT)
* Mac OS X 10.8 - Mac OS X 10.11
* Mac OS X 10.6 - Mac OS X 10.7 (separate build)
* Ubuntu 12.04 - Ubuntu 16.04
* Fedora 22 - Fedora 24
Это какой год? (относительно Linux)... 2012?
Вот это и есть последнее, на чём они проверялись в Linux. :o

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 30 сен 2019, 17:10

Olej писал(а):
30 сен 2019, 16:27
VictorR2007 писал(а):
30 сен 2019, 16:07
Я некоторые пакеты собираю с clang, так как с gcc5 они уже не собираются.
Установить и использовать Clang вместо GCC - проблем нет (с Clang и kernel Linux собирают).
Вопрос в том, что применительно к проекту Kepka это не так просто - там всё очень сырое.
Clang я уже попробовал, он не помогает, та же ошибка.
Вообще, странно читать про "сырость" программы, которая прекрасно собирается и работает в других дистрибутивах. Например, в Leap 15.1 никаких проблем нет. Там можно собирать и с GCC, и с Clang, можно с automake, а можно с ninja.
Здесь же явно проблема на стороне дистрибутива)

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 17:37

Zeffanyx писал(а):
30 сен 2019, 17:10
Здесь же явно проблема на стороне дистрибутива
Точно не руки? :wink:
Последний раз редактировалось Olej 30 сен 2019, 17:42, всего редактировалось 1 раз.

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 17:42

Zeffanyx писал(а):
30 сен 2019, 17:10
которая прекрасно собирается и работает в других дистрибутивах. Например, в Leap 15.1 никаких проблем нет.
А у меня, например, совсем в другом дистрибутиве (Debian 10) ошибка возникает, на компиляции, совсем на другом файле.
И по зависимостям там что написано в их GIT для Cmake - всё херня, всё пришлось восстанавливать методом проб и ошибок.

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 30 сен 2019, 18:06

Olej писал(а):
30 сен 2019, 17:37
Zeffanyx писал(а):
30 сен 2019, 17:10
Здесь же явно проблема на стороне дистрибутива
Точно не руки? :wink:
Собери кепку в Росе и расскажи как ты это сделал.

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 18:21

Zeffanyx писал(а):
28 сен 2019, 11:56

Код: Выделить всё

return std::clamp(int(0.21 * r + 0.72 * g + 0.07 * b), 0, 255);
         ^
std::clamp требует указания совместимости с С++17, что может делаться опциями компилятора, директивами и т.д.
В разных дистрибутивах дефаултные опции компилятора могут различаться.
Нужно указать явно опцию -std=c++1z (-std=c++17 для gcc), а сделать это можно разными способами.

P.S. Вот твой clamp - наслаждайся:

Код: Выделить всё

olej@ACER:/usr/include/boost/algorithm$ ls -l /usr/include/boost/algorithm/clamp.hpp
-rw-r--r-- 1 root root 7669 фев  4  2019 /usr/include/boost/algorithm/clamp.hpp

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 20:09

Zeffanyx писал(а):
30 сен 2019, 18:06
Собери кепку

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/Telegram-Kepka/kepka/build$ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="/usr/lib/qt5" ..
-- Found ALSA: /usr/lib/x86_64-linux-gnu/libasound.so (found version "1.1.8") 
CMake Warning at Telegram/CMakeLists.txt:17 (message):
  No custom API tokens detected.  You must grab your own tokens from
  https://core.telegram.org/api/obtaining_api_id and export them using
  environment options.  Will use default for testing purposes.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/build

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/Telegram-Kepka/kepka/build$ make
Scanning dependencies of target tgvoip
[  0%] Building CXX object Telegram/ThirdParty/libtgvoip/CMakeFiles/tgvoip.dir/BlockingQueue.cpp.o
...
[ 97%] Built target Kepka
Scanning dependencies of target tests_flat_map
[ 97%] Building CXX object Telegram/SourceFiles/base/tests/CMakeFiles/tests_flat_map.dir/flat_map_tests.cpp.o
[ 97%] Linking CXX executable tests_flat_map
[ 97%] Built target tests_flat_map
Scanning dependencies of target tests_flags
[ 98%] Building CXX object Telegram/SourceFiles/base/tests/CMakeFiles/tests_flags.dir/flags_tests.cpp.o
[ 98%] Linking CXX executable tests_flags
[ 98%] Built target tests_flags
Scanning dependencies of target tests_flat_set
[ 98%] Building CXX object Telegram/SourceFiles/base/tests/CMakeFiles/tests_flat_set.dir/flat_set_tests.cpp.o
[100%] Linking CXX executable tests_flat_set
[100%] Built target tests_flat_set
Вот тебе и кепка... :beer:

Изображение

Изображение

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 30 сен 2019, 21:49

Olej писал(а):
30 сен 2019, 18:21
Zeffanyx писал(а):
28 сен 2019, 11:56

Код: Выделить всё

return std::clamp(int(0.21 * r + 0.72 * g + 0.07 * b), 0, 255);
         ^
std::clamp требует указания совместимости с С++17, что может делаться опциями компилятора, директивами и т.д.
В разных дистрибутивах дефаултные опции компилятора могут различаться.
Нужно указать явно опцию -std=c++1z (-std=c++17 для gcc), а сделать это можно разными способами.

P.S. Вот твой clamp - наслаждайся:

Код: Выделить всё

olej@ACER:/usr/include/boost/algorithm$ ls -l /usr/include/boost/algorithm/clamp.hpp
-rw-r--r-- 1 root root 7669 фев  4  2019 /usr/include/boost/algorithm/clamp.hpp
В CmakeLists.txt есть строка:

Код: Выделить всё

set(CMAKE_CXX_STANDARD 17)
Это же и есть требование c++17. Почему его недостаточно?

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 30 сен 2019, 22:21

Zeffanyx писал(а):
30 сен 2019, 21:49
Это же и есть требование c++17. Почему его недостаточно?
Почему - я не могу знать.
Но при сборке разных каталогов они выключают опцию ...
Вот это место (терминал ещё не закрыл :) ):

Код: Выделить всё

...
[ 60%] Building CXX object Telegram/CMakeFiles/Kepka.dir/SourceFiles/media/media_audio_capture.cpp.o
/home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/SourceFiles/media/media_audio_capture.cpp: In member function ‘void Media::Capture::Instance::Inner::onStart()’:
/home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/SourceFiles/media/media_audio_capture.cpp:216:35: warning: ‘AVOutputFormat* av_oformat_next(const AVOutputFormat*)’ is deprecated [-Wdeprecated-declarations]
  while ((fmt = av_oformat_next(fmt))) {
                                   ^
In file included from /home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/SourceFiles/media/media_audio_ffmpeg_loader.h:30,
                 from /home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/SourceFiles/media/media_audio_capture.cpp:25:
/usr/include/x86_64-linux-gnu/libavformat/avformat.h:2088:17: note: declared here
 AVOutputFormat *av_oformat_next(const AVOutputFormat *f);
                 ^~~~~~~~~~~~~~~
/home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/SourceFiles/media/media_audio_capture.cpp:216:35: warning: ‘AVOutputFormat* av_oformat_next(const AVOutputFormat*)’ is deprecated [-Wdeprecated-declarations]
  while ((fmt = av_oformat_next(fmt))) {
                                   ^
In file included from /home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/SourceFiles/media/media_audio_ffmpeg_loader.h:30,
                 from /home/olej/2019_WORK/own.WORK/Telegram-Kepka/kepka/Telegram/SourceFiles/media/media_audio_capture.cpp:25:
/usr/include/x86_64-linux-gnu/libavformat/avformat.h:2088:17: note: declared here
 AVOutputFormat *av_oformat_next(const AVOutputFormat *f);
                 ^~~~~~~~~~~~~~~
At global scope:
cc1plus: warning: unrecognized command line option ‘-Wno-c++1z-extensions’
[ 60%] Building CXX object Telegram/CMakeFiles/Kepka.dir/SourceFiles/media/media_audio_ffmpeg_loader.cpp.o
...

Может они это делают и не раз.

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 30 сен 2019, 22:51

Главное, что собралось всё в итоге. Спасибо за помощь!

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 01 окт 2019, 17:15

Olej писал(а):
30 сен 2019, 18:21
Zeffanyx писал(а):
28 сен 2019, 11:56

Код: Выделить всё

return std::clamp(int(0.21 * r + 0.72 * g + 0.07 * b), 0, 255);
         ^
std::clamp требует указания совместимости с С++17, что может делаться опциями компилятора, директивами и т.д.
В разных дистрибутивах дефаултные опции компилятора могут различаться.
Нужно указать явно опцию -std=c++1z (-std=c++17 для gcc), а сделать это можно разными способами.

P.S. Вот твой clamp - наслаждайся:

Код: Выделить всё

olej@ACER:/usr/include/boost/algorithm$ ls -l /usr/include/boost/algorithm/clamp.hpp
-rw-r--r-- 1 root root 7669 фев  4  2019 /usr/include/boost/algorithm/clamp.hpp
Объясни, пожалуйста, как именно использовать -std=c++1z в данном случае.
Я добавил в CmakeLists.txt строку:

Код: Выделить всё

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z")
но эффекта нет.

Olej
Сообщения: 128
Зарегистрирован: 14 сен 2016, 14:06
Operating system: Fedora 30, Debian 10, Mint 19.2

Не собирается Kepka

Сообщение Olej » 01 окт 2019, 19:11

Zeffanyx писал(а):
01 окт 2019, 17:15
но эффекта нет.
-std=c++1z - это в Clang, точно... может быть, что в GCC -std=c++17, нужно смотреть документацию

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 01 окт 2019, 19:49

Olej писал(а):
01 окт 2019, 19:11
Zeffanyx писал(а):
01 окт 2019, 17:15
но эффекта нет.
-std=c++1z - это в Clang, точно... может быть, что в GCC -std=c++17, нужно смотреть документацию
Ну вот я делаю:

Код: Выделить всё

export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
Потом Cmake ../
Куда именно нужно засунуть -std=c++1z, чтобы файл Telegram/SourceFiles/codegen/style/CMakeFiles/codegen_style.dir/parsed_file.cpp собрался?

Аватара пользователя
VictorR2007
Сообщения: 5950
Зарегистрирован: 12 сен 2011, 13:00
Operating system: ROSA 2016.1
Откуда: Северодвинск

Не собирается Kepka

Сообщение VictorR2007 » 01 окт 2019, 20:17

Zeffanyx писал(а):
01 окт 2019, 19:49
Куда именно нужно засунуть -std=c++1z,
Наверное так

Код: Выделить всё

%build
%global optflags %{optflags} -std=c++17
export CC="clang"
export CXX="clang++"
Или может вместо строки
%global optflags %{optflags} -std=c++17
строку
%global optflags %{optflags} -std=c++1z

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 01 окт 2019, 20:20

VictorR2007 писал(а):
01 окт 2019, 20:17
Наверное так
Я всегда перед сборкой пакета проверяю, собирается ли программа просто в папке. Так что, хотелось бы без RPM-макросов для начала, уж извините.

Аватара пользователя
Алзим
Сообщения: 4436
Зарегистрирован: 18 июн 2015, 11:57
Operating system: ROSA Desktop Fresh R10
Откуда: Интернет

Не собирается Kepka

Сообщение Алзим » 01 окт 2019, 20:37

VictorR2007 писал(а):
01 окт 2019, 20:17
%{optflags}
C этим макросом надо поосторожнее если собирать с Clang.
Может быть придётся прописывать:

Код: Выделить всё

%global optflags %{nil}
Там есть несовместимые с Clang ключи.

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 02 окт 2019, 12:04

Короче, пока не выходит. Olej не желает раскрывать секрет своего успеха)

Аватара пользователя
VictorR2007
Сообщения: 5950
Зарегистрирован: 12 сен 2011, 13:00
Operating system: ROSA 2016.1
Откуда: Северодвинск

Не собирается Kepka

Сообщение VictorR2007 » 02 окт 2019, 15:43

Zeffanyx писал(а):
02 окт 2019, 12:04
Короче, пока не выходит.
Значит стоит попробовать собирать с помощью mock-urpm.
Тогда можно будет использовать параметры в спеке

Код: Выделить всё

%build
%global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g' -e 's/-fstack-clash-protection//g' -e 's/$/-Qunused-arguments -Wno-unknown-warning-option/')
export CC="clang"
export CXX="clang++"
%cmake \
      -DPACKAGED_BUILD:BOOL=ON \
      -DENABLE_IPO:BOOL=ON
%make
Тут есть параметры сборки
https://github.com/procxx/kepka/blob/dev/kepka.spec

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 02 окт 2019, 16:57

VictorR2007 писал(а):
02 окт 2019, 15:43
Значит стоит попробовать собирать с помощью mock-urpm.
При чём тут вообще RPM и спек? Мне не получается передать флаг CXX при сборке исходника. Когда получится локально собрать, тогда и к пакету перейду.

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 02 окт 2019, 17:11

Zeffanyx писал(а):
02 окт 2019, 12:04
Olej не желает раскрывать секрет своего успеха)
По ходу, он собрал приложение в Debian. Вот по этой строке видно, что это не Роса:

Код: Выделить всё

/usr/include/x86_64-linux-gnu/libavformat/avformat.h
У нас этот файлик лежит в другом месте. Интрига сохраняется!

Аватара пользователя
Zeffanyx
Сообщения: 1345
Зарегистрирован: 12 сен 2011, 14:25
Operating system: Rosa Fresh R11, OpenMandriva Lx 4 (Cooker)
Откуда: Санкт-Петербург

Не собирается Kepka

Сообщение Zeffanyx » 03 окт 2019, 14:01

Всё собрал, всё получилось.
Но в спеке не сработали макросы %cmake и %make, с ними сборка валилась. Возможно из-за этого не получился вот этот трюк:

Код: Выделить всё

%global optflags %{optflags} -std=c++17 -stdlib=libc++
Вместо него сделал патч.
Принимаются советы про то как причесать спек)

Ответить