File mingw64-gcc.spec of Package mingw64-gcc
#
# spec file for package mingw64-gcc
#
# Copyright (c) 2025 SUSE LLC
#
# 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 https://bugs.opensuse.org/
#
%define include_ada 0
%_mingw64_package_header_debug
Name: mingw64-gcc
Version: 13.2.0
Release: 0
Summary: MinGW Windows compiler (GCC) for C
License: GPL-3.0-or-later
Group: Development/Languages/C and C++
URL: http://www.mingw.org/
Source0: ftp://ftp.gnu.org/gnu/gcc/gcc-%{version}/gcc-%{version}.tar.xz
Source100: mingw64-gcc-rpmlintrc
Patch0: gcc-make-xmmintrin-header-cplusplus-compatible.patch
Patch1: gcc-12.1.0-fix-install-gdb-support-files.patch
BuildRequires: gcc-c++
BuildRequires: gmp-devel
BuildRequires: mingw64-cross-binutils
BuildRequires: mingw64-cross-gcc >= %{version}
BuildRequires: mingw64-cross-gcc-c++ >= %{version}
BuildRequires: mingw64-cross-gcc-fortran >= %{version}
BuildRequires: mingw64-cross-gcc-objc >= %{version}
BuildRequires: mingw64-cross-pkg-config
BuildRequires: mingw64-filesystem
BuildRequires: mingw64-gmp-devel >= 4.2.0
BuildRequires: mingw64-headers >= 3.1.0
BuildRequires: mingw64-mpc-devel >= 0.8.0
BuildRequires: mingw64-mpfr-devel >= 2.4.0
BuildRequires: mingw64-runtime >= 3.1.0
BuildRequires: mingw64-zlib-devel
BuildRequires: mpc-devel
BuildRequires: mpfr-devel
BuildRequires: texinfo
BuildRequires: unzip
BuildRequires: xz
BuildRequires: zip
#!BuildIgnore: gcc-PIE
#!BuildIgnore: post-build-checks
Requires: mingw64-binutils
Requires: mingw64-cpp >= %{version}
Requires: mingw64-headers
Requires: mingw64-runtime
Requires: mingw64-winpthreads-devel
%if %{include_ada}
BuildRequires: gcc-ada
BuildRequires: mingw64-cross-gcc-ada >= %{version}
%endif
BuildArch: noarch
# bugzilla.opensuse.org/1184052
#!BuildIgnore: mingw64(libstdc++-6.dll)
#!BuildIgnore: mingw64(libgcc_s_sjlj-1.dll)
%description
MinGW Windows compiler (GCC) for C
%package -n mingw64-libgcc_s_seh1
Summary: MinGW Windows compiler for C shared libraries
Group: System/Libraries
Obsoletes: mingw64-libgcc < %{version}-%{release}
Provides: mingw64-libgcc = %{version}-%{release}
%description -n mingw64-libgcc_s_seh1
MinGW Windows compiler for C shared libraries
This libgcc build supports Structured Exception Handling (SEH), which
is the native exception handling mechanism for Windows.
[SEH support is currently only implemented for the x86_64 target,
which is why the 32bit mingw package set does not contain it.]
%package -n mingw64-libgcc_s_sjlj1
Summary: MinGW Windows compiler for C shared libraries
Group: System/Libraries
Obsoletes: mingw64-libgcc < %{version}-%{release}
Provides: mingw64-libgcc = %{version}-%{release}
%description -n mingw64-libgcc_s_sjlj1
MinGW Windows compiler for C shared libraries
This libgcc build uses SJLJ, a method for exception handling based on
setjmp/longjmp. SJLJ-based EH is much slower than DWARF-2 EH,
penalizing even normal execution when no exceptions are thrown, but
can work across code that has not been compiled with GCC or that does
not have call-stack unwinding information.
[The DWARF-2 EH implementation for Windows is not at all designed to
work under 64-bit Windows applications. In Win32 mode, the exception
unwind handler cannot propagate through non-DW2 aware code, which
means that any exception going through any non-DW2-aware "foreign
frame" code will fail, including Windows system DLLs and DLLs built
with Visual Studio. DWARF-2 unwinding code in GCC inspects the x86
unwinding assembly and is unable to proceed without other DWARF-2
unwind information.]
%package -n mingw64-libssp0
Summary: MinGW Windows compiler for C shared libraries
Group: System/Libraries
Obsoletes: mingw64-libssp < %{version}-%{release}
Provides: mingw64-libssp = %{version}-%{release}
%description -n mingw64-libssp0
MinGW Windows compiler for C shared libraries
%package -n mingw64-libgomp1
Summary: MinGW Windows compiler for C shared libraries
Group: System/Libraries
Obsoletes: mingw64-libgomp < %{version}-%{release}
Provides: mingw64-libgomp = %{version}-%{release}
%description -n mingw64-libgomp1
MinGW Windows compiler for C shared libraries
%package -n mingw64-cpp
Summary: MinGW Windows C Preprocessor
Group: Development/Languages/C and C++
%description -n mingw64-cpp
MinGW Windows C Preprocessor
%package c++
Summary: MinGW Windows compiler for C++
Group: Development/Languages/C and C++
Requires: mingw64-libstdc++-gdb-printer = %{version}-%{release}
%description c++
MinGW Windows compiler for C++
%package -n mingw64-libstdc++6
Summary: MinGW Windows compiler for C++ shared libraries
Group: System/Libraries
Obsoletes: mingw64-libstdc++ < %{version}-%{release}
Provides: mingw64-libstdc++ = %{version}-%{release}
%description -n mingw64-libstdc++6
MinGW Windows compiler for C++ shared libraries
%package -n mingw64-libstdc++-gdb-printer
Summary: MinGW Windows compiler for C++ gdb pretty printer for libstdc++
Group: System/Libraries
%description -n mingw64-libstdc++-gdb-printer
MinGW Windows compiler for C++ gdb pretty printer for libstdc++
%package fortran
Summary: MinGW Windows compiler for Fortran
Group: Development/Languages/Fortran
%description fortran
MinGW Windows compiler for Fortran
%package -n mingw64-libgfortran5
Summary: MinGW Windows compiler for Fortran shared libraries
Group: System/Libraries
Obsoletes: mingw64-libgfortran < %{version}-%{release}
Provides: mingw64-libgfortran = %{version}-%{release}
%description -n mingw64-libgfortran5
MinGW Windows compiler for Fortran shared libraries
%package -n mingw64-libquadmath0
Summary: MinGW Windows Fortran Compiler Quadmath Runtime Library
Group: System/Libraries
%description -n mingw64-libquadmath0
The runtime library needed to run programs compiled with the Fortran
compiler of the GNU Compiler Collection (GCC) and quadruple precision
floating point operations.
%package -n mingw64-libatomic1
Summary: The GNU Compiler Atomic Operations Runtime Library
Group: System/Libraries
%description -n mingw64-libatomic1
The runtime library for atomic operations of the GNU Compiler Collection (GCC).
%package objc
Summary: MinGW Windows compiler for Objective-C and Objective-C++
Group: Development/Languages/Other
%description objc
MinGW Windows compiler for Objective-C and Objective-C++
%package -n mingw64-libobjc4
Summary: MinGW Windows compiler for Objective-C and Objective-C++ shared libraries
Group: System/Libraries
Obsoletes: mingw64-libobjc < %{version}-%{release}
Provides: mingw64-libobjc = %{version}-%{release}
%description -n mingw64-libobjc4
MinGW Windows compiler for Objective-C and Objective-C++ shared libraries
%_mingw64_debug_package
%prep
%autosetup -p1 -n gcc-%{version}
%build
mkdir -p build
cd build
languages="c,c++,fortran,objc,obj-c++"
%if %{include_ada}
languages+=",ada"
ada_options=-enable-libada
%else
ada_options=
%endif
CC_FOR_TARGET=%{_mingw64_cc} \
CXX_FOR_TARGET=%{_mingw64_cxx} \
GFORTRAN_FOR_TARGET=%{_mingw64_target}-gfortran \
GCJ_FOR_TARGET=%{_mingw64_gcj} \
CFLAGS_FOR_TARGET="-DGC_NOT_DLL %{_mingw64_cflags} -Wno-error=format -Wno-error=format-extra-args" \
CFLAGS_FOR_BUILD="-I-%{_mingw64_includedir}" \
CPPFLAGS_FOR_BUILD="-I-%{_mingw64_includedir}" \
CXXFLAGS_FOR_BUILD="-I-%{_mingw64_includedir}" \
CXXFLAGS_FOR_TARGET="-DGC_NOT_DLL %{_mingw64_cflags} -Wno-error=format -Wno-error=format-extra-args" \
CPPFLAGS_FOR_TARGET="-DGC_NOT_DLL %{_mingw64_cflags}" \
../configure \
--prefix=%{_mingw64_prefix} \
--disable-werror \
--disable-werror-always \
--disable-bootstrap \
--host=%{_mingw64_host} \
--with-gnu-as --with-gnu-ld --verbose \
--without-newlib \
--disable-multilib \
--enable-plugin \
--with-system-zlib \
--disable-plugin \
--disable-nls --without-included-gettext \
--disable-win32-registry \
--enable-threads=posix \
--enable-version-specific-runtime-libs \
--with-build-sysroot=%{_mingw64_sysroot} \
--with-sysroot=%{_mingw64_prefix} \
--enable-languages="$languages" $optargs \
--without-x \
${ada_options} \
--disable-gmp \
--enable-hash-synchronization \
--enable-fully-dynamic-string \
--enable-libgomp \
--enable-linker-build-id \
--disable-vtable-verify \
--with-pkgversion="SUSE Linux"
make %{?_smp_mflags} all || make all
%install
cd build
%make_install
rm -f %{buildroot}%{_mingw64_infodir}/dir
mv %{buildroot}%{_mingw64_libdir}/gcc/%{_mingw64_target}/lib/libgcc_s.a \
%{buildroot}%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/
mv %{buildroot}%{_mingw64_libdir}/gcc/%{_mingw64_target}/*.dll \
%{buildroot}%{_mingw64_bindir}
# Hack to work around a bug in GCC6
perl -pi -e 's#include_next\ \<stdlib\.h\>#include\ \<stdlib\.h\>#g' \
%{buildroot}%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/c++/cstdlib \
%{buildroot}%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/c++/bits/std_abs.h
perl -pi -e 's#include_next\ \<math\.h\>#include\ \<math\.h\>#g' \
%{buildroot}%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/c++/cmath
%files
%{_mingw64_bindir}/gcc*.exe
%{_mingw64_bindir}/gcov*.exe
%{_mingw64_bindir}/lto-dump*.exe
%exclude %{_mingw64_bindir}/%{_mingw64_target}-gcc*.exe
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/crtbegin.o
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/crtend.o
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/crtfastmath.o
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libcaf_single.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgcc.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgcc_eh.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgcc_s.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgcov.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libssp.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libssp.dll.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libssp_nonshared.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgomp.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgomp.dll.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgomp.spec
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libatomic.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libatomic.dll.a
%{_mingw64_infodir}/libgomp.info.gz
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include-fixed
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/ssp
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include-fixed/README
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/*.h
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/ssp/*.h
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/install-tools
%dir %{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/install-tools
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/install-tools/*
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/install-tools/*
%exclude %{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/install-tools/*.debug
%{_mingw64_mandir}/man1/gcc.1*
%{_mingw64_mandir}/man1/gcov.1*
%{_mingw64_mandir}/man1/gcov-dump.1*
%{_mingw64_mandir}/man1/gcov-tool.1*
%{_mingw64_mandir}/man1/lto-dump.1*
%{_mingw64_mandir}/man7/fsf-funding.7*
%{_mingw64_mandir}/man7/gfdl.7*
%{_mingw64_mandir}/man7/gpl.7*
%{_mingw64_infodir}/gcc*.info*
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/collect2.exe
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/g++-mapper-server.exe
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/liblto_plugin.dll
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/liblto_plugin.dll.a
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/lto1.exe
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/lto-wrapper.exe
%if "%{_mingw64_cpu}" == "x86_64"
%files -n mingw64-libgcc_s_seh1
%{_mingw64_bindir}/libgcc_s_seh-1.dll
%else
%files -n mingw64-libgcc_s_sjlj1
%{_mingw64_bindir}/libgcc_s_sjlj-1.dll
%endif
%files -n mingw64-libssp0
%{_mingw64_bindir}/libssp-0.dll
%files -n mingw64-libgomp1
%{_mingw64_bindir}/libgomp-1.dll
%files -n mingw64-libatomic1
%{_mingw64_bindir}/libatomic-1.dll
%files -n mingw64-cpp
%{_mingw64_bindir}/cpp.exe
%{_mingw64_mandir}/man1/cpp.1*
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}
%dir %{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/cc1.exe
%{_mingw64_infodir}/cpp*.info*
%files c++
%{_mingw64_bindir}/g++.exe
%{_mingw64_bindir}/c++.exe
%exclude %{_mingw64_bindir}/%{_mingw64_target}-g++.exe
%exclude %{_mingw64_bindir}/%{_mingw64_target}-c++.exe
%{_mingw64_mandir}/man1/g++.1*
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/c++/
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libstdc++.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libstdc++.dll.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libstdc++exp.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libstdc++fs.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libsupc++.a
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/cc1plus.exe
%files -n mingw64-libstdc++6
%{_mingw64_bindir}/libstdc++-6.dll
%files -n mingw64-libstdc++-gdb-printer
%{_mingw64_bindir}/*-gdb.py
%{_mingw64_datadir}/gcc-%{version}/python
%files fortran
%{_mingw64_bindir}/gfortran.exe
%exclude %{_mingw64_bindir}/%{_mingw64_target}-gfortran.exe
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgfortran.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgfortran.dll.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libgfortran.spec
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libquadmath.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libquadmath.dll.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/finclude/ieee_arithmetic.mod
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/finclude/ieee_exceptions.mod
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/finclude/ieee_features.mod
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/f951.exe
%{_mingw64_mandir}/man1/gfortran.1*
%{_mingw64_infodir}/libquadmath.info.gz
%{_mingw64_infodir}/gfortran.info*
%files -n mingw64-libgfortran5
%{_mingw64_bindir}/libgfortran-5.dll
%files -n mingw64-libquadmath0
%{_mingw64_bindir}/libquadmath-0.dll
%files objc
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/include/objc
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libobjc.a
%{_mingw64_libdir}/gcc/%{_mingw64_target}/%{version}/libobjc.dll.a
%{_mingw64_libexecdir}/gcc/%{_mingw64_target}/%{version}/cc1obj*.exe
%files -n mingw64-libobjc4
%{_mingw64_bindir}/libobjc-4.dll
%changelog