Рекомендации по упаковке D

ldc

Все пакеты D зависят от ldc при сборке, поэтому каждый пакет должен иметь ldc в качестве BuildRequires. Кроме того, пакет ldc включает некоторые полезные макросы для пакетов D.

Параметры компилятора

%{_d_optflags} должен использоваться с ldc (обычные %{optflags} не применяются к ldc, только к gcc).

%{_d_optflags} определяется как:

-release -w -g -O2

-release отключает asserts, инварианты, контракты и проверку границ + -w включает предупреждения + -g генерирует отладочную информацию + -O2 является уровнем оптимизации

Некоторые пакеты D используют Makefile, в которых обычно применяется переменная $DFLAGS так же, как пакеты C с Makefile используют $CFLAGS. В этом случае обычно подходит export DFLAGS="%{_d_optflags}". В других случаях сборочный скрипт в пакете D имеет параметр для передачи %{_d_optflags}. Упаковщик несёт ответственность за то, чтобы %{_d_optflags} использовались с ldc при сборке пакета.

Заголовочные файлы

Пакеты D содержат заголовочные файлы с расширением .d или .di. Эти заголовочные файлы должны устанавливаться в %{_d_includedir}/%{name}.

%{_d_includedir} определяется как:

/usr/include/d/

Библиотеки

На данный момент Linux не поддерживает общие библиотеки для кода D (это умеет только OSX). В результате пакеты D явно исключены из ограничений против упаковки статических библиотек.

Для сборки статических библиотек в D используются те же инструменты, что и для C, а именно ar, ranlib и strip.

Если ваш пакет D содержит статические библиотеки, вы должны отключить генерацию debuginfo, добавив эту строку в начало spec-файла:

%global debug_package %{nil}

В противном случае был бы создан пустой пакет debuginfo.

Все статические библиотеки должны размещаться в подпакете *-devel. При этом вы также должны указать Provides: %{name}-static = %{version}-%{release} в определении пакета devel.

Возможно, это оставит корневой пакет пустым; в этом случае не указывайте раздел %files для корневого пакета, только для пакета -devel. Это проиллюстрировано в примере шаблона ниже.

Шаблон

%global debug_package %{nil}

Name:           foo
Version:        1.2.3
Release:        1%{?dist}
Summary:        Does foo in D
Group:          Development/Libraries
License:        LGPL-2.1-or-later
URL:            https://anywhere.com/
Source:         https://anywhere.com/%{name}-%{version}.tar.bz2
BuildRequires:  ldc
Requires:       tango

%description
Foo and bar.

%package devel
Provides:       %{name}-static =  %{version}-%{release}
Summary:        Support for developing D application
Group:          Development/Libraries

%prep
%setup -q


%build
export DFLAGS="%{_d_optflags}"
%configure
make %{?_smp_mflags}

%install
mkdir -p %{buildroot}%{_libdir}
mkdir -p %{buildroot}%{_d_includedir}/%{name}/

make install DESTDIR=%{buildroot}

install -m 0644 lib/*     %{buildroot}%{_libdir}
install -m 0644 include/* %{buildroot}%{_d_includedir}/%{name}/

%clean
rm -rf %{buildroot}

%files devel
%doc README.txt
%license LICENSE.txt
%{_d_includedir}/%{name}/
%{_libdir}/*.a

%changelog
* Wed Aug 25 2010 John Doe <jdoe@anywhere.com> 1.2.3-1
- initial package