Template Spec Files

From Rosalab Wiki
Jump to: navigation, search

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.bz2

%description
foo.

%files -f %{name}.lang

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

%prep
%setup -q

%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.bz2
BuildRequires:  cmake

%description
foo.

%files -f %{name}.lang

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

%prep
%setup -q

%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.bz2
BuildRequires:  cmake
BuildRequires:  qt4-devel

%description
foo.

%files -f %{name}.lang

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

%prep
%setup -q

%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.bz2
BuildRequires:  cmake
BuildRequires:  qt5-devel

%description
foo.

%files -f %{name}.lang

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

%prep
%setup -q

%build
%cmake_qt5
%make

%install
%makeinstall_std -C build

%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
%setup -qn %{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
%setup -qn %{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

%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 \
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
%setup -q

%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

%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)

# for autoinstall BuildRequires
%generate_buildrequires
%pyproject_buildrequires -r

%define _description \
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}

%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

%build
%py2_build

%install
%py2_install

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

%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 \
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
%setup -q

%build
%py2_build

%install
%py2_install

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

%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 \
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
%setup -q

%build
%py2_build
%py3_build

%install
%py2_install
%py3_install

See also

%py2_migration_meta

Spec file for a Library

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

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

%description
foo.

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

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

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

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

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

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

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

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

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

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

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

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

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

%prep
%setup -q

%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
%setup -q -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}
%{gem_dir}/specifications/%{gem_name}-%{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
%doc %{gem_docdir}
%doc %{gem_instdir}/CHANGELOG.md
%{gem_instdir}/Gemfile
%doc %{gem_instdir}/README.md
%doc %{gem_instdir}/SECURITY.md

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

%prep
%setup -q -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

%build
%gem_build

%install
%gem_install

Spec file for a Haskell Library

%define module foo

Summary:	foo
Name:		ghc-%{module}
Version:	1.0
Release:	1
License:	BSD
Group:		Development/Haskell
Url:		foo
Source0:	%{module}-%{version}.tar.gz
BuildRequires:	ghc-devel
BuildRequires:	haskell-macros
Requires(post,preun):	ghc

%description
%{summary}.

%files
%{_libdir}/%{module}-%{version}
%{_cabal_rpm_deps_dir}
%{_cabal_haddoc_files}

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

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

%build
%_cabal_build

%install
%_cabal_install
%_cabal_rpm_gen_deps
%_cabal_scriptlets

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:

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

Source example for Gitlab:

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

To update such a package:

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

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