English Portuguese (Brazil)
Each cross compiled MinGW package which builds binaries for a specific target should put the binaries for that target in a separate subpackage. So if a package `+foo+` builds binaries for the Win32 and Win64 targets, then the source RPM should provide two subpackages named `+mingw32-foo+` and `+mingw64-foo+`.
This means that a spec file must contains %package and %files sections for all the targets.
If a package contains translations then all calls to the `+%find_lang+` must be replaced by `+%mingw_find_lang+`. This causes all translation filelists to be split in per-target filelists. For example: when a spec file contains something like this:
%install
<snip>
%mingw_find_lang foo
then two files will get created named `+mingw32-foo.lang+` and `+mingw64-foo.lang+`. These file lists can be included in the %files section for the targets:
%files -n mingw32-foo -f mingw32-foo.lang
<snip>
%files -n mingw64-foo -f mingw64-foo.lang
Filesystem layout
`+[root]+` + `+  |+` + `+  +- etc+` + `+  |   |+` + `+  |   +- rpm+` + `+  |       |+` + `+  |       +- macros.mingw+` + `+  |       +- macros.mingw32+` + `+  |       +- macros.mingw64+` + `+  |+` + `+  +- usr+` + `+      |+` + `+      +- bin   - Links to MinGW cross compiler toolchain+` + `+      |   |+` + `+      |   +- i686-w64-mingw32-cpp+` + `+      |   +- i686-w64-mingw32-gcc+` + `+      |   +- i686-w64-mingw32-g+++` + `+      |   +- x86_64-w64-mingw32-cpp+` + `+      |   +- x86_64-w64-mingw32-gcc+` + `+      |   +- x86_64-w64-mingw32-g+++` + `+      |   +- ... etc..+` + `+      |+` + `+      +- lib+` + `+      |   |+` + `+      |   +- rpm+` + `+      |       |+` + `+      |       +- mingw-find-debuginfo.sh - extract debug information from Win32 and Win64 binaries+` + `+      |       +- mingw-find-lang.sh - generates per-target file lists containing translations+` + `+      |       +- mingw-find-provides.sh - extra DLL names+` + `+      |       +- mingw-find-requires.sh - discover required DLL names+` + `+      |+` + `+      +- i686-w64-mingw32  - root of mingw toolchain and binaries for the Win32 target - see next diagram+` + `+      +- x86_64-w64-mingw32  - root of mingw toolchain and binaries for the Win64 target - see next diagram+`
`+/usr/i686-w64-mingw32+` + `+/usr/x86_64-w64-mingw32+` + `+  |+` + `+  +- bin  - Binutils toolchain binaries for the target+` + `+  |   |+` + `+  |   +- ar+` + `+  |   +- as+` + `+  |   +- dlltool+` + `+  |   +- ld+` + `+  |   +- ... etc ...+` + `+  |+` + `+  +- lib  - Binutils toolchain support libraries / files for the target+` + `+  |+` + `+  +- sys-root  - root for cross compiled MinGW binaries+` + `+      |+` + `+      +- mingw+` + `+          |+` + `+          +- bin     - cross-compiled MinGW binaries & runtime DLL parts+` + `+          +- etc     - configuration files+` + `+          +- include - include files for cross compiled MinGW libs+` + `+          +- lib     - cross-compiled static MinGW libraries & linktime DLL parts+` + `+          |   |+` + `+          |   +- pkgconfig  - pkg-config definitions for libraries+` + `+          |+` + `+          +- share+` + `+              |+` + `+              +- man+`
Filenames of the cross-compilers and binutils
The MinGW cross-compilers and binutils are Fedora binaries and are therefore placed in `+%{_bindir}+` (i.e., `+/usr/bin+`) according to the FHS and Fedora guidelines.
The MinGW cross-compilers and binutils which generate i686 binaries for Windows are named:
%{_bindir}/i686-w64-mingw32-gcc
%{_bindir}/i686-w64-mingw32-g++
%{_bindir}/i686-w64-mingw32-ld
%{_bindir}/i686-w64-mingw32-as
%{_bindir}/i686-w64-mingw32-strip
etc.
The same binaries are present in `+%{_prefix}/i686-w64-mingw32/bin+` without any prefix in the name, i.e.,
%{_prefix}/i686-w64-mingw32/bin/gcc
%{_prefix}/i686-w64-mingw32/bin/g++
%{_prefix}/i686-w64-mingw32/bin/ld
%{_prefix}/i686-w64-mingw32/bin/as
%{_prefix}/i686-w64-mingw32/bin/strip
etc.
The same also applies for the x86_64 target. This target uses 'x86_64-w64-mingw32' as prefix instead of 'i686-w64-mingw32'
Naming of the root filesystem
The root filesystem contains Windows executables and DLLs and any other Windows-only files. It is necessary both because we need to store Windows libraries in order to link further libraries which depend on them, and also because MinGW requires a root filesystem location.
The location for Win32 target is provided by the macro:
%{mingw32_sysroot} %{_prefix}/i686-w64-mingw32/sys-root