169 lines
7.0 KiB
Plaintext
169 lines
7.0 KiB
Plaintext
|
<chapter id="mfc">
|
||
|
<title id="mfc.title">Dealing with the MFC</title>
|
||
|
|
||
|
<sect1 id="mfc-introduction">
|
||
|
<title id="mfc-introduction.title">Introduction</title>
|
||
|
<para>
|
||
|
To use the MFC in a Winelib application you will first have to
|
||
|
recompile the MFC with Winelib. In theory it should be possible to
|
||
|
write a wrapper for the Windows MFC as described in
|
||
|
<xref linkend="bindlls" endterm="bindlls.title">. But in practice
|
||
|
it does not seem to be a realistic approach for the MFC:
|
||
|
</para>
|
||
|
<itemizedlist>
|
||
|
<listitem>
|
||
|
<para>
|
||
|
the huge number of APIs makes writing the wrapper a big task in
|
||
|
itself.
|
||
|
</para>
|
||
|
</listitem>
|
||
|
<listitem>
|
||
|
<para>
|
||
|
furthermore the MFC contain a huge number of APIs which are tricky
|
||
|
to deal with when making a wrapper.
|
||
|
</para>
|
||
|
</listitem>
|
||
|
<listitem>
|
||
|
<para>
|
||
|
even once you have written the wrapper you will need to modify
|
||
|
the MFC headers so that the compiler does not choke on them.
|
||
|
</para>
|
||
|
</listitem>
|
||
|
<listitem>
|
||
|
<para>
|
||
|
a big part of the MFC code is actually in your application in
|
||
|
the form of macros. This means even more of the MFC headers have
|
||
|
to actually work to in order for you to be able to compile an
|
||
|
MFC based application.
|
||
|
</para>
|
||
|
</listitem>
|
||
|
</itemizedlist>
|
||
|
<para>
|
||
|
This is why this guide includes a section dedicated to helping you
|
||
|
compile the MFC with Winelib.
|
||
|
</para>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="mfc-legal-issues">
|
||
|
<title id="mfc-legal-issues.title">Legal issues</title>
|
||
|
<para>
|
||
|
(Extracted from the HOWTO-Winelib written by Wilbur Dale
|
||
|
<wilbur.dale@lumin.nl>)
|
||
|
</para>
|
||
|
<para>
|
||
|
The purpose of this section is to make you aware of potential legal
|
||
|
problems. Be sure to read your licenses and to consult your lawyers.
|
||
|
In any case you should not consider the remainder of this section to
|
||
|
be authoritative since it has not been written by a lawyer.
|
||
|
</para>
|
||
|
<para>
|
||
|
Well, let's try to have a look at the situation anyway.
|
||
|
</para>
|
||
|
<para>
|
||
|
During the compilation of your program, you will be combining code
|
||
|
from several sources: your code, Winelib code, Microsoft MFC code,
|
||
|
and possibly code from other vendor sources. As a result, you must
|
||
|
ensure that the licenses of all code sources are obeyed. What you are
|
||
|
allowed and not allowed to do can vary depending on how you compile
|
||
|
your program and if you will be distributing it. For example, if you
|
||
|
are releasing your code under the GPL, you cannot link your code to
|
||
|
MFC code because the GPL requires that you provide ALL sources to your
|
||
|
users. The MFC license forbids you from distributing the MFC source so
|
||
|
you cannot both distribute your program and comply with the GPL
|
||
|
license. On the other hand, if your code is released under the LGPL,
|
||
|
you cannot statically link your program to the MFC and distribute it,
|
||
|
but you can dynamically link your LGPL code and the MFC library and
|
||
|
distribute it.
|
||
|
</para>
|
||
|
<para>
|
||
|
Wine/Winelib is distributed under an X11-like license. It places few
|
||
|
restrictions on the use and distribution of Wine/Winelib code. I doubt
|
||
|
the Wine license will cause you any problems. On the other hand, MFC
|
||
|
is distributed under a very restrictive license and the restrictions
|
||
|
vary from version to version and between service packs. There are
|
||
|
basically three aspects you must be aware of when using the MFC.
|
||
|
</para>
|
||
|
<para>
|
||
|
First you must legally get MFC source code on your computer. The MFC
|
||
|
source code comes as a part of Visual Studio. The license for
|
||
|
Visual Studio implies it is a single product that can not
|
||
|
be broken up into its components. So the cleanest way to get MFC on
|
||
|
your system is to buy Visual Studio and install it on a dual boot
|
||
|
Linux box.
|
||
|
</para>
|
||
|
<para>
|
||
|
Then you must check that you are allowed to recompile MFC on a
|
||
|
non-Microsoft operating system! This varies with the version of MFC.
|
||
|
The MFC license from Visual Studio 6.0 reads in part:
|
||
|
</para>
|
||
|
<blockquote>
|
||
|
<para>
|
||
|
1.1 General License Grant. Microsoft grants to you as an
|
||
|
individual, a personal, nonexclusive license to make and use
|
||
|
copies of the SOFTWARE PRODUCT for the sole purposes of designing,
|
||
|
developing, and testing your software product(s) that are designed
|
||
|
to operate in conjunction with any Microsoft operating system
|
||
|
product. [Other unrelated stuff deleted.]
|
||
|
</para>
|
||
|
</blockquote>
|
||
|
<para>
|
||
|
So it appears you cannot even compile MFC for Winelib using this
|
||
|
license. Fortunately the Visual Studio 6.0 service pack 3 license
|
||
|
reads (the Visual Studio 5.0 license is similar):
|
||
|
</para>
|
||
|
<blockquote>
|
||
|
<para>
|
||
|
1.1 General License Grant. Microsoft grants to you as an
|
||
|
individual, a personal, nonexclusive license to make and use
|
||
|
copies of the SOFTWARE PRODUCT for the purpose of designing,
|
||
|
developing, and testing your software product(s). [Other unrelated
|
||
|
stuff deleted]
|
||
|
</para>
|
||
|
</blockquote>
|
||
|
<para>
|
||
|
So under this license it appears you can compile MFC for Winelib.
|
||
|
</para>
|
||
|
<para>
|
||
|
Finally you must check whether you have the right to distribute an
|
||
|
MFC library. Check the relevant section of the license on
|
||
|
<quote>redistributables and your redistribution rights</quote>. The
|
||
|
license seems to specify that you only have the right to distribute
|
||
|
binaries of the MFC library if it has no debug information and if
|
||
|
you distribute it with an application that provides significant
|
||
|
added functionality to the MFC library.
|
||
|
<!-- FIXME: quote relevant sections of EULA in above paragraph. -->
|
||
|
</para>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="mfc-compiling">
|
||
|
<title id="mfc-compiling.title">Compiling the MFC</title>
|
||
|
<para>
|
||
|
Things to disable,
|
||
|
why we have to disable them (lack of Wine support),
|
||
|
where things don't compile,
|
||
|
why,
|
||
|
how to solve it,
|
||
|
what to put in the Makefile,
|
||
|
maybe try to point to a place with a ready-made makefile...
|
||
|
</para>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="mfc-using">
|
||
|
<title id="mfc-using.title">Using the MFC</title>
|
||
|
<para>
|
||
|
</para>
|
||
|
<para>
|
||
|
Specific winemaker options,
|
||
|
the configure options,
|
||
|
the initialization problem...
|
||
|
</para>
|
||
|
</sect1>
|
||
|
</chapter>
|
||
|
|
||
|
<!-- Keep this comment at the end of the file
|
||
|
Local variables:
|
||
|
mode: sgml
|
||
|
sgml-parent-document:("wine-doc.sgml" "book" "chapter" "")
|
||
|
End:
|
||
|
-->
|