Difference between revisions of "Template Spec Files"
From Rosalab Wiki
(→Spec file for a program built using GNU Autotools) |
Mikhailnov (Talk | contribs) (→Spec file for a golang) |
||
(91 intermediate revisions by 7 users not shown) | |||
Line 3: | Line 3: | ||
<pre> | <pre> | ||
Summary: foo | Summary: foo | ||
− | Name: foo | + | Name: foo |
Version: 1.0 | Version: 1.0 | ||
Release: 1 | Release: 1 | ||
Line 9: | Line 9: | ||
Group: foo | Group: foo | ||
Url: foo | Url: foo | ||
− | Source0: %{name}-%{version}.tar. | + | Source0: %{name}-%{version}.tar.gz |
%description | %description | ||
foo. | foo. | ||
− | %files - | + | %files -f %{name}.lang |
#------------------------------------------------------------------ | #------------------------------------------------------------------ | ||
%prep | %prep | ||
− | % | + | %autosetup -p1 |
%build | %build | ||
− | % | + | %configure |
%make | %make | ||
Line 41: | Line 41: | ||
Group: foo | Group: foo | ||
Url: foo | Url: foo | ||
− | Source0: %{name}-%{version}.tar. | + | Source0: %{name}-%{version}.tar.gz |
BuildRequires: cmake | BuildRequires: cmake | ||
Line 47: | Line 47: | ||
foo. | foo. | ||
− | %files - | + | %files -f %{name}.lang |
#------------------------------------------------------------------ | #------------------------------------------------------------------ | ||
%prep | %prep | ||
− | % | + | %autosetup -p1 |
%build | %build | ||
Line 60: | Line 60: | ||
%install | %install | ||
%makeinstall_std -C build | %makeinstall_std -C build | ||
+ | |||
+ | %find_lang %{name} | ||
+ | </pre> | ||
+ | |||
+ | =Spec file for a program written in Qt4 and built using cmake= | ||
+ | |||
+ | <pre> | ||
+ | Summary: foo | ||
+ | Name: foo | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: foo | ||
+ | Group: foo | ||
+ | Url: foo | ||
+ | Source0: %{name}-%{version}.tar.gz | ||
+ | BuildRequires: cmake | ||
+ | BuildRequires: qt4-devel | ||
+ | |||
+ | %description | ||
+ | foo. | ||
+ | |||
+ | %files -f %{name}.lang | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 | ||
+ | |||
+ | %build | ||
+ | %cmake_qt4 | ||
+ | %make | ||
+ | |||
+ | %install | ||
+ | %makeinstall_std -C build | ||
+ | |||
+ | %find_lang %{name} | ||
+ | </pre> | ||
+ | |||
+ | =Spec file for a program written in Qt5 and built using cmake= | ||
+ | |||
+ | <pre> | ||
+ | Summary: foo | ||
+ | Name: foo | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: foo | ||
+ | Group: foo | ||
+ | Url: foo | ||
+ | Source0: %{name}-%{version}.tar.gz | ||
+ | BuildRequires: cmake | ||
+ | BuildRequires: qt5-devel | ||
+ | |||
+ | %description | ||
+ | foo. | ||
+ | |||
+ | %files -f %{name}.lang | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 | ||
+ | |||
+ | %build | ||
+ | %cmake_qt5 | ||
+ | %make | ||
+ | |||
+ | %install | ||
+ | %makeinstall_std -C build | ||
+ | |||
+ | %find_lang %{name} | ||
+ | </pre> | ||
+ | |||
+ | =Spec file for a program built using Meson= | ||
+ | |||
+ | <pre> | ||
+ | Summary: foo | ||
+ | Name: foo | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: foo | ||
+ | Group: foo | ||
+ | Url: foo | ||
+ | Source0: %{name}-%{version}.tar.gz | ||
+ | BuildRequires: meson | ||
+ | |||
+ | %description | ||
+ | foo. | ||
+ | |||
+ | %files -f %{name}.lang | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 | ||
+ | |||
+ | %build | ||
+ | %meson | ||
+ | %meson_build | ||
+ | |||
+ | %install | ||
+ | %meson_install | ||
%find_lang %{name} | %find_lang %{name} | ||
Line 66: | Line 167: | ||
=Spec file for a program built using Perl/Makefile.PL= | =Spec file for a program built using Perl/Makefile.PL= | ||
<pre> | <pre> | ||
− | %define upstream_name | + | %define upstream_name foo |
%define upstream_version 1.0 | %define upstream_version 1.0 | ||
Line 76: | Line 177: | ||
Group: foo | Group: foo | ||
Url: foo | Url: foo | ||
− | Source0: %{upstream_name}-%{upstream_version}.tar. | + | Source0: %{upstream_name}-%{upstream_version}.tar.gz |
BuildRequires: perl-devel | BuildRequires: perl-devel | ||
+ | BuildRequires: perl(ExtUtils::MakeMaker) | ||
%description | %description | ||
Line 87: | Line 189: | ||
%prep | %prep | ||
− | % | + | %autosetup -p1 -n %{upstream_name}-%{upstream_version} |
%build | %build | ||
Line 94: | Line 196: | ||
%check | %check | ||
− | + | make test | |
%install | %install | ||
Line 102: | Line 204: | ||
=Spec file for a program built using Perl/Build.PL= | =Spec file for a program built using Perl/Build.PL= | ||
<pre> | <pre> | ||
− | %define upstream_name | + | %define upstream_name foo |
%define upstream_version 1.0 | %define upstream_version 1.0 | ||
Line 112: | Line 214: | ||
Group: foo | Group: foo | ||
Url: foo | Url: foo | ||
− | Source0: %{upstream_name}-%{upstream_version}.tar. | + | Source0: %{upstream_name}-%{upstream_version}.tar.gz |
BuildRequires: perl-devel | BuildRequires: perl-devel | ||
BuildRequires: perl(Module::Build) | BuildRequires: perl(Module::Build) | ||
Line 124: | Line 226: | ||
%prep | %prep | ||
− | % | + | %autosetup -p1 -n %{upstream_name}-%{upstream_version} |
%build | %build | ||
Line 138: | Line 240: | ||
=Spec file for a Python module= | =Spec file for a Python module= | ||
+ | |||
+ | == Spec file to build python3 module with setup.py == | ||
+ | |||
+ | python-mymodule.spec: | ||
+ | |||
+ | <pre> | ||
+ | %define pypi_name mymodule | ||
+ | |||
+ | Summary: Example module | ||
+ | Name: python-%{pypi_name} | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: GPL | ||
+ | Group: Development/Python | ||
+ | Url: http://mypage.org/mymodule | ||
+ | Source0: %{pypi_name}-%{version}.tar.gz | ||
+ | #if source available on pypi.org uncoment next line, and remove line Source0: above | ||
+ | #Source0: %pypi_source | ||
+ | BuildRequires: pkgconfig(python3) | ||
+ | |||
+ | %define _description %{expand: | ||
+ | Text about | ||
+ | example Python module | ||
+ | } | ||
+ | |||
+ | %description | ||
+ | %{_description} | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package -n python3-%{pypi_name} | ||
+ | Summary: %{summary} | ||
+ | Group: Development/Python | ||
+ | |||
+ | %description -n python3-%{pypi_name} | ||
+ | %{_description} | ||
+ | |||
+ | %files -n python3-%{pypi_name} | ||
+ | # for files in /usr/lib64/python3.8/site-packages | ||
+ | %{python3_sitearch}/* | ||
+ | %{python3_sitearch}/%{pypi_name}-%{version}-py*.egg-info | ||
+ | |||
+ | # for files in /usr/lib/python3.8/site-packages uncomment next lines | ||
+ | #%%{python3_sitelib}/* | ||
+ | #%%{python3_sitelib}/%{pypi_name}-%{version}-py*.egg-info | ||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 | ||
+ | |||
+ | %build | ||
+ | %py3_build | ||
+ | |||
+ | %install | ||
+ | %py3_install | ||
+ | # uncomment for fix rpmlint error "set python3 shebang" | ||
+ | #%%py3_shebang_fix | ||
+ | |||
+ | %check | ||
+ | %pytest | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | == Spec file to build python3 module with pyproject.toml == | ||
+ | |||
+ | python-mymodule.spec: | ||
+ | |||
+ | <pre> | ||
+ | %define pypi_name mymodule | ||
+ | |||
+ | Summary: Example module | ||
+ | Name: python-%{pypi_name} | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: GPL | ||
+ | Group: Development/Python | ||
+ | Url: http://mypage.org/mymodule | ||
+ | #if source available on pypi.org | ||
+ | Source0: %pypi_source | ||
+ | # if source not available on pypi.org uncomment line below and comment Source0 upper | ||
+ | #Source0: %{pypi_name}-%{version}.tar.gz | ||
+ | BuildRequires: pkgconfig(python3) | ||
+ | BuildRequires: pyproject-rpm-macros | ||
+ | # for %%check if needed | ||
+ | BuildRequires: python3egg(pytest) | ||
+ | |||
+ | %define _description %{expand: | ||
+ | Text about | ||
+ | example Python module | ||
+ | } | ||
+ | |||
+ | %description | ||
+ | %{_description} | ||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package -n python3-%{pypi_name} | ||
+ | Summary: %{summary} | ||
+ | Group: Development/Python | ||
+ | |||
+ | %description -n python3-%{pypi_name} | ||
+ | %{_description} | ||
+ | |||
+ | %files -n python3-%{pypi_name} -f %{pyproject_files} | ||
+ | %license LICENSE* | ||
+ | %doc README* | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 -n %{pypi_name}-%{version} | ||
+ | |||
+ | # for autoinstall BuildRequires | ||
+ | %generate_buildrequires | ||
+ | %pyproject_buildrequires -r | ||
+ | |||
+ | %build | ||
+ | %pyproject_wheel | ||
+ | |||
+ | %install | ||
+ | %pyproject_install | ||
+ | %pyproject_save_files %{pypi_name} | ||
+ | |||
+ | # uncomment for fix rpmlint error "set python3 shebang" | ||
+ | #%%py3_shebang_fix | ||
+ | |||
+ | %check | ||
+ | %pytest | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | == Spec file to build python2 module (ROSA <= 2016.1) == | ||
<pre> | <pre> | ||
%define module mymodule | %define module mymodule | ||
− | Summary: | + | Summary: Example module |
− | Name: | + | Name: python-%{module} |
− | Version: | + | Version: 1.0 |
− | Release: | + | Release: 1 |
License: Apache License | License: Apache License | ||
Group: Development/Python | Group: Development/Python | ||
Url: http://mypage.org/mymodule | Url: http://mypage.org/mymodule | ||
− | Source0: | + | Source0: %{module}-%{version}.tar.gz |
− | BuildRequires: pkgconfig( | + | BuildRequires: pkgconfig(python2) |
− | + | ||
%description | %description | ||
Example Python module. | Example Python module. | ||
− | %files | + | %files |
%doc *.txt | %doc *.txt | ||
+ | %{python2_sitearch}/* | ||
#------------------------------------------------------------------ | #------------------------------------------------------------------ | ||
Line 162: | Line 395: | ||
%prep | %prep | ||
%setup -q | %setup -q | ||
+ | %apply_patches | ||
+ | |||
+ | %build | ||
+ | %py2_build | ||
+ | |||
+ | %install | ||
+ | %py2_install | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | == Spec file to build python2 module (ROSA >= 2021.1) == | ||
+ | |||
+ | python-mymodule.spec: | ||
+ | |||
+ | <pre> | ||
+ | %define pypi_name mymodule | ||
+ | |||
+ | Summary: Example module | ||
+ | Name: python-%{pypi_name} | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: Apache License | ||
+ | Group: Development/Python | ||
+ | Url: http://mypage.org/mymodule | ||
+ | Source0: %{pypi_name}-%{version}.tar.gz | ||
+ | #if source available on pypi.org uncoment next line, and remove line Source0: above | ||
+ | #Source0: %pypi_source | ||
+ | BuildRequires: pkgconfig(python2) | ||
+ | |||
+ | %define _description %{expand: | ||
+ | Text about | ||
+ | example Python module | ||
+ | } | ||
+ | |||
+ | %description | ||
+ | %{_description} | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package -n python2-%{pypi_name} | ||
+ | Summary: %{summary} | ||
+ | Group: Development/Python | ||
+ | |||
+ | %description -n python2-%{pypi_name} | ||
+ | %{_description} | ||
+ | |||
+ | %files -n python2-%{pypi_name} | ||
+ | %{python2_sitearch}/* | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 | ||
+ | |||
+ | %build | ||
+ | %py2_build | ||
+ | |||
+ | %install | ||
+ | %py2_install | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | == Spec file for both python2 and python3 modules, ROSA >= 2021.1 == | ||
+ | |||
+ | python-mymodule.spec: | ||
+ | |||
+ | <pre> | ||
+ | %define pypi_name mymodule | ||
+ | |||
+ | Summary: Example module | ||
+ | Name: python-%{pypi_name} | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: Apache License | ||
+ | Group: Development/Python | ||
+ | Url: http://mypage.org/mymodule | ||
+ | Source0: %{pypi_name}-%{version}.tar.gz | ||
+ | #if source available on pypi.org uncoment next line, and remove line Source0: above | ||
+ | #Source0: %pypi_source | ||
+ | |||
+ | %define _description %{expand: | ||
+ | Text about | ||
+ | example Python module | ||
+ | } | ||
+ | |||
+ | %description | ||
+ | %{_description} | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package -n python2-%{pypi_name} | ||
+ | Summary: Example python2 module | ||
+ | Group: Development/Python | ||
+ | BuildRequires: pkgconfig(python2) | ||
+ | %py2_migration_meta python-%{pypi_name} | ||
+ | |||
+ | %description -n python2-%{pypi_name} | ||
+ | %{_description} | ||
+ | |||
+ | %files -n python2-%{pypi_name} | ||
+ | %{python2_sitearch}/* | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package -n python3-%{pypi_name} | ||
+ | Summary: Example python3 module | ||
+ | Group: Development/Python | ||
+ | BuildRequires: pkgconfig(python3) | ||
+ | |||
+ | %description -n python3-%{pypi_name} | ||
+ | %{_description} | ||
+ | |||
+ | %files -n python3-%{pypi_name} | ||
+ | %{python3_sitearch}/* | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 | ||
+ | |||
+ | %build | ||
+ | %py2_build | ||
+ | %py3_build | ||
%install | %install | ||
− | + | %py2_install | |
− | + | %py3_install | |
− | + | ||
</pre> | </pre> | ||
+ | === See also === | ||
+ | [https://abf.io/import/rpm-openmandriva-setup/blob/rosa2019.1/0513-python2-macro-and-py2_migration_meta.patch %py2_migration_meta] | ||
=Spec file for a Library= | =Spec file for a Library= | ||
Line 176: | Line 533: | ||
%define libname %mklibname %{name} %{major} | %define libname %mklibname %{name} %{major} | ||
%define devname %mklibname %{name} -d | %define devname %mklibname %{name} -d | ||
+ | # Usually we don't need to build static library | ||
+ | # But let's add it to spec template anyway | ||
+ | %define sdevname %mklibname %{name} -d -s | ||
Summary: foo | Summary: foo | ||
− | Name: foo | + | Name: foo |
Version: 1.0 | Version: 1.0 | ||
Release: 1 | Release: 1 | ||
Line 184: | Line 544: | ||
Group: foo | Group: foo | ||
Url: foo | Url: foo | ||
− | Source0: %{name}-%{version}.tar. | + | Source0: %{name}-%{version}.tar.gz |
%description | %description | ||
Line 191: | Line 551: | ||
#------------------------------------------------------------------ | #------------------------------------------------------------------ | ||
− | %package -n | + | %package -n %{libname} |
− | Summary: | + | Summary: %{name} shared library |
Group: System/Libraries | Group: System/Libraries | ||
%description -n %{libname} | %description -n %{libname} | ||
− | + | %{name} shared library. | |
%files -n %{libname} | %files -n %{libname} | ||
Line 203: | Line 563: | ||
#------------------------------------------------------------------ | #------------------------------------------------------------------ | ||
− | %package -n | + | %package -n %{devname} |
− | Summary: | + | Summary: %{name} development files |
Group: Development/Other | Group: Development/Other | ||
− | Requires: | + | Requires: %{libname} = %{EVRD} |
− | Provides: | + | Provides: %{name}-devel = %{EVRD} |
%description -n %{devname} | %description -n %{devname} | ||
− | + | %{name} development files. | |
%files -n %{devname} | %files -n %{devname} | ||
%{_includedir}/*.h | %{_includedir}/*.h | ||
%{_libdir}/*.so | %{_libdir}/*.so | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package -n %{sdevname} | ||
+ | Summary: %{name} development files (static library) | ||
+ | Group: Development/Other | ||
+ | Requires: %{devname} = %{EVRD} | ||
+ | Provides: %{name}-static-devel = %{EVRD} | ||
+ | |||
+ | %description -n %{sdevname} | ||
+ | %{name} development files (static library). | ||
+ | |||
+ | %files -n %{sdevname} | ||
+ | %{_libdir}/*.a | ||
#------------------------------------------------------------------ | #------------------------------------------------------------------ | ||
%prep | %prep | ||
− | % | + | %autosetup -p1 |
%build | %build | ||
− | % | + | %configure |
%make | %make | ||
Line 228: | Line 602: | ||
%makeinstall_std | %makeinstall_std | ||
</pre> | </pre> | ||
+ | |||
+ | == See also == | ||
+ | * [[{{NAMESPACE}}:Libraries_policy]] | ||
=Spec file for a Node.js module= | =Spec file for a Node.js module= | ||
Line 255: | Line 632: | ||
%prep | %prep | ||
− | % | + | %autosetup -p1 -n package |
rm -rf node_modules | rm -rf node_modules | ||
Line 266: | Line 643: | ||
</pre> | </pre> | ||
+ | =Spec file for a Ruby Gem (ROSA >= 2021.1)= | ||
+ | <pre> | ||
+ | %define gem_name foo | ||
+ | |||
+ | Summary: Foo | ||
+ | Name: rubygem-%{gem_name} | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | Group: Development/Ruby | ||
+ | License: GPLv2+ or Ruby | ||
+ | URL: foo | ||
+ | Source0: %{gem_name}-%{version}.gem | ||
+ | BuildRequires: rubygems-devel | ||
+ | BuildArch: noarch | ||
+ | |||
+ | %description | ||
+ | %{summary}. | ||
+ | |||
+ | %files | ||
+ | %dir %{gem_instdir} | ||
+ | %license %{gem_instdir}/LICENSE.txt | ||
+ | %{gem_libdir} | ||
+ | %exclude %{gem_cache} | ||
+ | %{gem_spec} | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package doc | ||
+ | Summary: Documentation for %{name} | ||
+ | Group: Books/Computer books | ||
+ | Requires: %{name} = %{EVRD} | ||
+ | |||
+ | %description doc | ||
+ | Documents, RDoc & RI documentation for %{name}. | ||
+ | |||
+ | %files doc | ||
+ | %doc %{gem_docdir} | ||
+ | %doc %{gem_instdir}/CHANGELOG.md | ||
+ | %{gem_instdir}/Gemfile | ||
+ | %doc %{gem_instdir}/README.md | ||
+ | %doc %{gem_instdir}/SECURITY.md | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 -n %{gem_name}-%{version} | ||
+ | |||
+ | %build | ||
+ | %gem_build | ||
+ | |||
+ | %install | ||
+ | %gem_install | ||
+ | mkdir -p %{buildroot}%{gem_dir} | ||
+ | cp -a .%{gem_dir}/* \ | ||
+ | %{buildroot}%{gem_dir}/ | ||
+ | cp ../%{gem_name}-%{version}.gemspec %{buildroot}%{gem_dir}/specifications | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | =Spec file for a Ruby Gem (ROSA <= 2016.1)= | ||
+ | <pre> | ||
+ | %define rbname foo | ||
+ | |||
+ | Summary: Foo | ||
+ | Name: rubygem-%{rbname} | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | Group: Development/Ruby | ||
+ | License: GPLv2+ or Ruby | ||
+ | URL: foo | ||
+ | Source0: %{rbname}-%{version}.gem | ||
+ | BuildRequires: rubygems | ||
+ | BuildArch: noarch | ||
+ | |||
+ | %description | ||
+ | %{summary}. | ||
+ | |||
+ | %files | ||
+ | %{ruby_gemdir}/gems/%{rbname}-%{version} | ||
+ | %{ruby_gemdir}/specifications/%{rbname}-%{version}.gemspec | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %package doc | ||
+ | Summary: Documentation for %{name} | ||
+ | Group: Books/Computer books | ||
+ | Requires: %{name} = %{EVRD} | ||
+ | |||
+ | %description doc | ||
+ | Documents, RDoc & RI documentation for %{name}. | ||
+ | |||
+ | %files doc | ||
+ | %{ruby_gemdir}/doc/%{rbname}-%{version} | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %setup -q | ||
+ | %apply_patches | ||
+ | |||
+ | %build | ||
+ | %gem_build | ||
+ | |||
+ | %install | ||
+ | %gem_install | ||
+ | </pre> | ||
+ | |||
+ | = Spec file for a Haskell Library = | ||
+ | |||
+ | <pre> | ||
+ | %define _disable_ld_no_undefined 1 | ||
+ | %global debug_package %{nil} | ||
+ | |||
+ | %global pkg_name Foo | ||
+ | %global pkgver %{pkg_name}-%{version} | ||
+ | |||
+ | Summary: foo | ||
+ | Name: ghc-%{pkg_name} | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: BSD | ||
+ | Group: Development/Haskell | ||
+ | Url: https://hackage.haskell.org/package/%{pkg_name} | ||
+ | Source0: https://hackage.haskell.org/package/%{pkgver}/%{pkgver}.tar.gz | ||
+ | BuildRequires: ghc-devel | ||
+ | BuildRequires: ghc-prof | ||
+ | BuildRequires: ghc-rpm-macros | ||
+ | |||
+ | %description | ||
+ | %{summary}. | ||
+ | |||
+ | %files -f %{name}.files | ||
+ | %license LICENSE | ||
+ | |||
+ | #---------------------------------------------------------------------- | ||
+ | %package devel | ||
+ | Summary: %{summary} | ||
+ | Provides: %{name}-static = %{EVRD} | ||
+ | Provides: %{name}-static%{?_isa} = %{EVRD} | ||
+ | %if %{defined ghc_version} | ||
+ | Requires: ghc = %{ghc_version} | ||
+ | %endif | ||
+ | Requires: %{name}%{?_isa} = %{EVRD} | ||
+ | |||
+ | %description devel | ||
+ | This package provides the Haskell %{pkg_name} library development files. | ||
+ | |||
+ | %files devel -f %{name}-devel.files | ||
+ | |||
+ | #---------------------------------------------------------------------- | ||
+ | |||
+ | %if %{with haddock} | ||
+ | %package doc | ||
+ | Summary: Haskell %{pkg_name} library documentation | ||
+ | BuildArch: noarch | ||
+ | |||
+ | %description doc | ||
+ | This package provides the Haskell %{pkg_name} library documentation. | ||
+ | |||
+ | %files doc -f %{name}-doc.files | ||
+ | %license LICENSE | ||
+ | |||
+ | %endif | ||
+ | |||
+ | #---------------------------------------------------------------------- | ||
+ | |||
+ | %if %{with ghc_prof} | ||
+ | %package prof | ||
+ | Summary: Haskell %{pkg_name} profiling library | ||
+ | Requires: %{name}-devel%{?_isa} = %{EVRD} | ||
+ | Supplements: (%{name}-devel and ghc-prof) | ||
+ | |||
+ | %description prof | ||
+ | This package provides the Haskell %{pkg_name} profiling library. | ||
+ | |||
+ | %files prof -f %{name}-prof.files | ||
+ | %endif | ||
+ | |||
+ | #---------------------------------------------------------------------- | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 -n %{pkgver} | ||
+ | |||
+ | %build | ||
+ | %ghc_lib_build | ||
+ | |||
+ | %install | ||
+ | %ghc_lib_install | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | = Spec file when building a git snapshot = | ||
+ | |||
+ | <pre> | ||
+ | %define commit 0123456789abcdef101112131415161718191a1b | ||
+ | %define commit_short %(echo %{commit} | head -c6) | ||
+ | |||
+ | Summary: foo | ||
+ | Name: foo | ||
+ | Version: foo | ||
+ | Release: 0.git%{commit_short}.1 | ||
+ | License: foo | ||
+ | Group: foo | ||
+ | Url: foo | ||
+ | Source0: %{name}-%{commit}.tar.gz | ||
+ | |||
+ | %description | ||
+ | foo. | ||
+ | |||
+ | %files | ||
+ | ... | ||
+ | |||
+ | #------------------------------------------------------------------ | ||
+ | |||
+ | %prep | ||
+ | %autosetup -p1 -n %{name}-%{commit} | ||
+ | |||
+ | %build | ||
+ | ... | ||
+ | |||
+ | %install | ||
+ | ... | ||
+ | </pre> | ||
+ | |||
+ | Source example for Github, Gogs, Gitea, Forgejo: | ||
+ | Source0: https://github.com/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz | ||
+ | |||
+ | Source example for Gitlab, MosHub: | ||
+ | Source0: https://gitlab.com/owner/repo/-/archive/%{commit}/%{name}-%{commit}.tar.gz | ||
+ | |||
+ | Source example for GitWeb: | ||
+ | Source0: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/%{commit}.tar.gz | ||
+ | |||
+ | Source example for GitVerse: | ||
+ | Source0: https://gitverse.ru/api/repos/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz | ||
+ | |||
+ | To update such a package: | ||
+ | # Change Version to the latest tagged release | ||
+ | # Change commit hash in the spec | ||
+ | # Change the first number of the Release tag to "0" if the Version was incrimented, otherwise incriment that first number | ||
+ | # Change the last number in the Release to 1 | ||
+ | # Run: | ||
+ | rm -fv .abf.yml | ||
+ | spectool -g *.spec | ||
+ | abf put | ||
+ | |||
+ | If upstream has no tagged versions at all, use "Version: 0", example: https://abf.io/import/just-backup-btrfs/blob/225cac97e9/just-backup-btrfs.spec | ||
[[Category:Package Management]] | [[Category:Package Management]] | ||
[[Category:Packaging Guidelines]] | [[Category:Packaging Guidelines]] | ||
[[Category:ROSA Developer Tools]] | [[Category:ROSA Developer Tools]] | ||
+ | |||
+ | = Spec file for a golang = | ||
+ | |||
+ | <pre> | ||
+ | # use bundled golang modules (from Source1) | ||
+ | %global gomodulesmode GO111MODULE=off | ||
+ | # see Source0 | ||
+ | %global goipath github.com/foo/bar | ||
+ | |||
+ | Summary: foo | ||
+ | Name: foo | ||
+ | Version: 1.0 | ||
+ | Release: 1 | ||
+ | License: MIT | ||
+ | Group: Development/Other | ||
+ | Url: http://github.com/foo/bar | ||
+ | Source0: http://github.com/foo/bar/archive/refs/tags/v%{version}.tar.gz?/%{name}-%{version}.tar.gz | ||
+ | # unpack source and run 'go mod vendor' in source dir, tar.gz 'vendor' dir | ||
+ | Source1: vendor.tar.gz | ||
+ | BuildRequires: golang | ||
+ | %gometa | ||
+ | |||
+ | %description | ||
+ | %{summary}. | ||
+ | |||
+ | %files | ||
+ | %{_bindir}/%{name} | ||
+ | |||
+ | #---------------------------------------------------------------------------- | ||
+ | |||
+ | %prep | ||
+ | %goprep | ||
+ | |||
+ | # prepare vendored modules | ||
+ | tar -xf %{SOURCE1} | ||
+ | cp -r ./vendor/* _build/src/ | ||
+ | |||
+ | %build | ||
+ | %gobuild -o %{gobuilddir}/bin/%{name} %{goipath}/cmd/%{name} | ||
+ | |||
+ | %install | ||
+ | install -d %{buildroot}%{_bindir} | ||
+ | install -Dm0755 %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir} | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | See also: https://abf.io/import/rclone, https://abf.io/import/glab, https://abf.io/import/ha_cluster_exporter |
Latest revision as of 01:01, 6 August 2024
Contents
- 1 Spec file for a program built using GNU Autotools
- 2 Spec file for a program built using CMake
- 3 Spec file for a program written in Qt4 and built using cmake
- 4 Spec file for a program written in Qt5 and built using cmake
- 5 Spec file for a program built using Meson
- 6 Spec file for a program built using Perl/Makefile.PL
- 7 Spec file for a program built using Perl/Build.PL
- 8 Spec file for a Python module
- 9 Spec file for a Library
- 10 Spec file for a Node.js module
- 11 Spec file for a Ruby Gem (ROSA >= 2021.1)
- 12 Spec file for a Ruby Gem (ROSA <= 2016.1)
- 13 Spec file for a Haskell Library
- 14 Spec file when building a git snapshot
- 15 Spec file for a golang
Spec file for a program built using GNU Autotools
Summary: foo Name: foo Version: 1.0 Release: 1 License: foo Group: foo Url: foo Source0: %{name}-%{version}.tar.gz %description foo. %files -f %{name}.lang #------------------------------------------------------------------ %prep %autosetup -p1 %build %configure %make %install %makeinstall_std %find_lang %{name}
Spec file for a program built using CMake
Summary: foo Name: foo Version: 1.0 Release: 1 License: foo Group: foo Url: foo Source0: %{name}-%{version}.tar.gz BuildRequires: cmake %description foo. %files -f %{name}.lang #------------------------------------------------------------------ %prep %autosetup -p1 %build %cmake %make %install %makeinstall_std -C build %find_lang %{name}
Spec file for a program written in Qt4 and built using cmake
Summary: foo Name: foo Version: 1.0 Release: 1 License: foo Group: foo Url: foo Source0: %{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: qt4-devel %description foo. %files -f %{name}.lang #------------------------------------------------------------------ %prep %autosetup -p1 %build %cmake_qt4 %make %install %makeinstall_std -C build %find_lang %{name}
Spec file for a program written in Qt5 and built using cmake
Summary: foo Name: foo Version: 1.0 Release: 1 License: foo Group: foo Url: foo Source0: %{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: qt5-devel %description foo. %files -f %{name}.lang #------------------------------------------------------------------ %prep %autosetup -p1 %build %cmake_qt5 %make %install %makeinstall_std -C build %find_lang %{name}
Spec file for a program built using Meson
Summary: foo Name: foo Version: 1.0 Release: 1 License: foo Group: foo Url: foo Source0: %{name}-%{version}.tar.gz BuildRequires: meson %description foo. %files -f %{name}.lang #------------------------------------------------------------------ %prep %autosetup -p1 %build %meson %meson_build %install %meson_install %find_lang %{name}
Spec file for a program built using Perl/Makefile.PL
%define upstream_name foo %define upstream_version 1.0 Summary: foo Name: perl-%{upstream_name} Version: %perl_convert_version %{upstream_version} Release: 1 License: foo Group: foo Url: foo Source0: %{upstream_name}-%{upstream_version}.tar.gz BuildRequires: perl-devel BuildRequires: perl(ExtUtils::MakeMaker) %description foo. %files #------------------------------------------------------------------ %prep %autosetup -p1 -n %{upstream_name}-%{upstream_version} %build perl Makefile.PL INSTALLDIRS=vendor %make %check make test %install %makeinstall_std
Spec file for a program built using Perl/Build.PL
%define upstream_name foo %define upstream_version 1.0 Summary: foo Name: perl-%{upstream_name} Version: %perl_convert_version %{upstream_version} Release: 1 License: foo Group: foo Url: foo Source0: %{upstream_name}-%{upstream_version}.tar.gz BuildRequires: perl-devel BuildRequires: perl(Module::Build) %description foo. %files #------------------------------------------------------------------ %prep %autosetup -p1 -n %{upstream_name}-%{upstream_version} %build perl Build.PL installdirs=vendor ./Build CFLAGS="%{optflags}" %check ./Build test %install ./Build install destdir=%{buildroot}
Spec file for a Python module
Spec file to build python3 module with setup.py
python-mymodule.spec:
%define pypi_name mymodule Summary: Example module Name: python-%{pypi_name} Version: 1.0 Release: 1 License: GPL Group: Development/Python Url: http://mypage.org/mymodule Source0: %{pypi_name}-%{version}.tar.gz #if source available on pypi.org uncoment next line, and remove line Source0: above #Source0: %pypi_source BuildRequires: pkgconfig(python3) %define _description %{expand: Text about example Python module } %description %{_description} #------------------------------------------------------------------ %package -n python3-%{pypi_name} Summary: %{summary} Group: Development/Python %description -n python3-%{pypi_name} %{_description} %files -n python3-%{pypi_name} # for files in /usr/lib64/python3.8/site-packages %{python3_sitearch}/* %{python3_sitearch}/%{pypi_name}-%{version}-py*.egg-info # for files in /usr/lib/python3.8/site-packages uncomment next lines #%%{python3_sitelib}/* #%%{python3_sitelib}/%{pypi_name}-%{version}-py*.egg-info #------------------------------------------------------------------ %prep %autosetup -p1 %build %py3_build %install %py3_install # uncomment for fix rpmlint error "set python3 shebang" #%%py3_shebang_fix %check %pytest
Spec file to build python3 module with pyproject.toml
python-mymodule.spec:
%define pypi_name mymodule Summary: Example module Name: python-%{pypi_name} Version: 1.0 Release: 1 License: GPL Group: Development/Python Url: http://mypage.org/mymodule #if source available on pypi.org Source0: %pypi_source # if source not available on pypi.org uncomment line below and comment Source0 upper #Source0: %{pypi_name}-%{version}.tar.gz BuildRequires: pkgconfig(python3) BuildRequires: pyproject-rpm-macros # for %%check if needed BuildRequires: python3egg(pytest) %define _description %{expand: Text about example Python module } %description %{_description} #------------------------------------------------------------------ %package -n python3-%{pypi_name} Summary: %{summary} Group: Development/Python %description -n python3-%{pypi_name} %{_description} %files -n python3-%{pypi_name} -f %{pyproject_files} %license LICENSE* %doc README* #------------------------------------------------------------------ %prep %autosetup -p1 -n %{pypi_name}-%{version} # for autoinstall BuildRequires %generate_buildrequires %pyproject_buildrequires -r %build %pyproject_wheel %install %pyproject_install %pyproject_save_files %{pypi_name} # uncomment for fix rpmlint error "set python3 shebang" #%%py3_shebang_fix %check %pytest
Spec file to build python2 module (ROSA <= 2016.1)
%define module mymodule Summary: Example module Name: python-%{module} Version: 1.0 Release: 1 License: Apache License Group: Development/Python Url: http://mypage.org/mymodule Source0: %{module}-%{version}.tar.gz BuildRequires: pkgconfig(python2) %description Example Python module. %files %doc *.txt %{python2_sitearch}/* #------------------------------------------------------------------ %prep %setup -q %apply_patches %build %py2_build %install %py2_install
Spec file to build python2 module (ROSA >= 2021.1)
python-mymodule.spec:
%define pypi_name mymodule Summary: Example module Name: python-%{pypi_name} Version: 1.0 Release: 1 License: Apache License Group: Development/Python Url: http://mypage.org/mymodule Source0: %{pypi_name}-%{version}.tar.gz #if source available on pypi.org uncoment next line, and remove line Source0: above #Source0: %pypi_source BuildRequires: pkgconfig(python2) %define _description %{expand: Text about example Python module } %description %{_description} #------------------------------------------------------------------ %package -n python2-%{pypi_name} Summary: %{summary} Group: Development/Python %description -n python2-%{pypi_name} %{_description} %files -n python2-%{pypi_name} %{python2_sitearch}/* #------------------------------------------------------------------ %prep %autosetup -p1 %build %py2_build %install %py2_install
Spec file for both python2 and python3 modules, ROSA >= 2021.1
python-mymodule.spec:
%define pypi_name mymodule Summary: Example module Name: python-%{pypi_name} Version: 1.0 Release: 1 License: Apache License Group: Development/Python Url: http://mypage.org/mymodule Source0: %{pypi_name}-%{version}.tar.gz #if source available on pypi.org uncoment next line, and remove line Source0: above #Source0: %pypi_source %define _description %{expand: Text about example Python module } %description %{_description} #------------------------------------------------------------------ %package -n python2-%{pypi_name} Summary: Example python2 module Group: Development/Python BuildRequires: pkgconfig(python2) %py2_migration_meta python-%{pypi_name} %description -n python2-%{pypi_name} %{_description} %files -n python2-%{pypi_name} %{python2_sitearch}/* #------------------------------------------------------------------ %package -n python3-%{pypi_name} Summary: Example python3 module Group: Development/Python BuildRequires: pkgconfig(python3) %description -n python3-%{pypi_name} %{_description} %files -n python3-%{pypi_name} %{python3_sitearch}/* #------------------------------------------------------------------ %prep %autosetup -p1 %build %py2_build %py3_build %install %py2_install %py3_install
See also
Spec file for a Library
%define major 1 %define libname %mklibname %{name} %{major} %define devname %mklibname %{name} -d # Usually we don't need to build static library # But let's add it to spec template anyway %define sdevname %mklibname %{name} -d -s Summary: foo Name: foo Version: 1.0 Release: 1 License: foo Group: foo Url: foo Source0: %{name}-%{version}.tar.gz %description foo. #------------------------------------------------------------------ %package -n %{libname} Summary: %{name} shared library Group: System/Libraries %description -n %{libname} %{name} shared library. %files -n %{libname} %{_libdir}/lib%{name}.so.%{major}* #------------------------------------------------------------------ %package -n %{devname} Summary: %{name} development files Group: Development/Other Requires: %{libname} = %{EVRD} Provides: %{name}-devel = %{EVRD} %description -n %{devname} %{name} development files. %files -n %{devname} %{_includedir}/*.h %{_libdir}/*.so #------------------------------------------------------------------ %package -n %{sdevname} Summary: %{name} development files (static library) Group: Development/Other Requires: %{devname} = %{EVRD} Provides: %{name}-static-devel = %{EVRD} %description -n %{sdevname} %{name} development files (static library). %files -n %{sdevname} %{_libdir}/*.a #------------------------------------------------------------------ %prep %autosetup -p1 %build %configure %make %install %makeinstall_std
See also
Spec file for a Node.js module
%define oname foo Summary: foo Name: nodejs-%{oname} Version: 1.0 Release: 1 License: foo Group: Development/Other Url: foo Source0: %{oname}-%{version}.tgz BuildRequires: nodejs-packaging BuildArch: noarch %description %{summary}. %files %doc LICENSE %{nodejs_sitelib}/%{oname} #------------------------------------------------------------------ %prep %autosetup -p1 -n package rm -rf node_modules %build %install mkdir -p %{buildroot}/%{nodejs_sitelib}/%{oname} cp -r package.json index.js %{buildroot}/%{nodejs_sitelib}/%{oname} %nodejs_symlink_deps
Spec file for a Ruby Gem (ROSA >= 2021.1)
%define gem_name foo Summary: Foo Name: rubygem-%{gem_name} Version: 1.0 Release: 1 Group: Development/Ruby License: GPLv2+ or Ruby URL: foo Source0: %{gem_name}-%{version}.gem BuildRequires: rubygems-devel BuildArch: noarch %description %{summary}. %files %dir %{gem_instdir} %license %{gem_instdir}/LICENSE.txt %{gem_libdir} %exclude %{gem_cache} %{gem_spec} #------------------------------------------------------------------ %package doc Summary: Documentation for %{name} Group: Books/Computer books Requires: %{name} = %{EVRD} %description doc Documents, RDoc & RI documentation for %{name}. %files doc %doc %{gem_docdir} %doc %{gem_instdir}/CHANGELOG.md %{gem_instdir}/Gemfile %doc %{gem_instdir}/README.md %doc %{gem_instdir}/SECURITY.md #------------------------------------------------------------------ %prep %autosetup -p1 -n %{gem_name}-%{version} %build %gem_build %install %gem_install mkdir -p %{buildroot}%{gem_dir} cp -a .%{gem_dir}/* \ %{buildroot}%{gem_dir}/ cp ../%{gem_name}-%{version}.gemspec %{buildroot}%{gem_dir}/specifications
Spec file for a Ruby Gem (ROSA <= 2016.1)
%define rbname foo Summary: Foo Name: rubygem-%{rbname} Version: 1.0 Release: 1 Group: Development/Ruby License: GPLv2+ or Ruby URL: foo Source0: %{rbname}-%{version}.gem BuildRequires: rubygems BuildArch: noarch %description %{summary}. %files %{ruby_gemdir}/gems/%{rbname}-%{version} %{ruby_gemdir}/specifications/%{rbname}-%{version}.gemspec #------------------------------------------------------------------ %package doc Summary: Documentation for %{name} Group: Books/Computer books Requires: %{name} = %{EVRD} %description doc Documents, RDoc & RI documentation for %{name}. %files doc %{ruby_gemdir}/doc/%{rbname}-%{version} #------------------------------------------------------------------ %prep %setup -q %apply_patches %build %gem_build %install %gem_install
Spec file for a Haskell Library
%define _disable_ld_no_undefined 1 %global debug_package %{nil} %global pkg_name Foo %global pkgver %{pkg_name}-%{version} Summary: foo Name: ghc-%{pkg_name} Version: 1.0 Release: 1 License: BSD Group: Development/Haskell Url: https://hackage.haskell.org/package/%{pkg_name} Source0: https://hackage.haskell.org/package/%{pkgver}/%{pkgver}.tar.gz BuildRequires: ghc-devel BuildRequires: ghc-prof BuildRequires: ghc-rpm-macros %description %{summary}. %files -f %{name}.files %license LICENSE #---------------------------------------------------------------------- %package devel Summary: %{summary} Provides: %{name}-static = %{EVRD} Provides: %{name}-static%{?_isa} = %{EVRD} %if %{defined ghc_version} Requires: ghc = %{ghc_version} %endif Requires: %{name}%{?_isa} = %{EVRD} %description devel This package provides the Haskell %{pkg_name} library development files. %files devel -f %{name}-devel.files #---------------------------------------------------------------------- %if %{with haddock} %package doc Summary: Haskell %{pkg_name} library documentation BuildArch: noarch %description doc This package provides the Haskell %{pkg_name} library documentation. %files doc -f %{name}-doc.files %license LICENSE %endif #---------------------------------------------------------------------- %if %{with ghc_prof} %package prof Summary: Haskell %{pkg_name} profiling library Requires: %{name}-devel%{?_isa} = %{EVRD} Supplements: (%{name}-devel and ghc-prof) %description prof This package provides the Haskell %{pkg_name} profiling library. %files prof -f %{name}-prof.files %endif #---------------------------------------------------------------------- %prep %autosetup -p1 -n %{pkgver} %build %ghc_lib_build %install %ghc_lib_install
Spec file when building a git snapshot
%define commit 0123456789abcdef101112131415161718191a1b %define commit_short %(echo %{commit} | head -c6) Summary: foo Name: foo Version: foo Release: 0.git%{commit_short}.1 License: foo Group: foo Url: foo Source0: %{name}-%{commit}.tar.gz %description foo. %files ... #------------------------------------------------------------------ %prep %autosetup -p1 -n %{name}-%{commit} %build ... %install ...
Source example for Github, Gogs, Gitea, Forgejo:
Source0: https://github.com/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz
Source example for Gitlab, MosHub:
Source0: https://gitlab.com/owner/repo/-/archive/%{commit}/%{name}-%{commit}.tar.gz
Source example for GitWeb:
Source0: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/%{commit}.tar.gz
Source example for GitVerse:
Source0: https://gitverse.ru/api/repos/owner/repo/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz
To update such a package:
- Change Version to the latest tagged release
- Change commit hash in the spec
- Change the first number of the Release tag to "0" if the Version was incrimented, otherwise incriment that first number
- Change the last number in the Release to 1
- Run:
rm -fv .abf.yml spectool -g *.spec abf put
If upstream has no tagged versions at all, use "Version: 0", example: https://abf.io/import/just-backup-btrfs/blob/225cac97e9/just-backup-btrfs.spec
Spec file for a golang
# use bundled golang modules (from Source1) %global gomodulesmode GO111MODULE=off # see Source0 %global goipath github.com/foo/bar Summary: foo Name: foo Version: 1.0 Release: 1 License: MIT Group: Development/Other Url: http://github.com/foo/bar Source0: http://github.com/foo/bar/archive/refs/tags/v%{version}.tar.gz?/%{name}-%{version}.tar.gz # unpack source and run 'go mod vendor' in source dir, tar.gz 'vendor' dir Source1: vendor.tar.gz BuildRequires: golang %gometa %description %{summary}. %files %{_bindir}/%{name} #---------------------------------------------------------------------------- %prep %goprep # prepare vendored modules tar -xf %{SOURCE1} cp -r ./vendor/* _build/src/ %build %gobuild -o %{gobuilddir}/bin/%{name} %{goipath}/cmd/%{name} %install install -d %{buildroot}%{_bindir} install -Dm0755 %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir}
See also: https://abf.io/import/rclone, https://abf.io/import/glab, https://abf.io/import/ha_cluster_exporter