| .\" -*- nroff -*- | |
| .TH WINEMAKER 1 "Sep 2009" "@PACKAGE_STRING@" "Wine Developers Manual" | |
| .SH NAME | |
| winemaker \- generate a build infrastructure for compiling Windows programs on Unix | |
| .SH SYNOPSIS | |
| .B "winemaker " | |
| [ | |
| .IR "--nobanner " "] [ " "--backup " "| " "--nobackup " "] [ "--nosource-fix " | |
| ] | |
| .br | |
| [ | |
| .IR "--lower-none " "| " "--lower-all " "| " "--lower-uppercase " | |
| ] | |
| .br | |
| [ | |
| .IR "--lower-include " "| " "--nolower-include " ] [ " "--mfc " "| " "--nomfc " | |
| ] | |
| .br | |
| [ | |
| .IR "--guiexe " "| " "--windows " "| " "--cuiexe " "| " "--console " "| " "--dll " | |
| ] | |
| .br | |
| [ | |
| .IR "-Dmacro[=defn] " "] [ " "-Idir " "] [ " "-Pdir " "] [ " "-idll" "] [ " "-Ldir " "] [ " "-llibrary " | |
| ] | |
| .br | |
| [ | |
| .IR "--nodlls " "] [ " "--nomsvcrt " "] [ " "--interactive " "] [ " "--single-target name " | |
| ] | |
| .br | |
| [ | |
| .IR "--generated-files " "] [ " "--nogenerated-files " "] | |
| ] | |
| .br | |
| [ | |
| .IR "--wine64 " "] | |
| .br | |
| .IR "work_directory" "| " "project_file" "| " "workspace_file" | |
| .SH DESCRIPTION | |
| .PP | |
| .B winemaker | |
| is a perl script designed to help you bootstrap the | |
| process of converting your Windows sources to Winelib programs. | |
| .PP | |
| In order to do this winemaker can perform the following operations: | |
| .PP | |
| - rename your source files and directories to lowercase in the event they | |
| got all uppercased during the transfer. | |
| .PP | |
| - perform Dos to Unix (CRLF to LF) conversions. | |
| .PP | |
| - scan the include statements and resource file references to replace the | |
| backslashes with forward slashes. | |
| .PP | |
| - during the above step winemaker will also perform a case insensitive search | |
| of the referenced file in the include path and rewrite the include statement | |
| with the right case if necessary. | |
| .PP | |
| - winemaker will also check other more exotic issues like '#pragma pack' | |
| usage, use of "afxres.h" in non MFC projects, and more. Whenever it | |
| encounters something out of the ordinary, winemaker will warn you about it. | |
| .PP | |
| - winemaker can also scan a complete directory tree at once, guess what are | |
| the executables and libraries you are trying to build, match them with | |
| source files, and generate the corresponding Makefile.in files. | |
| .PP | |
| - finally winemaker will generate a global Makefile for normal use. | |
| .PP | |
| - winemaker knows about MFC-based project and will generate customized files. | |
| .PP | |
| - winemaker can read existing Projectfiles. It supports dsp, dsw, vcproj and sln files. | |
| .PP | |
| .SH OPTIONS | |
| .TP | |
| .I --nobanner | |
| Disables the printing of the banner. | |
| .TP | |
| .I --backup | |
| Directs winemaker to perform a backup of all the source files in which it | |
| makes changes. This is the default. | |
| .TP | |
| .I --nobackup | |
| Tells winemaker not to backup modified source files. | |
| .TP | |
| .I --nosource-fix | |
| Directs winemaker not to try fixing the source files (e.g. Dos to Unix | |
| conversion). This prevents complaints if the files are readonly. | |
| .TP | |
| .I --lower-all | |
| Tells winemaker to rename all files and directories to lowercase. | |
| .TP | |
| .I --lower-uppercase | |
| Tells winemaker to only rename files and directories that have an all | |
| uppercase name. | |
| So "HELLO.C" would be renamed but not "World.c". | |
| .TP | |
| .I --lower-none | |
| Tells winemaker not to rename files and directories to lower case. Note | |
| that this does not prevent the renaming of a file if its extension cannot | |
| be handled as is, e.g. ".Cxx". This is the default. | |
| .TP | |
| .I "--lower-include " | |
| Tells winemaker that if it does not find the file corresponding to an | |
| include statement (or other form of file reference for resource files), | |
| then it should convert that filename to lowercase. This is the default. | |
| .TP | |
| .I "--nolower-include " | |
| Tells winemaker not to modify the include statement if it cannot find the | |
| referenced file. | |
| .TP | |
| .IR "--guiexe " "| " "--windows" | |
| Specifies that whenever winemaker finds an executable target, or a target of | |
| unknown type, it should assume that it is a graphical application. | |
| This is the default. | |
| .TP | |
| .IR "--cuiexe " "| " "--console" | |
| Specifies that whenever winemaker finds an executable target, or a target of | |
| unknown type, it should assume that it is a console application. | |
| .TP | |
| .I --dll | |
| This option tells winemaker that whenever it finds a target of unknown type, | |
| i.e. for which it does not know whether it is an executable or a library, | |
| it should assume it is a library. | |
| .TP | |
| .I --mfc | |
| Specifies that the targets are MFC based. In such a case winemaker the include | |
| and library paths accordingly, and links the target with the MFC library. | |
| .TP | |
| .I --nomfc | |
| Specifies that targets are not MFC-based. This option disables use of MFC libraries | |
| even if winemaker encounters files "stdafx.cpp" or "stdafx.h" that would cause it | |
| to enable MFC automatically if neither --nomfc nor --mfc was specified. | |
| .TP | |
| .I -Dmacro[=defn] | |
| Adds the specified macro definition to the global list of macro definitions. | |
| .TP | |
| .I -Idir | |
| Appends the specified directory to the global include path. | |
| .TP | |
| .I -Pdir | |
| Appends the specified directory to the global dll path. | |
| .TP | |
| .I -idll | |
| Adds the Winelib library to the global list of Winelib libraries to import. | |
| .TP | |
| .I -Ldir | |
| Appends the specified directory to the global library path. | |
| .TP | |
| .I -llibrary | |
| Adds the specified library to the global list of libraries to link with. | |
| .TP | |
| .I --nodlls | |
| This option tells winemaker not to use the standard set of winelib libraries | |
| for imports. That is, any DLL your code uses must be explicitly passed to | |
| winemaker with -i options. | |
| The standard set of libraries is: odbc32.dll, odbccp32.dll, ole32.dll, | |
| oleaut32.dll and winspool.drv. | |
| .TP | |
| .I --nomsvcrt | |
| Sets some options to tell winegcc not to compile against msvcrt. | |
| Use this option if you have cpp-files that include <string>. | |
| .TP | |
| .I --interactive | |
| Puts winemaker in interactive mode. In this mode winemaker will ask you to | |
| confirm each directory's list of targets, and then to provide directory and | |
| target specific options. | |
| .TP | |
| .I --single-target name | |
| Specifies that there is only one target, and that it is called "name". | |
| .TP | |
| .I --generated-files | |
| Tells winemaker to generate the build the Makefile. This is the default. | |
| .TP | |
| .I --nogenerated-files | |
| Tells winemaker not to generate the Makefile. | |
| .TP | |
| .I --wine64 | |
| Tells winemaker to generate a 64-bit Makefile. | |
| .SH EXAMPLES | |
| .PP | |
| Here is a typical winemaker use: | |
| .PP | |
| $ winemaker --lower-uppercase -DSTRICT . | |
| .PP | |
| The above tells winemaker to scan the current directory and its | |
| subdirectories for source files. Whenever if finds a file or directory which | |
| name is all uppercase, it should rename it to lowercase. It should then fix | |
| all these source files for compilation with Winelib and generate Makefiles. | |
| The '-DSTRICT' specifies that the STRICT macro must be set when compiling | |
| these sources. Finally winemaker will create a Makefile. | |
| .PP | |
| The next step would be: | |
| .PP | |
| $ make | |
| .PP | |
| If at this point you get compilation errors (which is quite likely for a | |
| reasonably sized project) then you should consult the Winelib User Guide to | |
| find tips on how to resolve them. | |
| .PP | |
| For an MFC-based project you would have to run the following commands instead: | |
| .PP | |
| $ winemaker --lower-uppercase --mfc . | |
| .br | |
| $ make | |
| .PP | |
| For an existing project-file you would have to run the following commands: | |
| .PP | |
| $ winemaker myproject.dsp | |
| .br | |
| $ make | |
| .PP | |
| .SH TODO / BUGS | |
| .PP | |
| In some cases you will have to edit the Makefile or sourcefiles by yourself. | |
| .PP | |
| Assuming that the windows executable/library is available, we could | |
| use winedump to determine what kind of executable it is (graphical | |
| or console), which libraries it is linked with, and which functions it | |
| exports (for libraries). We could then restore all these settings for the | |
| corresponding Winelib target. | |
| .PP | |
| Furthermore winemaker is not very good at finding the library containing the | |
| executable: it must either be in the current directory or in the | |
| .IR LD_LIBRARY_PATH . | |
| .PP | |
| Winemaker does not support message files and the message compiler yet. | |
| .PP | |
| .SH SEE ALSO | |
| .PP | |
| The Winelib User Guide: | |
| .PP | |
| http://www.winehq.org/docs/winelib-guide/index | |
| .PP | |
| .BR wine (1) | |
| .PP | |
| .SH AUTHORS | |
| François Gouget for CodeWeavers | |
| .PP | |
| Dimitrie O. Paun | |
| .PP | |
| André Hentschel | |
| .PP |