Рекомендации по упаковке 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 при сборке пакета.
Библиотеки
На данный момент 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
Want to help? Learn how to contribute to Fedora Docs ›