  <chapter id="portability-issues">
    <title id="portability-issues.title">Portability issues</title>

    <sect1 id="anon">
      <title id="anon.title">Anonymous unions/structs</title>
      <para>
        Anonymous structs and unions support depends heavily on the compiler. 
        The best support is provided by gcc/g++ 2.96 and later. But these 
        versions of gcc come from the development branch so you may want to 
        hold off before using them in production. g++ 2.95 supports anonymous 
        unions but not anonymous structs and gcc 2.95 supports neither. Older 
        versions of gcc/g++ have no support for either.
        since it is anonymous unions that are the most frequent in the 
        windows headers, you should at least try to use gcc/g++ 2.95.
      </para>
      <para>
        But you are stuck with a compiler that does not support anonymous 
        structs/unions all is not lost. The Wine headers should detect this 
        automatically and define <varname>NONAMELESSUNION</varname> / 
        <varname>NONAMELESSSTRUCT</varname>. Then any anonymous union will 
        be given a name 
        <literal>u</literal> or <literal>u2</literal>, <literal>u3</literal>, 
        etc. to avoid name clashes. You will then have to modify your code to 
        include those names where appropriate.
      </para>
      <para>
        The name that Wine adds to anonymous unions should match that used 
        by the Windows headers. So all you have to do to compile your 
        modified code in Windows is to explicitly define the 
        <varname>NONAMELESSUNION</varname> macro. Note that it would be wise 
        to also explicitly define this macro on in your Unix makefile
        (<filename>Makefile.in</filename>) to make sure your code will 
        compile even if the compiler does support anonymous unions.
      </para>
      <para>
        Things are not as nice when dealing with anonymous structs. 
        Unfortunately the Windows headers make no provisions for compilers 
        that do not support anonymous structs. So you will need to be more 
        subtle when modifying your code if you still want it to compile in 
        Windows. Here's a way to do it:
      </para>
      <programlisting>
#ifdef WINELIB
#define ANONS .s
#else
#define ANONS
#endif

. . .

{
SYSTEM_INFO si;
GetSystemInfo(&amp;si);
printf("Processor architecture=%d\n",si ANONS .wProcessorArchitecture);
}
      </programlisting>
      <para>
        You may put the <literal>#define</literal> directive directly in the 
        source if only few files are impacted. Otherwise it's probably best 
        to put it in one of your project's widely used headers. 
        Fortunately usage of an anonymous struct is much rarer than usage of 
        an anonymous union so these modifications should not be too much work.
      </para>
    </sect1>

    <sect1 id="unicode">
      <title id="unicode.title">Unicode</title>

      <para>
        Because gcc and glibc use 4 byte unicode characters, the
        compiler intrinsic <literal>L"foo"</literal> generates unicode
        strings which cannot be used by Winelib (Win32 code expects 16
        bit unicode characters). There are 3 workarounds for this:
      </para>

      <orderedlist>
        <listitem>
          <para>
            Use the latest gcc version (2.9.7 or later), and pass the
            <parameter>-fshort-wchar</parameter> option to every file
            that is built.
          </para>
        </listitem>
        <listitem>
          <para>
            Use the <function>__TEXT("foo")</function> macro, define
            <constant>WINE_UNICODE_REWRITE</constant> for each file
            that is built, and add
            <parameter>-fwritable-strings</parameter> to the compiler
            command line. You should replace all occurances of
            <type>wchar_t</type> with <type>WCHAR</type> also, since
            <type>wchar_t</type> is the native (32 bit) type. These
            changes allow Wine to modify the native unicode strings
            created by the compiler in place, so that they are 16 bit
            by the time any functions get to use them. This scheme
            works with older versions of gcc (2.95.x+).
          </para>
        </listitem>
        <listitem>
          <para>
            Use the compiler default, but don't call any Win32 unicode
            function without converting the strings first!
          </para>
        </listitem>
      </orderedlist>

      <para>
        If you are using Unicode and you want to be able to use
        standard library calls (e.g. <function>wcslen</function>,
        <function>wsprintf</function>) as well as Win32 unicode calls
        (API functions ending in W, or having
        <constant>_UNICODE</constant> defined), then you should use
        the msvcrt runtime library instead of glibc. The functions in
        glibc will not work correctly with 16 bit strings.
      </para>
      <para>
        If you need a Unicode string even when
        _<constant>UNICODE</constant> isn't defined, use
        <function>WINE_UNICODE_TEXT("foo")</function>. This will need
        to be wrapped in <function>#ifdef WINELIB</function> to
        prevent breaking your source for windows compiles.
      </para>
      <para>
        To prevent warnings when declaring a single unicode character
        in C, use <function>(WCHAR)L'x'</function>, rather than
        <function>__TEXT('x')</function>.  This works on Windows also.
      </para>
    </sect1>

    <sect1 id="C-library">
      <title id="C-library.title">C library</title>

      <!-- *** Is all of this covered now?  Make sure before deleting ***
      <para>
        Winelib currently only supports on C library: that of your
        compiler.  three solutions: native, mixed or msvcrt except we
        only have native right now, using the native C library ->
        different behavior: fopen, O_TEXT, unicode support,
        reimplement msvcrt
      </para>
      -->

      <para>
        There are 3 choices available to you regarding which C library
        to use:
      </para>

      <orderedlist>
        <listitem>
          <para>
            Use the glibc native C library.
          </para>
        </listitem>
        <listitem>
          <para>
            Use the msvcrt C library.
          </para>
        </listitem>
        <listitem>
          <para>
            Use a custom mixture of both.
          </para>
        </listitem>
      </orderedlist>

      <para>
        Note that under Wine, the crtdll library is implemented using
        msvcrt, so there is no benefit in trying to use it.
      </para>
      <para>
        Using glibc in general has the lowest overhead, but this is
        really only important for file I/O. Many of the functions in
        msvcrt are simply resolved to glibc, so in reality options 2
        and 3 are fairly similar choices.
      </para>
      <para>
        To use glibc, you don't need to make changes to your
        application; it should work straight away. There are a few
        situations in which using glibc is not possible:
      </para>
      <orderedlist>
        <listitem>
          <para>
            Your application uses Win32 and C library unicode
            functions.
          </para>
        </listitem>
        <listitem>
          <para>
            Your application uses MS specific calls like
            <function>beginthread()</function>,
            <function>loadlibrary()</function>, etc.
          </para>
        </listitem>
        <listitem>
          <para>
            You rely on the precise semantics of the calls, for
            example, returning <literal>-1</literal> rather than
            non-zero. More likely, your application will rely on calls
            like <function>fopen()</function> taking a Windows path
            rather than a Unix one.
          </para>
        </listitem>
      </orderedlist>
      <para>
        In these cases you should use msvcrt to provide your C runtime
        calls. To do this, add a line:
      </para>

      <programlisting>import msvcrt.dll</programlisting>

      <para>
        to your applications <filename>.spec</filename> file. This
        will cause <command>winebuild</command> to resolve your c
        library calls to <filename>msvcrt.dll</filename>. Many simple
        calls which behave the same have been specified as
        non-importable from msvcrt; in these cases
        <command>winebuild</command> will not resolve them and the
        standard linker <command>ld</command> will link to the glibc
        version instead.
      </para>
      <para>
        In order to avoid warnings in C (and potential errors in C++)
        from not having prototypes, you may need to use a set of MS
        compatable header files. These are scheduled for inclusion
        into Wine but at the time of writing are not available. Until
        they are, you can try prototyping the functions you need, or
        just live with the warnings.
      </para>
      <para>
        If you have a set of include files (or when they are available
        in Wine), you need to use the <parameter>-isystem
        "include_path"</parameter> flag to gcc to tell it to use your
        headers in preference to the local system headers.
      </para>
      <para>
        To use option 3, add the names of any symbols that you don't
        want to use from msvcrt into your applications
        <filename>.spec</filename> file. For example, if you wanted
        the MS specific functions, but not file I/O, you could have a
        list like:
      </para>

      <programlisting>@ignore = ( fopen fclose fwrite fread fputs fgets )</programlisting>
      <para>
        Obviously, the complete list would be much longer. Remember
        too that some functions are implemented with an underscore in
        their name and <function>#define</function>d to that name in
        the MS headers. So you may need to find out the name by
        examing <filename>dlls/msvcrt/msvcrt.spec</filename> to get
        the correct name for your <function>@ignore</function> entry.
      </para>
    </sect1>

    <sect1 id="porting-compiling">
      <title id="porting-compiling.title">Compiling Problems</title>
      <para>
        If you get undefined references to Win32 API calls when
        building your application: if you have a VC++
        <filename>.dsp</filename> file, check it for all the
        <filename>.lib</filename> files it imports, and add them to
        your applications <filename>.spec</filename>
        file. <command>winebuild</command> gives you a warning for
        unused imports so you can delete the ones you don't need
        later. Failing that, just import all the DLL's you can find in
        the <filename>dlls/</filename> directory of the Wine source
        tree.
      </para>
      <para>
        If you are missing GUIDs at the link stage, add
        <parameter>-lwine_uuid</parameter> to the link line.
      </para>
      <para>
        gcc is more strict than VC++, especially whan compiling
        C++. This may require you to add casts to your C++ to prevent
        overloading abiguities between similar types (such as two
        overloads that take int and char respectively).
      </para>
      <para>
        If you come across a difference between the Windows headers
        and Wine's that breaks compilation, try asking for help on
        <email>wine-devel@winehq.com</email>.
      </para>
    </sect1>

    <sect1 id="init-problems">
      <title id="init-problems.title">Initialization problems</title>
      <para>
        Initialization problems occur when the application calls the Win32 API 
        before Winelib has been initialized. How can this happen?
      </para>
      <para>
        Winelib is initialized by the application's <function>main</function> 
        before it calls the regular <function>WinMain</function>. But, in C++, 
        the constructors of static class variables are called before the 
        <function>main</function> (by the module's initializer). So if such 
        a constructor makes calls to the Win32 API, Winelib will not be 
        initialized at the time of the call and you may get a crash. This 
        problem is much more frequent in C++ because of these class 
        constructors but could also, at least in theory, happen in C if you 
        were to specify an initializer making calls to Winelib. But of 
        course, now that you are aware of this problem you won't do it :-).
      </para>
      <para>
        Further compounding the problem is the fact that Linux's (GNU's?) 
        current dynamic library loader does not call the module 
        initializers in their dependency order. So even if Winelib were to 
        have its own initializer there would be no garantee that it would be 
        called before the initializer of the library containing this static 
        variable. Finally even if the variable is in a library that your 
        application links with, that library's initializer may be called 
        before Winelib has been initialized. One such library is the MFC.
      </para>
      <para>
        The current workaround is to move all the application's code in a 
        library and to use a small Winelib application to dynamically load 
        this library. Tus the initialization sequence becomes:
      </para>
      <itemizedlist>
        <listitem>
          <para>
            the wrapper application starts.
          </para>
        </listitem>
        <listitem>
          <para>
            its empty initializer is run.
          </para>
        </listitem>
        <listitem>
          <para>
            its <function>main</function> is run. Its first task is to 
            initialize Winelib.
          </para>
        </listitem>
        <listitem>
          <para>
            it then loads the application's main library, plus all its 
            dependent libraries.
          </para>
        </listitem>
        <listitem>
          <para>
            which triggers the execution of all these libraries initializers 
            in some unknown order. But all is fine because Winelib has 
            already been initialized anyway.
          </para>
        </listitem>
        <listitem>
          <para>
            finally the main function calls the <function>WinMain</function> 
            of the application's library.
          </para>
        </listitem>
      </itemizedlist>
      <para>
        This may sound complex by Winemaker makes it simple. Just specify 
        <option>--wrap</option> or <option>--mfc</option> on the command line 
        and it will adapt its makefiles to build the wrapper and the 
        application library.
      </para>
    </sect1>

    <sect1 id="com-support">
      <title id="com-support.title">VC's native COM support</title>
      <para>
        don't use it, 
        guide on how to replace it with normal C++ code (yes, how???):
        extracting a .h and .lib from a COM dll
        Can '-fno-rtti' be of some use or even required?
      </para>
    </sect1>

    <sect1 id="SEH">
      <title id="SEH.title">SEH</title>
      <para>
        how to modify the syntax so that it works both with gcc's macros and Wine's macros,
        is it even possible?
      </para>
    </sect1>

    <sect1 id="others">
      <title id="others.title">Others</title>
      <para>
        -fpermissive and -fno-for-scope, 
        maybe other options
      </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:
-->
