При переносе торрент-треккера xbt_tracker на мой новый сервер я решил его перекомпилировать, так как моя рабочая версия была собрана еще в декабре 2009-го.
Согласно инструкции на сайте я сделал checkout из svn и запустил сборку. Вылетела ошибка компиляции файла server.cpp:189: error: expected initializer before ‘:’ token
Указанная строка была следующая: for (auto& j : i->second.peers).
Проблема заключалась в том, что это новый формат записи диапазона для оператора for, который не понимал мой компилятор. Текущая версия GCC у меня 4.4.7 (CentOS 6.5). Попытки обновления gcc заняли некоторое время и я пришел к выводу, что это вряд ли получится без кровопролития и нарушения работоспособности системы. Насколько я понял, обновление компилятора выше версии 4.7 будет не ранее чем в CentOS 7.
Следующим шагом стал поиск когда данное изменение появилось в исходниках. В статье был найден замечательный скрипт, выводящий список изменений файла в svn между ревизиями. И оказалось что я пытался собрать ревизию 2397, а данный код был изменен в предыдущей ревизии 2396. Ревизия 2396 была скачана и собрана за пару минут.
svn co -r 2396 http://xbt.googlecode.com/svn/trunk/xbt/misc xbt/misc
svn co -r 2396 http://xbt.googlecode.com/svn/trunk/xbt/Tracker xbt/Tracker
cd xbt/Tracker
./make.sh
Вариант 2. Чтобы скомпилировать сборку 2397 нужно заменить в файле server.cpp строку 189 "for (auto& j : i->second.peers)" на "BOOST_FOREACH(auto& j, i->second.peers)". В этом случае сборка пройдет без ошибок.