CMake

топ 100 блогов esil0x09.07.2010 В результате очередного раунда сношения с cmake/ctest я увидел такое, что теперь мне уже становится страшно им пользоваться.

Всё началось с того, что при попытке запустить тестирование 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 рулит. Сосёт он, сосёт! =))

Оставить комментарий

Архив записей в блогах:
Ксения Собчак и Ксения Соколова на страницах "Сноба" разговаривают с Григорием Чхартишвили .  Мой коллега и друг Владимир Ашурков пишет - "Прекрасное интервью Акунина. Хочу сделать Народный альянс партией, за которую он и такие как он ...
Кросспост из Чорной Коммучночки: Качество паршивое, да. Потому как делалось на бегу левой задней ногой. Имеет ли смысл сделать что-то подобное на регулярной основе, скажем, еженедельно? Исключительно по событиям коммуночек и персоналиям. ...
Наверное это и есть Апокалипсис. Вернее его начало. Шаг к нему. Один из. Просто Апокалипсис получается не совсем таким, каким мы ожидали его увидеть. Мы привыкли думать, что Конец света - это некий момент, когда небо падает на землю, реки выходят из берегов, все горит, рушится и человечес ...
Киров, кто-то, похоже, погоны скоро потеряет. Смотреть и слушать с самого начала — в процессе в ход пойдут плевки и мордобой. https://youtu.be/BurcU71EPhI ЖЖ побитого юриста: dolgih , там вся эта ситуация есть + еще пара серий конфликта. Ну, и, конечно, мы написали ...
Подскажите, где одеться на ноябрь, декабрь, январь-последний триместр моей беременности? Размер мой 50, талия сейчас не менее 130см, будет значительно больше, соответсвенно. В h&m висят осенние парки для беременных, на зиму ничего нет. Рядом есть Пражский пассаж, там вроде все популярные м ...