<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.rosa.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Survolog</id>
	<title>ROSA Wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.rosa.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Survolog"/>
	<link rel="alternate" type="text/html" href="http://wiki.rosa.ru/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Survolog"/>
	<updated>2026-05-08T20:09:38Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://wiki.rosa.ru/index.php?title=Template_Spec_Files&amp;diff=286</id>
		<title>Template Spec Files</title>
		<link rel="alternate" type="text/html" href="http://wiki.rosa.ru/index.php?title=Template_Spec_Files&amp;diff=286"/>
		<updated>2025-06-06T21:22:35Z</updated>

		<summary type="html">&lt;p&gt;Survolog: Правка развала в страничке.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spec file for a program built using GNU Autotools =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using CMake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program written in Qt4 and built using cmake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
BuildRequires:  qt4-devel&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake_qt4&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program written in Qt5 and built using cmake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
BuildRequires:  qt5-devel&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake_qt5&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Meson =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	meson&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%meson&lt;br /&gt;
%meson_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%meson_install&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Perl/Makefile.PL =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define upstream_name foo&lt;br /&gt;
%define upstream_version 1.0&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:           perl-%{upstream_name}&lt;br /&gt;
Version:        %perl_convert_version %{upstream_version}&lt;br /&gt;
Release:        1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{upstream_name}-%{upstream_version}.tar.gz&lt;br /&gt;
BuildRequires:  perl-devel&lt;br /&gt;
BuildRequires:  perl(ExtUtils::MakeMaker)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{upstream_name}-%{upstream_version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
perl Makefile.PL INSTALLDIRS=vendor&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
make test&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Perl/Build.PL =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define upstream_name foo&lt;br /&gt;
%define upstream_version 1.0&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:           perl-%{upstream_name}&lt;br /&gt;
Version:        %perl_convert_version %{upstream_version}&lt;br /&gt;
Release:        1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{upstream_name}-%{upstream_version}.tar.gz&lt;br /&gt;
BuildRequires:  perl-devel&lt;br /&gt;
BuildRequires:  perl(Module::Build)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{upstream_name}-%{upstream_version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
perl Build.PL installdirs=vendor&lt;br /&gt;
./Build CFLAGS=&amp;quot;%{optflags}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
./Build test&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
./Build install destdir=%{buildroot}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Python module =&lt;br /&gt;
== Spec file to build python3 module with setup.py ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	GPL&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name}&lt;br /&gt;
# for files in /usr/lib64/python3.8/site-packages&lt;br /&gt;
%{python3_sitearch}/*&lt;br /&gt;
%{python3_sitearch}/%{pypi_name}-%{version}-py*.egg-info&lt;br /&gt;
&lt;br /&gt;
# for files in /usr/lib/python3.8/site-packages uncomment next lines&lt;br /&gt;
#%%{python3_sitelib}/*&lt;br /&gt;
#%%{python3_sitelib}/%{pypi_name}-%{version}-py*.egg-info&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py3_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py3_install&lt;br /&gt;
# uncomment for fix rpmlint error &amp;quot;set python3 shebang&amp;quot;&lt;br /&gt;
#%%py3_shebang_fix&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
%pytest&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python3 module with pyproject.toml ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	GPL&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
#if source available on pypi.org&lt;br /&gt;
Source0:	%pypi_source&lt;br /&gt;
# if source not available on pypi.org uncomment line below and comment Source0 upper&lt;br /&gt;
#Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
BuildRequires:	pyproject-rpm-macros&lt;br /&gt;
# for %%check if needed&lt;br /&gt;
BuildRequires:	python3egg(pytest)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name} -f %{pyproject_files}&lt;br /&gt;
%license LICENSE&lt;br /&gt;
%doc README*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{pypi_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
# for autoinstall BuildRequires&lt;br /&gt;
%generate_buildrequires&lt;br /&gt;
%pyproject_buildrequires -r&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%pyproject_wheel&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%pyproject_install&lt;br /&gt;
%pyproject_save_files %{pypi_name}&lt;br /&gt;
&lt;br /&gt;
# uncomment for fix rpmlint error &amp;quot;set python3 shebang&amp;quot;&lt;br /&gt;
#%%py3_shebang_fix&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
%pytest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python2 module (ROSA &amp;lt;= 2016.1) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define module	mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{module}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{module}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
Example Python module.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%doc *.txt&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
%apply_patches&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python2 module (ROSA &amp;gt;= 2021.1) ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python2-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python2-%{pypi_name}&lt;br /&gt;
%{_description} &lt;br /&gt;
&lt;br /&gt;
%files -n python2-%{pypi_name}&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file for both python2 and python3 modules, ROSA &amp;gt;= 2021.1 ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python2-%{pypi_name}&lt;br /&gt;
Summary:	Example python2 module&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
%py2_migration_meta python-%{pypi_name}&lt;br /&gt;
&lt;br /&gt;
%description -n python2-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python2-%{pypi_name}&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	Example python3 module&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name}&lt;br /&gt;
%{python3_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
%py3_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
%py3_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [https://abf.io/import/rpm-openmandriva-setup/blob/rosa2019.1/0513-python2-macro-and-py2_migration_meta.patch %py2_migration_info]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Library =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define major 1&lt;br /&gt;
%define libname %mklibname %{name} %{major}&lt;br /&gt;
%define devname %mklibname %{name} -d&lt;br /&gt;
# Usually we don&#039;t need to build static library&lt;br /&gt;
# But let&#039;s add it to spec template anyway&lt;br /&gt;
%define sdevname %mklibname %{name} -d -s&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{libname}&lt;br /&gt;
Summary:	%{name} shared library&lt;br /&gt;
Group:		System/Libraries&lt;br /&gt;
&lt;br /&gt;
%description -n %{libname}&lt;br /&gt;
%{name} shared library.&lt;br /&gt;
&lt;br /&gt;
%files -n %{libname}&lt;br /&gt;
%{_libdir}/lib%{name}.so.%{major}*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{devname}&lt;br /&gt;
Summary:	%{name} development files&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Requires:	%{libname} = %{EVRD}&lt;br /&gt;
Provides:	%{name}-devel = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description -n %{devname}&lt;br /&gt;
%{name} development files.&lt;br /&gt;
&lt;br /&gt;
%files -n %{devname}&lt;br /&gt;
%{_includedir}/*.h&lt;br /&gt;
%{_libdir}/*.so&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{sdevname}&lt;br /&gt;
Summary:	%{name} development files (static library)&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Requires:	%{devname} = %{EVRD}&lt;br /&gt;
Provides:	%{name}-static-devel = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description -n %{sdevname}&lt;br /&gt;
%{name} development files (static library).&lt;br /&gt;
&lt;br /&gt;
%files -n %{sdevname}&lt;br /&gt;
%{_libdir}/*.a&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [[Libraries policy]]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Node.js module =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define oname foo&lt;br /&gt;
&lt;br /&gt;
Summary:        foo&lt;br /&gt;
Name:           nodejs-%{oname}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
License:        foo&lt;br /&gt;
Group:          Development/Other&lt;br /&gt;
Url:            foo&lt;br /&gt;
Source0:        %{oname}-%{version}.tgz&lt;br /&gt;
BuildRequires:  nodejs-packaging&lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%doc LICENSE&lt;br /&gt;
%{nodejs_sitelib}/%{oname}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n package&lt;br /&gt;
rm -rf node_modules&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
mkdir -p %{buildroot}/%{nodejs_sitelib}/%{oname}&lt;br /&gt;
cp -r package.json index.js %{buildroot}/%{nodejs_sitelib}/%{oname}&lt;br /&gt;
%nodejs_symlink_deps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Ruby Gem (ROSA &amp;gt;= 2021.1) =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define gem_name  foo&lt;br /&gt;
&lt;br /&gt;
Summary:        Foo&lt;br /&gt;
Name:           rubygem-%{gem_name}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
Group:          Development/Ruby&lt;br /&gt;
License:        GPLv2+ or Ruby&lt;br /&gt;
URL:            foo&lt;br /&gt;
Source0:        %{gem_name}-%{version}.gem&lt;br /&gt;
BuildRequires:  rubygems-devel &lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%dir %{gem_instdir}&lt;br /&gt;
%license %{gem_instdir}/LICENSE.txt&lt;br /&gt;
%{gem_libdir}&lt;br /&gt;
%exclude %{gem_cache}&lt;br /&gt;
%{gem_spec}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package        doc&lt;br /&gt;
Summary:        Documentation for %{name}&lt;br /&gt;
Group:          Books/Computer books&lt;br /&gt;
Requires:       %{name} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description    doc&lt;br /&gt;
Documents, RDoc &amp;amp; RI documentation for %{name}.&lt;br /&gt;
&lt;br /&gt;
%files doc&lt;br /&gt;
%doc %{gem_docdir}&lt;br /&gt;
%doc %{gem_instdir}/CHANGELOG.md&lt;br /&gt;
%{gem_instdir}/Gemfile&lt;br /&gt;
%doc %{gem_instdir}/README.md&lt;br /&gt;
%doc %{gem_instdir}/SECURITY.md&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{gem_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gem_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%gem_install&lt;br /&gt;
mkdir -p %{buildroot}%{gem_dir}&lt;br /&gt;
cp -a .%{gem_dir}/* \&lt;br /&gt;
        %{buildroot}%{gem_dir}/&lt;br /&gt;
cp ../%{gem_name}-%{version}.gemspec %{buildroot}%{gem_dir}/specifications&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Ruby Gem (ROSA &amp;lt;= 2016.1) =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define rbname  foo&lt;br /&gt;
&lt;br /&gt;
Summary:        Foo&lt;br /&gt;
Name:           rubygem-%{rbname}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
Group:          Development/Ruby&lt;br /&gt;
License:        GPLv2+ or Ruby&lt;br /&gt;
URL:            foo&lt;br /&gt;
Source0:        %{rbname}-%{version}.gem&lt;br /&gt;
BuildRequires:  rubygems &lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%{ruby_gemdir}/gems/%{rbname}-%{version}&lt;br /&gt;
%{ruby_gemdir}/specifications/%{rbname}-%{version}.gemspec&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package        doc&lt;br /&gt;
Summary:        Documentation for %{name}&lt;br /&gt;
Group:          Books/Computer books&lt;br /&gt;
Requires:       %{name} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description    doc&lt;br /&gt;
Documents, RDoc &amp;amp; RI documentation for %{name}.&lt;br /&gt;
&lt;br /&gt;
%files doc&lt;br /&gt;
%{ruby_gemdir}/doc/%{rbname}-%{version}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
%apply_patches&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gem_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%gem_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Haskell Library =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define _disable_ld_no_undefined 1&lt;br /&gt;
%global debug_package %{nil}&lt;br /&gt;
&lt;br /&gt;
%global pkg_name Foo&lt;br /&gt;
%global pkgver %{pkg_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		ghc-%{pkg_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	BSD&lt;br /&gt;
Group:		Development/Haskell&lt;br /&gt;
Url:            https://hackage.haskell.org/package/%{pkg_name}&lt;br /&gt;
Source0:        https://hackage.haskell.org/package/%{pkgver}/%{pkgver}.tar.gz&lt;br /&gt;
BuildRequires:  ghc-devel&lt;br /&gt;
BuildRequires:  ghc-prof&lt;br /&gt;
BuildRequires:  ghc-rpm-macros&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.files&lt;br /&gt;
%license LICENSE&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
%package devel&lt;br /&gt;
Summary:        %{summary}&lt;br /&gt;
Provides:       %{name}-static = %{EVRD}&lt;br /&gt;
Provides:       %{name}-static%{?_isa} = %{EVRD}&lt;br /&gt;
%if %{defined ghc_version}&lt;br /&gt;
Requires:       ghc = %{ghc_version}&lt;br /&gt;
%endif&lt;br /&gt;
Requires:       %{name}%{?_isa} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description devel&lt;br /&gt;
This package provides the Haskell %{pkg_name} library development files.&lt;br /&gt;
&lt;br /&gt;
%files devel -f %{name}-devel.files&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%if %{with haddock}&lt;br /&gt;
%package doc&lt;br /&gt;
Summary:        Haskell %{pkg_name} library documentation&lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description doc&lt;br /&gt;
This package provides the Haskell %{pkg_name} library documentation.&lt;br /&gt;
&lt;br /&gt;
%files doc -f %{name}-doc.files&lt;br /&gt;
%license LICENSE&lt;br /&gt;
&lt;br /&gt;
%endif&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%if %{with ghc_prof}&lt;br /&gt;
%package prof&lt;br /&gt;
Summary:        Haskell %{pkg_name} profiling library&lt;br /&gt;
Requires:       %{name}-devel%{?_isa} = %{EVRD}&lt;br /&gt;
Supplements:    (%{name}-devel and ghc-prof)&lt;br /&gt;
&lt;br /&gt;
%description prof&lt;br /&gt;
This package provides the Haskell %{pkg_name} profiling library.&lt;br /&gt;
&lt;br /&gt;
%files prof -f %{name}-prof.files&lt;br /&gt;
%endif&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{pkgver}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%ghc_lib_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%ghc_lib_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file when building a git snapshot =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define commit 0123456789abcdef101112131415161718191a1b&lt;br /&gt;
%define commit_short %(echo %{commit} | head -c6)&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	foo&lt;br /&gt;
Release:	0.git%{commit_short}.1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{commit}.tar.gz&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{name}-%{commit}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source example for Github, Gogs, Gitea, Forgejo:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://github.com/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for Gitlab, MosHub:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://gitlab.com/owner/repo/-/archive/%{commit}/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for GitWeb:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for GitVerse:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://gitverse.ru/api/repos/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
To update such a package:&lt;br /&gt;
# Change Version to the latest tagged release&lt;br /&gt;
# Change commit hash in the spec&lt;br /&gt;
# Change the first number of the Release tag to &amp;quot;0&amp;quot; if the Version was incrimented, otherwise incriment that first number&lt;br /&gt;
# Change the last number in the Release to 1&lt;br /&gt;
# Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm -fv .abf.yml&lt;br /&gt;
spectool -g *.spec&lt;br /&gt;
abf put&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If upstream has no tagged versions at all, use &amp;quot;Version: 0&amp;quot;, example: [https://web.archive.org/web/20240703053451/https://abf.io/import/just-backup-btrfs/blob/225cac97e9/just-backup-btrfs.spec]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a golang =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# use bundled golang modules (from Source1)&lt;br /&gt;
%global gomodulesmode GO111MODULE=off&lt;br /&gt;
# see Source0&lt;br /&gt;
%global goipath github.com/foo/bar&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	MIT&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Url:		http://github.com/foo/bar&lt;br /&gt;
Source0:	http://github.com/foo/bar/archive/refs/tags/v%{version}.tar.gz?/%{name}-%{version}.tar.gz&lt;br /&gt;
# unpack source and run &#039;go mod vendor&#039; in source dir, tar.gz &#039;vendor&#039; dir&lt;br /&gt;
Source1:	vendor.tar.gz&lt;br /&gt;
BuildRequires:	golang&lt;br /&gt;
%gometa&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%{_bindir}/%{name}&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%goprep&lt;br /&gt;
&lt;br /&gt;
# prepare vendored modules&lt;br /&gt;
tar -xf %{SOURCE2}&lt;br /&gt;
cp -r ./vendor/* _build/src/&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gobuild -o %{gobuilddir}/bin/%{name} %{goipath}/cmd/%{name}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
install -d %{buildroot}%{_bindir}&lt;br /&gt;
install -Dm0755 %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [https://abf.io/import/rclone]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Управление пакетами]]&lt;/div&gt;</summary>
		<author><name>Survolog</name></author>
	</entry>
	<entry>
		<id>http://wiki.rosa.ru/index.php?title=Template_Spec_Files&amp;diff=285</id>
		<title>Template Spec Files</title>
		<link rel="alternate" type="text/html" href="http://wiki.rosa.ru/index.php?title=Template_Spec_Files&amp;diff=285"/>
		<updated>2025-06-06T21:19:45Z</updated>

		<summary type="html">&lt;p&gt;Survolog: Правка развала в страничке.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spec file for a program built using GNU Autotools =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using CMake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program written in Qt4 and built using cmake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
BuildRequires:  qt4-devel&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake_qt4&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program written in Qt5 and built using cmake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
BuildRequires:  qt5-devel&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake_qt5&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Meson =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	meson&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%meson&lt;br /&gt;
%meson_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%meson_install&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Perl/Makefile.PL =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define upstream_name foo&lt;br /&gt;
%define upstream_version 1.0&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:           perl-%{upstream_name}&lt;br /&gt;
Version:        %perl_convert_version %{upstream_version}&lt;br /&gt;
Release:        1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{upstream_name}-%{upstream_version}.tar.gz&lt;br /&gt;
BuildRequires:  perl-devel&lt;br /&gt;
BuildRequires:  perl(ExtUtils::MakeMaker)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{upstream_name}-%{upstream_version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
perl Makefile.PL INSTALLDIRS=vendor&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
make test&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Perl/Build.PL =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define upstream_name foo&lt;br /&gt;
%define upstream_version 1.0&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:           perl-%{upstream_name}&lt;br /&gt;
Version:        %perl_convert_version %{upstream_version}&lt;br /&gt;
Release:        1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{upstream_name}-%{upstream_version}.tar.gz&lt;br /&gt;
BuildRequires:  perl-devel&lt;br /&gt;
BuildRequires:  perl(Module::Build)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{upstream_name}-%{upstream_version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
perl Build.PL installdirs=vendor&lt;br /&gt;
./Build CFLAGS=&amp;quot;%{optflags}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
./Build test&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
./Build install destdir=%{buildroot}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Python module =&lt;br /&gt;
== Spec file to build python3 module with setup.py ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	GPL&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name}&lt;br /&gt;
# for files in /usr/lib64/python3.8/site-packages&lt;br /&gt;
%{python3_sitearch}/*&lt;br /&gt;
%{python3_sitearch}/%{pypi_name}-%{version}-py*.egg-info&lt;br /&gt;
&lt;br /&gt;
# for files in /usr/lib/python3.8/site-packages uncomment next lines&lt;br /&gt;
#%%{python3_sitelib}/*&lt;br /&gt;
#%%{python3_sitelib}/%{pypi_name}-%{version}-py*.egg-info&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py3_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py3_install&lt;br /&gt;
# uncomment for fix rpmlint error &amp;quot;set python3 shebang&amp;quot;&lt;br /&gt;
#%%py3_shebang_fix&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
%pytest&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python3 module with pyproject.toml ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	GPL&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
#if source available on pypi.org&lt;br /&gt;
Source0:	%pypi_source&lt;br /&gt;
# if source not available on pypi.org uncomment line below and comment Source0 upper&lt;br /&gt;
#Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
BuildRequires:	pyproject-rpm-macros&lt;br /&gt;
# for %%check if needed&lt;br /&gt;
BuildRequires:	python3egg(pytest)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name} -f %{pyproject_files}&lt;br /&gt;
%license LICENSE&lt;br /&gt;
%doc README*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{pypi_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
# for autoinstall BuildRequires&lt;br /&gt;
%generate_buildrequires&lt;br /&gt;
%pyproject_buildrequires -r&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%pyproject_wheel&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%pyproject_install&lt;br /&gt;
%pyproject_save_files %{pypi_name}&lt;br /&gt;
&lt;br /&gt;
# uncomment for fix rpmlint error &amp;quot;set python3 shebang&amp;quot;&lt;br /&gt;
#%%py3_shebang_fix&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
%pytest&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python2 module (ROSA &amp;lt;= 2016.1) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define module	mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{module}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{module}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
Example Python module.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%doc *.txt&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
%apply_patches&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python2 module (ROSA &amp;gt;= 2021.1) ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python2-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python2-%{pypi_name}&lt;br /&gt;
%{_description} &lt;br /&gt;
&lt;br /&gt;
%files -n python2-%{pypi_name}&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file for both python2 and python3 modules, ROSA &amp;gt;= 2021.1 ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python2-%{pypi_name}&lt;br /&gt;
Summary:	Example python2 module&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
%py2_migration_meta python-%{pypi_name}&lt;br /&gt;
&lt;br /&gt;
%description -n python2-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python2-%{pypi_name}&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	Example python3 module&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name}&lt;br /&gt;
%{python3_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
%py3_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
%py3_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [https://abf.io/import/rpm-openmandriva-setup/blob/rosa2019.1/0513-python2-macro-and-py2_migration_meta.patch %py2_migration_info]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Library =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define major 1&lt;br /&gt;
%define libname %mklibname %{name} %{major}&lt;br /&gt;
%define devname %mklibname %{name} -d&lt;br /&gt;
# Usually we don&#039;t need to build static library&lt;br /&gt;
# But let&#039;s add it to spec template anyway&lt;br /&gt;
%define sdevname %mklibname %{name} -d -s&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{libname}&lt;br /&gt;
Summary:	%{name} shared library&lt;br /&gt;
Group:		System/Libraries&lt;br /&gt;
&lt;br /&gt;
%description -n %{libname}&lt;br /&gt;
%{name} shared library.&lt;br /&gt;
&lt;br /&gt;
%files -n %{libname}&lt;br /&gt;
%{_libdir}/lib%{name}.so.%{major}*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{devname}&lt;br /&gt;
Summary:	%{name} development files&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Requires:	%{libname} = %{EVRD}&lt;br /&gt;
Provides:	%{name}-devel = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description -n %{devname}&lt;br /&gt;
%{name} development files.&lt;br /&gt;
&lt;br /&gt;
%files -n %{devname}&lt;br /&gt;
%{_includedir}/*.h&lt;br /&gt;
%{_libdir}/*.so&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{sdevname}&lt;br /&gt;
Summary:	%{name} development files (static library)&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Requires:	%{devname} = %{EVRD}&lt;br /&gt;
Provides:	%{name}-static-devel = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description -n %{sdevname}&lt;br /&gt;
%{name} development files (static library).&lt;br /&gt;
&lt;br /&gt;
%files -n %{sdevname}&lt;br /&gt;
%{_libdir}/*.a&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [[Libraries policy]]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Node.js module =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define oname foo&lt;br /&gt;
&lt;br /&gt;
Summary:        foo&lt;br /&gt;
Name:           nodejs-%{oname}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
License:        foo&lt;br /&gt;
Group:          Development/Other&lt;br /&gt;
Url:            foo&lt;br /&gt;
Source0:        %{oname}-%{version}.tgz&lt;br /&gt;
BuildRequires:  nodejs-packaging&lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%doc LICENSE&lt;br /&gt;
%{nodejs_sitelib}/%{oname}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n package&lt;br /&gt;
rm -rf node_modules&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
mkdir -p %{buildroot}/%{nodejs_sitelib}/%{oname}&lt;br /&gt;
cp -r package.json index.js %{buildroot}/%{nodejs_sitelib}/%{oname}&lt;br /&gt;
%nodejs_symlink_deps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Ruby Gem (ROSA &amp;gt;= 2021.1) =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define gem_name  foo&lt;br /&gt;
&lt;br /&gt;
Summary:        Foo&lt;br /&gt;
Name:           rubygem-%{gem_name}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
Group:          Development/Ruby&lt;br /&gt;
License:        GPLv2+ or Ruby&lt;br /&gt;
URL:            foo&lt;br /&gt;
Source0:        %{gem_name}-%{version}.gem&lt;br /&gt;
BuildRequires:  rubygems-devel &lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%dir %{gem_instdir}&lt;br /&gt;
%license %{gem_instdir}/LICENSE.txt&lt;br /&gt;
%{gem_libdir}&lt;br /&gt;
%exclude %{gem_cache}&lt;br /&gt;
%{gem_spec}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package        doc&lt;br /&gt;
Summary:        Documentation for %{name}&lt;br /&gt;
Group:          Books/Computer books&lt;br /&gt;
Requires:       %{name} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description    doc&lt;br /&gt;
Documents, RDoc &amp;amp; RI documentation for %{name}.&lt;br /&gt;
&lt;br /&gt;
%files doc&lt;br /&gt;
%doc %{gem_docdir}&lt;br /&gt;
%doc %{gem_instdir}/CHANGELOG.md&lt;br /&gt;
%{gem_instdir}/Gemfile&lt;br /&gt;
%doc %{gem_instdir}/README.md&lt;br /&gt;
%doc %{gem_instdir}/SECURITY.md&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{gem_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gem_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%gem_install&lt;br /&gt;
mkdir -p %{buildroot}%{gem_dir}&lt;br /&gt;
cp -a .%{gem_dir}/* \&lt;br /&gt;
        %{buildroot}%{gem_dir}/&lt;br /&gt;
cp ../%{gem_name}-%{version}.gemspec %{buildroot}%{gem_dir}/specifications&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Ruby Gem (ROSA &amp;lt;= 2016.1) =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define rbname  foo&lt;br /&gt;
&lt;br /&gt;
Summary:        Foo&lt;br /&gt;
Name:           rubygem-%{rbname}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
Group:          Development/Ruby&lt;br /&gt;
License:        GPLv2+ or Ruby&lt;br /&gt;
URL:            foo&lt;br /&gt;
Source0:        %{rbname}-%{version}.gem&lt;br /&gt;
BuildRequires:  rubygems &lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%{ruby_gemdir}/gems/%{rbname}-%{version}&lt;br /&gt;
%{ruby_gemdir}/specifications/%{rbname}-%{version}.gemspec&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package        doc&lt;br /&gt;
Summary:        Documentation for %{name}&lt;br /&gt;
Group:          Books/Computer books&lt;br /&gt;
Requires:       %{name} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description    doc&lt;br /&gt;
Documents, RDoc &amp;amp; RI documentation for %{name}.&lt;br /&gt;
&lt;br /&gt;
%files doc&lt;br /&gt;
%{ruby_gemdir}/doc/%{rbname}-%{version}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
%apply_patches&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gem_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%gem_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Haskell Library =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define _disable_ld_no_undefined 1&lt;br /&gt;
%global debug_package %{nil}&lt;br /&gt;
&lt;br /&gt;
%global pkg_name Foo&lt;br /&gt;
%global pkgver %{pkg_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		ghc-%{pkg_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	BSD&lt;br /&gt;
Group:		Development/Haskell&lt;br /&gt;
Url:            https://hackage.haskell.org/package/%{pkg_name}&lt;br /&gt;
Source0:        https://hackage.haskell.org/package/%{pkgver}/%{pkgver}.tar.gz&lt;br /&gt;
BuildRequires:  ghc-devel&lt;br /&gt;
BuildRequires:  ghc-prof&lt;br /&gt;
BuildRequires:  ghc-rpm-macros&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.files&lt;br /&gt;
%license LICENSE&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
%package devel&lt;br /&gt;
Summary:        %{summary}&lt;br /&gt;
Provides:       %{name}-static = %{EVRD}&lt;br /&gt;
Provides:       %{name}-static%{?_isa} = %{EVRD}&lt;br /&gt;
%if %{defined ghc_version}&lt;br /&gt;
Requires:       ghc = %{ghc_version}&lt;br /&gt;
%endif&lt;br /&gt;
Requires:       %{name}%{?_isa} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description devel&lt;br /&gt;
This package provides the Haskell %{pkg_name} library development files.&lt;br /&gt;
&lt;br /&gt;
%files devel -f %{name}-devel.files&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%if %{with haddock}&lt;br /&gt;
%package doc&lt;br /&gt;
Summary:        Haskell %{pkg_name} library documentation&lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description doc&lt;br /&gt;
This package provides the Haskell %{pkg_name} library documentation.&lt;br /&gt;
&lt;br /&gt;
%files doc -f %{name}-doc.files&lt;br /&gt;
%license LICENSE&lt;br /&gt;
&lt;br /&gt;
%endif&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%if %{with ghc_prof}&lt;br /&gt;
%package prof&lt;br /&gt;
Summary:        Haskell %{pkg_name} profiling library&lt;br /&gt;
Requires:       %{name}-devel%{?_isa} = %{EVRD}&lt;br /&gt;
Supplements:    (%{name}-devel and ghc-prof)&lt;br /&gt;
&lt;br /&gt;
%description prof&lt;br /&gt;
This package provides the Haskell %{pkg_name} profiling library.&lt;br /&gt;
&lt;br /&gt;
%files prof -f %{name}-prof.files&lt;br /&gt;
%endif&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{pkgver}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%ghc_lib_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%ghc_lib_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file when building a git snapshot =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define commit 0123456789abcdef101112131415161718191a1b&lt;br /&gt;
%define commit_short %(echo %{commit} | head -c6)&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	foo&lt;br /&gt;
Release:	0.git%{commit_short}.1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{commit}.tar.gz&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{name}-%{commit}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source example for Github, Gogs, Gitea, Forgejo:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://github.com/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for Gitlab, MosHub:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://gitlab.com/owner/repo/-/archive/%{commit}/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for GitWeb:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for GitVerse:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://gitverse.ru/api/repos/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
To update such a package:&lt;br /&gt;
# Change Version to the latest tagged release&lt;br /&gt;
# Change commit hash in the spec&lt;br /&gt;
# Change the first number of the Release tag to &amp;quot;0&amp;quot; if the Version was incrimented, otherwise incriment that first number&lt;br /&gt;
# Change the last number in the Release to 1&lt;br /&gt;
# Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm -fv .abf.yml&lt;br /&gt;
spectool -g *.spec&lt;br /&gt;
abf put&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If upstream has no tagged versions at all, use &amp;quot;Version: 0&amp;quot;, example: [https://web.archive.org/web/20240703053451/https://abf.io/import/just-backup-btrfs/blob/225cac97e9/just-backup-btrfs.spec]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a golang =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# use bundled golang modules (from Source1)&lt;br /&gt;
%global gomodulesmode GO111MODULE=off&lt;br /&gt;
# see Source0&lt;br /&gt;
%global goipath github.com/foo/bar&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	MIT&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Url:		http://github.com/foo/bar&lt;br /&gt;
Source0:	http://github.com/foo/bar/archive/refs/tags/v%{version}.tar.gz?/%{name}-%{version}.tar.gz&lt;br /&gt;
# unpack source and run &#039;go mod vendor&#039; in source dir, tar.gz &#039;vendor&#039; dir&lt;br /&gt;
Source1:	vendor.tar.gz&lt;br /&gt;
BuildRequires:	golang&lt;br /&gt;
%gometa&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%{_bindir}/%{name}&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%goprep&lt;br /&gt;
&lt;br /&gt;
# prepare vendored modules&lt;br /&gt;
tar -xf %{SOURCE2}&lt;br /&gt;
cp -r ./vendor/* _build/src/&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gobuild -o %{gobuilddir}/bin/%{name} %{goipath}/cmd/%{name}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
install -d %{buildroot}%{_bindir}&lt;br /&gt;
install -Dm0755 %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [https://abf.io/import/rclone]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Управление пакетами]]&lt;/div&gt;</summary>
		<author><name>Survolog</name></author>
	</entry>
	<entry>
		<id>http://wiki.rosa.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B0_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA&amp;diff=213</id>
		<title>Политика оформления библиотек</title>
		<link rel="alternate" type="text/html" href="http://wiki.rosa.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B0_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA&amp;diff=213"/>
		<updated>2025-04-09T13:36:17Z</updated>

		<summary type="html">&lt;p&gt;Survolog: Создание для восстановления из предыдущей wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Правила составления имён ==&lt;br /&gt;
Библиотеки в &amp;lt;code&amp;gt;/usr/lib&amp;lt;/code&amp;gt; и в &amp;lt;code&amp;gt;file|/lib&amp;lt;/code&amp;gt; &#039;&#039;&#039;должны быть упакованы отдельно&#039;&#039;&#039; в специальный библиотечный пакет с именем, содержащим название основной библиотеки и major (или soname, см. далее). Эти пакеты &amp;lt;b&amp;gt;не должны содержать никаких бинарных файлов&amp;lt;/b&amp;gt;, которые должны быть в другом пакете. Пакеты могут содержать другие файлы (например, документацию или лицензию) при условии, что эти файлы установлены по адресу, специфичному для пакета (например, &amp;lt;code&amp;gt;libfoo2&amp;lt;/code&amp;gt; может установить что-то в &amp;lt;code&amp;gt;/usr/share/doc/libfoo2/&amp;lt;/code&amp;gt;). Цель состоит в том, чтобы установить &amp;lt;code&amp;gt;libfoo1&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;libfoo2&amp;lt;/code&amp;gt; в одну систему.&lt;br /&gt;
&lt;br /&gt;
Прежде всего фундаментально, что исходные rpm сохраняют одно имя без какого-либо major номера, так что git репозиторий содержит только одну ветку каждого пакета.&lt;br /&gt;
&lt;br /&gt;
Когда дистрибутив должен иметь две версии одной библиотеки одновременно (например, qt1 и qt2), то исходные rpm будут разделены, чтобы мы могли включить обе версии в дистрибутив в виде двух разных, независимо поддерживаемых пакетов.&lt;br /&gt;
&lt;br /&gt;
Вот общий пример: следующее происходит, когда библиотека идёт с бинарными или конфигурационными файлами или какими-либо ещё, которые не вписываются ни в основной пакет библиотеки (где должны быть только библиотеки), ни в devel пакет (где должны быть заголовочные и devel библиотеки, такие как &amp;lt;i&amp;gt;.so&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;.a&amp;lt;/i&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* Исходный пакет:&lt;br /&gt;
** foo-2.3.4-4-rosa2012.src.rpm&lt;br /&gt;
&lt;br /&gt;
* BБинарные пакеты:&lt;br /&gt;
** foo-2.3.4-4-rosa2012.arch.rpm &lt;br /&gt;
** libfoo2-2.3.4-4-rosa2012.arch.rpm&lt;br /&gt;
** libfoo-devel-2.3.4-4-rosa2012.arch.rpm&lt;br /&gt;
&lt;br /&gt;
Если foo-2.3.4-4-rosa2012.src.rpm создаёт несколько библиотек, то эти библиотеки должны быть упакованы в отдельные файлы: libfoo2-2.3.4-4-rosa2012.arch.rpm, libbar2-2.3.4-4-rosa2012.arch.rpm и т.д. Однако devel файлы могут быть собраны в один пакет. Имя такого пакета может начинаться с lib, однако для 32-битных и 64-битных пакетов желательно иметь разные имена (например, foo-devel и foo64-devel).&lt;br /&gt;
&#039;&#039;&#039;Обоснование:&#039;&#039;&#039; -devel пакеты не устанавливаются пользователем, поэтому разделение таких пакетов не влияет на пользователя, но может усложнить жизнь разработчику. Отдельные имена для 32-битных и 64-битных -devel пакетов позволяют устанавливать пакеты обеих архитектур в одной системе.&lt;br /&gt;
&lt;br /&gt;
Если апстримное имя само по себе начинается с lib (например, &amp;lt;code&amp;gt;libxml2&amp;lt;/code&amp;gt;), то пакет с бинарными файлами можно назвать &amp;lt;code&amp;gt;libfoo-utils&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;libfoo-tools&amp;lt;/code&amp;gt; или как-то похоже, чтобы можно было отличить его от пакета библиотеки.&lt;br /&gt;
&lt;br /&gt;
==== Названия для x86_64 ====&lt;br /&gt;
*  Бинарные пакеты:&lt;br /&gt;
** foo-2.3.4-4-rosa2012.x86_64.rpm &lt;br /&gt;
** lib64foo2-2.3.4-4-rosa2012.x86_64.rpm&lt;br /&gt;
** lib64foo-devel-2.3.4-4-rosa2012.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
Чтобы было проще, используйте &amp;lt;code&amp;gt;%mklibname&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
==== %mklibname ====&lt;br /&gt;
Макрос %mklibname используется для создания имён библиотечных пакетов:&lt;br /&gt;
* %mklibname [-d [-s]] name [[api] major]&lt;br /&gt;
** -d - создание имени для devel пакета&lt;br /&gt;
** -s - создание имени для static пакета (использовать вместе с -d)&lt;br /&gt;
** name - имя библиотеки (обратите внимание, что если именем библиотеки является libfoo, то надо вводить foo, а не libfoo)&lt;br /&gt;
** major - основное число, которое должно быть добавлено в имя (не использовать вместе с -d, кроме особых случаев, упомянутых отдельно ниже)&lt;br /&gt;
** api - если библиотека имеет, например, SONAME libfoo-1.2.so.4, то api будет 1.2, а major - 4. Результатом будет libfoo1.2_4&lt;br /&gt;
&lt;br /&gt;
Примеры использования:&lt;br /&gt;
* %mklibname foo 5 =&amp;gt; libfoo5&lt;br /&gt;
* %mklibname -d foo =&amp;gt; libfoo-devel&lt;br /&gt;
* %mklibname -d -s foo =&amp;gt; libfoo-static-devel&lt;br /&gt;
&lt;br /&gt;
=== Файлы *.la ===&lt;br /&gt;
Современные libtool отлично работают без *.la файлов, поэтому эти файлы по-умолчанию отбрасываются spec-helper во время сборки. В настоящее время известно несколько исключений, которые включены в код spec-helper. Если вы считаете, что нашли ещё одно исключение, свободно обращайтесь к мейнтейнерам rpmbuild.&lt;br /&gt;
&lt;br /&gt;
=== Особые случаи ===&lt;br /&gt;
Мы описали основную политику для пакетов библиотек, однако, могут произойти некоторые особые случаи, которые должны быть рассмотрены вдумчиво:&lt;br /&gt;
&lt;br /&gt;
* Не забывайте всегда проверять &amp;lt;i&amp;gt;soname&amp;lt;/i&amp;gt; библиотек &amp;lt;code&amp;gt;objdump -x libfoo.so.1 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; grep SONAME&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;patchelf --print-soname libfoo.so.1&amp;lt;/code&amp;gt;, потому что некоторые soname содержат номер версии библиотеки. Например, &amp;lt;code&amp;gt;libfoo-1.2.so.4&amp;lt;/code&amp;gt;. В этом случае пакет должен быть назван &amp;lt;code&amp;gt;libfoo1.2_4-1.2.4-rosa2012&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Пакеты, оканчивающиеся номером, должны быть снабжены &amp;quot;_&amp;quot; перед major. Например, &amp;lt;code&amp;gt;libfoo23_4-1.2-rosa2012&amp;lt;/code&amp;gt; (в этом случае soname будет &amp;lt;code&amp;gt;libfoo23.so.4&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Нет необходимости помещать каждую библиотеку в отдельный пакет: если пакет содержит несколько библиотек, имя можно взять из основной библиотеки пакета. Если есть проблемы с хранением библиотек в одном пакете (например, их major может отличаться), пакет должен быть разделён.&lt;br /&gt;
** При разбиении библиотек, которые ранее были в одном пакете, вам может потребоваться добавить Obsoletes/Conflicts в новые пакеты, чтобы попросить dnf поместить их в одну транзакцию.&lt;br /&gt;
* Если в дистрибутиве поддерживаются несколько версий пакета с разными major, или будущий релиз получится несовместимым по major (перестройка соответствующих pkgs не является достаточной, а требуемые изменения слишком велики) с текущей версией (например, QT3/QT4/QT5), то имя devel пакета должно содержать major. В предыдущем же случае devel субпакет новой версии обычно не содержит major, а только старые версии.&lt;br /&gt;
* Некоторые приложения (например, KDE ones) содержат динамически загружаемые модули, которые не являются библиотеками. Обычно эти модули помещают в основной субпакет приложения. Но иногда лучше включать такие модули в библиотечный пакет, если их установка обычно требуется при использовании библиотеки (чтобы каждое приложение, использующее библиотеку, не требовало добавить руководство по модулям). В целом, решения должны приниматься индивидуально. Однако, если модули включены в библиотечный пакет, они &#039;&#039;&#039;must&#039;&#039;&#039; попасть в каталог с версией (например, &amp;lt;code&amp;gt;/usr/lib/foo-2/module.so&amp;lt;/code&amp;gt; для пакета &amp;lt;code&amp;gt;libfoo2&amp;lt;/code&amp;gt;), чтобы установка нескольких версий библиотеки была возможной.&lt;br /&gt;
&lt;br /&gt;
=== Обновление пакета, который следовал предыдущим политикам оформления библиотек ===&lt;br /&gt;
Измените имя devel пакета с &amp;lt;code&amp;gt;%libname-devel&amp;lt;/code&amp;gt; на &amp;quot;&amp;lt;code&amp;gt;%mklibname %name -d&amp;lt;/code&amp;gt;&amp;quot; (без &amp;lt;code&amp;gt;%major&amp;lt;/code&amp;gt;, хотя обычно с &amp;lt;code&amp;gt;%api&amp;lt;/code&amp;gt; если есть), как показано выше, и добавьте &amp;lt;code&amp;gt;Obsoletes&amp;lt;/code&amp;gt; для предыдущего имени (&amp;quot;&amp;lt;code&amp;gt;%mklibname %name 2 -d&amp;lt;/code&amp;gt;&amp;quot; или &amp;quot;&amp;lt;code&amp;gt;%{_lib}%{name}2-devel&amp;lt;/code&amp;gt;&amp;quot;, где 2 - major заменяемого devel пакета).&lt;br /&gt;
Для static-devel пакетов надо произвести замену на &amp;lt;code&amp;gt;%mklibname %name -d -s&amp;lt;/code&amp;gt;. Если есть сомнения, свободно спрашивайте в списках рассылки ROSA.&lt;br /&gt;
&lt;br /&gt;
== Provides и Conflicts ==&lt;br /&gt;
Пакет -devel должен как минимум содержать &amp;lt;code&amp;gt;%name-devel &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; %version-%release&amp;lt;/code&amp;gt;. Если исходное имя тарбола отличается от %name, то вы также должны добавить &amp;lt;code&amp;gt;tarballname-devel &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; %version-%release&amp;lt;/code&amp;gt;, для совместимости с другими rpm-системами. Если в дистрибутиве содержится несколько версий библиотеки, только последняя должна называться %name-devel. Предыдущие версии должны иметь в названии, например, &amp;lt;code&amp;gt;%name%major-devel&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;%name%api-devel&amp;lt;/code&amp;gt;. Но мейнтейнер также может выбрать &amp;lt;code&amp;gt;%name%major-devel&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;%name%api-devel&amp;lt;/code&amp;gt; и для нового пакета, если следующий major по исходному коду окажется несовместимым (см. Особые случаи выше).&lt;br /&gt;
&lt;br /&gt;
Важно понимать, что включение &amp;lt;code&amp;gt;Provides&amp;lt;/code&amp;gt; без информации о версии делает невозможным последующее включение информации о версии. Например, &amp;quot;&amp;lt;code&amp;gt;Provides: foo-devel&amp;lt;/code&amp;gt;&amp;quot; - НЕ годится. Пожалуйста, используйте &amp;quot;&amp;lt;code&amp;gt;Provides: foo-devel &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; 1.2.4-3-rosa2012&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если в дистрибутиве содержится несколько версий библиотеки, и использовано исключение в виде добавления major в название lib -devel пакета, вам нужно добавить &amp;lt;code&amp;gt;Conflicts&amp;lt;/code&amp;gt; с другими devel пакетами, если их нельзя устанавливать параллельно. Это часто бывает, когда major изменился без переименования заголовочных файлов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Добавление предыдущей мажорной версии в дистрибутив ==&lt;br /&gt;
Если пакет обновлён до нового major, и будет замечено, что он не совместим с исходным кодом предыдущего релиза, и пользователи библиотеки не смогут быть прямо пропатчены для использования нового API, то старая библиотека должна поддерживаться параллельно с новой. Процесс создания на примере пакета foo, который обновляется до major 3:&lt;br /&gt;
# Копируется git foo непосредственно перед обновлением foo2 до major 3. Также изменяется &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; на foo2 и имя спек-файла на &amp;lt;code&amp;gt;foo2.spec&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Добавляется 2 (major) к имени devel пакета, например, libfoo2-devel вместо libfoo-devel. Это можно осуществить добавлением параметра &amp;lt;code&amp;gt;%major&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;%mklibname&amp;lt;/code&amp;gt; для &amp;lt;code&amp;gt;%devname&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Редактируются все Provides, чтобы в них был major. Например, &amp;lt;code&amp;gt;%name-devel&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;foo%major-devel&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Добавляется Conflicts: &amp;lt;code&amp;gt;foo-devel&amp;lt;/code&amp;gt;, если пакет конфликтует с новым devel пакетом.&lt;br /&gt;
&lt;br /&gt;
Внесения каких-либо изменений в .spec для новой версии не требуется.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
Вот пример спек-файла для рассматриваемого библиотечного пакета без бинарных и конфигурационных файлов. Обратите внимание, что спек-файл нерабочий. Это только пример для демонстрации разницы с обычным пакетом.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# api - это часть имени библиотеки перед .so&lt;br /&gt;
%define api 1.2&lt;br /&gt;
# major - это часть имени библиотеки после .so&lt;br /&gt;
%define major 1&lt;br /&gt;
%define libname %mklibname %{name} %{api} %{major}&lt;br /&gt;
%define devname %mklibname %{name} -d&lt;br /&gt;
&lt;br /&gt;
#(!) summary только для SRPM&lt;br /&gt;
Summary:        C++ interface for popular GUI library gtk+&lt;br /&gt;
Name:           gtkmm&lt;br /&gt;
Version:        1.2.4&lt;br /&gt;
Release:        1&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
#Полное и общее описание всего пакета. (Это будет только&lt;br /&gt;
#для SRPM)&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#Главный пакет (содержит только .so.[major].)&lt;br /&gt;
%package -n %{libname}&lt;br /&gt;
#(!) summary только для главной lib RPM&lt;br /&gt;
Summary:        Main library for gtkmm &lt;br /&gt;
Group:          System/Libraries&lt;br /&gt;
&lt;br /&gt;
%description -n %{libname}&lt;br /&gt;
This package contains the library needed to run programs dynamically&lt;br /&gt;
linked with gtkmm.&lt;br /&gt;
&lt;br /&gt;
%files -n %{libname}&lt;br /&gt;
# ..&lt;br /&gt;
# содержит major (и api, если есть) в списке файлов, чтобы захватить&lt;br /&gt;
# изменения при обновлении версии&lt;br /&gt;
%{_libdir}/lib-%{api}.so.%{major}*&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{devname}&lt;br /&gt;
Summary:        Headers for developing programs that will use Gtk--&lt;br /&gt;
Group:          Development/GNOME and GTK+&lt;br /&gt;
Requires:       %{libname} = %{EVRD}&lt;br /&gt;
#(!) Не обязательно, так как мы предпочитаем использовать зависимости типа pkgconfig.&lt;br /&gt;
# Но если в библиотеке нет файлов pkgconfig, это необходимо&lt;br /&gt;
Provides:       %{name}-devel = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description -n %{devname}&lt;br /&gt;
This package contains the headers that programmers will need to develop&lt;br /&gt;
applications which will use Gtk--, the C++ interface to the GTK+ (the Gimp&lt;br /&gt;
ToolKit) GUI library.&lt;br /&gt;
&lt;br /&gt;
%files -n %{devname}&lt;br /&gt;
# ..&lt;br /&gt;
%{_bindir}/gtkmm-config&lt;br /&gt;
%{_includedir}/*.h&lt;br /&gt;
%{_libdir}/*.so&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Политики сборки пакетов]]&lt;/div&gt;</summary>
		<author><name>Survolog</name></author>
	</entry>
	<entry>
		<id>http://wiki.rosa.ru/index.php?title=Template_Spec_Files&amp;diff=212</id>
		<title>Template Spec Files</title>
		<link rel="alternate" type="text/html" href="http://wiki.rosa.ru/index.php?title=Template_Spec_Files&amp;diff=212"/>
		<updated>2025-04-09T12:40:16Z</updated>

		<summary type="html">&lt;p&gt;Survolog: %make -&amp;gt; %make_build %makeinstall_std -&amp;gt; %make_install&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spec file for a program built using GNU Autotools =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using CMake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program written in Qt4 and built using cmake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
BuildRequires:  qt4-devel&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake_qt4&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program written in Qt5 and built using cmake =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:  cmake&lt;br /&gt;
BuildRequires:  qt5-devel&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%cmake_qt5&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install -C build&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Meson =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo	&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	meson&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%meson&lt;br /&gt;
%meson_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%meson_install&lt;br /&gt;
&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Perl/Makefile.PL =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define upstream_name foo&lt;br /&gt;
%define upstream_version 1.0&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:           perl-%{upstream_name}&lt;br /&gt;
Version:        %perl_convert_version %{upstream_version}&lt;br /&gt;
Release:        1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{upstream_name}-%{upstream_version}.tar.gz&lt;br /&gt;
BuildRequires:  perl-devel&lt;br /&gt;
BuildRequires:  perl(ExtUtils::MakeMaker)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{upstream_name}-%{upstream_version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
perl Makefile.PL INSTALLDIRS=vendor&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
make test&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a program built using Perl/Build.PL =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define upstream_name foo&lt;br /&gt;
%define upstream_version 1.0&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:           perl-%{upstream_name}&lt;br /&gt;
Version:        %perl_convert_version %{upstream_version}&lt;br /&gt;
Release:        1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{upstream_name}-%{upstream_version}.tar.gz&lt;br /&gt;
BuildRequires:  perl-devel&lt;br /&gt;
BuildRequires:  perl(Module::Build)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{upstream_name}-%{upstream_version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
perl Build.PL installdirs=vendor&lt;br /&gt;
./Build CFLAGS=&amp;quot;%{optflags}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
./Build test&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
./Build install destdir=%{buildroot}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Python module =&lt;br /&gt;
== Spec file to build python3 module with setup.py ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	GPL&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name}&lt;br /&gt;
# for files in /usr/lib64/python3.8/site-packages&lt;br /&gt;
%{python3_sitearch}/*&lt;br /&gt;
%{python3_sitearch}/%{pypi_name}-%{version}-py*.egg-info&lt;br /&gt;
&lt;br /&gt;
# for files in /usr/lib/python3.8/site-packages uncomment next lines&lt;br /&gt;
#%%{python3_sitelib}/*&lt;br /&gt;
#%%{python3_sitelib}/%{pypi_name}-%{version}-py*.egg-info&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py3_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py3_install&lt;br /&gt;
# uncomment for fix rpmlint error &amp;quot;set python3 shebang&amp;quot;&lt;br /&gt;
#%%py3_shebang_fix&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
%pytest&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python3 module with pyproject.toml ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	GPL&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
#if source available on pypi.org&lt;br /&gt;
Source0:	%pypi_source&lt;br /&gt;
# if source not available on pypi.org uncomment line below and comment Source0 upper&lt;br /&gt;
#Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
BuildRequires:	pyproject-rpm-macros&lt;br /&gt;
# for %%check if needed&lt;br /&gt;
BuildRequires:	python3egg(pytest)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name} -f %{pyproject_files}&lt;br /&gt;
%license LICENSE&lt;br /&gt;
%doc README*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{pypi_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
# for autoinstall BuildRequires&lt;br /&gt;
%generate_buildrequires&lt;br /&gt;
%pyproject_buildrequires -r&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%pyproject_wheel&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%pyproject_install&lt;br /&gt;
%pyproject_save_files %{pypi_name}&lt;br /&gt;
&lt;br /&gt;
# uncomment for fix rpmlint error &amp;quot;set python3 shebang&amp;quot;&lt;br /&gt;
#%%py3_shebang_fix&lt;br /&gt;
&lt;br /&gt;
%check&lt;br /&gt;
%pytest&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python2 module (ROSA &amp;lt;= 2016.1) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define module	mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{module}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{module}-%{version}.tar.gz&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
Example Python module.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%doc *.txt&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
%apply_patches&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file to build python2 module (ROSA &amp;gt;= 2021.1) ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python2-%{pypi_name}&lt;br /&gt;
Summary:	%{summary}&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
&lt;br /&gt;
%description -n python2-%{pypi_name}&lt;br /&gt;
%{_description} &lt;br /&gt;
&lt;br /&gt;
%files -n python2-%{pypi_name}&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spec file for both python2 and python3 modules, ROSA &amp;gt;= 2021.1 ==&lt;br /&gt;
python-mymodule.spec:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define pypi_name mymodule&lt;br /&gt;
&lt;br /&gt;
Summary:	Example module&lt;br /&gt;
Name:		python-%{pypi_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	Apache License&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
Url:		http://mypage.org/mymodule&lt;br /&gt;
Source0:	%{pypi_name}-%{version}.tar.gz&lt;br /&gt;
#if source available on pypi.org uncoment next line, and remove line Source0: above&lt;br /&gt;
#Source0:	%pypi_source&lt;br /&gt;
&lt;br /&gt;
%define _description \&lt;br /&gt;
Text about \&lt;br /&gt;
example Python module&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python2-%{pypi_name}&lt;br /&gt;
Summary:	Example python2 module&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
BuildRequires:	pkgconfig(python2)&lt;br /&gt;
%py2_migration_meta python-%{pypi_name}&lt;br /&gt;
&lt;br /&gt;
%description -n python2-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python2-%{pypi_name}&lt;br /&gt;
%{python2_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n python3-%{pypi_name}&lt;br /&gt;
Summary:	Example python3 module&lt;br /&gt;
Group:		Development/Python&lt;br /&gt;
BuildRequires:	pkgconfig(python3)&lt;br /&gt;
&lt;br /&gt;
%description -n python3-%{pypi_name}&lt;br /&gt;
%{_description}&lt;br /&gt;
&lt;br /&gt;
%files -n python3-%{pypi_name}&lt;br /&gt;
%{python3_sitearch}/*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%py2_build&lt;br /&gt;
%py3_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%py2_install&lt;br /&gt;
%py3_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [https://abf.io/import/rpm-openmandriva-setup/blob/rosa2019.1/0513-python2-macro-and-py2_migration_meta.patch %py2_migration_info]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Library =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define major 1&lt;br /&gt;
%define libname %mklibname %{name} %{major}&lt;br /&gt;
%define devname %mklibname %{name} -d&lt;br /&gt;
# Usually we don&#039;t need to build static library&lt;br /&gt;
# But let&#039;s add it to spec template anyway&lt;br /&gt;
%define sdevname %mklibname %{name} -d -s&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{version}.tar.gz&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{libname}&lt;br /&gt;
Summary:	%{name} shared library&lt;br /&gt;
Group:		System/Libraries&lt;br /&gt;
&lt;br /&gt;
%description -n %{libname}&lt;br /&gt;
%{name} shared library.&lt;br /&gt;
&lt;br /&gt;
%files -n %{libname}&lt;br /&gt;
%{_libdir}/lib%{name}.so.%{major}*&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{devname}&lt;br /&gt;
Summary:	%{name} development files&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Requires:	%{libname} = %{EVRD}&lt;br /&gt;
Provides:	%{name}-devel = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description -n %{devname}&lt;br /&gt;
%{name} development files.&lt;br /&gt;
&lt;br /&gt;
%files -n %{devname}&lt;br /&gt;
%{_includedir}/*.h&lt;br /&gt;
%{_libdir}/*.so&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package -n %{sdevname}&lt;br /&gt;
Summary:	%{name} development files (static library)&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Requires:	%{devname} = %{EVRD}&lt;br /&gt;
Provides:	%{name}-static-devel = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description -n %{sdevname}&lt;br /&gt;
%{name} development files (static library).&lt;br /&gt;
&lt;br /&gt;
%files -n %{sdevname}&lt;br /&gt;
%{_libdir}/*.a&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure&lt;br /&gt;
%make_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%make_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [[Libraries policy]]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Node.js module =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define oname foo&lt;br /&gt;
&lt;br /&gt;
Summary:        foo&lt;br /&gt;
Name:           nodejs-%{oname}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
License:        foo&lt;br /&gt;
Group:          Development/Other&lt;br /&gt;
Url:            foo&lt;br /&gt;
Source0:        %{oname}-%{version}.tgz&lt;br /&gt;
BuildRequires:  nodejs-packaging&lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%doc LICENSE&lt;br /&gt;
%{nodejs_sitelib}/%{oname}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n package&lt;br /&gt;
rm -rf node_modules&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
mkdir -p %{buildroot}/%{nodejs_sitelib}/%{oname}&lt;br /&gt;
cp -r package.json index.js %{buildroot}/%{nodejs_sitelib}/%{oname}&lt;br /&gt;
%nodejs_symlink_deps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Ruby Gem (ROSA &amp;gt;= 2021.1) =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define gem_name  foo&lt;br /&gt;
&lt;br /&gt;
Summary:        Foo&lt;br /&gt;
Name:           rubygem-%{gem_name}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
Group:          Development/Ruby&lt;br /&gt;
License:        GPLv2+ or Ruby&lt;br /&gt;
URL:            foo&lt;br /&gt;
Source0:        %{gem_name}-%{version}.gem&lt;br /&gt;
BuildRequires:  rubygems-devel &lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%dir %{gem_instdir}&lt;br /&gt;
%license %{gem_instdir}/LICENSE.txt&lt;br /&gt;
%{gem_libdir}&lt;br /&gt;
%exclude %{gem_cache}&lt;br /&gt;
%{gem_spec}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package        doc&lt;br /&gt;
Summary:        Documentation for %{name}&lt;br /&gt;
Group:          Books/Computer books&lt;br /&gt;
Requires:       %{name} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description    doc&lt;br /&gt;
Documents, RDoc &amp;amp; RI documentation for %{name}.&lt;br /&gt;
&lt;br /&gt;
%files doc&lt;br /&gt;
%doc %{gem_docdir}&lt;br /&gt;
%doc %{gem_instdir}/CHANGELOG.md&lt;br /&gt;
%{gem_instdir}/Gemfile&lt;br /&gt;
%doc %{gem_instdir}/README.md&lt;br /&gt;
%doc %{gem_instdir}/SECURITY.md&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{gem_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gem_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%gem_install&lt;br /&gt;
mkdir -p %{buildroot}%{gem_dir}&lt;br /&gt;
cp -a .%{gem_dir}/* \&lt;br /&gt;
        %{buildroot}%{gem_dir}/&lt;br /&gt;
cp ../%{gem_name}-%{version}.gemspec %{buildroot}%{gem_dir}/specifications&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Ruby Gem (ROSA &amp;lt;= 2016.1) =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define rbname  foo&lt;br /&gt;
&lt;br /&gt;
Summary:        Foo&lt;br /&gt;
Name:           rubygem-%{rbname}&lt;br /&gt;
Version:        1.0&lt;br /&gt;
Release:        1&lt;br /&gt;
Group:          Development/Ruby&lt;br /&gt;
License:        GPLv2+ or Ruby&lt;br /&gt;
URL:            foo&lt;br /&gt;
Source0:        %{rbname}-%{version}.gem&lt;br /&gt;
BuildRequires:  rubygems &lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%{ruby_gemdir}/gems/%{rbname}-%{version}&lt;br /&gt;
%{ruby_gemdir}/specifications/%{rbname}-%{version}.gemspec&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%package        doc&lt;br /&gt;
Summary:        Documentation for %{name}&lt;br /&gt;
Group:          Books/Computer books&lt;br /&gt;
Requires:       %{name} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description    doc&lt;br /&gt;
Documents, RDoc &amp;amp; RI documentation for %{name}.&lt;br /&gt;
&lt;br /&gt;
%files doc&lt;br /&gt;
%{ruby_gemdir}/doc/%{rbname}-%{version}&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
%apply_patches&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gem_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%gem_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file for a Haskell Library =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define _disable_ld_no_undefined 1&lt;br /&gt;
%global debug_package %{nil}&lt;br /&gt;
&lt;br /&gt;
%global pkg_name Foo&lt;br /&gt;
%global pkgver %{pkg_name}-%{version}&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		ghc-%{pkg_name}&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	BSD&lt;br /&gt;
Group:		Development/Haskell&lt;br /&gt;
Url:            https://hackage.haskell.org/package/%{pkg_name}&lt;br /&gt;
Source0:        https://hackage.haskell.org/package/%{pkgver}/%{pkgver}.tar.gz&lt;br /&gt;
BuildRequires:  ghc-devel&lt;br /&gt;
BuildRequires:  ghc-prof&lt;br /&gt;
BuildRequires:  ghc-rpm-macros&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.files&lt;br /&gt;
%license LICENSE&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
%package devel&lt;br /&gt;
Summary:        %{summary}&lt;br /&gt;
Provides:       %{name}-static = %{EVRD}&lt;br /&gt;
Provides:       %{name}-static%{?_isa} = %{EVRD}&lt;br /&gt;
%if %{defined ghc_version}&lt;br /&gt;
Requires:       ghc = %{ghc_version}&lt;br /&gt;
%endif&lt;br /&gt;
Requires:       %{name}%{?_isa} = %{EVRD}&lt;br /&gt;
&lt;br /&gt;
%description devel&lt;br /&gt;
This package provides the Haskell %{pkg_name} library development files.&lt;br /&gt;
&lt;br /&gt;
%files devel -f %{name}-devel.files&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%if %{with haddock}&lt;br /&gt;
%package doc&lt;br /&gt;
Summary:        Haskell %{pkg_name} library documentation&lt;br /&gt;
BuildArch:      noarch&lt;br /&gt;
&lt;br /&gt;
%description doc&lt;br /&gt;
This package provides the Haskell %{pkg_name} library documentation.&lt;br /&gt;
&lt;br /&gt;
%files doc -f %{name}-doc.files&lt;br /&gt;
%license LICENSE&lt;br /&gt;
&lt;br /&gt;
%endif&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%if %{with ghc_prof}&lt;br /&gt;
%package prof&lt;br /&gt;
Summary:        Haskell %{pkg_name} profiling library&lt;br /&gt;
Requires:       %{name}-devel%{?_isa} = %{EVRD}&lt;br /&gt;
Supplements:    (%{name}-devel and ghc-prof)&lt;br /&gt;
&lt;br /&gt;
%description prof&lt;br /&gt;
This package provides the Haskell %{pkg_name} profiling library.&lt;br /&gt;
&lt;br /&gt;
%files prof -f %{name}-prof.files&lt;br /&gt;
%endif&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{pkgver}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%ghc_lib_build&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
%ghc_lib_install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Spec file when building a git snapshot =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define commit 0123456789abcdef101112131415161718191a1b&lt;br /&gt;
%define commit_short %(echo %{commit} | head -c6)&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	foo&lt;br /&gt;
Release:	0.git%{commit_short}.1&lt;br /&gt;
License:	foo&lt;br /&gt;
Group:		foo&lt;br /&gt;
Url:		foo&lt;br /&gt;
Source0:	%{name}-%{commit}.tar.gz&lt;br /&gt;
%description&lt;br /&gt;
foo.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%autosetup -p1 -n %{name}-%{commit}&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source example for Github, Gogs, Gitea, Forgejo:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://github.com/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for Gitlab, MosHub:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://gitlab.com/owner/repo/-/archive/%{commit}/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for GitWeb:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
Source example for GitVerse:&lt;br /&gt;
&lt;br /&gt;
 Source0:	https://gitverse.ru/api/repos/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz&lt;br /&gt;
&lt;br /&gt;
To update such a package:&lt;br /&gt;
# Change Version to the latest tagged release&lt;br /&gt;
# Change commit hash in the spec&lt;br /&gt;
# Change the first number of the Release tag to &amp;quot;0&amp;quot; if the Version was incrimented, otherwise incriment that first number&lt;br /&gt;
# Change the last number in the Release to 1&lt;br /&gt;
# Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm -fv .abf.yml&lt;br /&gt;
spectool -g *.spec&lt;br /&gt;
abf put&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If upstream has no tagged versions at all, use &amp;quot;Version: 0&amp;quot;, example: [https://web.archive.org/web/20240703053451/https://abf.io/import/just-backup-btrfs/blob/225cac97e9/just-backup-btrfs.spec]&lt;br /&gt;
&lt;br /&gt;
= Spec file for a golang =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%define debug_package %{nil}&lt;br /&gt;
&lt;br /&gt;
# use bundled golang modules (from Source1)&lt;br /&gt;
%global gomodulesmode GO111MODULE=off&lt;br /&gt;
# see Source0&lt;br /&gt;
%global goipath github.com/foo/bar&lt;br /&gt;
&lt;br /&gt;
Summary:	foo&lt;br /&gt;
Name:		foo&lt;br /&gt;
Version:	1.0&lt;br /&gt;
Release:	1&lt;br /&gt;
License:	MIT&lt;br /&gt;
Group:		Development/Other&lt;br /&gt;
Url:		http://github.com/foo/bar&lt;br /&gt;
Source0:	http://github.com/foo/bar/archive/refs/tags/v%{version}.tar.gz?/%{name}-%{version}.tar.gz&lt;br /&gt;
# unpack source and run &#039;go mod vendor&#039; in source dir, tar.gz &#039;vendor&#039; dir&lt;br /&gt;
Source1:	vendor.tar.gz&lt;br /&gt;
BuildRequires:	golang&lt;br /&gt;
%gometa&lt;br /&gt;
&lt;br /&gt;
%description&lt;br /&gt;
%{summary}.&lt;br /&gt;
&lt;br /&gt;
%files&lt;br /&gt;
%{_bindir}/%{name}&lt;br /&gt;
&lt;br /&gt;
#----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
%prep&lt;br /&gt;
%goprep&lt;br /&gt;
&lt;br /&gt;
# prepare vendored modules&lt;br /&gt;
tar -xf %{SOURCE2}&lt;br /&gt;
cp -r ./vendor/* _build/src/&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%gobuild -o %{gobuilddir}/bin/%{name} %{goipath}/cmd/%{name}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
install -d %{buildroot}%{_bindir}&lt;br /&gt;
install -Dm0755 %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [https://abf.io/import/rclone]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Управление пакетами]]&lt;/div&gt;</summary>
		<author><name>Survolog</name></author>
	</entry>
</feed>