В предыдущих версиях ObjESSty для подключения новой версии библиотеки ACE требовалось ручное создание проектных файлов для Mxx_ru (поскольку ACE использует собственный механизм генерации проектных файлов, MPC, в котором генерация проектных файлов Mxx_ru не предусмотрена). Это затрудняло переход на новые версии ACE, в которых устраняются ошибки и добавляется новая функциональность. По этой причине ObjESSty долгое время поставлялась с использованием довольно старой версии 5.4.3 библиотеки ACE.
Новая схема использования библиотеки ACE позволяет обойтись без создания проектных файлов Mxx_ru для каждой новой версии ACE. Следовательно, добавлена возможность смены версии ACE безотностительно к версии ObjESSty.
В текущей схеме вокруг системы компиляции ACE сделана обертка из Ruby скриптов, которая позволяет инкапсулировать систему компиляции ACE в систему Mxx_ru. Идея в том, что каталог ace сейчас содержит набор скриптов-оберток и подкаталог ACE_wrappers, который содержит разархивированную копию библиотеки ACE.
В ObjESSty, как и прежде, подключаются Mxx_ru проектные файлы ace/prj.rb, ace/dll.rb, ace/lib.rb. Но сейчас они всего лишь запускают нативную систему компиляции из ACE для текущего тулсета. Так, под Visual C++ библиотека ACE компилируется с помощью devenv из состава Microsoft Visual Studio. Под MinGW C++ компиляция выполняется с помощью GNU make (аналогично с компиляцией под Linux и под Cygwin).
Такая схема позволяет легко сменить содержимое подкаталога ace/ACE_wrappers на новую версию ACE без необходимости переписывать ace/dll.rb и ace/lib.rb.
Неприятным следствием из этого является необходимость встраивать в скрипты-обертки поддержку средств компиляции ACE различными тулсетами. На данный момент поддерживаются следующие тулсеты:
- Visual C++ 7.1;
- MinGW C++;
- GNU C++ под Cygwin;
- GNU C++ под Linux.
Другие тулсеты могут быть добавлены в поддержку библиотеки 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 просто не будет запущен.
Документация по ObjESSty. Последние изменения: Fri Oct 13 18:35:37 2006. Создано системой
1.4.7