Difference between revisions of "Template Spec Files"

From Rosalab Wiki
Jump to: navigation, search
(Spec file for a Python module, both python 2 and python 3, ROSA >= 2019.1 (in progress))
(Spec file for a golang)
 
(67 intermediate revisions by 5 users not shown)
Line 3: Line 3:
 
<pre>
 
<pre>
 
Summary: foo
 
Summary: foo
Name: foo
+
Name: foo
 
Version: 1.0
 
Version: 1.0
 
Release: 1
 
Release: 1
Line 9: Line 9:
 
Group: foo
 
Group: foo
 
Url: foo
 
Url: foo
Source0: %{name}-%{version}.tar.bz2
+
Source0: %{name}-%{version}.tar.gz
  
 
%description
 
%description
Line 19: Line 19:
  
 
%prep
 
%prep
%setup -q
+
%autosetup -p1
  
 
%build
 
%build
Line 41: Line 41:
 
Group: foo
 
Group: foo
 
Url: foo
 
Url: foo
Source0: %{name}-%{version}.tar.bz2
+
Source0: %{name}-%{version}.tar.gz
 
BuildRequires:  cmake
 
BuildRequires:  cmake
  
Line 52: Line 52:
  
 
%prep
 
%prep
%setup -q
+
%autosetup -p1
  
 
%build
 
%build
Line 74: Line 74:
 
Group: foo
 
Group: foo
 
Url: foo
 
Url: foo
Source0: %{name}-%{version}.tar.bz2
+
Source0: %{name}-%{version}.tar.gz
 
BuildRequires:  cmake
 
BuildRequires:  cmake
 
BuildRequires:  qt4-devel
 
BuildRequires:  qt4-devel
Line 86: Line 86:
  
 
%prep
 
%prep
%setup -q
+
%autosetup -p1
  
 
%build
 
%build
Line 108: Line 108:
 
Group: foo
 
Group: foo
 
Url: foo
 
Url: foo
Source0: %{name}-%{version}.tar.bz2
+
Source0: %{name}-%{version}.tar.gz
 
BuildRequires:  cmake
 
BuildRequires:  cmake
 
BuildRequires:  qt5-devel
 
BuildRequires:  qt5-devel
Line 120: Line 120:
  
 
%prep
 
%prep
%setup -q
+
%autosetup -p1
  
 
%build
 
%build
Line 128: Line 128:
 
%install
 
%install
 
%makeinstall_std -C build
 
%makeinstall_std -C build
 +
 +
%find_lang %{name}
 +
</pre>
 +
 +
=Spec file for a program built using Meson=
 +
 +
<pre>
 +
Summary: foo
 +
Name: foo
 +
Version: 1.0
 +
Release: 1
 +
License: foo
 +
Group: foo
 +
Url: foo
 +
Source0: %{name}-%{version}.tar.gz
 +
BuildRequires: meson
 +
 +
%description
 +
foo.
 +
 +
%files -f %{name}.lang
 +
 +
#------------------------------------------------------------------
 +
 +
%prep
 +
%autosetup -p1
 +
 +
%build
 +
%meson
 +
%meson_build
 +
 +
%install
 +
%meson_install
  
 
%find_lang %{name}
 
%find_lang %{name}
Line 134: Line 167:
 
=Spec file for a program built using Perl/Makefile.PL=
 
=Spec file for a program built using Perl/Makefile.PL=
 
<pre>
 
<pre>
%define upstream_name   foo
+
%define upstream_name foo
 
%define upstream_version 1.0
 
%define upstream_version 1.0
  
Line 144: Line 177:
 
Group: foo
 
Group: foo
 
Url: foo
 
Url: foo
Source0: %{upstream_name}-%{upstream_version}.tar.bz2
+
Source0: %{upstream_name}-%{upstream_version}.tar.gz
 
BuildRequires:  perl-devel
 
BuildRequires:  perl-devel
 +
BuildRequires:  perl(ExtUtils::MakeMaker)
  
 
%description
 
%description
Line 155: Line 189:
  
 
%prep
 
%prep
%setup -qn %{upstream_name}-%{upstream_version}
+
%autosetup -p1 -n %{upstream_name}-%{upstream_version}
  
 
%build
 
%build
Line 162: Line 196:
  
 
%check
 
%check
%make test
+
make test
  
 
%install
 
%install
Line 170: Line 204:
 
=Spec file for a program built using Perl/Build.PL=
 
=Spec file for a program built using Perl/Build.PL=
 
<pre>
 
<pre>
%define upstream_name   foo
+
%define upstream_name foo
 
%define upstream_version 1.0
 
%define upstream_version 1.0
  
Line 180: Line 214:
 
Group: foo
 
Group: foo
 
Url: foo
 
Url: foo
Source0: %{upstream_name}-%{upstream_version}.tar.bz2
+
Source0: %{upstream_name}-%{upstream_version}.tar.gz
 
BuildRequires:  perl-devel
 
BuildRequires:  perl-devel
 
BuildRequires:  perl(Module::Build)
 
BuildRequires:  perl(Module::Build)
Line 192: Line 226:
  
 
%prep
 
%prep
%setup -qn %{upstream_name}-%{upstream_version}
+
%autosetup -p1 -n %{upstream_name}-%{upstream_version}
  
 
%build
 
%build
Line 205: Line 239:
 
</pre>
 
</pre>
  
=Spec file for a Python module, python2 only, ROSA <= 2016.1 (in progress)=
+
=Spec file for a Python module=
 +
 
 +
== Spec file to build python3 module with setup.py ==
 +
 
 +
python-mymodule.spec:
 +
 
 +
<pre>
 +
%define pypi_name mymodule
 +
 
 +
Summary: Example module
 +
Name: python-%{pypi_name}
 +
Version: 1.0
 +
Release: 1
 +
License: GPL
 +
Group: Development/Python
 +
Url: http://mypage.org/mymodule
 +
Source0: %{pypi_name}-%{version}.tar.gz
 +
#if source available on pypi.org uncoment next line, and remove line Source0: above
 +
#Source0: %pypi_source
 +
BuildRequires: pkgconfig(python3)
 +
 
 +
%define _description %{expand:
 +
Text about
 +
example Python module
 +
}
 +
 
 +
%description
 +
%{_description}
 +
 
 +
#------------------------------------------------------------------
 +
 
 +
%package -n python3-%{pypi_name}
 +
Summary: %{summary}
 +
Group: Development/Python
 +
 
 +
%description -n python3-%{pypi_name}
 +
%{_description}
 +
 
 +
%files -n python3-%{pypi_name}
 +
# for files in /usr/lib64/python3.8/site-packages
 +
%{python3_sitearch}/*
 +
%{python3_sitearch}/%{pypi_name}-%{version}-py*.egg-info
 +
 
 +
# for files in /usr/lib/python3.8/site-packages uncomment next lines
 +
#%%{python3_sitelib}/*
 +
#%%{python3_sitelib}/%{pypi_name}-%{version}-py*.egg-info
 +
#------------------------------------------------------------------
 +
 
 +
%prep
 +
%autosetup -p1
 +
 
 +
%build
 +
%py3_build
 +
 
 +
%install
 +
%py3_install
 +
# uncomment for fix rpmlint error "set python3 shebang"
 +
#%%py3_shebang_fix
 +
 
 +
%check
 +
%pytest
 +
 
 +
</pre>
 +
 
 +
== Spec file to build python3 module with pyproject.toml ==
 +
 
 +
python-mymodule.spec:
 +
 
 +
<pre>
 +
%define pypi_name mymodule
 +
 
 +
Summary: Example module
 +
Name: python-%{pypi_name}
 +
Version: 1.0
 +
Release: 1
 +
License: GPL
 +
Group: Development/Python
 +
Url: http://mypage.org/mymodule
 +
#if source available on pypi.org
 +
Source0: %pypi_source
 +
# if source not available on pypi.org uncomment line below and comment Source0 upper
 +
#Source0: %{pypi_name}-%{version}.tar.gz
 +
BuildRequires: pkgconfig(python3)
 +
BuildRequires: pyproject-rpm-macros
 +
# for %%check if needed
 +
BuildRequires: python3egg(pytest)
 +
 
 +
%define _description %{expand:
 +
Text about
 +
example Python module
 +
}
 +
 
 +
%description
 +
%{_description}
 +
#------------------------------------------------------------------
 +
 
 +
%package -n python3-%{pypi_name}
 +
Summary: %{summary}
 +
Group: Development/Python
 +
 
 +
%description -n python3-%{pypi_name}
 +
%{_description}
 +
 
 +
%files -n python3-%{pypi_name} -f %{pyproject_files}
 +
%license LICENSE*
 +
%doc README*
 +
 
 +
#------------------------------------------------------------------
 +
 
 +
%prep
 +
%autosetup -p1 -n %{pypi_name}-%{version}
 +
 
 +
# for autoinstall BuildRequires
 +
%generate_buildrequires
 +
%pyproject_buildrequires -r
 +
 
 +
%build
 +
%pyproject_wheel
 +
 
 +
%install
 +
%pyproject_install
 +
%pyproject_save_files %{pypi_name}
 +
 
 +
# uncomment for fix rpmlint error "set python3 shebang"
 +
#%%py3_shebang_fix
 +
 
 +
%check
 +
%pytest
 +
 
 +
</pre>
 +
 
 +
== Spec file to build python2 module (ROSA <= 2016.1) ==
 
<pre>
 
<pre>
 
%define module mymodule
 
%define module mymodule
Line 230: Line 395:
 
%prep
 
%prep
 
%setup -q
 
%setup -q
 +
%apply_patches
  
 
%build
 
%build
Line 239: Line 405:
 
</pre>
 
</pre>
  
=Spec file for a Python module, both python 2 and python 3, ROSA >= 2019.1 (in progress)=
+
== Spec file to build python2 module (ROSA >= 2021.1) ==
 +
 
 +
python-mymodule.spec:
 +
 
 
<pre>
 
<pre>
%define module mymodule
+
%define pypi_name mymodule
  
 
Summary: Example module
 
Summary: Example module
Name: python-%{module}
+
Name: python-%{pypi_name}
 
Version: 1.0
 
Version: 1.0
 
Release: 1
 
Release: 1
Line 250: Line 419:
 
Group: Development/Python
 
Group: Development/Python
 
Url: http://mypage.org/mymodule
 
Url: http://mypage.org/mymodule
Source0: %{module}-%{version}.tar.gz
+
Source0: %{pypi_name}-%{version}.tar.gz
 +
#if source available on pypi.org uncoment next line, and remove line Source0: above
 +
#Source0: %pypi_source
 
BuildRequires: pkgconfig(python2)
 
BuildRequires: pkgconfig(python2)
BuildRequires: pkgconfig(python3)
 
  
%define _description \
+
%define _description %{expand:
Text about \
+
Text about
Example Python module
+
example Python module
 +
}
  
 
%description
 
%description
Line 263: Line 434:
 
#------------------------------------------------------------------
 
#------------------------------------------------------------------
  
%package -n python2-%{module}
+
%package -n python2-%{pypi_name}
 +
Summary: %{summary}
 +
Group: Development/Python
 +
 
 +
%description -n python2-%{pypi_name}
 +
%{_description}
 +
 
 +
%files -n python2-%{pypi_name}
 +
%{python2_sitearch}/*
 +
 
 +
#------------------------------------------------------------------
 +
 
 +
%prep
 +
%autosetup -p1
 +
 
 +
%build
 +
%py2_build
 +
 
 +
%install
 +
%py2_install
 +
 
 +
</pre>
 +
 
 +
== Spec file for both python2 and python3 modules, ROSA >= 2021.1 ==
 +
 
 +
python-mymodule.spec:
 +
 
 +
<pre>
 +
%define pypi_name mymodule
 +
 
 +
Summary: Example module
 +
Name: python-%{pypi_name}
 +
Version: 1.0
 +
Release: 1
 +
License: Apache License
 +
Group: Development/Python
 +
Url: http://mypage.org/mymodule
 +
Source0: %{pypi_name}-%{version}.tar.gz
 +
#if source available on pypi.org uncoment next line, and remove line Source0: above
 +
#Source0: %pypi_source
 +
 
 +
%define _description %{expand:
 +
Text about
 +
example Python module
 +
}
 +
 
 +
%description
 +
%{_description}
 +
 
 +
#------------------------------------------------------------------
 +
 
 +
%package -n python2-%{pypi_name}
 
Summary: Example python2 module
 
Summary: Example python2 module
 
Group: Development/Python
 
Group: Development/Python
%py2_migration_meta python-%{module}
+
BuildRequires: pkgconfig(python2)
 +
%py2_migration_meta python-%{pypi_name}
  
%description -n python2-%{module}
+
%description -n python2-%{pypi_name}
 
%{_description}
 
%{_description}
  
%files -n python2-%{module}
+
%files -n python2-%{pypi_name}
 
%{python2_sitearch}/*
 
%{python2_sitearch}/*
  
 
#------------------------------------------------------------------
 
#------------------------------------------------------------------
  
%package -n python3-%{module}
+
%package -n python3-%{pypi_name}
 
Summary: Example python3 module
 
Summary: Example python3 module
 
Group: Development/Python
 
Group: Development/Python
 +
BuildRequires: pkgconfig(python3)
  
%description -n python3-%{module}
+
%description -n python3-%{pypi_name}
 
%{_description}
 
%{_description}
  
%files -n python3-%{module}
+
%files -n python3-%{pypi_name}
 
%{python3_sitearch}/*
 
%{python3_sitearch}/*
  
Line 289: Line 513:
  
 
%prep
 
%prep
%setup -q
+
%autosetup -p1
  
 
%build
 
%build
Line 300: Line 524:
  
 
</pre>
 
</pre>
 
+
=== See also ===
[https://abf.io/import/rpm-openmandriva-setup/blob/rosa2019.1/0001-python2-macro-and-py2_migration_meta.patch %py2_migration_meta]
+
[https://abf.io/import/rpm-openmandriva-setup/blob/rosa2019.1/0513-python2-macro-and-py2_migration_meta.patch %py2_migration_meta]
  
 
=Spec file for a Library=
 
=Spec file for a Library=
Line 320: Line 544:
 
Group: foo
 
Group: foo
 
Url: foo
 
Url: foo
Source0: %{name}-%{version}.tar.bz2
+
Source0: %{name}-%{version}.tar.gz
  
 
%description
 
%description
Line 328: Line 552:
  
 
%package -n %{libname}
 
%package -n %{libname}
Summary: foo shared library
+
Summary: %{name} shared library
 
Group: System/Libraries
 
Group: System/Libraries
  
 
%description -n %{libname}
 
%description -n %{libname}
foo shared library.
+
%{name} shared library.
  
 
%files -n %{libname}
 
%files -n %{libname}
Line 340: Line 564:
  
 
%package -n %{devname}
 
%package -n %{devname}
Summary: foo development files
+
Summary: %{name} development files
 
Group: Development/Other
 
Group: Development/Other
 
Requires: %{libname} = %{EVRD}
 
Requires: %{libname} = %{EVRD}
Line 346: Line 570:
  
 
%description -n %{devname}
 
%description -n %{devname}
foo development files.
+
%{name} development files.
  
 
%files -n %{devname}
 
%files -n %{devname}
Line 355: Line 579:
  
 
%package -n %{sdevname}
 
%package -n %{sdevname}
Summary: foo development files (static library)
+
Summary: %{name} development files (static library)
 
Group: Development/Other
 
Group: Development/Other
 
Requires: %{devname} = %{EVRD}
 
Requires: %{devname} = %{EVRD}
Line 361: Line 585:
  
 
%description -n %{sdevname}
 
%description -n %{sdevname}
foo development files (static library).
+
%{name} development files (static library).
  
 
%files -n %{sdevname}
 
%files -n %{sdevname}
Line 369: Line 593:
  
 
%prep
 
%prep
%setup -q
+
%autosetup -p1
  
 
%build
 
%build
Line 408: Line 632:
  
 
%prep
 
%prep
%setup -q -n package
+
%autosetup -p1 -n package
 
rm -rf node_modules
 
rm -rf node_modules
  
Line 419: Line 643:
 
</pre>
 
</pre>
  
=Spec file for a Ruby Gem=
+
=Spec file for a Ruby Gem (ROSA >= 2021.1)=
 +
<pre>
 +
%define gem_name  foo
 +
 
 +
Summary:        Foo
 +
Name:          rubygem-%{gem_name}
 +
Version:        1.0
 +
Release:        1
 +
Group:          Development/Ruby
 +
License:        GPLv2+ or Ruby
 +
URL:            foo
 +
Source0:        %{gem_name}-%{version}.gem
 +
BuildRequires:  rubygems-devel
 +
BuildArch:      noarch
 +
 
 +
%description
 +
%{summary}.
 +
 
 +
%files
 +
%dir %{gem_instdir}
 +
%license %{gem_instdir}/LICENSE.txt
 +
%{gem_libdir}
 +
%exclude %{gem_cache}
 +
%{gem_spec}
 +
 
 +
#------------------------------------------------------------------
 +
 
 +
%package        doc
 +
Summary:        Documentation for %{name}
 +
Group:          Books/Computer books
 +
Requires:      %{name} = %{EVRD}
 +
 
 +
%description    doc
 +
Documents, RDoc & RI documentation for %{name}.
 +
 
 +
%files doc
 +
%doc %{gem_docdir}
 +
%doc %{gem_instdir}/CHANGELOG.md
 +
%{gem_instdir}/Gemfile
 +
%doc %{gem_instdir}/README.md
 +
%doc %{gem_instdir}/SECURITY.md
 +
 
 +
#------------------------------------------------------------------
 +
 
 +
%prep
 +
%autosetup -p1 -n %{gem_name}-%{version}
 +
 
 +
%build
 +
%gem_build
 +
 
 +
%install
 +
%gem_install
 +
mkdir -p %{buildroot}%{gem_dir}
 +
cp -a .%{gem_dir}/* \
 +
        %{buildroot}%{gem_dir}/
 +
cp ../%{gem_name}-%{version}.gemspec %{buildroot}%{gem_dir}/specifications
 +
 
 +
</pre>
 +
 
 +
=Spec file for a Ruby Gem (ROSA <= 2016.1)=
 
<pre>
 
<pre>
 
%define rbname  foo
 
%define rbname  foo
Line 458: Line 741:
 
%prep
 
%prep
 
%setup -q
 
%setup -q
 +
%apply_patches
  
 
%build
 
%build
Line 469: Line 753:
  
 
<pre>
 
<pre>
%define module foo
+
%define _disable_ld_no_undefined 1
 +
%global debug_package %{nil}
 +
 
 +
%global pkg_name Foo
 +
%global pkgver %{pkg_name}-%{version}
  
 
Summary: foo
 
Summary: foo
Name: ghc-%{module}
+
Name: ghc-%{pkg_name}
 
Version: 1.0
 
Version: 1.0
 
Release: 1
 
Release: 1
 
License: BSD
 
License: BSD
 
Group: Development/Haskell
 
Group: Development/Haskell
Url: foo
+
Url:           https://hackage.haskell.org/package/%{pkg_name}
Source0: %{module}-%{version}.tar.gz
+
Source0:       https://hackage.haskell.org/package/%{pkgver}/%{pkgver}.tar.gz
BuildRequires: ghc-devel
+
BuildRequires: ghc-devel
BuildRequires: haskell-macros
+
BuildRequires: ghc-prof
Requires(post,preun): ghc
+
BuildRequires: ghc-rpm-macros
  
 
%description
 
%description
 
%{summary}.
 
%{summary}.
  
%files
+
%files -f %{name}.files
%{_libdir}/%{module}-%{version}
+
%license LICENSE
%{_cabal_rpm_deps_dir}
+
%{_cabal_haddoc_files}
+
  
#----------------------------------------------------------------------------
+
#----------------------------------------------------------------------
 +
%package devel
 +
Summary:        %{summary}
 +
Provides:      %{name}-static = %{EVRD}
 +
Provides:      %{name}-static%{?_isa} = %{EVRD}
 +
%if %{defined ghc_version}
 +
Requires:      ghc = %{ghc_version}
 +
%endif
 +
Requires:      %{name}%{?_isa} = %{EVRD}
 +
 
 +
%description devel
 +
This package provides the Haskell %{pkg_name} library development files.
 +
 
 +
%files devel -f %{name}-devel.files
 +
 
 +
#----------------------------------------------------------------------
 +
 
 +
%if %{with haddock}
 +
%package doc
 +
Summary:        Haskell %{pkg_name} library documentation
 +
BuildArch:      noarch
 +
 
 +
%description doc
 +
This package provides the Haskell %{pkg_name} library documentation.
 +
 
 +
%files doc -f %{name}-doc.files
 +
%license LICENSE
 +
 
 +
%endif
 +
 
 +
#----------------------------------------------------------------------
 +
 
 +
%if %{with ghc_prof}
 +
%package prof
 +
Summary:        Haskell %{pkg_name} profiling library
 +
Requires:      %{name}-devel%{?_isa} = %{EVRD}
 +
Supplements:    (%{name}-devel and ghc-prof)
 +
 
 +
%description prof
 +
This package provides the Haskell %{pkg_name} profiling library.
 +
 
 +
%files prof -f %{name}-prof.files
 +
%endif
 +
 
 +
#----------------------------------------------------------------------
  
 
%prep
 
%prep
%setup -q -n %{module}-%{version}
+
%autosetup -p1 -n %{pkgver}
  
 
%build
 
%build
%_cabal_build
+
%ghc_lib_build
  
 
%install
 
%install
%_cabal_install
+
%ghc_lib_install
%_cabal_rpm_gen_deps
+
%_cabal_scriptlets
+
  
 
</pre>
 
</pre>
 +
 +
= Spec file when building a git snapshot =
 +
 +
<pre>
 +
%define commit 0123456789abcdef101112131415161718191a1b
 +
%define commit_short %(echo %{commit} | head -c6)
 +
 +
Summary: foo
 +
Name: foo
 +
Version: foo
 +
Release: 0.git%{commit_short}.1
 +
License: foo
 +
Group: foo
 +
Url: foo
 +
Source0: %{name}-%{commit}.tar.gz
 +
 +
%description
 +
foo.
 +
 +
%files
 +
...
 +
 +
#------------------------------------------------------------------
 +
 +
%prep
 +
%autosetup -p1 -n %{name}-%{commit}
 +
 +
%build
 +
...
 +
 +
%install
 +
...
 +
</pre>
 +
 +
Source example for Github, Gogs, Gitea, Forgejo:
 +
Source0: https://github.com/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz
 +
 +
Source example for Gitlab, MosHub:
 +
Source0: https://gitlab.com/owner/repo/-/archive/%{commit}/%{name}-%{commit}.tar.gz
 +
 +
Source example for GitWeb:
 +
Source0: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/%{commit}.tar.gz
 +
 +
Source example for GitVerse:
 +
Source0: https://gitverse.ru/api/repos/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz
 +
 +
To update such a package:
 +
# Change Version to the latest tagged release
 +
# Change commit hash in the spec
 +
# Change the first number of the Release tag to "0" if the Version was incrimented, otherwise incriment that first number
 +
# Change the last number in the Release to 1
 +
# Run:
 +
rm -fv .abf.yml
 +
spectool -g *.spec
 +
abf put
 +
 +
If upstream has no tagged versions at all, use "Version: 0", example: https://abf.io/import/just-backup-btrfs/blob/225cac97e9/just-backup-btrfs.spec
  
 
[[Category:Package Management]]
 
[[Category:Package Management]]
 
[[Category:Packaging Guidelines]]
 
[[Category:Packaging Guidelines]]
 
[[Category:ROSA Developer Tools]]
 
[[Category:ROSA Developer Tools]]
 +
 +
= Spec file for a golang =
 +
 +
<pre>
 +
# use bundled golang modules (from Source1)
 +
%global gomodulesmode GO111MODULE=off
 +
# see Source0
 +
%global goipath github.com/foo/bar
 +
 +
Summary: foo
 +
Name: foo
 +
Version: 1.0
 +
Release: 1
 +
License: MIT
 +
Group: Development/Other
 +
Url: http://github.com/foo/bar
 +
Source0: http://github.com/foo/bar/archive/refs/tags/v%{version}.tar.gz?/%{name}-%{version}.tar.gz
 +
# unpack source and run 'go mod vendor' in source dir, tar.gz 'vendor' dir
 +
Source1: vendor.tar.gz
 +
BuildRequires: golang
 +
%gometa
 +
 +
%description
 +
%{summary}.
 +
 +
%files
 +
%{_bindir}/%{name}
 +
 +
#----------------------------------------------------------------------------
 +
 +
%prep
 +
%goprep
 +
 +
# prepare vendored modules
 +
tar -xf %{SOURCE1}
 +
cp -r ./vendor/* _build/src/
 +
 +
%build
 +
%gobuild -o %{gobuilddir}/bin/%{name} %{goipath}/cmd/%{name}
 +
 +
%install
 +
install -d %{buildroot}%{_bindir}
 +
install -Dm0755 %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir}
 +
 +
</pre>
 +
 +
See also: https://abf.io/import/rclone, https://abf.io/import/glab, https://abf.io/import/ha_cluster_exporter

Latest revision as of 01:01, 6 August 2024

Spec file for a program built using GNU Autotools

Summary:	foo
Name:		foo
Version:	1.0
Release:	1
License:	foo
Group:		foo
Url:		foo
Source0:	%{name}-%{version}.tar.gz

%description
foo.

%files -f %{name}.lang

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%configure
%make

%install
%makeinstall_std

%find_lang %{name}

Spec file for a program built using CMake

Summary:	foo
Name:		foo	
Version:	1.0
Release:	1
License:	foo
Group:		foo
Url:		foo
Source0:	%{name}-%{version}.tar.gz
BuildRequires:  cmake

%description
foo.

%files -f %{name}.lang

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%cmake
%make

%install
%makeinstall_std -C build

%find_lang %{name}

Spec file for a program written in Qt4 and built using cmake

Summary:	foo
Name:		foo	
Version:	1.0
Release:	1
License:	foo
Group:		foo
Url:		foo
Source0:	%{name}-%{version}.tar.gz
BuildRequires:  cmake
BuildRequires:  qt4-devel

%description
foo.

%files -f %{name}.lang

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%cmake_qt4
%make

%install
%makeinstall_std -C build

%find_lang %{name}

Spec file for a program written in Qt5 and built using cmake

Summary:	foo
Name:		foo	
Version:	1.0
Release:	1
License:	foo
Group:		foo
Url:		foo
Source0:	%{name}-%{version}.tar.gz
BuildRequires:  cmake
BuildRequires:  qt5-devel

%description
foo.

%files -f %{name}.lang

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%cmake_qt5
%make

%install
%makeinstall_std -C build

%find_lang %{name}

Spec file for a program built using Meson

Summary:	foo
Name:		foo	
Version:	1.0
Release:	1
License:	foo
Group:		foo
Url:		foo
Source0:	%{name}-%{version}.tar.gz
BuildRequires:	meson

%description
foo.

%files -f %{name}.lang

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%meson
%meson_build

%install
%meson_install

%find_lang %{name}

Spec file for a program built using Perl/Makefile.PL

%define upstream_name foo
%define upstream_version 1.0

Summary:	foo
Name:           perl-%{upstream_name}
Version:        %perl_convert_version %{upstream_version}
Release:        1
License:	foo
Group:		foo
Url:		foo
Source0:	%{upstream_name}-%{upstream_version}.tar.gz
BuildRequires:  perl-devel
BuildRequires:  perl(ExtUtils::MakeMaker)

%description
foo.

%files

#------------------------------------------------------------------

%prep
%autosetup -p1 -n %{upstream_name}-%{upstream_version}

%build
perl Makefile.PL INSTALLDIRS=vendor
%make

%check
make test

%install
%makeinstall_std

Spec file for a program built using Perl/Build.PL

%define upstream_name foo
%define upstream_version 1.0

Summary:	foo
Name:           perl-%{upstream_name}
Version:        %perl_convert_version %{upstream_version}
Release:        1
License:	foo
Group:		foo
Url:		foo
Source0:	%{upstream_name}-%{upstream_version}.tar.gz
BuildRequires:  perl-devel
BuildRequires:  perl(Module::Build)

%description
foo.

%files

#------------------------------------------------------------------

%prep
%autosetup -p1 -n %{upstream_name}-%{upstream_version}

%build
perl Build.PL installdirs=vendor
./Build CFLAGS="%{optflags}"

%check
./Build test

%install
./Build install destdir=%{buildroot}

Spec file for a Python module

Spec file to build python3 module with setup.py

python-mymodule.spec:

%define pypi_name mymodule

Summary:	Example module
Name:		python-%{pypi_name}
Version:	1.0
Release:	1
License:	GPL
Group:		Development/Python
Url:		http://mypage.org/mymodule
Source0:	%{pypi_name}-%{version}.tar.gz
#if source available on pypi.org uncoment next line, and remove line Source0: above
#Source0:	%pypi_source
BuildRequires:	pkgconfig(python3)

%define _description %{expand:
Text about
example Python module
}

%description
%{_description}

#------------------------------------------------------------------

%package -n python3-%{pypi_name}
Summary:	%{summary}
Group:		Development/Python

%description -n python3-%{pypi_name}
%{_description}

%files -n python3-%{pypi_name}
# for files in /usr/lib64/python3.8/site-packages
%{python3_sitearch}/*
%{python3_sitearch}/%{pypi_name}-%{version}-py*.egg-info

# for files in /usr/lib/python3.8/site-packages uncomment next lines
#%%{python3_sitelib}/*
#%%{python3_sitelib}/%{pypi_name}-%{version}-py*.egg-info
#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%py3_build

%install
%py3_install
# uncomment for fix rpmlint error "set python3 shebang"
#%%py3_shebang_fix

%check
%pytest

Spec file to build python3 module with pyproject.toml

python-mymodule.spec:

%define pypi_name mymodule

Summary:	Example module
Name:		python-%{pypi_name}
Version:	1.0
Release:	1
License:	GPL
Group:		Development/Python
Url:		http://mypage.org/mymodule
#if source available on pypi.org
Source0:	%pypi_source
# if source not available on pypi.org uncomment line below and comment Source0 upper
#Source0:	%{pypi_name}-%{version}.tar.gz
BuildRequires:	pkgconfig(python3)
BuildRequires:	pyproject-rpm-macros
# for %%check if needed
BuildRequires:	python3egg(pytest)

%define _description %{expand:
Text about
example Python module
}

%description
%{_description}
#------------------------------------------------------------------

%package -n python3-%{pypi_name}
Summary:	%{summary}
Group:		Development/Python

%description -n python3-%{pypi_name}
%{_description}

%files -n python3-%{pypi_name} -f %{pyproject_files}
%license LICENSE*
%doc README*

#------------------------------------------------------------------

%prep
%autosetup -p1 -n %{pypi_name}-%{version}

# for autoinstall BuildRequires
%generate_buildrequires
%pyproject_buildrequires -r

%build
%pyproject_wheel

%install
%pyproject_install
%pyproject_save_files %{pypi_name}

# uncomment for fix rpmlint error "set python3 shebang"
#%%py3_shebang_fix

%check
%pytest

Spec file to build python2 module (ROSA <= 2016.1)

%define module	mymodule

Summary:	Example module
Name:		python-%{module}
Version:	1.0
Release:	1
License:	Apache License
Group:		Development/Python
Url:		http://mypage.org/mymodule
Source0:	%{module}-%{version}.tar.gz
BuildRequires:	pkgconfig(python2)

%description
Example Python module.

%files
%doc *.txt
%{python2_sitearch}/*

#------------------------------------------------------------------

%prep
%setup -q
%apply_patches

%build
%py2_build

%install
%py2_install

Spec file to build python2 module (ROSA >= 2021.1)

python-mymodule.spec:

%define pypi_name mymodule

Summary:	Example module
Name:		python-%{pypi_name}
Version:	1.0
Release:	1
License:	Apache License
Group:		Development/Python
Url:		http://mypage.org/mymodule
Source0:	%{pypi_name}-%{version}.tar.gz
#if source available on pypi.org uncoment next line, and remove line Source0: above
#Source0:	%pypi_source
BuildRequires:	pkgconfig(python2)

%define _description %{expand:
Text about
example Python module
}

%description
%{_description}

#------------------------------------------------------------------

%package -n python2-%{pypi_name}
Summary:	%{summary}
Group:		Development/Python

%description -n python2-%{pypi_name}
%{_description} 

%files -n python2-%{pypi_name}
%{python2_sitearch}/*

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%py2_build

%install
%py2_install

Spec file for both python2 and python3 modules, ROSA >= 2021.1

python-mymodule.spec:

%define pypi_name mymodule

Summary:	Example module
Name:		python-%{pypi_name}
Version:	1.0
Release:	1
License:	Apache License
Group:		Development/Python
Url:		http://mypage.org/mymodule
Source0:	%{pypi_name}-%{version}.tar.gz
#if source available on pypi.org uncoment next line, and remove line Source0: above
#Source0:	%pypi_source

%define _description %{expand:
Text about
example Python module
}

%description
%{_description}

#------------------------------------------------------------------

%package -n python2-%{pypi_name}
Summary:	Example python2 module
Group:		Development/Python
BuildRequires:	pkgconfig(python2)
%py2_migration_meta python-%{pypi_name}

%description -n python2-%{pypi_name}
%{_description}

%files -n python2-%{pypi_name}
%{python2_sitearch}/*

#------------------------------------------------------------------

%package -n python3-%{pypi_name}
Summary:	Example python3 module
Group:		Development/Python
BuildRequires:	pkgconfig(python3)

%description -n python3-%{pypi_name}
%{_description}

%files -n python3-%{pypi_name}
%{python3_sitearch}/*

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%py2_build
%py3_build

%install
%py2_install
%py3_install

See also

%py2_migration_meta

Spec file for a Library

%define major 1
%define libname %mklibname %{name} %{major}
%define devname %mklibname %{name} -d
# Usually we don't need to build static library
# But let's add it to spec template anyway
%define sdevname %mklibname %{name} -d -s

Summary:	foo
Name:		foo
Version:	1.0
Release:	1
License:	foo
Group:		foo
Url:		foo
Source0:	%{name}-%{version}.tar.gz

%description
foo.

#------------------------------------------------------------------

%package -n %{libname}
Summary:	%{name} shared library
Group:		System/Libraries

%description -n %{libname}
%{name} shared library.

%files -n %{libname}
%{_libdir}/lib%{name}.so.%{major}*

#------------------------------------------------------------------

%package -n %{devname}
Summary:	%{name} development files
Group:		Development/Other
Requires:	%{libname} = %{EVRD}
Provides:	%{name}-devel = %{EVRD}

%description -n %{devname}
%{name} development files.

%files -n %{devname}
%{_includedir}/*.h
%{_libdir}/*.so

#------------------------------------------------------------------

%package -n %{sdevname}
Summary:	%{name} development files (static library)
Group:		Development/Other
Requires:	%{devname} = %{EVRD}
Provides:	%{name}-static-devel = %{EVRD}

%description -n %{sdevname}
%{name} development files (static library).

%files -n %{sdevname}
%{_libdir}/*.a

#------------------------------------------------------------------

%prep
%autosetup -p1

%build
%configure
%make

%install
%makeinstall_std

See also

Spec file for a Node.js module

%define oname foo

Summary:        foo
Name:           nodejs-%{oname}
Version:        1.0
Release:        1
License:        foo
Group:          Development/Other
Url:            foo
Source0:        %{oname}-%{version}.tgz
BuildRequires:  nodejs-packaging
BuildArch:      noarch

%description
%{summary}.

%files
%doc LICENSE
%{nodejs_sitelib}/%{oname}

#------------------------------------------------------------------

%prep
%autosetup -p1 -n package
rm -rf node_modules

%build

%install
mkdir -p %{buildroot}/%{nodejs_sitelib}/%{oname}
cp -r package.json index.js %{buildroot}/%{nodejs_sitelib}/%{oname}
%nodejs_symlink_deps

Spec file for a Ruby Gem (ROSA >= 2021.1)

%define gem_name  foo

Summary:        Foo
Name:           rubygem-%{gem_name}
Version:        1.0
Release:        1
Group:          Development/Ruby
License:        GPLv2+ or Ruby
URL:            foo
Source0:        %{gem_name}-%{version}.gem
BuildRequires:  rubygems-devel 
BuildArch:      noarch

%description
%{summary}.

%files
%dir %{gem_instdir}
%license %{gem_instdir}/LICENSE.txt
%{gem_libdir}
%exclude %{gem_cache}
%{gem_spec}

#------------------------------------------------------------------

%package        doc
Summary:        Documentation for %{name}
Group:          Books/Computer books
Requires:       %{name} = %{EVRD}

%description    doc
Documents, RDoc & RI documentation for %{name}.

%files doc
%doc %{gem_docdir}
%doc %{gem_instdir}/CHANGELOG.md
%{gem_instdir}/Gemfile
%doc %{gem_instdir}/README.md
%doc %{gem_instdir}/SECURITY.md

#------------------------------------------------------------------

%prep
%autosetup -p1 -n %{gem_name}-%{version}

%build
%gem_build

%install
%gem_install
mkdir -p %{buildroot}%{gem_dir}
cp -a .%{gem_dir}/* \
        %{buildroot}%{gem_dir}/
cp ../%{gem_name}-%{version}.gemspec %{buildroot}%{gem_dir}/specifications

Spec file for a Ruby Gem (ROSA <= 2016.1)

%define rbname  foo

Summary:        Foo
Name:           rubygem-%{rbname}
Version:        1.0
Release:        1
Group:          Development/Ruby
License:        GPLv2+ or Ruby
URL:            foo
Source0:        %{rbname}-%{version}.gem
BuildRequires:  rubygems 
BuildArch:      noarch

%description
%{summary}.

%files
%{ruby_gemdir}/gems/%{rbname}-%{version}
%{ruby_gemdir}/specifications/%{rbname}-%{version}.gemspec

#------------------------------------------------------------------

%package        doc
Summary:        Documentation for %{name}
Group:          Books/Computer books
Requires:       %{name} = %{EVRD}

%description    doc
Documents, RDoc & RI documentation for %{name}.

%files doc
%{ruby_gemdir}/doc/%{rbname}-%{version}

#------------------------------------------------------------------

%prep
%setup -q
%apply_patches

%build
%gem_build

%install
%gem_install

Spec file for a Haskell Library

%define _disable_ld_no_undefined 1
%global debug_package %{nil}

%global pkg_name Foo
%global pkgver %{pkg_name}-%{version}

Summary:	foo
Name:		ghc-%{pkg_name}
Version:	1.0
Release:	1
License:	BSD
Group:		Development/Haskell
Url:            https://hackage.haskell.org/package/%{pkg_name}
Source0:        https://hackage.haskell.org/package/%{pkgver}/%{pkgver}.tar.gz
BuildRequires:  ghc-devel
BuildRequires:  ghc-prof
BuildRequires:  ghc-rpm-macros

%description
%{summary}.

%files -f %{name}.files
%license LICENSE

#----------------------------------------------------------------------
%package devel
Summary:        %{summary}
Provides:       %{name}-static = %{EVRD}
Provides:       %{name}-static%{?_isa} = %{EVRD}
%if %{defined ghc_version}
Requires:       ghc = %{ghc_version}
%endif
Requires:       %{name}%{?_isa} = %{EVRD}

%description devel
This package provides the Haskell %{pkg_name} library development files.

%files devel -f %{name}-devel.files

#----------------------------------------------------------------------

%if %{with haddock}
%package doc
Summary:        Haskell %{pkg_name} library documentation
BuildArch:      noarch

%description doc
This package provides the Haskell %{pkg_name} library documentation.

%files doc -f %{name}-doc.files
%license LICENSE

%endif

#----------------------------------------------------------------------

%if %{with ghc_prof}
%package prof
Summary:        Haskell %{pkg_name} profiling library
Requires:       %{name}-devel%{?_isa} = %{EVRD}
Supplements:    (%{name}-devel and ghc-prof)

%description prof
This package provides the Haskell %{pkg_name} profiling library.

%files prof -f %{name}-prof.files
%endif

#----------------------------------------------------------------------

%prep
%autosetup -p1 -n %{pkgver}

%build
%ghc_lib_build

%install
%ghc_lib_install

Spec file when building a git snapshot

%define commit 0123456789abcdef101112131415161718191a1b
%define commit_short %(echo %{commit} | head -c6)

Summary:	foo
Name:		foo
Version:	foo
Release:	0.git%{commit_short}.1
License:	foo
Group:		foo
Url:		foo
Source0:	%{name}-%{commit}.tar.gz

%description
foo.

%files
...

#------------------------------------------------------------------

%prep
%autosetup -p1 -n %{name}-%{commit}

%build
...

%install
...

Source example for Github, Gogs, Gitea, Forgejo:

Source0:	https://github.com/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz

Source example for Gitlab, MosHub:

Source0:	https://gitlab.com/owner/repo/-/archive/%{commit}/%{name}-%{commit}.tar.gz

Source example for GitWeb:

Source0:	https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/%{commit}.tar.gz

Source example for GitVerse:

Source0:	https://gitverse.ru/api/repos/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz

To update such a package:

  1. Change Version to the latest tagged release
  2. Change commit hash in the spec
  3. Change the first number of the Release tag to "0" if the Version was incrimented, otherwise incriment that first number
  4. Change the last number in the Release to 1
  5. Run:
rm -fv .abf.yml
spectool -g *.spec
abf put

If upstream has no tagged versions at all, use "Version: 0", example: https://abf.io/import/just-backup-btrfs/blob/225cac97e9/just-backup-btrfs.spec

Spec file for a golang

# use bundled golang modules (from Source1)
%global gomodulesmode GO111MODULE=off
# see Source0
%global goipath github.com/foo/bar

Summary:	foo
Name:		foo
Version:	1.0
Release:	1
License:	MIT
Group:		Development/Other
Url:		http://github.com/foo/bar
Source0:	http://github.com/foo/bar/archive/refs/tags/v%{version}.tar.gz?/%{name}-%{version}.tar.gz
# unpack source and run 'go mod vendor' in source dir, tar.gz 'vendor' dir
Source1:	vendor.tar.gz
BuildRequires:	golang
%gometa

%description
%{summary}.

%files
%{_bindir}/%{name}

#----------------------------------------------------------------------------

%prep
%goprep

# prepare vendored modules
tar -xf %{SOURCE1}
cp -r ./vendor/* _build/src/

%build
%gobuild -o %{gobuilddir}/bin/%{name} %{goipath}/cmd/%{name}

%install
install -d %{buildroot}%{_bindir}
install -Dm0755 %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir}

See also: https://abf.io/import/rclone, https://abf.io/import/glab, https://abf.io/import/ha_cluster_exporter