mytetra_dev icon indicating copy to clipboard operation
mytetra_dev copied to clipboard

Ошибка сборки ветки experimental в MacOS

Open and-semakin opened this issue 5 years ago • 6 comments

Не могу собрать ветку experimental на MacOS. Сборка завершается с 1 ошибкой и 140 предупреждениями.

Ошибка имеет следующее содержание:

$ make
cd thirdParty/mimetex/ && ( test -e Makefile || /usr/local/opt/qt/bin/qmake -o Makefile /Users/andreisemakin/git/mytetra_dev/thirdParty/mimetex/mimetex.pro ) && /Library/Developer/CommandLineTools/usr/bin/make -f Makefile
Project MESSAGE: Touch mimeTeX qmake
/Library/Developer/CommandLineTools/usr/bin/clang -c -pipe -DAA -O2  -arch x86_64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=10.13 -Wall -Wextra -fPIC -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I/usr/local/Cellar/qt/5.14.1/lib/QtCore.framework/Headers -I. -I/usr/local/Cellar/qt/5.14.1/mkspecs/macx-clang -F/usr/local/Cellar/qt/5.14.1/lib -o build/obj/mimetex.o mimetex.c
In file included from mimetex.c:434:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/string.h:160:7: error: conflicting types for
      'strcasestr'
char    *strcasestr(const char *__big, const char *__little);
         ^
mimetex.c:428:13: note: previous declaration is here
const char *strcasestr(const char *s1, const char *s2);

Полный вывод сборки можно посмотреть здесь: https://github.com/and-semakin/mytetra_dev/runs/638247030

Есть ли идеи, как это можно починить?

and-semakin avatar May 02 '20 06:05 and-semakin

При этом ветка master собирается без ошибок, очевидно, потому что там нет mimeTeX.

and-semakin avatar May 02 '20 06:05 and-semakin

А если откатить коммит https://github.com/xintrea/mytetra_dev/commit/3ca1e1d9726d4688dac01440b6468698ab61e953, то сборка начинает работать 🤔

and-semakin avatar May 02 '20 06:05 and-semakin

Хм, ломающий коммит от 15 сентября 2018. Он фиксит сборку под Windows. Вроде бы после этого времени кто-то собирал под MacOS...

Судя по тексту ошибки, в макосовом заголовке:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/string.h

... есть функция strcasestr(), и ее прототип написан без const.

В файле mimetex.c объявлена своя функция strcasestr, и ее прототип сделан с const.

Возможно, что прототип strcasestr() и реализацию этой функции в файле mimetex.c надо обернуть в директивы условной компиляции ( #ifndef ... ), в качестве параметра указать дефайн для MacOS, который создает макосовый компилер во время компиляции, я не знаю как этот дефайн в макоси называется.

Но после внесения изменений, надо проверить компиляцию на Windows и Linux, хотя бы под GCC. Потом делать коммит.

xintrea avatar May 05 '20 10:05 xintrea

Ну, то есть, чтобы под MacOs использовалась родная функция, а этой самодельной небыло.

xintrea avatar May 05 '20 10:05 xintrea

Почти уверен, что под MacOS после этого коммита собирали только ветку master (я так и делал), поэтому ошибка и была замечена только сейчас.

and-semakin avatar May 05 '20 15:05 and-semakin

Кажется, такой макрос для MacOS называется __APPLE__, если верить этим ответам. Спасибо за идею, я попробую!

and-semakin avatar May 05 '20 15:05 and-semakin