Установка

Материал из pyhrol.ru
(перенаправлено с «Установка»)
Перейти к: навигация, поиск
Другие языки:English 97% • ‎русский 100%


Содержание

Требования к системе

  • ОС семейства UNIX, тестирование проводилось только на Ubuntu 13.04/13.10 32/64 бит
  • CMake, не моложе версии 2.8.4 (хотя известно, что до версии 2.8.8 CMake не различает Python поколения 2 от поколения 3)
  • Python 2.x
  • Doxygen, необязательно

Сборка

Обыденно:

tar -x -f pyhrol-${VERSION}.tar.gz
cd pyhrol-${VERSION}
cmake -D CMAKE_BUILD_TYPE=Release .
make

, где ${VERSION} — текущая версия дистрибутива. Сборка тестировалась и на (преимущественно на) внешних по отношению к исходникам директориях. Здесь и далее для простоты используется пример сборки внутри директории с исходниками

Если установлен Doxygen,

cmake -D HAVE_DOT=True .
make doc

генерирует справку в директории html/. То же, что http://localhost/doxy/, установка параметра HAVE_DOT необязательна.

Флаги компиляции, используемые перед выкаткой tar-архива:

-pedantic -Wno-long-long -Werror

Компилятор gcc 4.x. Совместимость с -std=c++11 не тестировалась. clang-ом собрать точно не удается (пока)

Проверка

Необязательный этап, представляет из себя сборку и запуск всех примеров:

make test

В идеале должно получиться:

Test project ~/Downloads/pyhrol-0.1.899
      Start  1: example_0010
 1/42 Test  #1: example_0010 .....................   Passed   54.61 sec
      Start  2: example_0020
 2/42 Test  #2: example_0020 .....................   Passed    1.09 sec

...

Start 41: example_0940
41/42 Test #41: example_0940 .....................   Passed    1.65 sec
      Start 42: example_0950
42/42 Test #42: example_0950 .....................   Passed    1.58 sec

100% tests passed, 0 tests failed out of 42

Первый пример может выполняться значительно дольше всех остальных, т. к. может включать компиляцию библиотек

Установка

По умолчанию заголовки и библиотеки проекта развертывается в директориях с общим корнем /usr/local. Потребуются права суперпользователя:

make install

Сменить местоположение можно с помощью переменной CMAKE_INSTALL_PREFIX:

cmake -D CMAKE_INSTALL_PREFIX=<другое место> .
make install

Использование

Тому, как написать собственную библиотеку посвящена страница документации, справочник и примеры. Процесс сборки этой библиотеки под руководством CMake описан ниже. Типичный CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
 
find_package(pyhrol REQUIRED)
 
add_library(mylib MODULE
${PYHROL_INCLUDE_DIRS}/pyhrol_starter.cpp
<sources>
)
 
install (TARGETS mylib DESTINATION
lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/dist-packages/)
 
pyhrol_configure_targets(mylib)

find_package должен отработать автоматически, если инсталляция проводилась в директорию по умолчанию или требует указания CMAKE_PREFIX_PATH если при инсталляции использовался нестандартный путь CMAKE_INSTALL_PREFIX. Путь CMAKE_PREFIX_PATH тождественен CMAKE_INSTALL_PREFIX.

Скрипт pyhrol-config.cmake (подключаемый командой find_package) определяет функцию pyhrol_configure_targets, которая для указанных целей (mylib в данном примере) устанавливает необходимые флаги компиляции и линковки. Переменные скрипта:

Имя Значение по умолчанию Описание
PYHROL_SAFE_MODE OFF см PYHROL_SAFE_MODE
PYHROL_USE_PYSELF OFF Модуль pyhrol физически представляет из себя две версии библиотеки: pyselfstd.so, использующую libpyhrol.so и pyselfsafe.so, использующую libpyhrolsafe.so для режима PYHROL_SAFE_MODE. Поскольку Python требует, чтобы последняя всегда называлась pyhrol, на нее устанавливается символьная ссылка pyhrol.so в PYTHON_DIST_PACKAGES. Так как эта операция может провалиться по причине недостатка прав, она по умолчанию отключена
ROOT_DIRECTORY CMAKE_INSTALL_PREFIX=/usr/local Директория, относительно которой отсчитываются прочие переменные. Внутри нее находятся все необходимые библиотеки и заголовки. Если при инсталляции не использовалась переменная CMAKE_INSTALL_PREFIX, то это /usr/local
PYHROL_LIBRARY не кешируются Путь к основной библиотеке, ROOT_DIRECTORY/lib/libpyhrol.so
PYHROLSAFE_LIBRARY Путь к PYHROL_SAFE_MODE-версии библиотеки libpyhrol.so, ROOT_DIRECTORY/lib/libpyhrolsafe.so
PYSELF_LIBRARY Модуль pyhrol, ROOT_DIRECTORY/lib/pyselfstd.so
PYSELFSAFE_LIBRARY PYHROL_SAFE_MODE-версия модуля pyhrol, ROOT_DIRECTORY/lib/pyselfsafe.so
PYHROL_INCLUDE_DIRS Директория с заголовками, ROOT_DIRECTORY/include/pyhrol
PYTHON_INCLUDE_DIRS /usr/include/python<версия> Копии одноименных переменных модуля FindPythonLibs. Копируются при сборке проекта, модуль FindPythonLibs более не требуется
PYTHON_LIBRARIES /usr/lib/libpython<версия>.so
PYTHON_DIST_PACKAGES /usr/local/lib/python<версия>/dist-packages/ Одна из наиболее популярных директорий в списке sys.path. Используется командой install. Не определена, если PYHROL_USE_PYSELF выключена

Роль файла pyhrol_starter.cpp ничтожна, в данном примере его можно заменить эквивалентным кодом:

void pyhrol_init(const char *);
 
extern "C" void initmylib()
{
pyhrol_init("mylib");
}

, см ... Initialization Function

Функция pyhrol_configure_targets для данного примера эквивалентна следующему CMake-коду:

string(REPLACE ";" " -I" TMP_INCLUDE "${PYTHON_INCLUDE_DIRS}")
set_target_properties(mylib PROPERTIES
COMPILE_FLAGS "-I${PYHROL_INCLUDE_DIRS} -I${TMP_INCLUDE}"
PREFIX ""
)
 
if (PYHROL_SAFE_MODE)
target_link_libraries (mylib ${PYHROLSAFE_LIBRARY} ${PYTHON_LIBRARIES})
else()
target_link_libraries (mylib ${PYHROL_LIBRARY} ${PYTHON_LIBRARIES})
endif()
Пространства имён

Варианты
Просмотры
Действия
Навигация