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