Files
desktop/qt6-base/qt6-base.spec
2026-02-11 17:02:55 +08:00

387 lines
12 KiB
RPMSpec

# SPDX-FileCopyrightText: (C) 2025 Institute of Software, Chinese Academy of Sciences (ISCAS)
# SPDX-FileCopyrightText: (C) 2025 openRuyi Project Contributors
# SPDX-FileContributor: yyjeqhc <1772413353@qq.com>
#
# SPDX-License-Identifier: MulanPSL-2.0
%define real_version 6.10.1
%define short_version 6.10
%define tar_name qtbase-everywhere-src
%define tar_suffix %{nil}
%bcond xcb 1
%bcond mysql 0
%bcond postgresql 0
%bcond tests 0
Name: qt6-base
Version: 6.10.1
Release: %autorelease
Summary: Qt 6 core components
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
URL: https://www.qt.io
#!RemoteAsset
Source0: https://mirrors.ustc.edu.cn/qtproject/official_releases/qt/%{short_version}/%{real_version}%{tar_suffix}/submodules/%{tar_name}-%{real_version}%{tar_suffix}.tar.xz
Source1: macros.qt6-qtbase
BuildSystem: cmake
# Moves object files installation destination to ARCHDATADIR.
Patch0: 0001-qtbase-CMake-Install-objects-files-into-ARCHDATADIR.patch
# Removes patch version from the private API version tag.
Patch1: 0002-qtbase-use-only-major-minor-for-private-api-tag.patch
# namespace QT_VERSION_CHECK to workaround major/minor being pre-defined (#1396755)
Patch2: 0003-qtbase-version-check.patch
# Adds _SYS_SYSMACROS_H_OUTER and __WORDSIZE macros to the moc preprocessor.
Patch3: 0004-qtbase-moc-macros.patch
# drop -O3 and make -O2 by default
Patch4: 0005-qtbase-cxxflag.patch
# fix for new mariadb
Patch5: 0006-qtbase-mysql.patch
# fix FTBFS against libglvnd-1.3.4+
Patch6: 0007-qtbase-libglvnd.patch
BuildOption(conf): -DINSTALL_ARCHDATADIR=%{_qt6_archdatadir}
BuildOption(conf): -DINSTALL_BINDIR=%{_qt6_bindir}
BuildOption(conf): -DINSTALL_DATADIR=%{_qt6_datadir}
BuildOption(conf): -DINSTALL_DESCRIPTIONSDIR=%{_qt6_descriptionsdir}
BuildOption(conf): -DINSTALL_DOCDIR=%{_qt6_docdir}
BuildOption(conf): -DINSTALL_EXAMPLESDIR=%{_qt6_examplesdir}
BuildOption(conf): -DINSTALL_INCLUDEDIR=%{_qt6_includedir}
BuildOption(conf): -DINSTALL_LIBDIR=%{_qt6_libdir}
BuildOption(conf): -DINSTALL_LIBEXECDIR=%{_qt6_libexecdir}
BuildOption(conf): -DINSTALL_MKSPECSDIR=%{_qt6_mkspecsdir}
BuildOption(conf): -DINSTALL_PLUGINSDIR=%{_qt6_pluginsdir}
BuildOption(conf): -DINSTALL_QMLDIR=%{_qt6_qmldir}
BuildOption(conf): -DINSTALL_SYSCONFDIR=%{_qt6_sysconfdir}
BuildOption(conf): -DINSTALL_TESTSDIR=%{_qt6_testsdir}
BuildOption(conf): -DINSTALL_TRANSLATIONSDIR=%{_qt6_translationsdir}
BuildOption(conf): -DBUILD_WITH_PCH=OFF
BuildOption(conf): -DQT_CREATE_VERSIONED_HARD_LINK=OFF
BuildOption(conf): -DQT_DISABLE_RPATH=OFF
BuildOption(conf): -DQT_GENERATE_SBOM=OFF
BuildOption(conf): -DFEATURE_elf_private_full_version=ON
BuildOption(conf): -DFEATURE_enable_new_dtags=ON
BuildOption(conf): -DFEATURE_reduce_relocations=OFF
BuildOption(conf): -DFEATURE_relocatable=OFF
BuildOption(conf): -DFEATURE_journald=ON
BuildOption(conf): -DFEATURE_libproxy=ON
BuildOption(conf): -DFEATURE_accessibility=ON
BuildOption(conf): -DFEATURE_fontconfig=ON
BuildOption(conf): -DFEATURE_glib=ON
BuildOption(conf): -DFEATURE_sctp=ON
BuildOption(conf): -DINPUT_opengl=es2
BuildOption(conf): -DFEATURE_opengles3=ON
BuildOption(conf): -DFEATURE_wayland=ON
BuildOption(conf): -DQT_BUILD_EXAMPLES=ON -DQT_INSTALL_EXAMPLES_SOURCES=ON
BuildOption(conf): -DINPUT_openssl=linked
BuildOption(conf): -DFEATURE_openssl_hash=ON
BuildOption(conf): -DFEATURE_system_sqlite=ON
%if %{with tests}
BuildOption(conf): -DQT_BUILD_TESTS=ON
%else
BuildOption(conf): -DQT_BUILD_TESTS=OFF
%endif
%if %{with xcb}
BuildOption(conf): -DFEATURE_system_xcb_xinput=ON
BuildOption(conf): -DFEATURE_xcb_native_painting=ON
BuildOption(conf): -DFEATURE_xcb=ON
%else
BuildOption(conf): -DFEATURE_xcb=OFF
%endif
%if %{with mysql}
BuildOption(conf): -DFEATURE_sql_mysql=ON
%endif
%if %{with postgresql}
BuildOption(conf): -DFEATURE_sql_psql=ON
%endif
BuildOption(conf): -DFEATURE_sql_odbc=ON
BuildRequires: cmake >= 3.18.3
BuildRequires: gcc-c++
BuildRequires: make
BuildRequires: perl
BuildRequires: qt6-macros
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(zlib)
BuildRequires: pkgconfig(libzstd)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(glesv2)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(freetype2)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(harfbuzz)
BuildRequires: pkgconfig(icu-i18n)
BuildRequires: pkgconfig(libpcre2-16)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(libinput)
BuildRequires: pkgconfig(libudev)
BuildRequires: pkgconfig(mtdev)
BuildRequires: pkgconfig(libproxy-1.0)
BuildRequires: pkgconfig(libsctp)
BuildRequires: cups-devel
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(wayland-client)
BuildRequires: pkgconfig(wayland-server)
BuildRequires: pkgconfig(wayland-cursor)
BuildRequires: pkgconfig(wayland-egl)
BuildRequires: pkgconfig(wayland-scanner)
BuildRequires: pkgconfig(egl)
BuildRequires: pkgconfig(gbm)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(libglvnd)
BuildRequires: pkgconfig(vulkan)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: unixODBC-devel
%if %{with xcb}
BuildRequires: pkgconfig(xcb-glx)
BuildRequires: libxcb-util1
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(x11-xcb)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xcb-cursor)
BuildRequires: pkgconfig(xcb-icccm)
BuildRequires: pkgconfig(xcb-image)
BuildRequires: pkgconfig(xcb-keysyms)
BuildRequires: pkgconfig(xcb-renderutil)
BuildRequires: pkgconfig(xcb-util)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(xkbcommon-x11)
BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(sm)
BuildRequires: pkgconfig(ice)
%endif
%if %{with mysql}
BuildRequires: mariadb-connector-c-devel
%endif
%if %{with postgresql}
BuildRequires: libpq-devel
%endif
%description
Qt is a software toolkit for developing applications.
%package common
Summary: Common files for Qt6
Requires: %{name}%{?_isa} = %{version}-%{release}
%description common
Common files for Qt6.
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}-gui%{?_isa}
Requires: qt6-macros
Requires: pkgconfig(egl)
Requires: pkgconfig(gl)
Requires: pkgconfig(xkbcommon)
Requires: pkgconfig(vulkan)
%description devel
Development files for Qt6.
%package private-devel
Summary: Development files for %{name} private APIs
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
Requires: cups-devel
%description private-devel
Private development files for Qt6.
%package static
Summary: Static library files for %{name}
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
Requires: pkgconfig(fontconfig)
Requires: pkgconfig(glib-2.0)
Requires: pkgconfig(libinput)
Requires: pkgconfig(xkbcommon)
Requires: pkgconfig(zlib)
%description static
Static library files for Qt6.
%package gui
Summary: Qt6 GUI-related libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: libxcb-util1
Conflicts: xcb-util
Requires: libxcb-image0
Conflicts: xcb-util-image
Requires: libxcb-render-util0
Conflicts: xcb-util-renderutil
Requires: libxcb-cursor0
Conflicts: xcb-util-cursor
Requires: libxkbcommon-x11-0
Conflicts: libxkbcommon-x11
# Requires: glx-utils
%description gui
Qt6 libraries used for drawing widgets and OpenGL items.
%package examples
Summary: Programming examples for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description examples
%{summary}.
%prep -a
rm -rf src/3rdparty/{harfbuzz-ng,freetype,libjpeg,libpng,sqlite,zlib,pcre2}
%install -a
mkdir -p %{buildroot}%{_qt6_pluginsdir}/{designer,iconengines,script,styles}
mkdir -p %{buildroot}%{_sysconfdir}/xdg/QtProject
mkdir %{buildroot}%{_bindir}
pushd %{buildroot}%{_qt6_bindir}
for i in * ; do
case "${i}" in
qdbuscpp2xml|qdbusxml2cpp|qtpaths)
ln -v ${i} %{buildroot}%{_bindir}/${i}-qt6
;;
*)
ln -v ${i} %{buildroot}%{_bindir}/${i}
;;
esac
done
popd
pushd %{buildroot}%{_qt6_libdir}
for prl_file in libQt6*.prl ; do
sed -i -e "/^QMAKE_PRL_BUILD_DIR/d" ${prl_file}
if [ -f "$(basename ${prl_file} .prl).so" ]; then
rm -fv "$(basename ${prl_file} .prl).la"
sed -i -e "/^QMAKE_PRL_LIBS/d" ${prl_file}
fi
done
popd
mkdir -p %{buildroot}%{_qt6_includedir}/QtXcb
if [ -d src/plugins/platforms/xcb ]; then
install -m 644 src/plugins/platforms/xcb/*.h %{buildroot}%{_qt6_includedir}/QtXcb/
fi
find %{buildroot}%{_qt6_libdir} -type f -name "*.o" -delete -print
rm -f %{buildroot}%{_qt6_libexecdir}/{ensure_pro_file.cmake,qt-android-runner.py,qt-testrunner.py,sanitizer-testrunner.py}
rm -rf %{buildroot}%{_qt6_libdir}/cmake/Qt6ExamplesAssetDownloaderPrivate
rm -rf %{buildroot}%{_qt6_includedir}/QtExamplesAssetDownloader
rm -f %{buildroot}%{_qt6_descriptionsdir}/ExamplesAssetDownloaderPrivate.json
rm -f %{buildroot}%{_qt6_libdir}/libQt6ExamplesAssetDownloader.*
rm -f %{buildroot}%{_qt6_libdir}/qt6/metatypes/qt6examplesassetdownloaderprivate_metatypes.json
rm -rf %{buildroot}%{_qt6_mkspecsdir}/features/uikit
install -p -m644 -D %{SOURCE1} %{buildroot}%{_rpmmacrodir}/macros.qt6-qtbase
sed -i \
-e "s|@@NAME@@|%{name}|g" \
-e "s|@@EPOCH@@|%{?epoch}%{!?epoch:0}|g" \
-e "s|@@VERSION@@|%{version}|g" \
-e "s|@@EVR@@|%{?epoch:%{epoch:}}%{version}-%{release}|g" \
%{buildroot}%{_rpmmacrodir}/macros.qt6-qtbase
%files
%license LICENSES/GPL* LICENSES/LGPL*
%{_qt6_libdir}/libQt6Core.so.6*
%{_qt6_libdir}/libQt6Concurrent.so.6*
%{_qt6_libdir}/libQt6DBus.so.6*
%{_qt6_libdir}/libQt6Network.so.6*
%{_qt6_libdir}/libQt6Sql.so.6*
%{_qt6_libdir}/libQt6Test.so.6*
%{_qt6_libdir}/libQt6Xml.so.6*
%{_qt6_docdir}/global/
%{_qt6_docdir}/config/
%dir %{_qt6_pluginsdir}/networkinformation/
%dir %{_qt6_pluginsdir}/sqldrivers/
%dir %{_qt6_pluginsdir}/tls/
%{_qt6_pluginsdir}/networkinformation/libqglib.so
%{_qt6_pluginsdir}/networkinformation/libqnetworkmanager.so
%{_qt6_pluginsdir}/sqldrivers/libqsqlite.so
%{_qt6_pluginsdir}/tls/libqcertonlybackend.so
%{_qt6_pluginsdir}/tls/libqopensslbackend.so
%{_qt6_pluginsdir}/sqldrivers/libqsqlodbc.so
%{_bindir}/qtpaths*
%{_qt6_bindir}/qtpaths*
%if %{with postgresql}
%{_qt6_pluginsdir}/sqldrivers/libqsqlpsql.so
%endif
%if %{with mysql}
%files mysql
%{_qt6_pluginsdir}/sqldrivers/libqsqlmysql.so
%endif
%files common
%{_rpmmacrodir}/macros.qt6-qtbase
%files devel
%{_bindir}/qmake*
%{_bindir}/qt-cmake
%{_bindir}/qt-cmake-create
%{_bindir}/qt-configure-module
%{_bindir}/qdbuscpp2xml*
%{_bindir}/qdbusxml2cpp*
%{_bindir}/androiddeployqt*
%{_bindir}/androidtestrunner
%{_qt6_bindir}/*
%{_qt6_libexecdir}/*
%{_qt6_includedir}/QtConcurrent/
%{_qt6_includedir}/QtCore/
%{_qt6_includedir}/QtDBus/
%{_qt6_includedir}/QtNetwork/
%{_qt6_includedir}/QtSql/
%{_qt6_includedir}/QtTest/
%{_qt6_includedir}/QtXml/
%{_qt6_libdir}/libQt6*.prl
%{_qt6_libdir}/libQt6*.so
%{_qt6_libdir}/cmake/Qt6/
%{_qt6_libdir}/cmake/Qt6BuildInternals/
%{_qt6_libdir}/cmake/Qt6Concurrent/
%{_qt6_libdir}/cmake/Qt6Core/
%{_qt6_libdir}/cmake/Qt6CoreTools/
%{_qt6_libdir}/cmake/Qt6DBus/
%{_qt6_libdir}/cmake/Qt6DBusTools/
%{_qt6_libdir}/cmake/Qt6HostInfo/
%{_qt6_libdir}/cmake/Qt6Network/
%{_qt6_libdir}/cmake/Qt6Sql/
%{_qt6_libdir}/cmake/Qt6Test/
%{_qt6_libdir}/cmake/Qt6Xml/
%{_qt6_descriptionsdir}/*.json
%{_qt6_metatypesdir}/*.json
%{_qt6_libdir}/pkgconfig/*.pc
%{_qt6_mkspecsdir}/*
%files private-devel
%{_qt6_includedir}/*
%{_qt6_libdir}/cmake/*
%files gui
%{_qt6_libdir}/libQt6Gui.so.6*
%{_qt6_libdir}/libQt6OpenGL.so.6*
%{_qt6_libdir}/libQt6OpenGLWidgets.so.6*
%{_qt6_libdir}/libQt6PrintSupport.so.6*
%{_qt6_libdir}/libQt6WaylandClient.so.6*
%{_qt6_libdir}/libQt6WlShellIntegration.so.6*
%{_qt6_libdir}/libQt6Widgets.so.6*
%{_qt6_libdir}/libQt6EglFSDeviceIntegration.so.6*
%{_qt6_libdir}/libQt6XcbQpa.so.6*
%{_qt6_pluginsdir}/generic/
%{_qt6_pluginsdir}/imageformats/
%{_qt6_pluginsdir}/platforminputcontexts/
%{_qt6_pluginsdir}/platforms/
%{_qt6_pluginsdir}/platformthemes/
%{_qt6_pluginsdir}/printsupport/
%{_qt6_pluginsdir}/wayland*/
%{_qt6_pluginsdir}/egldeviceintegrations/
%dir %{_qt6_pluginsdir}/xcbglintegrations/
%{_qt6_pluginsdir}/xcbglintegrations/libqxcb-egl-integration.so
%{_qt6_datadir}/wayland/
%files static
%{_qt6_libdir}/*.a
%files examples
%{_qt6_examplesdir}/
%changelog
%{?autochangelog}