7 сент. 2013 г.

Компиляция Mercurial с помощью icc

Нужно было установить Mercurial на серверной машине с icc без админских прав.

Повезло, что в наличии были Python 2.6 и easy_install.

И из коробки (через easy_install), и установку руками по умолчанию Mercurial завершался с ошибкой, жалуясь на неопределенный символ __intel_security_cookie в модуле osutil.so.

Решение было найдено в гугл-группе cython-users: нужно явно указывать, чтобы модули компилировались в виде динамических библиотек и передавать линкеру соответствующую опцию.

Итак, чтобы установить Mercurial, в директории с исходниками нужно выполнить 2 команды:

CC=icc LDSHARED="icc -shared" python setup.py build
python setyp.py install --home=$HOME

После этого в домашнем каталоге появятся bin/ и lib/ (или lib64/).

Для нормального использования команды hg нужно добавить ${HOME}/bin в PATH и ${HOME}/lib/python (или ${HOME}/lib64/python) в PYTHONPATH.