File: winemaker.man

package info (click to toggle)
wine 0.0.20020411-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 43,012 kB
  • ctags: 104,265
  • sloc: ansic: 550,196; perl: 21,747; yacc: 3,990; sh: 3,904; makefile: 3,297; tcl: 2,616; lex: 2,443
file content (254 lines) | stat: -rw-r--r-- 8,732 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
.\" -*- nroff -*-
.TH WINEMAKER 1 "September 27, 2001" "Version 0.5.8" "Windows On Unix"
.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 "
]
.br
  [
.IR               "--guiexe " "| " "--windows " "| " "--cuiexe " "| " "--console " "| " "--dll "
]
.br
  [
.IR               "--wrap " "| " "--nowrap " "] [ " "--mfc " "| " "--nomfc "
]
.br
  [
.IR               "-Dmacro[=defn] " "] [ " "-Idir " "] [ " "-Ldir " "] [ " "-idll" "] [ " "-llibrary "
]
.br
  [
.IR               "--interactive " "] [ " "--single-target name "
]
.br
  [
.IR               "--generated-files " "] [ " "--nogenerated-files " "] [ " "--nogenerated-specs "
]

.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 --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 --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 -idll
Adds the Winelib library to the global list of Winelib libraries to import 
in the spec file.
.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".
.TP
.I --generated-files
Tells winemaker to generate the build infrastructure files, i.e. the spec 
files, the wrapper files, the Makefile.in files, the Make.rules.in file, the 
configure.in file and the configure script. This is the default.
.TP
.I --nogenerated-files
Tells winemaker not to generate any of the above files.
.TP
.I --nogenerated-specs
Tells winemaker not to generate the spec files when generating files.  This is
particularly useful when using winemaker to generate a build environment and
you already have a spec file.

.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-wine=/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 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 one would have run the following commands instead:
.PP
$ winemaker --lower-uppercase --mfc
.br
$ ./configure --with-wine=/usr/local/opt/wine \\
.br
              --with-mfc=/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 and library path 
settings.
.PP
Assuming that the windows executable/library is 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
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 <fgouget@codeweavers.com> for CodeWeavers