File mingw64-libqt6-qtbase.spec of Package mingw64-libqt6-qtbase

#
# spec file for package mingw64-libqt6-qtbase
#
# Copyright (c) 2024, Martin Hauke <mardnh@gmx.de>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


%define real_version 6.6.2
%define short_version 6.6
%define tar_name qtbase-everywhere-src

# HACK: manually remove  dependency on api-ms-win-core-winrt-*
#  rpm -q --requires mingw64-libqt6-qtbase-devel |grep winrt
#  mingw64(api-ms-win-core-winrt-l1-1-0.dll)
#  mingw64(api-ms-win-core-winrt-string-l1-1-0.dll)
%global __requires_exclude mingw64\\(api-ms-win-core-winrt-l1-1-0.dll\\)|mingw64\\(api-ms-win-core-winrt-string-l1-1-0.dll\\)|mingw64\\(api-ms-win-core-synch-l1-2-0.dll\\)

Name:           mingw64-libqt6-qtbase
Version:        6.6.2
Release:        0
Summary:        Qt6 for Windows - core components (Core, Gui, Widgets, Network...)
# Legal: qtpaths is BSD-3-Clause
License:        LGPL-2.1-with-Qt-Company-Qt-exception-1.1 OR LGPL-3.0-only
Group:          Development/Libraries
URL:            https://www.qt.io
Source:         https://download.qt.io/official_releases/qt/%{short_version}/%{real_version}/submodules/%{tar_name}-%{real_version}.tar.xz
Patch0:         https://src.fedoraproject.org/rpms/mingw-qt6-qtbase/raw/rawhide/f/qtbase-mingw.patch
BuildRequires:  qt6-base-devel
BuildRequires:  mingw64-cross-cmake
BuildRequires:  mingw64-cross-gcc-c++
BuildRequires:  mingw64-cross-pkgconf
BuildRequires:  mingw64-libharfbuzz-devel
BuildRequires:  mingw64-libicu-devel
BuildRequires:  mingw64-brotli-devel
BuildRequires:  mingw64-freetype-devel
BuildRequires:  mingw64-fontconfig-devel
BuildRequires:  mingw64-libjpeg8-devel
BuildRequires:  mingw64-libopenssl-1_1-devel
BuildRequires:  mingw64-double-conversion-devel
BuildRequires:  mingw64-libpng-devel
BuildRequires:  mingw64-libb2-devel
BuildRequires:  mingw64-pcre2-devel
BuildRequires:  mingw64-sqlite-devel
BuildRequires:  mingw64-mysql-connector-c-devel
BuildRequires:  mingw64-vulkan-devel
BuildRequires:  mingw64-zstd-devel
BuildRequires:  mingw64-zlib-devel
%_mingw64_package_header_debug
BuildArch:      noarch
Requires:       mingw64-libopenssl1_1

%description
This package contains the Qt6 software toolkit for developing
cross-platform applications.

This is the Windows version of Qt6, for use in conjunction with the
MinGW cross-compiler.

%package -n mingw64-libqt6-qtbase-devel
Summary:        Qt6 for Windows build environment
Group:          Development/Libraries
Requires:       mingw64-cross-cmake
Requires:       mingw64-cross-gcc-c++
Requires:       mingw64-cross-pkgconf
Requires:       mingw64-libqt6-qtbase = %{version}-%{release}
Requires:       mingw64-libqt6-common-devel = %{version}
Provides:       mingw64-cross-libqt6-qmake = %{version}-%{release}
Provides:       mingw64-libqt6-qtbase-private-headers-devel = %{version}
Provides:       mingw64-libQt6Core-private-headers-devel = %{version}
Provides:       mingw64-libQt6Gui-private-headers-devel = %{version}
BuildArch:      noarch

%description -n mingw64-libqt6-qtbase-devel
Contains the files required to get various Qt tools built
which are part of the mingw-qt6-qttools package.

%_mingw64_debug_package

%prep
%setup -q -n %{tar_name}-%{version}
%autopatch -p1

# Remove bundled libraries
rm -Rfv src/3rdparty/{freetype,libjpeg,libpng,pcre2,sqlite,zlib}

# Fix shebang
find . -type f -name "*.py" -exec sed -i -e 's|/usr/bin/env python3|/usr/bin/python3|g' {} \;

%build
%{_mingw64_cmake} \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DQT_HOST_PATH=%{_prefix} \
    -DQT_HOST_PATH_CMAKE_DIR=%{_libdir}/cmake \
    -DINSTALL_ARCHDATADIR=lib/qt6 \
    -DINSTALL_BINDIR=bin \
    -DINSTALL_DATADIR=share/qt6 \
    -DINSTALL_DOCDIR=share/doc/qt6 \
    -DINSTALL_INCLUDEDIR=include/qt6 \
    -DINSTALL_MKSPECSDIR=lib/qt6/mkspecs \
    -DQT_FEATURE_relocatable=OFF \
    -DQT_DFEATURE_pkg_config=ON \
    -DQT_FEATURE_accessibility=ON \
    -DQT_FEATURE_zstd=ON \
    -DQT_FEATURE_thread=ON \
    -DQT_FEATURE_egl=OFF \
    -DQT_FEATURE_fontconfig=OFF \
    -DQT_FEATURE_sql_mysql=ON \
    -DQT_FEATURE_icu=ON \
    -DQT_FEATURE_openssl_linked=ON \
    -DQT_FEATURE_separate_debug_info=OFF \
    -DQT_FEATURE_system_harfbuzz=ON \
    -DQT_FEATURE_system_doubleconversion=ON \
    -DQT_FEATURE_system_libb2=ON \
    -DQT_FEATURE_system_sqlite=ON \
    -DQT_FEATURE_system_sqlite=ON \
    -DQT_FEATURE_system_zlib=ON \
    -DQT_FEATURE_system_pcre2=ON \
    -DQT_FEATURE_system_jpeg=ON \
    -DQT_FEATURE_system_png=ON \
    -DQT_FEATURE_system_freetype=ON \
    -DQT_FEATURE_system_brotli=ON
%{_mingw64_cmake_build}

%install
%{_mingw64_cmake_install}

# Remove uneeded files
rm %{buildroot}%{_mingw64_bindir}/qt-configure-module
rm %{buildroot}%{_mingw64_bindir}/qmake6
rm %{buildroot}%{_mingw64_bindir}/qtpaths6
rm %{buildroot}%{_mingw64_libdir}/qt6/bin/android_emulator_launcher.sh
rm %{buildroot}%{_mingw64_libdir}/qt6/bin/ensure_pro_file.cmake
rm -Rfv %{buildroot}/%{_mingw64_libdir}/objects-RelWithDebInfo/

# Move host scripts
install -d %{buildroot}%{_prefix}/%{_mingw64_target}/bin/qt6
mv %{buildroot}%{_mingw64_bindir}/{target_qt.conf,qmake,qt-cmake,qtpaths,qt-cmake-create} %{buildroot}%{_prefix}/%{_mingw64_target}/bin/qt6

# Fix relative path to toolchain file
sed -Ei 's|toolchain_path="$script_dir_path/(.*)/cmake/(.*)"|toolchain_path=$script_dir_path/../../sysroot/mingw/libs/\2|' %{buildroot}%{_prefix}/%{_mingw64_target}/bin/qt6/qt-cmake

# Fix relative paths to prefixes
sed -i 's|Prefix=.*|Prefix=%{_mingw64_prefix}|g' %{buildroot}%{_prefix}/%{_mingw64_target}/bin/qt6/target_qt.conf
sed -i 's|HostPrefix=.*|HostPrefix=%{_prefix}|g' %{buildroot}%{_prefix}/%{_mingw64_target}/bin/qt6/target_qt.conf

# target-prefixed symlinks
install -d %{buildroot}%{_bindir}
ln -s %{_prefix}/%{_mingw64_target}/bin/qt6/qmake %{buildroot}%{_bindir}/%{_mingw64_target}-qmake-qt6
ln -s %{_prefix}/%{_mingw64_target}/bin/qt6/qt-cmake %{buildroot}%{_bindir}/%{_mingw64_target}-qt6-cmake

# Inject CROSS_COMPILE var to win32-g++ spec
sed -i "1i CROSS_COMPILE=%{_mingw64_target}-" %{buildroot}%{_mingw64_libdir}/qt6/mkspecs/win32-g++/qmake.conf 

%files
%{_mingw64_bindir}/Qt6*.dll

%files -n mingw64-libqt6-qtbase-devel
%license LICENSES/GPL*
%license LICENSES/LGPL*
%{_mingw64_includedir}/qt6/
%{_mingw64_libdir}/libQt6*.a
%{_mingw64_libdir}/Qt6*.prl
%{_mingw64_libdir}/pkgconfig/*.pc
%{_mingw64_libdir}/cmake/
%{_mingw64_libdir}/qt6/mkspecs/
%{_mingw64_libdir}/qt6/metatypes/
%{_mingw64_libdir}/qt6/modules/
%dir %{_mingw64_libdir}/qt6/plugins/
%dir %{_mingw64_libdir}/qt6/plugins/generic/
%{_mingw64_libdir}/qt6/plugins/generic/*.dll
%dir %{_mingw64_libdir}/qt6/plugins/imageformats/
%{_mingw64_libdir}/qt6/plugins/imageformats/*.dll
%dir %{_mingw64_libdir}/qt6/plugins/networkinformation/
%{_mingw64_libdir}/qt6/plugins/networkinformation/*.dll
%dir %{_mingw64_libdir}/qt6/plugins/platforms/
%{_mingw64_libdir}/qt6/plugins/platforms/*.dll
%dir %{_mingw64_libdir}/qt6/plugins/sqldrivers/
%{_mingw64_libdir}/qt6/plugins/sqldrivers/*.dll
%dir %{_mingw64_libdir}/qt6/plugins/styles/
%{_mingw64_libdir}/qt6/plugins/styles/*.dll
%dir %{_mingw64_libdir}/qt6/plugins/tls/
%{_mingw64_libdir}/qt6/plugins/tls/*.dll
%dir %{_mingw64_libdir}/qt6/
%dir %{_mingw64_libdir}/qt6/bin/
%{_mingw64_libdir}/qt6/bin/qt-cmake-private
%{_mingw64_libdir}/qt6/bin/qt-cmake-private-install.cmake
%{_mingw64_libdir}/qt6/bin/qt-cmake-standalone-test
%{_mingw64_libdir}/qt6/bin/qt-internal-configure-tests
%{_mingw64_libdir}/qt6/bin/qt-testrunner.py
%{_mingw64_libdir}/qt6/bin/sanitizer-testrunner.py
%{_mingw64_docdir}/qt6/
## FIXME: qmake stuff should be handled properly
%dir %{_prefix}/%{_mingw64_target}/bin/qt6/
%{_prefix}/%{_mingw64_target}/bin/qt6/qmake
%{_prefix}/%{_mingw64_target}/bin/qt6/qt-cmake
%{_prefix}/%{_mingw64_target}/bin/qt6/qt-cmake-create
%{_prefix}/%{_mingw64_target}/bin/qt6/qtpaths
%{_prefix}/%{_mingw64_target}/bin/qt6/target_qt.conf
%{_bindir}/%{_mingw64_target}-qmake-qt6
%{_bindir}/%{_mingw64_target}-qt6-cmake

%changelog
openSUSE Build Service is sponsored by