diff --git a/doc/building.dox b/doc/building.dox index 05ed3d918..fa2049df5 100644 --- a/doc/building.dox +++ b/doc/building.dox @@ -72,6 +72,7 @@ control and @ref building-cross for cross-compiling to other platforms. - @ref building-packages-msys - @ref building-packages-deb - @ref building-packages-gentoo +- @ref building-packages-rpm - @ref building-packages-brew The engine itself is kept as small as possible with only minimal dependencies. @@ -303,6 +304,31 @@ There are also Gentoo packages for @ref building-plugins-packages-gentoo "Magnum @ref building-extras-packages-gentoo "Magnum Extras" and @ref building-examples-packages-gentoo "Magnum Examples". +@subsection building-packages-rpm Packages for Fedora, openSUSE and other RPM-based Linux distributions + +Spec files for RPM-based distributions are in the `package/rpm/` directory. In +addition you will need to install the following dependencies in order to build +the packages (assuming Fedora Linux): + +@code{.sh} +sudo dnf install fedora-packager rpmdevtools +@endcode + +After that, run the `build.sh` script. Internally it queries the Git version, +makes a tarball, may ask you to install appropriate dependencies if not present +already, and then builds the package. + +@code{.sh} +./package/rpm/build.sh +@endcode + +At the end, if everything succeeds, you'll have the newly built packages +located in `~/rpmbuild/RPMS`. The script will print their names at the end. + +If you want to pass additional flags to CMake or +@ref building-features "enable / disable additional features", edit the +`*.spec` file. + @subsection building-packages-brew Homebrew formulas for macOS macOS [Homebrew](https://brew.sh) formulas building the latest Git revision are diff --git a/package/rpm/build.sh b/package/rpm/build.sh new file mode 100755 index 000000000..29b00a5d0 --- /dev/null +++ b/package/rpm/build.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +set -e + +# Get version slug +version_hash=$(git describe --match "v*" | sed 's/^v//' | sed 's/-/./g') +echo "** repository hash: ${version_hash} ..." + +# Create dir tree for rpmbuild in user dir +rpmdev-setuptree + +# Archive repository +(cd ../.. && git archive --format=tar.gz --prefix=magnum-${version_hash}/ -o ~/rpmbuild/SOURCES/magnum-${version_hash}.tar.gz HEAD) +echo "** created archive: ~/rpmbuild/SOURCES/magnum-${version_hash}.tar.gz" +sleep 2 + +# Replace spec version +sed -i "s/Version:.\+/Version: ${version_hash}/g" magnum.spec +echo "** building package version: ${version_hash}" + +# Check dependencies +sudo dnf builddep -y magnum.spec + +# Build package +rpmbuild --define "debug_package %{nil}" --clean -ba magnum.spec + +echo "** packages for magnum-${version_hash} complete:" +ls ~/rpmbuild/RPMS/$(uname -m)/magnum-${version_hash}*.rpm | cat diff --git a/package/rpm/magnum.spec b/package/rpm/magnum.spec new file mode 100644 index 000000000..c47697627 --- /dev/null +++ b/package/rpm/magnum.spec @@ -0,0 +1,104 @@ +Name: magnum +URL: http://magnum.graphics +Version: 2020.06.2972.g8b832382a +Release: 1 +Summary: C++11/C++14 graphics middleware for games and data visualization +License: MIT +Source: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +Requires: corrade, openal-soft, mesa-libGL, mesa-libEGL, SDL2, glfw, vulkan-loader, glslang +BuildRequires: cmake, git, gcc-c++, openal-soft-devel, mesa-libGL-devel, mesa-libEGL-devel, SDL2-devel, glfw-devel, vulkan-loader-devel +# Fedora 35 also seems to need the mesa-vulkan-devel package + +%description +Looking for an open-source library that gives you graphics abstraction +and platform independence on major desktop, mobile and web platforms? +Do you want it to have all the convenience utilities around yet stay small, +powerful and not give up on flexibility? + +%package devel +Summary: Magnum development files +Requires: %{name} = %{version} + +%description devel +Headers and tools needed for developing with Magnum engine. + +%prep +%setup -c -n %{name}-%{version} + +%build +mkdir build && cd build + +# Configure CMake +cmake ../%{name}-%{version} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=%{_prefix} \ + -DMAGNUM_WITH_AUDIO=ON \ + -DMAGNUM_WITH_VK=ON \ + -DMAGNUM_WITH_GLFWAPPLICATION=ON \ + -DMAGNUM_WITH_GLXAPPLICATION=ON \ + -DMAGNUM_WITH_SDL2APPLICATION=ON \ + -DMAGNUM_WITH_XEGLAPPLICATION=ON \ + -DMAGNUM_WITH_WINDOWLESSEGLAPPLICATION=ON \ + -DMAGNUM_WITH_WINDOWLESSGLXAPPLICATION=ON \ + -DMAGNUM_WITH_EGLCONTEXT=ON \ + -DMAGNUM_WITH_GLXCONTEXT=ON \ + -DMAGNUM_WITH_OPENGLTESTER=ON \ + -DMAGNUM_WITH_ANYAUDIOIMPORTER=ON \ + -DMAGNUM_WITH_ANYIMAGECONVERTER=ON \ + -DMAGNUM_WITH_ANYIMAGEIMPORTER=ON \ + -DMAGNUM_WITH_ANYSCENECONVERTER=ON \ + -DMAGNUM_WITH_ANYSCENEIMPORTER=ON \ + -DMAGNUM_WITH_ANYSHADERCONVERTER=ON \ + -DMAGNUM_WITH_MAGNUMFONT=ON \ + -DMAGNUM_WITH_MAGNUMFONTCONVERTER=ON \ + -DMAGNUM_WITH_OBJIMPORTER=ON \ + -DMAGNUM_WITH_TGAIMAGECONVERTER=ON \ + -DMAGNUM_WITH_TGAIMPORTER=ON \ + -DMAGNUM_WITH_WAVAUDIOIMPORTER=ON \ + -DMAGNUM_WITH_DISTANCEFIELDCONVERTER=ON \ + -DMAGNUM_WITH_FONTCONVERTER=ON \ + -DMAGNUM_WITH_IMAGECONVERTER=ON \ + -DMAGNUM_WITH_SCENECONVERTER=ON \ + -DMAGNUM_WITH_SHADERCONVERTER=ON \ + -DMAGNUM_WITH_GL_INFO=ON \ + -DMAGNUM_WITH_VK_INFO=ON \ + -DMAGNUM_WITH_AL_INFO=ON + +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT +cd build +make DESTDIR=$RPM_BUILD_ROOT install +strip $RPM_BUILD_ROOT/%{_libdir}/*.so* +strip $RPM_BUILD_ROOT/%{_libdir}/magnum/*/*.so* +strip $RPM_BUILD_ROOT/%{_bindir}/* + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%{_bindir}/* +%{_libdir}/*.a +%{_libdir}/*.so* +%{_libdir}/magnum/*/*.so* +%{_libdir}/magnum/*/*.conf + +%doc %{name}-%{version}/COPYING + +%files devel +%defattr(-,root,root,-) +%{_includedir}/Magnum +%{_includedir}/MagnumExternal +%{_includedir}/MagnumPlugins +%{_datadir}/cmake/Magnum +%{_datadir}/gdb/python/magnum/ + +%changelog +* Initial release.