Paketbaurichtlinien für Octave

Was ist Octave?

Die Definition auf der Website besagt:

„GNU Octave ist eine höhere Programmiersprache, die primär für numerische Berechnungen entwickelt wurde. Sie bietet eine komfortable Befehlszeilenschnittstelle zur numerischen Lösung linearer und nichtlinearer Probleme sowie zur Durchführung anderer numerischer Experimente in einer weitgehend mit Matlab kompatiblen Sprache. Sie kann auch als Batch-orientierte Sprache verwendet werden.“

Wenn Sie Interesse daran haben, Octave-Pakete zu erstellen, sollten Sie hier nach den Upstream-Quellen suchen:

RPM-Makros

Die folgenden Makros sind in /etc/rpm/macros.octave im Octave-Paket 3.4.0 (Fedora 15+) zur Unterstützung beim Paketieren definiert:

# Bereitgestellte Octave-Binär-API
%octave_api %(octave-config -p API_VERSION || echo 0)}

# Octave-Paketverzeichnisse
%octshareprefix %{_datadir}/octave
%octprefix %{octshareprefix}/packages
%octarchprefix %{_libdir}/octave/packages

%octpkgdir %{octshareprefix}/%{octpkg}-%{version}
%octpkglibdir %{octarchprefix}/%{octpkg}-%{version}

# Einen Octave-Befehl im Hintergrund ausführen – ohne Startdateien
%octave_cmd()

# Quellcode in ein temporäres Paket-Tar-Archiv kompilieren
%octave_pkg_build

# Ein Paket installieren. Wir verwenden den Befehl `octave pkg install`, um das
# erstellte Paket im Buildroot zu installieren. Wir fügen außerdem einen Hinweis
# hinzu, um zu verhindern, dass der Root-Benutzer das Paket mit
# dem Befehl `octave pkg uninstall` entfernt.
%octave_pkg_install

# Preun-Skript – Wir müssen unseren Deinstallationsschutz entfernen und
# gegebenenfalls das Deinstallationsskript des Pakets ausführen.
%octave_pkg_preun

Paketbautipps für Octave

Benennung von Octave-Paketen

Octave-Pakete haben ein eigenes Namensschema. Dabei sollte der Name des übergeordneten Pakets berücksichtigt werden. Das ergibt ein Paketnamenformat von octave-$NAME. Im Zweifelsfall verwenden Sie den Namen des Moduls, das Sie zum Importieren in Octave eingeben.

'''Beispiele: '''

octave-java (Octave-Paket namens java)
octave-gsl (Octave-Paket namens gsl)

Aufgrund von Einschränkungen der pkg-Funktion von Octave (pkg.m) muss die Versionsverwaltung von Octave-Paketen das Format MAJOR.MINOR.MICRO aufweisen. Wird dieses Format nicht verwendet, erkennt Octave die Binärpaketkomponenten in %prefix/libexec nicht.

Aktualisieren der Octave-Paketdatenbank

Octave verwaltet eine Liste der installierten Pakete in /usr/share/octave/octave_packages, die bei der Installation und Deinstallation von Paketen aktualisiert werden muss. Diese Datei liegt im Octave-Klartextformat vor.

Beim Ausführen von pkg('rebuild') innerhalb von Octave wird der Inhalt des Verzeichnisses /usr/share/octave/packages/ nach den folgenden Dateien durchsucht.

  • /usr/share/octave/packages/NAMEOFPACKAGE/packinfo/COPYING

  • /usr/share/octave/packages/NAMEOFPACKAGE/packinfo/DESCRIPTION

Wenn diese Dateien in einem beliebigen PAKETNAME-Verzeichnis nicht vorhanden sind, überspringt Octave den Ordner stillschweigend und kann ihn nicht korrekt indizieren.

Octave verwendet den Inhalt von octave_packages, um seinen Pfad beim Start zu ändern, damit Octave Plugins finden kann.

Dokumentationsdateien

Alle Paketdateien werden in die Octave-Verzeichnisse installiert.

Spec-Dateivorlagen für Octave-Pakete

Es gibt zwei Arten von Octave-Paketen: architekturspezifische und architekturunabhängige.

Architekturspezifische Spec-Datei-Vorlage für Octave

%global octpkg image
# Exclude .oct files from provides
%global __provides_exclude_from ^%{octpkglibdir}/.*\\.oct$

Name:           octave-%{octpkg}
Version:        1.0.13
Release:        1%{?dist}
Summary:        Image processing for Octave
Group:          Applications/Engineering
License:        GPL-2.0-or-later
URL:            https://octave.sourceforge.io/image/
Source:         https://downloads.sourceforge.net/octave/%{octpkg}-%{version}.tar.gz

BuildRequires:  octave-devel

Requires:       octave(api) = %{octave_api}
Requires(post): octave
Requires(postun): octave

%description
The Octave-forge Image package provides functions for processing images. The
package also provides functions for feature extraction, image statistics,
spatial and geometric transformations, morphological operations, linear
filtering, and much more.


%prep
%setup -q -n %{octpkg}-%{version}


%build
%octave_pkg_build


%install
%octave_pkg_install


%post
%octave_cmd pkg rebuild

%preun
%octave_pkg_preun

%postun
%octave_cmd pkg rebuild

%files
%{octpkglibdir}
%dir %{octpkgdir}
%{octpkgdir}/*.m
%doc %{octpkgdir}/doc-cache
%{octpkgdir}/packinfo


%changelog
* Sat Feb 12 2011 Orion Poplawski <orion@cora.nwra.com> 1.0.13-1
- Initial Fedora package

Architekturunabhängige Spec-Datei-Vorlage für Octave

%global octpkg actuarial

Name:           octave-%{octpkg}
Version:        1.1.0
Release:        1%{?dist}
Summary:        Actuarial functions for Octave
Group:          Applications/Engineering
License:        GPLv2+
URL:            https://octave.sourceforge.io
Source:         https://downloads.sourceforge.net/octave/%{octpkg}-%{version}.tar.gz
BuildArch:      noarch

BuildRequires:  octave-devel

Requires:       octave
Requires(post): octave
Requires(postun): octave

%description
Actuarial functions for Casualty and Property lines.


%prep
%setup -q -n %{octpkg}-%{version}


%build
%octave_pkg_build


%install
%octave_pkg_install


%post
%octave_cmd pkg rebuild

%preun
%octave_pkg_preun

%postun
%octave_cmd pkg rebuild

%files
%dir %{octpkgdir}
%{octpkgdir}/*.m
%doc %{octpkgdir}/doc-cache
%{octpkgdir}/packinfo


%changelog
* Sat Feb 12 2011 Orion Poplawski <orion@cora.nwra.com> 1.1.0-1
- Initial Fedora package

Zusammenfassung der Unterschiede zwischen architekturspezifischen und architekturunabhängigen Octave-Paketen

  • Noarch-Pakete setzen BuildArch: noarch

  • Keine bestimmte API-Version anfordern

  • Noarch-Pakete installieren nichts in %{octpkglibdir}

Hinweise zu „Obsoletes“

Pakete, die früher im Octave-Forge-Paket enthalten waren, benötigen die obenstehende Zeile „Obsoletes“. Pakete, die nicht dazugehörten, benötigen diese Zeile nicht.