.\" Automatically generated by Pod::Man version 1.02
.\" Wed May 30 12:24:30 2001
.\"
.\" Standard preamble:
.\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R

.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  | will give a
.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
.\" to do unbreakable dashes and therefore won't be available.  \*(C` and
.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` `
.    ds C' '
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr
.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
.\" index entries marked with X<> in POD.  Of course, you'll have to process
.\" the output yourself in some meaningful fashion.
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
.    .
.    nr % 0
.    rr F
.\}
.\"
.\" For nroff, turn off justification.  Always turn off hyphenation; it
.\" makes way too many mistakes in technical documents.
.hy 0
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.bd B 3
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ======================================================================
.\"
.IX Title "WINDRES.1 1"
.TH WINDRES.1 1 "binutils-2.11.90" "2001-05-30" "GNU"
.UC
.SH "NAME"
windres \- manipulate Windows resources.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
windres [options] [input-file] [output-file]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\&\f(CW\*(C`windres\*(C'\fR reads resources from an input file and copies them into
an output file.  Either file may be in one of three formats:
.Ip "\f(CW\*(C`rc\*(C'\fR" 4
.IX Item "rc"
A text format read by the Resource Compiler.
.Ip "\f(CW\*(C`res\*(C'\fR" 4
.IX Item "res"
A binary format generated by the Resource Compiler.
.Ip "\f(CW\*(C`coff\*(C'\fR" 4
.IX Item "coff"
A \s-1COFF\s0 object or executable.
.PP
The exact description of these different formats is available in
documentation from Microsoft.
.PP
When \f(CW\*(C`windres\*(C'\fR converts from the \f(CW\*(C`rc\*(C'\fR format to the \f(CW\*(C`res\*(C'\fR
format, it is acting like the Windows Resource Compiler.  When
\&\f(CW\*(C`windres\*(C'\fR converts from the \f(CW\*(C`res\*(C'\fR format to the \f(CW\*(C`coff\*(C'\fR
format, it is acting like the Windows \f(CW\*(C`CVTRES\*(C'\fR program.
.PP
When \f(CW\*(C`windres\*(C'\fR generates an \f(CW\*(C`rc\*(C'\fR file, the output is similar
but not identical to the format expected for the input.  When an input
\&\f(CW\*(C`rc\*(C'\fR file refers to an external filename, an output \f(CW\*(C`rc\*(C'\fR file
will instead include the file contents.
.PP
If the input or output format is not specified, \f(CW\*(C`windres\*(C'\fR will
guess based on the file name, or, for the input file, the file contents.
A file with an extension of \fI.rc\fR will be treated as an \f(CW\*(C`rc\*(C'\fR
file, a file with an extension of \fI.res\fR will be treated as a
\&\f(CW\*(C`res\*(C'\fR file, and a file with an extension of \fI.o\fR or
\&\fI.exe\fR will be treated as a \f(CW\*(C`coff\*(C'\fR file.
.PP
If no output file is specified, \f(CW\*(C`windres\*(C'\fR will print the resources
in \f(CW\*(C`rc\*(C'\fR format to standard output.
.PP
The normal use is for you to write an \f(CW\*(C`rc\*(C'\fR file, use \f(CW\*(C`windres\*(C'\fR
to convert it to a \s-1COFF\s0 object file, and then link the \s-1COFF\s0 file into
your application.  This will make the resources described in the
\&\f(CW\*(C`rc\*(C'\fR file available to Windows.
.SH "OPTIONS"
.IX Header "OPTIONS"
.Ip "\f(CW\*(C`\-i \f(CIfilename\f(CW\*(C'\fR" 4
.IX Item "-i filename"
.Ip "\f(CW\*(C`\-\-input \f(CIfilename\f(CW\*(C'\fR" 4
.IX Item "--input filename"
The name of the input file.  If this option is not used, then
\&\f(CW\*(C`windres\*(C'\fR will use the first non-option argument as the input file
name.  If there are no non-option arguments, then \f(CW\*(C`windres\*(C'\fR will
read from standard input.  \f(CW\*(C`windres\*(C'\fR can not read a \s-1COFF\s0 file from
standard input.
.Ip "\f(CW\*(C`\-o \f(CIfilename\f(CW\*(C'\fR" 4
.IX Item "-o filename"
.Ip "\f(CW\*(C`\-\-output \f(CIfilename\f(CW\*(C'\fR" 4
.IX Item "--output filename"
The name of the output file.  If this option is not used, then
\&\f(CW\*(C`windres\*(C'\fR will use the first non-option argument, after any used
for the input file name, as the output file name.  If there is no
non-option argument, then \f(CW\*(C`windres\*(C'\fR will write to standard output.
\&\f(CW\*(C`windres\*(C'\fR can not write a \s-1COFF\s0 file to standard output.
.Ip "\f(CW\*(C`\-I \f(CIformat\f(CW\*(C'\fR" 4
.IX Item "-I format"
.Ip "\f(CW\*(C`\-\-input\-format \f(CIformat\f(CW\*(C'\fR" 4
.IX Item "--input-format format"
The input format to read.  \fIformat\fR may be \fBres\fR, \fBrc\fR, or
\&\fBcoff\fR.  If no input format is specified, \f(CW\*(C`windres\*(C'\fR will
guess, as described above.
.Ip "\f(CW\*(C`\-O \f(CIformat\f(CW\*(C'\fR" 4
.IX Item "-O format"
.Ip "\f(CW\*(C`\-\-output\-format \f(CIformat\f(CW\*(C'\fR" 4
.IX Item "--output-format format"
The output format to generate.  \fIformat\fR may be \fBres\fR,
\&\fBrc\fR, or \fBcoff\fR.  If no output format is specified,
\&\f(CW\*(C`windres\*(C'\fR will guess, as described above.
.Ip "\f(CW\*(C`\-F \f(CItarget\f(CW\*(C'\fR" 4
.IX Item "-F target"
.Ip "\f(CW\*(C`\-\-target \f(CItarget\f(CW\*(C'\fR" 4
.IX Item "--target target"
Specify the \s-1BFD\s0 format to use for a \s-1COFF\s0 file as input or output.  This
is a \s-1BFD\s0 target name; you can use the \f(CW\*(C`\-\-help\*(C'\fR option to see a list
of supported targets.  Normally \f(CW\*(C`windres\*(C'\fR will use the default
format, which is the first one listed by the \f(CW\*(C`\-\-help\*(C'\fR option.
\&\f(CW@ref\fR{Target Selection}.
.Ip "\f(CW\*(C`\-\-preprocessor \f(CIprogram\f(CW\*(C'\fR" 4
.IX Item "--preprocessor program"
When \f(CW\*(C`windres\*(C'\fR reads an \f(CW\*(C`rc\*(C'\fR file, it runs it through the C
preprocessor first.  This option may be used to specify the preprocessor
to use, including any leading arguments.  The default preprocessor
argument is \f(CW\*(C`gcc \-E \-xc\-header \-DRC_INVOKED\*(C'\fR.
.Ip "\f(CW\*(C`\-\-include\-dir \f(CIdirectory\f(CW\*(C'\fR" 4
.IX Item "--include-dir directory"
Specify an include directory to use when reading an \f(CW\*(C`rc\*(C'\fR file.
\&\f(CW\*(C`windres\*(C'\fR will pass this to the preprocessor as an \f(CW\*(C`\-I\*(C'\fR
option.  \f(CW\*(C`windres\*(C'\fR will also search this directory when looking for
files named in the \f(CW\*(C`rc\*(C'\fR file.
.Ip "\f(CW\*(C`\-D \f(CItarget\f(CW\*(C'\fR" 4
.IX Item "-D target"
.Ip "\f(CW\*(C`\-\-define \f(CIsym\f(CW[=\f(CIval\f(CW]\*(C'\fR" 4
.IX Item "--define sym[=val]"
Specify a \f(CW\*(C`\-D\*(C'\fR option to pass to the preprocessor when reading an
\&\f(CW\*(C`rc\*(C'\fR file.
.Ip "\f(CW\*(C`\-v\*(C'\fR" 4
.IX Item "-v"
Enable verbose mode.  This tells you what the preprocessor is if you
didn't specify one.
.Ip "\f(CW\*(C`\-\-language \f(CIval\f(CW\*(C'\fR" 4
.IX Item "--language val"
Specify the default language to use when reading an \f(CW\*(C`rc\*(C'\fR file.
\&\fIval\fR should be a hexadecimal language code.  The low eight bits are
the language, and the high eight bits are the sublanguage.
.Ip "\f(CW\*(C`\-\-use\-temp\-file\*(C'\fR" 4
.IX Item "--use-temp-file"
Use a temporary file to instead of using popen to read the output of
the preprocessor. Use this option if the popen implementation is buggy 
on the host (eg., certain non-English language versions of Windows 95 and 
Windows 98 are known to have buggy popen where the output will instead
go the console).
.Ip "\f(CW\*(C`\-\-no\-use\-temp\-file\*(C'\fR" 4
.IX Item "--no-use-temp-file"
Use popen, not a temporary file, to read the output of the preprocessor.
This is the default behaviour.
.Ip "\f(CW\*(C`\-\-help\*(C'\fR" 4
.IX Item "--help"
Prints a usage summary.
.Ip "\f(CW\*(C`\-\-version\*(C'\fR" 4
.IX Item "--version"
Prints the version number for \f(CW\*(C`windres\*(C'\fR.
.Ip "\f(CW\*(C`\-\-yydebug\*(C'\fR" 4
.IX Item "--yydebug"
If \f(CW\*(C`windres\*(C'\fR is compiled with \f(CW\*(C`YYDEBUG\*(C'\fR defined as \f(CW\*(C`1\*(C'\fR,
this will turn on parser debugging.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
the Info entries for \fIbinutils\fR.
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.
.PP
Permission is granted to copy, distribute and/or modify this document
under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
