Packaging:Octave

From FedoraProject

(Difference between revisions)
Jump to: navigation, search
(Updating the octave package database: typo)
m
(28 intermediate revisions by 4 users not shown)
Line 10: Line 10:
 
If you are interested in packaging Octave packages, you should check here for upstream sources:
 
If you are interested in packaging Octave packages, you should check here for upstream sources:
 
* [http://octave.sourceforge.net/ The Octave Forge website]  
 
* [http://octave.sourceforge.net/ The Octave Forge website]  
 +
 +
== RPM macros ==
 +
 +
The following macros are defined in /etc/rpm/macros.octave in the octave 3.4.0 (Fedora 15+) package for help in packaging:
 +
 +
<pre>
 +
# Octave binary API provided
 +
%octave_api %(octave-config -p API_VERSION || echo 0)}
 +
 +
# Octave Package Directories
 +
%octshareprefix %{_datadir}/octave
 +
%octprefix %{octshareprefix}/packages
 +
%octarchprefix %{_libdir}/octave/packages
 +
 +
%octpkgdir %{octshareprefix}/%{octpkg}-%{version}
 +
%octpkglibdir %{octarchprefix}/%{octpkg}-%{version}
 +
 +
# Run an octave command - quietly with no startup files
 +
%octave_cmd()
 +
 +
# Build Source0 into a package tar file in a temporary location
 +
%octave_pkg_build
 +
 +
# Install a package.  We use the octave pkg install command to install the
 +
# built package into the buildroot.  We also put a note to prevent the root
 +
# user from removing the package with the octave pkg uninstall command
 +
%octave_pkg_install
 +
 +
# preun script - we need to remove our uninstall protection and perhaps
 +
# run the package's own uninstall script.
 +
%octave_pkg_preun
 +
</pre>
 +
 +
== Octave packaging tips ==
 +
 +
=== Naming of Octave packages ===
 +
Packages of Octave packages have their own naming scheme. They should take into account the upstream name of the package. This makes a package name format of <code>octave-$NAME</code>. When in doubt, use the name of the module that you type to import it in octave.
 +
 +
'''Examples: '''
 +
<pre>
 +
octave-java (Octave package named java)
 +
octave-gsl (Octave package named gsl)
 +
</pre>
 +
 +
Limitations in the pkg function of octave (pkg.m) means that versioning of octave packages requires that the package version must have a MAJOR.MINOR.MICRO format. Failing to use this format results in octave not recognising binary package components in %prefix/libexec.
 +
 +
=== Updating the octave package database ===
 +
Octave maintains a list of installed packages in /usr/share/octave/octave_packages that needs to be updated on package install and removal.  This file is in an octave plain-text format.
 +
 +
The contents of the /usr/share/octave/packages/ directory are scanned for the follwing files when performing a pkg('rebuild') from within octave.
 +
* /usr/share/octave/packages/''NAMEOFPACKAGE''/packinfo/COPYING
 +
* /usr/share/octave/packages/''NAMEOFPACKAGE''/packinfo/DESCRIPTION
 +
 +
If these files are not present in any given ''NAMEOFPACKAGE'' directory, then octave will silently skip the folder and fail to index it correctly.
 +
 +
Octave will use the contents of octave_packages to modify its path at startup, allowing octave to find plugins.
 +
 +
=== Documentation files ===
 +
All package files are installed into the octave directories.
  
 
== Spec Templates for Octave packages ==
 
== Spec Templates for Octave packages ==
Line 18: Line 77:
  
 
<pre>
 
<pre>
%define pkg foo
+
%global octpkg image
%{!?octave_api: %define octave_api %(octave-config -p API_VERSION || echo 0)}
+
  
Name:          octave-%{pkg}
+
Name:          octave-%{octpkg}
Version:        1.2.1
+
Version:        1.0.13
 
Release:        1%{?dist}
 
Release:        1%{?dist}
Summary:        Foo Interface for Octave
+
Summary:        Image processing for Octave
 
Group:          Applications/Engineering
 
Group:          Applications/Engineering
 
License:        GPLv2+
 
License:        GPLv2+
URL:            http://octave.sourceforge.net
+
URL:            http://octave.sourceforge.net/image/
Source0:        http://downloads.sourceforge.net/octave/%{pkg}-%{version}.tar.gz
+
Source0:        http://downloads.sourceforge.net/octave/%{octpkg}-%{version}.tar.gz
BuildRoot:     %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
 
 +
BuildRequires: octave-devel
  
 
Requires:      octave(api) = %{octave_api}
 
Requires:      octave(api) = %{octave_api}
Obsoletes:      octave-forge < 20071015
+
Requires(post): octave
 
+
Requires(postun): octave
BuildRequires:  octave-devel >= 2.9.14
+
Obsoletes:      octave-forge <= 20090607
BuildRequires:  gcc-c++ libstdc++-devel
+
 
+
%define octave_distpkg %{?_vendor:%_vendor}%{?!_vendor:distributions}
+
  
 
%description
 
%description
Provides Foo interface for Octave.
+
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
 
%prep
%setup -q -n %{pkg}-%{version}
+
%setup -q -n %{octpkg}-%{version}
 +
 
  
 
%build
 
%build
unset TERM
+
%octave_pkg_build
%configure
+
 
make TMPDIR=%{_tmppath} %{?_smp_mflags}
+
  
 
%install
 
%install
unset TERM
 
 
rm -rf %{buildroot}
 
rm -rf %{buildroot}
make install TMPDIR=%{_tmppath} DESTDIR=%{buildroot} DISTPKG=%{octave_distpkg}
+
%octave_pkg_install
  
%clean
 
rm -rf %{buildroot}
 
  
 
%post
 
%post
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/dist_admin install
+
%octave_cmd pkg rebuild
  
 
%preun
 
%preun
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/dist_admin uninstall
+
%octave_pkg_preun
  
 
%postun
 
%postun
octave -q -H --no-site-file --eval "pkg('rebuild');"
+
%octave_cmd pkg rebuild
  
 
%files
 
%files
%defattr(-,root,root)
+
%{octpkglibdir}
%{_libexecdir}/octave/packages/%{pkg}-%{version}
+
%dir %{octpkgdir}
%dir %{_datadir}/octave/packages/%{pkg}-%{version}
+
%{octpkgdir}/*.m
%{_datadir}/octave/packages/%{pkg}-%{version}/*.m
+
%doc %{octpkgdir}/doc-cache
%dir %{_datadir}/octave/packages/%{pkg}-%{version}/packinfo
+
%{octpkgdir}/packinfo
%doc %{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/COPYING
+
 
%doc %{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/DESCRIPTION
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/.autoload
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/INDEX
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/dist_admin
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/on_uninstall.m
+
  
 
%changelog
 
%changelog
* Tue Sep 25 2007 Orion Poplawski <orion@cora.nwra.com> 1.2.1-1
+
* Sat Feb 12 2011 Orion Poplawski <orion@cora.nwra.com> 1.0.13-1
- Octave package template
+
- Initial Fedora package
 
</pre>
 
</pre>
  
Line 88: Line 140:
  
 
<pre>
 
<pre>
%define pkg foo
+
%global octpkg actuarial
  
Name:          octave-%{pkg}
+
Name:          octave-%{octpkg}
Version:        1.2.1
+
Version:        1.1.0
 
Release:        1%{?dist}
 
Release:        1%{?dist}
Summary:        Foo Interface for Octave
+
Summary:        Actuarial functions for Octave
 
Group:          Applications/Engineering
 
Group:          Applications/Engineering
 
License:        GPLv2+
 
License:        GPLv2+
URL:            http://octave.sourceforge.net
+
URL:            http://octave.sourceforge.net/
Source0:        http://downloads.sourceforge.net/octave/%{pkg}-%{version}.tar.gz
+
Source0:        http://downloads.sourceforge.net/octave/%{octpkg}-%{version}.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
 
+
Requires:      octave
+
Obsoletes:      octave-forge < 20071015
+
 
+
BuildRequires:  octave-devel >= 2.9.14
+
BuildRequires:  gcc-c++ libstdc++-devel
+
 
BuildArch:      noarch
 
BuildArch:      noarch
  
%define octave_distpkg %{?_vendor:%_vendor}%{?!_vendor:distributions}
+
BuildRequires: octave-devel
 +
 
 +
Requires:       octave
 +
Requires(post): octave
 +
Requires(postun): octave
 +
Obsoletes:      octave-forge <= 20090607
  
 
%description
 
%description
Provides Foo interface for Octave.
+
Actuarial functions for Casualty and Property lines.
 +
 
  
 
%prep
 
%prep
%setup -q -n %{pkg}-%{version}
+
%setup -q -n %{octpkg}-%{version}
 +
 
  
 
%build
 
%build
 +
%octave_pkg_build
 +
  
 
%install
 
%install
unset TERM
 
 
rm -rf %{buildroot}
 
rm -rf %{buildroot}
make install PACKAGE=%SOURCE0 TMPDIR=%{_tmppath} \
+
%octave_pkg_install
DESTDIR=%{buildroot} DISTPKG=%{octave_distpkg}
+
  
%clean
 
rm -rf %{buildroot}
 
  
 
%post
 
%post
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/dist_admin install
+
%octave_cmd pkg rebuild
  
 
%preun
 
%preun
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/dist_admin uninstall
+
%octave_pkg_preun
  
 
%postun
 
%postun
octave -q -H --no-site-file --eval "pkg('rebuild');"
+
%octave_cmd pkg rebuild
  
 
%files
 
%files
%defattr(-,root,root)
+
%dir %{octpkgdir}
%dir %{_datadir}/octave/packages/%{pkg}-%{version}
+
%{octpkgdir}/*.m
%{_datadir}/octave/packages/%{pkg}-%{version}/*.m
+
%doc %{octpkgdir}/doc-cache
%dir %{_datadir}/octave/packages/%{pkg}-%{version}/packinfo
+
%{octpkgdir}/packinfo
%doc %{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/COPYING
+
 
%doc %{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/DESCRIPTION
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/.autoload
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/INDEX
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/dist_admin
+
%{_datadir}/octave/packages/%{pkg}-%{version}/packinfo/on_uninstall.m
+
  
 
%changelog
 
%changelog
* Tue Sep 25 2007 Orion Poplawski <orion@cora.nwra.com> 1.2.1-1
+
* Sat Feb 12 2011 Orion Poplawski <orion@cora.nwra.com> 1.1.0-1
- Octave package template
+
- Initial Fedora package
 
</pre>
 
</pre>
  
Line 156: Line 201:
 
* Noarch packages set <code>BuildArch: noarch</code>
 
* Noarch packages set <code>BuildArch: noarch</code>
 
* Don't require a specific api version
 
* Don't require a specific api version
* No build step needed, just install from the source tar ball
+
* Noarch packages don't install anything into %{octpkglibdir}
* Noarch packages don't install anything into %{_libexecdir}/octave/packages
+
  
== Octave packaging tips ==
+
=== Obsoletes notes ===
 
+
=== Naming of Octave packages ===
+
Packages of Octave packages have their own naming scheme. They should take into account the upstream name of the package. This makes a package name format of <code>octave-$NAME</code>. When in doubt, use the name of the module that you type to import it in octave.
+
 
+
'''Examples: '''
+
<pre>
+
octave-java (Octave package named java)
+
octave-gsl (Octave package named gsl)
+
</pre>
+
 
+
=== unset TERM ===
+
Due to an issue with octave emitting an escape sequence (due to readline library) on startup, you need to unset the TERM variable in the %build and %install sections.
+
  
=== Updating the octave package database ===
+
Packages that used to be in the octave-forge package need to have the Obsoletes line abovePackages that were not do not.
Octave maintains a list of installed packages in /usr/share/octave/octave_packages that needs to be updated on package install and removal.  This file is in an octave plain-text format.
+
 
+
The contents of the /usr/share/octave/packages/ directory are scanned for the follwing files when performing a pkg('rebuild') from within octave.
+
* /usr/share/octave/packages/''NAMEOFPACKAGE''/packinfo/COPYING
+
* /usr/share/octave/packages/''NAMEOFPACKAGE''/packinfo/DESCRIPTION
+
 
+
If these files are not present in any given ''NAMEOFPACKAGE'' directory, then octave will silently skip the folder and fail to index it correctly.
+
 
+
Octave will use the contents of octave_packages to modify its path at startup, allowing octave to find plugins.
+
 
+
=== Documentation files ===
+
All package files are installed into the octave directories.  The COPYING and DESCRIPTION files are documentation and need to be marked as %docThe others are not.
+
  
 
[[Category:Packaging guidelines drafts]]
 
[[Category:Packaging guidelines drafts]]

Revision as of 15:15, 16 January 2012

Contents

How to package Octave packages

What is Octave?

The definition from website says:

"GNU Octave is a high-level language, primarily intended for numerical computations. It provides a convenient command line interface for solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible with Matlab. It may also be used as a batch-oriented language."

If you are interested in packaging Octave packages, you should check here for upstream sources:

RPM macros

The following macros are defined in /etc/rpm/macros.octave in the octave 3.4.0 (Fedora 15+) package for help in packaging:

# Octave binary API provided
%octave_api %(octave-config -p API_VERSION || echo 0)}

# Octave Package Directories
%octshareprefix %{_datadir}/octave
%octprefix %{octshareprefix}/packages
%octarchprefix %{_libdir}/octave/packages

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

# Run an octave command - quietly with no startup files
%octave_cmd()

# Build Source0 into a package tar file in a temporary location
%octave_pkg_build

# Install a package.  We use the octave pkg install command to install the
# built package into the buildroot.  We also put a note to prevent the root
# user from removing the package with the octave pkg uninstall command
%octave_pkg_install 

# preun script - we need to remove our uninstall protection and perhaps
# run the package's own uninstall script.
%octave_pkg_preun

Octave packaging tips

Naming of Octave packages

Packages of Octave packages have their own naming scheme. They should take into account the upstream name of the package. This makes a package name format of octave-$NAME. When in doubt, use the name of the module that you type to import it in octave.

Examples:

octave-java (Octave package named java)
octave-gsl (Octave package named gsl)

Limitations in the pkg function of octave (pkg.m) means that versioning of octave packages requires that the package version must have a MAJOR.MINOR.MICRO format. Failing to use this format results in octave not recognising binary package components in %prefix/libexec.

Updating the octave package database

Octave maintains a list of installed packages in /usr/share/octave/octave_packages that needs to be updated on package install and removal. This file is in an octave plain-text format.

The contents of the /usr/share/octave/packages/ directory are scanned for the follwing files when performing a pkg('rebuild') from within octave.

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

If these files are not present in any given NAMEOFPACKAGE directory, then octave will silently skip the folder and fail to index it correctly.

Octave will use the contents of octave_packages to modify its path at startup, allowing octave to find plugins.

Documentation files

All package files are installed into the octave directories.

Spec Templates for Octave packages

There are two types of Octave packages: arch-specific and noarch.

Arch specific Octave spec template

%global octpkg image

Name:           octave-%{octpkg}
Version:        1.0.13
Release:        1%{?dist}
Summary:        Image processing for Octave
Group:          Applications/Engineering
License:        GPLv2+
URL:            http://octave.sourceforge.net/image/
Source0:        http://downloads.sourceforge.net/octave/%{octpkg}-%{version}.tar.gz

BuildRequires:  octave-devel

Requires:       octave(api) = %{octave_api}
Requires(post): octave
Requires(postun): octave
Obsoletes:      octave-forge <= 20090607

%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
rm -rf %{buildroot}
%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

Noarch Octave spec template

%global octpkg actuarial

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

BuildRequires:  octave-devel

Requires:       octave
Requires(post): octave
Requires(postun): octave
Obsoletes:      octave-forge <= 20090607

%description
Actuarial functions for Casualty and Property lines.


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


%build
%octave_pkg_build


%install
rm -rf %{buildroot}
%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

Summary of differences between arch-specific and noarch octave packages

  • Noarch packages set BuildArch: noarch
  • Don't require a specific api version
  • Noarch packages don't install anything into %{octpkglibdir}

Obsoletes notes

Packages that used to be in the octave-forge package need to have the Obsoletes line above. Packages that were not do not.