Paketbaurichtlinien für D
ldc
Alle D-Pakete benötigen ldc zum Bauen, daher muss jedes Paket ldc als BuildRequires angeben. Darüber hinaus enthält das ldc-Paket einige nützliche Makros für D-Pakete.
Compiler-Optionen
%{_d_optflags} muss mit ldc verwendet werden (normale %{optflags} gelten nicht für ldc, sondern nur für gcc).
%{_d_optflags} ist wie folgt definiert:
-release -w -g -O2
-release disables asserts, invariants, contracts and boundscheck + -w enables warnings + -g generates debug information + -O2 is the optimisation level
Manche D-Pakete verwenden Makefiles, die üblicherweise die Variable $DFLAGS analog zu $CFLAGS in C-Paketen mit Makefiles nutzen. In diesem Fall ist export DFLAGS="%{_d_optflags}" meist ausreichend. In anderen Fällen bietet das Bauskript des D-Pakets die Option, %{_d_optflags} zu übergeben. Der Paketierer ist dafür verantwortlich, dass %{_d_optflags} beim Erstellen des Pakets mit ldc verwendet wird.
Bibliotheken
Derzeit unterstützt Linux keine gemeinsam genutzten Bibliotheken für D-Code (dies wird nur von macOS unterstützt). Daher sind D-Pakete explizit von den Einschränkungen für das Paketieren statischer Bibliotheken ausgenommen.
Um statische Bibliotheken in D zu erstellen, verwenden Sie die gleichen Werkzeuge wie in C, nämlich ar, ranlib und strip.
Wenn Ihr D-Paket statische Bibliotheken enthält, müssen Sie die Debuginfo-Erzeugung deaktivieren, indem Sie diese Zeile am Anfang Ihrer Spec-Datei hinzufügen:
%global debug_package %{nil}
Anderenfalls würde ein leeres Debuginfo-Paket erstellt werden.
Alle statischen Bibliotheken müssen im Teilpaket *-devel abgelegt werden. Dabei muss in der Definition des *-devel-Pakets außerdem Provides: %{name}-static = %{version}-%{release} enthalten sein.
Es ist möglich, dass dadurch das Hauptpaket leer bleibt. In diesem Fall sollte der Abschnitt %files nur für das -devel-Paket, nicht aber für das Hauptpaket aufgeführt werden. Dies wird im folgenden Beispiel veranschaulicht.
Vorlage
%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 ›