Компонентная сборочная
система Samba4

Peter Novodvorsky <peter.novodvorsky@ru.ibm.com>

Новая Samba

Выдержка из требований к новой самбе

Полнота реализации протокола

CIFS/SMB – очень большая и сложная штука

Возможность автоматического тестирования

Возможность работы серверов как в многонитевом так и однонитевом режимах

Возможность работы в различных, в том числе не UNIX окружениях

Новой Самбе Новая Сборка

Samba 4, не набор сервисов, а платформа для их предоставления

Нужна хорошая инфраструктура для разработчика (SDK)

Samba 4 содержит много сервисов, может использоваться в разных устройствах и окружениях (Embedded NAS, regular PC, etc....)

Система сборки должна предоставлять максимум возможностей для packager'а.

Остаются старые требования:

Много поддерживаемых платформ

Удобство для разработчика!!!

Необходимость абстракций высокого уровня

40 лет назад: UNIX программа Make

Необходимость абстракций высокого уровня

40 лет назад: UNIX программа Make	V

25 лет назад: GNU программа GNU Make

Необходимость абстракций высокого уровня

40 лет назад: UNIX программа Make	V

25 лет назад: GNU программа GNU Make
V

15 лет назад: Automake

Необходимость абстракций высокого уровня

40 лет назад: UNIX программа Make	V

25 лет назад: GNU программа GNU Make
V

15 лет назад: Automake (WRONG WAY, SIR!)

Из истории

40 лет назад: UNIX программа Make	V

25 лет назад: GNU программа GNU Make
V

15 лет назад: Automake (WRONG WAY, SIR!)

Очень большая и сложная система

Нет разделение на сущность и результат сборки сущность (позже)
V

2005 год: Samba 4 Build System

Абстракции в Samba 4: три уровня

Подсистемы

Наборы .o файлов

Есть информация, какие библиотеки требуются объектникам из этой подсистемы

Есть информация, какие нужны CFLAGS, blah-blah

[SUBSYSTEM::FOOBAR]
OBJ_FILES=sources/my-foobar.o \
sources/your-foobar.o
CFLAGS=-I/usr/local/include/my-s3kr1t-lib
REQUIRED_SUBSYSTEMS = BARFOO BARBOO

Абстракции в Samba 4: три уровня

Компоненты: библиотеки, модули, бинари

INCLUDES набор подсистем

Информация о свойствах библиотеки

SO_NAME например

Можно узнать как зависят друг от друга библиотеки на основе REQUIRED_SUBSYSTEMS

Специальный компонент EXT_LIB

описывает внешние компоненты, которые требуются для сборки (генерируется configure.in)

Абстракции в Samba 4: три уровня

BUILDVARS!

Разделение сущности и варианта сборки сущности!

Список BUILDVARs – список targetов.

Каждый BUILDVAR собирает определенный компонент.

Для каждого BUILDVARа можно указать:

метод сборки (Static или Dynamic для библиотеки)

от какого типа сборки другой библиотеки он будет зависеть

Остальное

Сборочная система использует Perl, Autoconf

Мы не используем Automake

Мы не используем libtool

Кроме того у нас есть много маленьких скриптиков, которые помогают нам жить

finddepends строит REQUIRED_SUBSYSTEMS на основе вывода nm и показывает графы

minimal_includes находит минимальные includes для C файлов

findstatic находит переменные, которые могли бы быть статическими

Вы сможете достать эту систему сборки из каталога sources/build/smb_build в специальном бранче Samba4 subversion в ближайшее время

Спасибо.

2005-07-27T09:34:03