CMake

Всё началось с того, что при попытке запустить тестирование ctest начал выдавать:
"Error: a cycle exists in the test dependency graph for the test..."
Я стал проверять CMakeLists, понатыкал кучу отладочной информации, сделал печать всех зависимостей в конце CMakeLists, и никаких циклических зависимостей не увидел. После чего полез в CTestTestfile.cmake (кто не знает - это результат работы cmake, который потом поедает ctest) и стал разбираться уже там.
В результате урезания получилось вот такое:
ADD_TEST(a true)
ADD_TEST(test1 true)
SET_TESTS_PROPERTIES(test1 PROPERTIES DEPENDS "a")
ADD_TEST(b true)
ADD_TEST(test2 true)
SET_TESTS_PROPERTIES(test2 PROPERTIES DEPENDS "b;test1")
ADD_TEST(c true)
ADD_TEST(test3 true)
SET_TESTS_PROPERTIES(test3 PROPERTIES DEPENDS "c;test1;test2")
Ясное дело, никаких циклических зависимостей тут нету. Пересобрал cmake из ихнего репозитория. Это не помогло. Ну теперь уже больше ничего не оставалось, и я полез в исходники. И там я нашёл этот код, который проверяет наличие циклов:
for(TestMap::iterator it = this->Tests.begin();
it != this->Tests.end(); ++it)
{
//DFS from each element to itself
std::stack<int> s;
std::vector<int> visited;
s.push(it->first);
while(!s.empty())
{
int test = s.top();
s.pop();
for(TestSet::iterator d = this->Tests[test].begin();
d != this->Tests[test].end(); ++d)
{
if(std::find(visited.begin(), visited.end(), *d) != visited.end())
{
//cycle exists
cmCTestLog(this->CTest, ERROR_MESSAGE, "Error: a cycle exists in "
"the test dependency graph for the test \""
<< this->Properties[it->first]->Name << "\"." << std::endl
<< "Please fix the cycle and run ctest again." << std::endl);
return false;
}
s.push(*d);
}
visited.push_back(test);
}
}
Это же, простите, ёбаный стыд. Охеренный конечно поиск циклов. Интересно, ребятки из kitware вообще даг от графа с циклами отличать умеют или нет.
И вот что теперь делать со всем этим дерьмом? Править исходники ctest? А если ещё куча подобного дерьма потом вылезет? А уже потрачено очень дохера времени на переписывание билд-системы на cmake...
И кто-то ещё мне говорил, что cmake рулит. Сосёт он, сосёт! =))
|
</> |