From 8fa0fb7505f2b955ec18d47e5820b39442f53bea Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Mon, 6 Nov 2000 05:41:23 +0000 Subject: [PATCH] Winemaker's man page initial release. --- documentation/Makefile.in | 4 +- documentation/winemaker.man | 225 ++++++++++++++++++++++++++++++++++++ 2 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 documentation/winemaker.man diff --git a/documentation/Makefile.in b/documentation/Makefile.in index 43c2ea36b44..e15da9d4a7d 100644 --- a/documentation/Makefile.in +++ b/documentation/Makefile.in @@ -55,11 +55,13 @@ install:: $(INSTALL) -d $(mandir)/man$(conf_manext) sed -e 's|$${prefix}|$(prefix)|g' < wine.man > wine.man.tmp && mv wine.man.tmp wine.man $(INSTALL_DATA) wine.man $(mandir)/man$(prog_manext)/wine.$(prog_manext) - sed -e 's|$${prefix}|'$(prefix)'|g' < wine.conf.man > wine.conf.man.tmp && mv wine.conf.man.tmp wine.conf.man + $(INSTALL_DATA) $(SRCDIR)/winemaker.man $(mandir)/man$(prog_manext)/winemaker.$(prog_manext) + sed -e 's|$${prefix}|$(prefix)|g' < wine.conf.man > wine.conf.man.tmp && mv wine.conf.man.tmp wine.conf.man $(INSTALL_DATA) wine.conf.man $(mandir)/man$(conf_manext)/wine.conf.$(conf_manext) uninstall:: $(RM) $(mandir)/man$(prog_manext)/wine.$(prog_manext) + $(RM) $(mandir)/man$(prog_manext)/winemaker.$(prog_manext) $(RM) $(mandir)/man$(conf_manext)/wine.conf.$(conf_manext) clean:: diff --git a/documentation/winemaker.man b/documentation/winemaker.man new file mode 100644 index 00000000000..21cc8cf2124 --- /dev/null +++ b/documentation/winemaker.man @@ -0,0 +1,225 @@ +.\" -*- nroff -*- +.TH WINEMAKER 1 "November 1, 2000" "Version 0.5.1" "Windows On Unix" +.SH NAME +winemaker \- generate a build infrastructure for compiling Windows programs on Unix +.SH SYNOPSIS +.B "winemaker " +[ +.IR "--nobanner " "] [ " "--backup " "| " "--nobackup " +] +.br + [ +.IR "--lower-none " "| " "--lower-all " "| " "--lower-uppercase " +] +.br + [ +.IR "--guiexe " "| " "--windows " "| " "--cuiexe " "| " "--console " "| " "--dll " +] +.br + [ +.IR "--wrap " "| " "--nowrap " "] [ " "--mfc " "| " "--nomfc " +] +.br + [ +.IR "-Dmacro[=defn] " "] [ " "-Idir " "] [ " "-Ldir " "] [ " "-llibrary " +] +.br + [ +.IR "--interactive " "] [ " "--single-target name " +] + +.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.in file calling out to all +the others, and a configure script customized for use with WineLib. +.PP +- winemaker knows about MFC-based project and will generate customized 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 --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 it from renaming a file if its extension cannot +be handled as is, e.g. ".Cxx". This is the default. +.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 --wrap +Specifies that executable targets should be built as libraries and a small +executable wrapper generated for them. This technique is sometimes required +to solve initialization problems occuring on the application startup. +.TP +.I --nowrap +Specifies that no wrapper should be generated for executable targets. This is +the default. +.TP +.I --mfc +Specifies that the targets are MFC based. In such a case winemaker generates a +configure script with MFC specific options, modifies the include and +library paths accordingly, links the target with the MFC library and +generates wrappers for these targets that are executables. +.TP +.I --nomfc +Specifies that targets are not MFC-based. This is the default. +.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 -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 --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". + +.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 global Makefile.in and +configure.in, and run autoconf to generate the configure script. +.PP +The next step would be: +.PP +$ ./configure --with-winelib-root=/usr/local/opt/wine +.PP +This generates the makefiles from the Makefile.in files. The generated +makefiles will fetch the WineLib headers and libraries from the Wine +installation located in /usr/local/opt/wine. +.PP +And finally: +.PP +$ make +.PP +If at this point you get compilation errors (which quite likely for a +reasonable sized project) then you should consult the WineLib User Guide to +find tips about how to resolve them. +.PP +For an MFC-based project one would have run the following commands instead: +.PP +$ winemaker --lower-uppercase --mfc +.br +$ ./configure --with-winelib-root=/usr/local/opt/wine \\ +.br + --with-mfc-root=/usr/local/opt/mfc +.br +$ make +.PP + +.SH TODO / BUGS +.PP +Winemaker should support the Visual Studio project files (.dsp for newer +versions and .mak for some older versions). This would allow it to be much +more accurate, especially for the macro, include path and library path +settings. +.PP +Assuming that we have the windows executable/library available, we could +use a pedump-like tool 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. The problem is that we should have such a tool +available under the Wine license first. +.PP +The wrapper code should be generic, i.e. you should be able to have just one +wrapper and specify which library to load using an option. +.PP +Furthermore it 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 +The current way we link with libraries is not very good: with link, in the +Unix sense, with all of them, and with none in the WineLib sense. But we +lack a good means of detecting which libraries we should link with. +Furthermore this area will change significantly when winebuild make sit +possible to really link in the WineLib sense (i.e. via the spec file). +.PP +Work remains to be done on the configure script. Especially in the area of +detecting headers and libraries that are already in the include/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://wine.codeweavers.com/docs/winelib-user/ +.PP +.BR wine (1) +.PP + +.SH AUTHOR +Francois Gouget for CodeWeavers