File celestia.spec of Package celestia
#
# spec file for package celestia
#
# copyright (c) 2025 munix9@googlemail.com
#
%define _sver 1_7
%define _gitv %{nil}
%define _desc Celestia is a free 3D astronomy program. Based on the Hipparcos\
Catalogue, it allows users to display objects ranging in scale from\
artificial satellites to entire galaxies in three dimensions using\
OpenGL. Unlike most planetarium software, the user is free to travel\
about the Universe.
%ifarch %{arm} %{arm64}
%bcond_without gles
%else
%bcond_with gles
%endif
Name: celestia
Version: 1.7.0
Release: 0
Summary: Real-time visual space simulation
License: GPL-2.0-or-later AND MIT-0
URL: https://celestiaproject.space/
Source0: %{name}-%{version}.tar.gz
Source1: baselibs.conf
Source2: x-%{name}-script.xml
Source10: https://data.iana.org/time-zones/data/leap-seconds.list
Source20: fisheye-%{name}_cfg.patch
# https://github.com/CelestiaProject/Celestia/issues/1174#issuecomment-979214076
Source21: fisheye-hook.lua
Source99: %{name}.rpmlintrc
Patch0: fix-appimage_dir.patch
Patch1: fix-leap-seconds.patch
Patch2: fix-spice-call-to-mktemp.patch
BuildRequires: boost-devel
BuildRequires: cmake
BuildRequires: desktop-file-utils
BuildRequires: fdupes
BuildRequires: gperf
BuildRequires: ninja
BuildRequires: pkgconfig
BuildRequires: pkgconfig(eigen3)
BuildRequires: pkgconfig(epoxy)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(icu-uc)
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavif)
BuildRequires: pkgconfig(libavutil)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(libswscale)
BuildRequires: pkgconfig(luajit)
BuildRequires: pkgconfig(zlib)
Requires: %{name}-common = %{version}
Requires: %{name}-data >= 1.7.0~
Requires: %{name}-ui = %{version}
Recommends: %{name}-qt6 = %{version}
Suggests: %{name}-tools
Provides: bundled(cspice) = N0067
Provides: bundled(miniaudio) = 0.11.17
%if %{with gles}
BuildRequires: pkgconfig(glesv2)
%endif
%if 0%{?suse_version} < 1600
# revert https://github.com/CelestiaProject/Celestia/commit/36ede2918ec748345c2c1c64261fa2a078530715
Patch10: fix-assume-SDL2-target-is-always-available.patch
BuildRequires: gcc10-PIE
BuildRequires: gcc10-c++
Provides: bundled(fmt) = 8.1.0
%else
BuildRequires: gcc-c++
BuildRequires: pkgconfig(fmt)
%endif
%description
%{_desc}
%package -n lib%{name}%{_sver}
Summary: Library for the Celestia space simulator
Suggests: %{name} = %{version}
%description -n lib%{name}%{_sver}
%{_desc}
This package includes the libcelestia library, which is
necessary to run Celestia.
%package qt5
Summary: Real-time visual space simulation (Qt 5 frontend)
BuildRequires: libqt5-qtbase-private-headers-devel
BuildRequires: pkgconfig(Qt5Core)
BuildRequires: pkgconfig(Qt5Gui)
BuildRequires: pkgconfig(Qt5OpenGL)
BuildRequires: pkgconfig(Qt5Widgets)
BuildRequires: pkgconfig(wayland-client)
BuildRequires: pkgconfig(wayland-protocols)
BuildRequires: pkgconfig(wayland-scanner)
Requires: %{name} = %{version}
Provides: %{name}-ui = %{version}
Provides: %{name}-qt = %{version}
Obsoletes: %{name}-qt < %{version}
%description qt5
%{_desc}
This package contains the Qt 5 frontend for Celestia.
%package qt6
Summary: Real-time visual space simulation (Qt 6 frontend)
BuildRequires: qt6-base-private-devel
BuildRequires: cmake(Qt6OpenGLWidgets)
BuildRequires: cmake(Qt6Widgets)
Requires: %{name} = %{version}
Provides: %{name}-ui = %{version}
%description qt6
%{_desc}
This package contains the Qt 6 frontend for Celestia.
%package sdl
Summary: Real-time visual space simulation (SDL frontend)
License: GPL-2.0-or-later AND MIT
BuildRequires: pkgconfig(sdl2)
Requires: %{name} = %{version}
Provides: %{name}-ui = %{version}
Provides: bundled(imgui) = 1.91.9
%description sdl
%{_desc}
This package contains the SDL frontend for Celestia.
%package common
Summary: Common files for Celestia, a real-time visual space simulation
BuildRequires: dejavu-fonts
Requires: %{name} = %{version}
Requires: dejavu-fonts
Obsoletes: %{name}-doc < %{version}
Provides: %{name}-doc = %{version}
Obsoletes: %{name}-lang < %{version}
Provides: %{name}-lang = %{version}
BuildArch: noarch
%description common
%{_desc}
This package contains the files common for all Celestia frontends.
%package tools
Summary: Real-time visual space simulation
Suggests: %{name} >= 1.7.0~
Suggests: %{name}-tools-qt5
Suggests: %{name}-tools-qt6
%description tools
%{_desc}
This package contains tools required to create data files for Celestia.
%package tools-qt5
Summary: Real-time visual space simulation
Provides: %{name}-tools-qt = %{version}
Obsoletes: %{name}-tools-qt < %{version}
Suggests: %{name} >= 1.7.0~
Suggests: %{name}-tools
%description tools-qt5
%{_desc}
This package contains Qt 5 tools required to create data files for Celestia.
%package tools-qt6
Summary: Real-time visual space simulation
Suggests: %{name} >= 1.7.0~
Suggests: %{name}-tools
%description tools-qt6
%{_desc}
This package contains Qt 6 tools required to create data files for Celestia.
%prep
%autosetup -p1
# fix wrong-file-end-of-line-encoding
sed -i 's/\r$//' src/tools/xindex/{buildxindices.pl,readme.txt}
# fix env-script-interpreter
sed -i '1s|^#!.*|#!%{_bindir}/python3|' src/tools/stardb/prunestars.py
%build
%define __builder ninja
CFLAGS="%{optflags} -I$(pkg-config --variable=includedir wayland-client)"
%if 0%{?suse_version} < 1600
CFLAGS="$CFLAGS -I%{_includedir}/SDL2"
%endif
export CFLAGS="$CFLAGS -fno-strict-aliasing"
export CXXFLAGS="$CFLAGS"
# required by doctest
export LD_LIBRARY_PATH=$PWD/build/src/%{name}:$LD_LIBRARY_PATH
if [ -n "%{_gitv}" ] ; then
_git_commit=$(echo "%{_gitv}" | head -c 9)
elif echo "%{version}" | grep -q '~git' ; then
_git_commit=$(cut -d '+' -f 2 <<< '%{version}')
#elif [ -f "%%{_sourcedir}/%%{name}.obsinfo" ] ; then
# _git_commit=$(sed -n -e 's,^commit: \(.\{9\}\).*,\1,p' "%%{_sourcedir}/%%{name}.obsinfo")
else
_git_commit=$(date -u -d@$SOURCE_DATE_EPOCH -I)
fi
%cmake \
%if 0%{?suse_version} < 1600
-DCMAKE_C_COMPILER=gcc-10 \
-DCMAKE_CXX_COMPILER=g++-10 \
%endif
%if %{with gles}
-DENABLE_GLES=ON \
%endif
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_SKIP_RPATH=ON \
-DCELCFG_EXTRAS_DIRS="\"~/.celestia\"" \
-DENABLE_FFMPEG=ON \
-DENABLE_LIBAVIF=ON \
-DENABLE_LTO=ON \
-DENABLE_MINIAUDIO=ON \
-DENABLE_QT5=ON \
-DENABLE_QT6=ON \
-DENABLE_SDL=ON \
-DENABLE_SPICE=ON \
-DENABLE_TESTS=ON \
-DENABLE_TOOLS=ON \
-DENABLE_WIN=OFF \
-DGIT_COMMIT="$_git_commit" \
-DLUA_INCLUDE_DIR="$(pkg-config --variable=includedir luajit)" \
-DSPICE_BUILD_SHARED_LIBRARY=OFF \
-DUSE_ICU=ON \
-DUSE_WAYLAND=ON
%cmake_build
%install
# required by doctest
export LD_LIBRARY_PATH=$PWD/build/src/%{name}:$LD_LIBRARY_PATH
%cmake_install
# leap-seconds.list (use system default, if available)
install -D -m 0644 -t %{buildroot}%{_datadir}/%{name} %{SOURCE10}
if [ -s %{_datadir}/zoneinfo/leap-seconds.list ] ; then
mv %{buildroot}%{_datadir}/%{name}/leap-seconds.{list,%{name}}
ln -sf %{_datadir}/zoneinfo/leap-seconds.list %{buildroot}%{_datadir}/%{name}/
fi
# move celestia.cfg to /etc/
install -D -m 0644 -t %{buildroot}%{_sysconfdir} %{buildroot}%{_datadir}/%{name}/%{name}.cfg
ln -sf %{_sysconfdir}/%{name}.cfg %{buildroot}%{_datadir}/%{name}/
# fisheye
install -m 0644 %{buildroot}%{_sysconfdir}/%{name}.cfg fisheye-%{name}.cfg
patch -p1 -i %{SOURCE20}
install -m 0644 -t %{buildroot}%{_datadir}/%{name} fisheye-%{name}.cfg %{SOURCE21}
# use system fonts
ln -sf %{_datadir}/fonts/truetype/DejaVuSans{,-Bold}.ttf %{buildroot}%{_datadir}/%{name}/fonts/
# mime
install -D -m 0644 -t %{buildroot}%{_datadir}/mime/packages %{SOURCE2}
# tools
install -m 0755 -t %{buildroot}%{_bindir} src/tools/stardb/prunestars.py \
build/src/tools/spice2xyzv/spice2xyzv
install -D -m 0644 src/tools/cmod/readme.txt %{buildroot}%{_docdir}/%{name}-tools/cmod-readme.txt
install -m 0644 src/tools/stardb/readme.txt %{buildroot}%{_docdir}/%{name}-tools/stardb-readme.txt
install -m 0644 src/tools/xindex/readme.txt %{buildroot}%{_docdir}/%{name}-tools/xindex-readme.txt
%find_lang %{name}
%fdupes %{buildroot}%{_datadir}/%{name}
%check
for d in qt5 qt6 sdl ; do
desktop-file-validate \
%{buildroot}%{_datadir}/applications/space.%{name}project.%{name}_${d}.desktop
done
export LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH
%ctest --parallel 1 --timeout 60 --verbose
%ldconfig_scriptlets -n lib%{name}%{_sver}
%files
%license COPYING thirdparty/miniaudio/LICENSE
%doc AUTHORS README README.md TRANSLATORS
%dir %{_datadir}/%{name}
%files -n lib%{name}%{_sver}
%license COPYING
%{_libdir}/lib%{name}*
%files qt5
%{_bindir}/%{name}-qt5
%{_datadir}/applications/space.%{name}project.%{name}_qt5.desktop
%{_datadir}/metainfo/space.%{name}project.%{name}_qt5.metainfo.xml
%{_mandir}/man1/%{name}-qt5.1%{?ext_man}
%files qt6
%{_bindir}/%{name}-qt6
%{_datadir}/applications/space.%{name}project.%{name}_qt6.desktop
%{_datadir}/metainfo/space.%{name}project.%{name}_qt6.metainfo.xml
%{_mandir}/man1/%{name}-qt6.1%{?ext_man}
%files sdl
%license COPYING thirdparty/imgui/LICENSE.txt
%{_bindir}/%{name}-sdl
%{_datadir}/applications/space.%{name}project.%{name}_sdl.desktop
%{_datadir}/metainfo/space.%{name}project.%{name}_sdl.metainfo.xml
%{_mandir}/man1/%{name}-sdl.1%{?ext_man}
%files common -f %{name}.lang
%{_datadir}/%{name}/%{name}.cfg
%{_datadir}/%{name}/COPYING
%{_datadir}/%{name}/controls.txt
%{_datadir}/%{name}/demo.cel
%{_datadir}/%{name}/fisheye-%{name}.cfg
%{_datadir}/%{name}/fisheye-hook.lua
%{_datadir}/%{name}/fonts
%{_datadir}/%{name}/guide.cel
%{_datadir}/%{name}/help
%{_datadir}/%{name}/images
%{_datadir}/%{name}/leap-seconds.*
%{_datadir}/%{name}/locale
%{_datadir}/%{name}/scripts
%{_datadir}/%{name}/shaders
%{_datadir}/%{name}/splash
%{_datadir}/%{name}/start.cel
%{_datadir}/mime/packages/x-%{name}-script.xml
%{_datadir}/pixmaps/%{name}.png
%config(noreplace) %{_sysconfdir}/%{name}.cfg
%files tools
%license COPYING
%doc %{_docdir}/%{name}-tools
%{_bindir}/3dstocmod
%{_bindir}/bin2xyzv
%{_bindir}/buildxindices.pl
%{_bindir}/charm2.pl
%{_bindir}/charm2simbatch.pl
%{_bindir}/cmodfix
%{_bindir}/cmodsphere
%{_bindir}/deepsky.pl
%{_bindir}/globulars.pl
%{_bindir}/makestardb
%{_bindir}/makexindex
%{_bindir}/prunestars.py
%{_bindir}/scattersim
%{_bindir}/scattertable
%{_bindir}/spectbins.pl
%{_bindir}/spice2xyzv
%{_bindir}/startextdump
%{_bindir}/txt2cmod
%{_bindir}/visualbins.pl
%{_bindir}/vsoptrunc-rect
%{_bindir}/vsoptrunc-sph
%{_bindir}/xyzv2bin
%{_bindir}/xyzv2bin.pl
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/naif0012.tls
%files tools-qt5
%license COPYING
%{_bindir}/cmodview-qt5
%files tools-qt6
%license COPYING
%{_bindir}/cmodview-qt6
%changelog