Ошибка сборки ветки experimental в MacOS
Не могу собрать ветку 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
Есть ли идеи, как это можно починить?
При этом ветка master собирается без ошибок, очевидно, потому что там нет mimeTeX.
А если откатить коммит https://github.com/xintrea/mytetra_dev/commit/3ca1e1d9726d4688dac01440b6468698ab61e953, то сборка начинает работать 🤔
Хм, ломающий коммит от 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. Потом делать коммит.
Ну, то есть, чтобы под MacOs использовалась родная функция, а этой самодельной небыло.
Почти уверен, что под MacOS после этого коммита собирали только ветку master (я так и делал), поэтому ошибка и была замечена только сейчас.
Кажется, такой макрос для MacOS называется __APPLE__, если верить этим ответам. Спасибо за идею, я попробую!