Main / SObjectizer 4 / Install

Инсталляция SObjectizer

Зависимости

Компиляция SObjectizer, его примеров и тестов выполняется посредством инструмента Mxx_ru использующего язык Ruby. Поэтому, прежде, чем приступать к компиляции SObjectizer, необходимо установить Ruby и Mxx_ru. После чего настроить Mxx_ru на использование соответствующего компилятора (установить должным образом переменную среды MXX_RU_CPP_TOOLSET).

Для нормальной работы SObjectizer необходима версия ACE 5.6.7 или выше (но не 5.6.6 [2]), либо ACE 5.7.8 или выше. Версии библиотеки ACE, отличные от 5.6.* и 5.7.* не поддерживаются.

Установка Mxx_ru

Mxx_ru распространяется в виде RubyGem-а и Gem Mxx_ru доступен в центральном репозитории RubyGems на сайте RubyForge. Для установки Mxx_ru необходимо иметь Ruby и установленную в Ruby систему управления RubyGems. После этого необходимо проинсталлировать Gem Mxx_ru и выставить в правильное значение переменную среды MXX_RU_CPP_TOOLSET.

Установка RubyGems

Подробные инструкции по инсталляции RubyGems даны на сайте RubyGems. Если RubyGems еще не входит в состав вашей инсталляции Ruby (например, RubyGems является частью стандартной библиотеки Ruby 1.9.1), то достаточно скачать последнюю версию RubyGems с RubyForge, распаковать ее в какой-нибудь каталог, после чего в этом каталоге выполнить команду:

ruby setup.rb

Затем на UNIX-платформах может потребоваться установить переменную среды RUBYOPT:

export RUBYOPT="rubygems"

Если для инсталляции Ruby под Windows используется One-Click Installer, то устанавливать и настраивать RubyGems в ручную нет необходимости -- это делает One-Click Installer.

Инсталляция Gem Mxx_ru

Инсталляция Gem Mxx_ru выполняется командой gem install:

gem install -v '>= 1.3.1' -r Mxx_ru

Опция -r указывает, что Gem нужно искать в центральном репозитории RubyGems на RubyForge.

Примечание. Для компиляции SObjectizer версии 4.4.b2 требуется Mxx_ru версии 1.3.1 или выше. Поэтому номер версии задается опцией -v.

Настройка переменной среды MXX_RU_CPP_TOOLSET

Для GNU C++ под Linux:

export MXX_RU_CPP_TOOLSET=gcc_linux

Для MinGW под Windows:

set MXX_RU_CPP_TOOLSET=gcc_mingw

Для GNU C++ под Cygwin:

export MXX_RU_CPP_TOOLSET=gcc_cygwin

Для Visual C++ 7.1 под Windows:

set MXX_RU_CPP_TOOLSET=vc7

Для Visual C++ 8.0 под Windows:

set MXX_RU_CPP_TOOLSET=vc8

Для Visual C++ 9.0 под Windows:

set MXX_RU_CPP_TOOLSET=vc9

Другие доступные значения для MXX_RU_CPP_TOOLSET см. в документации по Mxx_ru.

Инсталляция и компиляция SObjectizer

Распаковка

Выбирается каталог, который будет содержать SObjectizer, после чего в этот каталог распаковывается архив с соответствующей версией SObjectizer. Например:

cd d:/usr/src
tar jxf d:/download/so-4.4.0-b6.tar.bz2

После чего в d:/usr/src будет создан каталог so4.4. Далее этот каталог будет именоваться как SO4_ROOT.

Патчинг дистрибутива

Если к дистрибутиву на SourceForge есть diff-файлы (патчи), то их нужно загрузить и использовать затем для обновления (патчинга) дистрибутива. Например, пусть SO4_ROOT это d:/usr/src/so4.4, а патчи находятся в d:/download/so4.4. Тогда следует выполнить команды, аналогичные приведенным ниже:

cd d:/usr/src/so4.4
gunzip < d:/download/so4.4/so.4.4.b6.0-so.4.4.b6.1.diff.gz | patch -p2
gunzip < d:/download/so4.4/so.4.4.b6.1-so.4.4.b6.2.diff.gz | patch -p2
...

Примечание. Кроме параметра -p2 на платформе Win32 утилите patch может потребоваться передавать еще и параметр --binary.

Примечание. Портированные под Win32 утилиты tar, gunzip, bzip2, patch можно взять из проекта UnxUtils. Так же они входят в состав Cygwin и MinGW.

Автоматизированная распаковка и патчинг дистрибутива

Загруженные с SourceForge архив дистрибутива и diff-файлы можно разместить в одном каталоге (например, d:/usr/src) после чего запустить приведенный ниже Ruby-скрипт:

ruby unpack.rb

в результате будет создан подкаталог so4.4 в котором будет находиться пропатченный дистрибутив SObjectizer.

Исходный код скрипта unpack.rb:

DIFF_VER_REGEX = /.*\.(\d)*\.diff\.gz$/
SO4_ROOT = 'so4.4'

def verbose_run( desc, &blk )
  puts desc + "..."
  blk.call
  fail "'#{desc}' failed!" unless 0 == $?.exitstatus
end

verbose_run( 'Unpacking tar.bz2' ) { `tar jxf so-4.4.0-b6.tar.bz2` }

Dir[ '*.diff.gz' ].sort { |a,b|
  ((DIFF_VER_REGEX.match(a))[1].to_i) <=> ((DIFF_VER_REGEX.match(b))[1].to_i)
}.each { |n|
  verbose_run( "Patching #{n}" ) {
    Dir.chdir( SO4_ROOT ) { `gzip -d -c < ../#{n} | patch -lup2 --binary` }
  }
}

Распаковка ACE

Исходные тексты библиотеки ACE должны располагаться в каталоге SO4_ROOT/dev/ace/ACE_wrappers. В этом каталоге должны быть подкаталоги ace, include, lib и другие из состава ACE. Существует два способа распаковки ACE: автоматический, когда распаковкой занимаются Ruby скрипты, входящие в состав SObjectizer, и ручной, когда за распаковку ACE отвечает пользователь SObjectizer.

Примечание. Для SObjectizer достаточен дистрибутив ACE [1], в который входит только сам ACE без TAO и CIAO. Обычно этот дистрибутив имеет имя ACE-X.Y.Z-lib.tar.bz2 или ACE-X.Y.Z.tar.bz2 (так же есть архивы tar.gz и zip). Например, ACE-5.5.10.tar.bz2, ACE-5.6.5.tar.bz2. Архивы ACE, в которые входят TAO и CIAO называются, например, так: ACE-5.5.1+TAO-1.5.1.tar.bz2 и ACE-5.5.1+TAO-1.5.1+CIAO-0.5.1.tar.bz2. Они имеют гораздо больший объем, но использовать их для SObjectizer не имеет смысла, т.к. SObjectizer не нуждается в TAO и CIAO.

Для получения ACE можно обратиться к странице Obtaining ACE.

Примечание. Последней стабильной версией ACE ветки 5.6.* на данный момент является версия 5.6.8. Версия 5.6.6 содержит серьезную ошибку [2], поэтому ее использование не желательно.

Автоматическая распаковка ACE

Для автоматической распаковки ACE необходимо разместить архив ACE [1] (в виде ACE-*-lib.tar.bz2 или ACE-*.tar.bz2) файла в каталог SO4_ROOT/dev/ace_lib_distrib после чего подключить в какой-либо из проектных файлов (например, build.rb) проект ace/ace_lib_unpacker.rb:

require 'mxx_ru/cpp'

MxxRu::Cpp::composite_target( MxxRu::BUILD_ROOT ) {

  global_include_path( "." )

  required_prj( "ace/ace_lib_unpacker.rb" )
  ...

Подробнее см. соответствующий раздел в API Reference Manual.

Ручная распаковка ACE

Самый простой способ ручной распаковки ACE -- это войти в каталог SO4_ROOT/dev/ace и дать команду на распаковку архива ACE. Например, если архив ACE имеет имя d:/download/ACE-5.6.8.tar.bz2, то распаковка будет выглядеть, например, так:

cd d:/usr/src/so4.4/dev/ace
tar jxf d:/download/ACE-5.6.8.tar.bz2

в результате в d:/usr/src/so4.4/dec/ace будет создан подкаталог ACE_wrappers со всеми необходимыми подкаталогами.

Компиляция

Компиляция SObjectizer

Для компиляции SObjectizer необходимо войти в SO4_ROOT/dev и выполнить команду:

ruby build.rb --mxx-cpp-release

Эта команда выполняет компиляцию SObjectizer в Release режиме. Если необходимо скомпилировать SObjectizer в Debug режиме, следует выполнить команду:

ruby build.rb --mxx-cpp-debug

Для Win32 результаты компиляции размещаются в SO4_ROOT/dev (EXE и DLL) и SO4_ROOT/dev/lib (LIB). Для Linux-а результаты размещаются в SO4_ROOT/dev (исполнимые файлы) и SO4_ROOT/dev/lib (.a и .so файлы).

Примечание. Для Unix может потребоваться установить переменную среды LD_LIBRARY_PATH на каталог, в котором выполняется компиляция SObjectizer. Например, под Linux может быть достаточно выполнить команду:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

Примечание. Для компиляции в режиме статических библиотек нужно создать в каталоге SO4_ROOT/dev файл .so4.static.

Компиляция примеров

Для компиляции примеров SObjectizer необходимо войти в SO4_ROOT/dev и выполнить команду:

ruby sample/build_samples.rb --mxx-cpp-release

В результате компиляции исполнимые файлы размещаются в SO4_ROOT/dev.

Компиляция тестов

Для компиляции тестов SObjectizer необходимо войти в SO4_ROOT/dev и выполнить команду:

ruby test/build_tests.rb --mxx-cpp-release

В результате компиляции исполнимые файлы размещаются в SO4_ROOT/dev.

Примечание. Часть тестов являются unit-тестами и их компиляция через проектный файл test/build_tests.rb будет так же проверять корректность прохождения unit-теста. Если какой-то unit-тест завершается неудачно, то вся компиляция тестов через test/build_tests.rb останавливается.

Полная компиляция (включая тесты и примеры)

Для полной компиляции всего SObjectizer с тестами и примерами необходимо войти в SO4_ROOT/dev и выполнить команду:

ruby build_all.rb --mxx-cpp-release

В результате компиляции исполнимые файлы размещаются в SO4_ROOT/dev.


[1](1, 2)

Начиная с версии ACE 5.5.3 система архивов ACE изменилась. К сожалению, сейчас ACE не архивируется в виде архива ACE-5.5.3-lib.tar.bz2, в котором бы содержались только каталог ACE_Wrappers и готовые проектные файлы (как на это расчитывалось в текущих версиях SObjectizer). Сейчас ACE распространяется всего в двух форматах. Во-первых, в виде архива ACE-5.5.*.tar.bz2, в котором находятся не только исходные и проектные файлы, но и примеры. Из-за чего этот архив имеет большой размер (порядка 7.5Mb для версии 5.5.3). Во-вторых, в виде архива ACE-src-X.Y.Z.tar.bz2, в котором нет исходных тестов примеров (что уменьшает размер архива до 5Mb), но, к сожалению, нет и готовых проектных файлов (например, mak-файлов для GNU Make и sln-файлов для Visual Studio). Т.к. в настоящее время из MPC-проектных файлов ACE нельзя получить Mxx_ru-проектные файлы, то остается две возможности использования ACE в SObjectizer:

1. Использовать новые версии ACE в виде архива ACE-5.5.*.tar.bz2. Хоть они и имеют большой размер, но зато включают в себя все необходимое и начиная с SObjectizer 4.4.b3.1 поддерживаются SObjectizer-ом.

2. Скачивать ACE в виде ACE-src-X.Y.Z.tar.bz2, распаковывать его вручную и генерировать необходимые для ACE проектные файлы с помощью MPC.

Примечание. Помощь в реализации поддержки Mxx_ru в генераторе проектных файлов MPC была бы очень кстати.

[2](1, 2) В ACE версии 5.6.6 обнаружена ошибка, приводящая к повторому освобождению памяти и, как следствие, к эпизодическим крахам приложений.