From Fedora Project Wiki

(Initial draft packaging guidelines)
 
No edit summary
Line 41: Line 41:
The cross-compilers and binutils which generate i686 binaries for Windows are named:
The cross-compilers and binutils which generate i686 binaries for Windows are named:


  /usr/bin/i686-pc-mingw32-gcc
  %{_bindir}/i686-pc-mingw32-gcc
  /usr/bin/i686-pc-mingw32-g++
%{_bindir}/i686-pc-mingw32-g++
  /usr/bin/i686-pc-mingw32-ld
%{_bindir}/i686-pc-mingw32-ld
  /usr/bin/i686-pc-mingw32-strip
%{_bindir}/i686-pc-mingw32-as
  %{_bindir}/i686-pc-mingw32-strip
etc.
 
The same binaries are present in <code>%{_prefix}/i686-pc-mingw32/bin</code> without any prefix in the name, ie:
 
%{_prefix}/i686-pc-mingw32/bin/gcc
%{_prefix}/i686-pc-mingw32/bin/g++
  %{_prefix}/i686-pc-mingw32/bin/ld
  %{_prefix}/i686-pc-mingw32/bin/as
%{_prefix}/i686-pc-mingw32/bin/strip
  etc.
  etc.


Line 51: Line 61:


<i>Rationale</i>  This is the name which autoconf configure scripts expect when they are
<i>Rationale</i>  This is the name which autoconf configure scripts expect when they are
invoked in cross-compiling mode.
invoked in cross-compiling mode.  The <code>/usr/i686-pc-mingw32/bin</code>
directory is required by GCC, otherwise it invokes the wrong assembler and linker.


== Naming of the root filesystem ==
== Naming of the root filesystem ==
Line 60: Line 71:
root filesystem location.  The location (for i686 target) is:
root filesystem location.  The location (for i686 target) is:


  %{_prefix}/i686-pc-mingw32/
  %{_prefix}/i686-pc-mingw32/sys-root/mingw


<i>Rationale</i>  Hmmm.  This is what the existing Fedora packages do, and very
<i>Rationale</i>  Hmmm.  This is what the existing Fedora packages do, and very
similar to what Debian is doing (they use a different and inconsistent name, but
similar to what Debian is doing (they use a different and inconsistent name, but
it is still a directory located under /usr).
it is still a directory located directly under /usr), and is what MinGW expects.


== Packaging DLLs ==
== Packaging DLLs ==
Line 73: Line 84:
These libraries should be packaged in the directory:
These libraries should be packaged in the directory:


  %{_prefix}/i686-pc-mingw32/lib
  %{_prefix}/i686-pc-mingw32/sys-root/mingw/lib


<i>Rationale</i>  Specified by MinGW.  Putting them in %{_libdir} doesn't sound
<i>Rationale</i>  Specified by MinGW.  Putting them in %{_libdir} doesn't sound
Line 82: Line 93:
Any Windows binaries should be packaged in the directory:
Any Windows binaries should be packaged in the directory:


  %{_prefix}/i686-pc-mingw32/bin
  %{_prefix}/i686-pc-mingw32/sys-root/mingw/bin


<i>Rationale</i>  Specified by MinGW.  No use to anyone if they are in /usr/bin.
<i>Rationale</i>  Specified by MinGW.  No use to anyone if they are in /usr/bin.
== Packaging include files and other auxiliary files ==
Any auxiliary Windows files should be placed in the standard subdirectories of the
root filesystem, for example:
%{_prefix}/i686-pc-mingw32/sys-root/mingw/include
%{_prefix}/i686-pc-mingw32/sys-root/mingw/share
etc.

Revision as of 10:48, 8 July 2008

Packaging Guidelines for MinGW Windows cross-compiler

Please note this is a draft. "Rationale" sections are for discussion and will be deleted from the final document.

Naming

Packages should be named by prefixing the upstream package name with mingw-

Rationale Debian name their packages mingw32-*. However I can't see a reason for including '32' in the name, particularly since (a) the upstream package is just called mingw and (b) we may want to build 64 bit binaries.

Base packages

The base packages provide a root filesystem, base libraries, binutils (basic programs like 'strip', 'ld' etc), the compiler (gcc) and the Win32 API. Packages may need to depend on one or more of these. In particular, almost any conceivable package should depend on mingw-runtime.

mingw-runtime Root filesystem and some base libraries
mingw-binutils Binutils. Utilities like 'strip', 'ld', 'objdump' which work on Windows EXE and DLL files.
mingw-w32api Win32 API. A free (public domain) reimplementation of the header files required to link to the Win32 API.
mingw-gcc GNU compiler collection. Compilers for C and C++ which cross-compile to a Windows target

Rationale I've used the same names as the upstream packages, and also the same names as Debian (minus the unnecessary '32' which Debian has in the name).

Naming of the cross-compilers and binutils

The cross-compilers and binutils are Fedora binaries and are therefore placed in %{_bindir} (ie. /usr/bin) according to the FHS and Fedora guidelines.

The cross-compilers and binutils which generate i686 binaries for Windows are named:

%{_bindir}/i686-pc-mingw32-gcc
%{_bindir}/i686-pc-mingw32-g++
%{_bindir}/i686-pc-mingw32-ld
%{_bindir}/i686-pc-mingw32-as
%{_bindir}/i686-pc-mingw32-strip
etc.

The same binaries are present in %{_prefix}/i686-pc-mingw32/bin without any prefix in the name, ie:

%{_prefix}/i686-pc-mingw32/bin/gcc
%{_prefix}/i686-pc-mingw32/bin/g++
%{_prefix}/i686-pc-mingw32/bin/ld
%{_prefix}/i686-pc-mingw32/bin/as
%{_prefix}/i686-pc-mingw32/bin/strip
etc.

Note that we don't support generating x86-64 binaries (or any other architecture) at the moment, but when we do those will have a different prefix.

Rationale This is the name which autoconf configure scripts expect when they are invoked in cross-compiling mode. The /usr/i686-pc-mingw32/bin directory is required by GCC, otherwise it invokes the wrong assembler and linker.

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 i686 target) is:

%{_prefix}/i686-pc-mingw32/sys-root/mingw

Rationale Hmmm. This is what the existing Fedora packages do, and very similar to what Debian is doing (they use a different and inconsistent name, but it is still a directory located directly under /usr), and is what MinGW expects.

Packaging DLLs

The Fedora MinGW SIG packages a range of common Linux libraries as Windows DLLs so they further libraries/programs can be compiled against them.

These libraries should be packaged in the directory:

%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib

Rationale Specified by MinGW. Putting them in %{_libdir} doesn't sound like a good idea because they are useless to ordinary Fedora programs.

Packaging EXEs

Any Windows binaries should be packaged in the directory:

%{_prefix}/i686-pc-mingw32/sys-root/mingw/bin

Rationale Specified by MinGW. No use to anyone if they are in /usr/bin.

Packaging include files and other auxiliary files

Any auxiliary Windows files should be placed in the standard subdirectories of the root filesystem, for example:

%{_prefix}/i686-pc-mingw32/sys-root/mingw/include
%{_prefix}/i686-pc-mingw32/sys-root/mingw/share
etc.