Pautas de empaquetado de D

ldc

Todas las dependencias de paquetes D sobre ldc a compilar, tal que cada paquete debe tener ldc como BuildRequires. En adición, el paquete ldc incluye algunas macros útiles para paquetes D.

Opciones del compilador

%{_d_optflags} debe ser utilizado con ldc (normal %{optflags} no aplica a ldc, solo a gcc).

%{_d_optflags} está definido como:

-release -w -g -O2

-release disables asserts, invariants, contracts and boundscheck + -w enables warnings + -g generates debug information + -O2 is the optimisation level

Algunos paquetes D utilizan los Makefile, los cuales utilizan normalmente la variable $DFLAGS de la misma manera que paquetes C con Makefile utilian $CFLAGS. En este caso, export DFLAGS="%{_d_optflags}" es usualmente apropiado. En otros casos, el guion de compilación en el paquete D tiene una opción para pasar en %{_d_optflags}. Es lo responsabilidadmente del empaquetador para asegurar que %{_d_optflags} sean utilizados con ldc cuando el paquete es compilado.

Cabeceras de Archivos

Los paquetes D contiene archivos de cabeceras, los cuales terminan con .d o di. Estos archivos de cabeceras deben ser instalados en %{_d_includedir}/%{nombre}.

%{_d_includedir} está definido como:

/usr/include/d/

Bibliotecas

En este momento, Linux no admite bibliotecas compartidas para código de D (solo lo hace OSX). Como un resultado, los paquetes F están excluidos explícitamente desde las restricciones frente al empaquetado estático de bibliotecas.

Para compilar bibliotecas estáticas en D, utilice las mismas herramientas que lo haría para C, específicamente, ar, ranlib y strip.

Si su paquete D contiene bibliotecas estáticas, debe inhibir la generación de debuginfo, añadiendo esta línea al comienzo de su archivo spec:

%global debug_package %{nil}

Por otra parte, generaría un paquete de debuginfo vacío.

Todas las bibliotecas estáticas deben ser ubicadas en el subpaquete *-debel. Cuando haga esto, debe además tener Provides: %{name}-static = %{version}-%{release} dentro de la definición del paquete de desarrollo.

Es posible que esto dejará el paquete raíz vacío, si esto es el caso, no liste una sección %file para el paquete raíz, solo para el paquete -devel. Esto es ilustrado en la plantilla de ejemplo a continuación.

Plantilla

%global debug_package %{nil}

Nombre:           algo
Versión:        1.2.3
Lanzamiento:        1%{?dist}
Sumario:        Hace algo en D
Grupo:          Development/Libraries
Licencia:        LGPL-2.1-or-later
URL:            https://anywhere.com/
Fuente:         https://anywhere.com/%{name}-%{version}.tar.bz2
BuildRequires:  ldc
Requiere:       tango

%description
Tal y cual.

%package devel
Proporciona:       %{name}-static =  %{version}-%{release}
Sumario:        Admite para desarrollar aplicación en D.
Grupo:          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