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

Что такое Octave?

Определение с веб-сайта гласит:

«GNU Octave — это высокоуровневый язык, в первую очередь предназначенный для численных вычислений. Он предоставляет удобный интерфейс командной строки для численного решения линейных и нелинейных задач, а также для выполнения других численных экспериментов с использованием языка, в основном совместимого с Matlab. Его также можно использовать как язык пакетной обработки.»

Если вы заинтересованы в упаковке пакетов Octave, вам следует проверить здесь источники вышестоящего проекта:

RPM-макросы

Следующие макросы определены в /etc/rpm/macros.octave в пакете octave 3.4.0 (Fedora 15+) для помощи в упаковке:

# Предоставляемый бинарный API Octave
%octave_api %(octave-config -p API_VERSION || echo 0)}

# Каталоги пакетов Octave
%octshareprefix %{_datadir}/octave
%octprefix %{octshareprefix}/packages
%octarchprefix %{_libdir}/octave/packages

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

# Выполнить команду octave — тихо, без стартовых файлов
%octave_cmd()

# Собрать исходный код в tar-файл пакета во временном расположении
%octave_pkg_build

# Установить пакет.  Мы используем команду octave pkg install, чтобы установить
# собранный пакет в buildroot.  Мы также оставляем заметку, чтобы предотвратить
# удаление пакета пользователем root с помощью команды octave pkg uninstall
%octave_pkg_install

# скрипт preun — нам нужно снять нашу защиту от удаления и, возможно,
# запустить собственный скрипт удаления пакета.
%octave_pkg_preun

Советы по упаковке Octave

Именование пакетов Octave

Упакованные пакеты Octave имеют собственную схему именования. Они должны учитывать имя пакета вышестоящего проекта. Это даёт формат имени пакета octave-$NAME. В случае сомнений используйте имя модуля, которое вы вводите для его импорта в octave.

'''Примеры: '''

octave-java (пакет Octave с именем java)
octave-gsl (пакет Octave с именем gsl)

Ограничения в функции pkg octave (pkg.m) означают, что версионирование пакетов octave требует, чтобы версия пакета имела формат MAJOR.MINOR.MICRO. Неиспользование этого формата приводит к тому, что octave не распознаёт бинарные компоненты пакета в %prefix/libexec.

Обновление базы данных пакетов octave

Octave ведёт список установленных пакетов в /usr/share/octave/octave_packages, который нужно обновлять при установке и удалении пакета. Этот файл имеет текстовый формат octave.

Содержимое каталога /usr/share/octave/packages/ сканируется на наличие следующих файлов при выполнении pkg('rebuild') из octave.

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

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

Если этих файлов нет в каком-либо каталоге NAMEOFPACKAGE, то octave молча пропустит папку и не проиндексирует её правильно.

Octave будет использовать содержимое octave_packages для изменения своего пути при запуске, что позволяет octave находить плагины.

Файлы документации

Все файлы пакета устанавливаются в каталоги octave.

Шаблоны spec для пакетов Octave

Существует два типа пакетов Octave: зависящие от архитектуры и noarch.

Шаблон spec для зависящего от архитектуры пакета Octave

%global octpkg image
# Исключить файлы .oct из provides
%global __provides_exclude_from ^%{octpkglibdir}/.*\\.oct$

Name:           octave-%{octpkg}
Version:        1.0.13
Release:        1%{?dist}
Summary:        Обработка изображений для 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
Пакет Octave-forge Image предоставляет функции для обработки изображений.
Пакет также предоставляет функции для извлечения признаков, статистики
изображений, пространственных и геометрических преобразований, морфологических
операций, линейной фильтрации и многого другого.


%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

Шаблон spec для noarch-пакета Octave

%global octpkg actuarial

Name:           octave-%{octpkg}
Version:        1.1.0
Release:        1%{?dist}
Summary:        Актуарные функции для 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
Актуарные функции для линий страхования от несчастных случаев и имущества.


%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

Сводка различий между зависящими от архитектуры и noarch-пакетами octave

  • Noarch-пакеты устанавливают BuildArch: noarch

  • Не требуют конкретной версии API

  • Noarch-пакеты ничего не устанавливают в %{octpkglibdir}

Заметки об Obsoletes

Пакеты, которые раньше были в пакете octave-forge, должны иметь строку Obsoletes выше. Пакеты, которые не были, не должны.