| <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: |
| --> |