SObjectizer  5.1
so_5: Подключение библиотеки ACE

Введение

В предыдущих SObjectizer для подключения новой версии библиотеки ACE требовалось ручное создание проектных файлов для Mxx_ru (поскольку ACE использует собственный механизм генерации проектных файлов, MPC, в котором генерация проектных файлов Mxx_ru не предусмотрена). Это затрудняло переход на новые версии ACE, в которых устраняются ошибки и добавляется новая функциональность. По этой причине SObjectizer долгое время поставлялся с использованием довольно старой версии 5.4.3 библиотеки ACE.

Текущая схема использования библиотеки ACE позволяет обойтись без создания проектных файлов Mxx_ru для каждой новой версии ACE. Следовательно, добавлена возможность смены версии ACE безотностительно к версии SObjectizer.

Текущая схема

В текущей схеме вокруг системы компиляции ACE сделана обертка из Ruby скриптов, которая позволяет инкапсулировать систему компиляции ACE в систему Mxx_ru. Идея в том, что каталог ace сейчас содержит набор скриптов-оберток и подкаталог ACE_wrappers, который содержит разархивированную копию библиотеки ACE.

В SObjectizer, подключаются Mxx_ru проектный файл ace/dll.rb, который запускает нативную систему компиляции из ACE для текущего тулсета. Так, под Visual C++ библиотека ACE компилируется с помощью devenv из состава Microsoft Visual Studio. Под MinGW C++ компиляция выполняется с помощью GNU make (аналогично с компиляцией под Linux и под Cygwin).

Такая схема позволяет легко сменить содержимое подкаталога ace/ACE_wrappers на новую версию ACE без необходимости переписывать ace/dll.rb.

Неприятным следствием из этого является необходимость встраивать в скрипты-обертки поддержку средств компиляции ACE различными тулсетами. На данный момент для ACE 6.* поддерживаются следующие тулсеты:

Заметки
Версии поддерживаемых компиляторов, вообще говоря, определяются их поддержкой в соответствующей версии ACE.

Другие тулсеты могут быть добавлены в поддержку библиотеки ACE по необходимости и при наличии доступа к соответствующей платформе и инструменту.

Распаковка архива библиотеки ACE

Размещать распакованный архив библиотеки ACE в подкаталог ace/ACE_wrappers можно либо вручную, либо с помощью вспомогательного проекта ace/ace_lib_unpacker.rb. Этот проект проверяет наличие каталога ace/ACE_wrappers. Если каталога нет, что в ace_lib_distrib ищется архив библиотеки ACE (в виде ACE-*.tar.bz2 файла). Если архив найден, то он распаковывается так, чтобы ACE_wrappers был размещен в подкаталоге ace.

Для того, чтобы использовать ace/ace_lib_unpacker.rb необходимо подключить его в какой-либо из своих проектных файлов. Например, в build.rb:

require 'mxx_ru/cpp'
MxxRu::Cpp::composite_target( MxxRu::BUILD_ROOT ) {
global_include_path( "." )
required_prj( "ace/ace_lib_unpacker.rb" )
...
Заметки
Если ace/ace_lib_unpacker.rb указан в build.rb, а библиотека ACE еще не распакована, то первый запуск на компиляцию должен выполняться через build.rb. Поскольку, если будет запущена компиляция какого-нибудь другого проектного файла, то ace/ace_lib_unpacker.rb просто не будет запущен.

Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 13:00:33. Создано системой  doxygen1.8.3.1 Intervale SourceForge.net Logo