summaryrefslogtreecommitdiff
path: root/install/man/man5/fpc.cfg.5
blob: 97e8231a3ae4ced4470f93266c3cc5dce6907781 (plain)
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
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
.TH fpc.cfg 5 "22 february 2002" FPC "FPC configuration file"
.SH NAME
fpc.cfg \- Free Pascal Compiler (FPC) configuration file, name derived from Free Pascal Compiler.

.SH DESCRIPTION
This is the main configuration file of the
.I Free Pascal Compiler (FPC)
.PP
All commandline options of the compiler (described in
.BR fpc (1)
) can be specified in fpc.cfg

When the configuration file is found, it is read, and the lines
it contains are treated like you typed them on the command line see
.BR fpc (1)
with some extra condtional possibilities.

.SH SYNTAX

You can specify comments in the configuration file with the # sign.
Everything from the # on will be ignored, unless it is one of the keywords (see below).

The compiler looks for the fpc.cfg file in the following places :
.PP
\	\fI\- Under Linux and unix\fP
.br
\	\	\- The current directory.
.br
\	\	\- Home directory, looks for .fpc.cfg
.br
\	\	\- The directory specified in the environment
.br
\	\	     variable PPC\_CONFIG\_PATH, and if it's not
.br
\	\	     set under compilerdir/../etc.
.br
\	\	\- If it is not yet found: in /etc.
.PP
\	\fI- Under all other OSes:\fP
.br
\	\	\- The current directory.
.br
\	\	\- The directory specified in the environment
.br
\	\	     variable  PPC\_CONFIG\_PATH.
.br
\	\	\- The directory where the compiler binary is.
.br

.PP
When the compiler has finished reading the configuration file, it continues
to treat the command line options.

One of the command\-line options allows you to specify a second configuration
file: Specifying \@foo on the command line will use file foo instead of fpc.cfg
and read further options from there. When the compiler has finished reading
this file, it continues to process the command line.

The configuration file allows some kind of preprocessing. It understands the
following directives, which you should place on the first column of a line :
.PP

\	#IFDEF
.br
\	#IFNDEF
.br
\	#ELSE
.br
\	#ENDIF
.br
\	#DEFINE
.br
\	#UNDEF
.br
\	#WRITE
.br
\	#INCLUDE
.br
\	#SECTION
.br
They work the same way as their $...  directive counterparts in Pascal: 

.IP \fI#IFDEF\fP
.RS
.IP \fISyntax\fP
#IFDEF name

Lines following #IFDEF are skipped read if the keyword "name"
following it is not defined.

They are read until the keywords #ELSE or #ENDIF are
encountered, after which normal processing is resumed.

.IP \fIExample\fP
#IFDEF VER0_99_12
.br
\-Fu/usr/lib/fpc/0.99.12/rtl
.br
#ENDIF
.br
.PP
In the above example, /usr/lib/fpc/0.99.12/rtl will be added to
the path if you're compiling with version 0.99.12 of the compiler.
.RE

.IP \fI#IFNDEF\fP
.RS
.IP \fISyntax\fP
#IFNDEF name

Lines following #IFDEF are skipped read if the keyword "name"
following it is defined.

They are read until the keywords #ELSE or #ENDIF are
encountered, after which normal processing is resumed.

.IP \fIExample\fP
#IFNDEF VER0_99_12
.br
\-Fu/usr/lib/fpc/0.99.13/rtl
.br
#ENDIF
.PP
In the above example, /usr/lib/fpc/0.99.13/rtl will be added to
the path if you're NOT compiling with version 0.99.12 of the compiler.
.RE
.IP \fI#ELSE\fP
.RS
.IP \fISyntax\fP
#ELSE

#ELSE can be specified after a #IFDEF or #IFNDEF
directive as an alternative.
Lines following #ELSE are skipped read if the preceding #IFDEF
#IFNDEF was accepted.

They are skipped until the keyword #ENDIF is
encountered, after which normal processing is resumed.

.IP \fIExample\fP

#IFDEF VER0_99_12
.br
\-Fu/usr/lib/fpc/0.99.12/rtl
.br
#ELSE
.br
\-Fu/usr/lib/fpc/0.99.13/rtl
.br
#ENDIF
.br
.PP
In the above example, /usr/lib/fpc/0.99.12/rtl will be added to
the path if you're compiling with version 0.99.12 of the compiler,
otherwise /usr/lib/fpc/0.99.13/rtl will be added to the path.
.RE
.IP \fI#ENDIF\fP
.RS
.IP \fISyntax\fP
#ENDIF
.PP
#ENDIF marks the end of a block that started with #IF(N)DEF,
possibly with an #ELSE between it.
.RE

.IP \fI#DEFINE\fP
.RS
.IP \fISyntax\fP
#DEFINE name
.PP
#DEFINE defines a new keyword. This has the same effect as a
"\-dname"  command\-line option.
.RE

.IP \fI#UNDEF\fP
.RS
.IP \fISyntax\fP
#UNDEF name

#UNDEF un-defines a keyword if it existed.
This has the same effect as a "\-uname" command-line option.
.RE

.IP \fI#WRITE\fP
.RS
.IP \fISyntax\fP
#WRITE Message Text

#WRITE writes "Message Text" to the screen.
This can be useful to display warnings if certain options are set.

.IP \fIExample\fP
#IFDEF DEBUG
.br
#WRITE Setting debugging ON...
.br
\-g
.br
#ENDIF
.br

.PP
if "DEBUG is defined, this will produce a line

Setting debugging ON...

and will then switch on debugging information in the compiler.
.RE

.IP \fI#INCLUDE\fP
.RS
.IP \fISyntax\fP
#INCLUDE filename

#INCLUDE instructs the compiler to read the contents of
"filename" before continuing to process options in the current file.

This can be useful if you want to have a particular configuration file
for a project (or, under Unix like systems (such as Linux), in 
your home directory), but  still want to have the global options that are 
set in a global configuration file.

.IP \fIExample\fP
#IFDEF LINUX
.br
  #INCLUDE /etc/fpc.cfg
.br
#ELSE
.br
  #IFDEF GO32V2
.br
    #INCLUDE c:\\pp\\bin\\fpc.cfg
.br
  #ENDIF
.br
#ENDIF
.br
.PP
This will include /etc/fpc.cfg if you're on a unix like machine (like linux),
and will include c:\\pp\\bin\\fpc.cfg on a dos machine.
.RE
.IP \fI#SECTION\fP
.RS
.IP \fISyntax\fP
#SECTION name

The #SECTION directive acts as a #IFDEF directive, only
it doesn't require an #ENDIF directive. the special name COMMON
always exists, i.e. lines following #SECTION COMMON are always read.
.RE

.SH Example

A standard block often used in (the Linux version of) fpc.cfg is

\-vwhin
.br
#IFDEF VER0_99_12
.br
 #IFDEF FPC_LINK_STATIC
.br
  \-Fu/usr/lib/fpc/0.99.12/rtl/static
.br
  \-Fu/usr/lib/fpc/0.99.12/units/static
.br
 #ENDIF
.br
 #IFDEF FPC_LINK_DYNAMIC
.br
  \-Fu/usr/lib/fpc/0.99.12/rtl/shared
.br
  \-Fu/usr/lib/fpc/0.99.12/units/shared
.br
 #ENDIF
.br
 \-Fu/usr/lib/fpc/0.99.12/rtl
.br
 \-Fu/usr/lib/fpc/0.99.12/units
.br
#ENDIF
.PP
The block is copied into the fpc.cfg file for each version you use (normally
the latest release  and the lastest developpers
snapshot.

.SH SEE ALSO
.BR  fpc (1)