NameDateSize

..17-Jun-2024251

aix.shH A D15-May-202421 KiB

aix_3.shH A D12-Oct-200910.1 KiB

aix_4.shH A D24-Sep-201017.4 KiB

altos486.shH A D19-Aug-1996111

amigaos.shH A D15-Feb-2023134

atheos.shH A D27-Oct-2002668

aux_3.shH A D30-Nov-1997705

bitrig.shH A D17-Nov-20142.9 KiB

broken-db.msgH A D30-Nov-1997562

bsdos.shH A D02-Mar-20213.1 KiB

catamount.shH A D15-May-20249.2 KiB

convexos.shH A D30-Nov-1997310

cxux.shH A D09-Aug-20043.7 KiB

cygwin.shH A D15-May-20242.9 KiB

darwin.shH A D15-May-202416.3 KiB

dcosx.shH A D25-Mar-20134.7 KiB

dec_osf.shH A D15-May-202419.1 KiB

dragonfly.shH A D02-Mar-20212.2 KiB

dynix.shH A D19-Aug-1996239

dynixptx.shH A D27-Oct-20022.1 KiB

epix.shH A D14-Feb-20192.7 KiB

esix4.shH A D06-Apr-2000976

fps.shH A D19-Aug-199622

freebsd.shH A D15-May-202410.3 KiB

freemint.shH A D17-Nov-2014835

gnu.shH A D14-Feb-20193.3 KiB

gnukfreebsd.shH A D24-Mar-2014142

gnuknetbsd.shH A D24-Mar-2014155

greenhills.shH A D19-Aug-199624

haiku.shH A D15-Feb-20231.2 KiB

hpux.shH A D15-May-202423.7 KiB

i386.shH A D19-Aug-199624

interix.shH A D17-Nov-2014888

irix_4.shH A D14-Feb-20191 KiB

irix_5.shH A D09-Aug-20042.4 KiB

irix_6.shH A D14-Feb-201921.9 KiB

irix_6_0.shH A D06-Apr-20001.9 KiB

irix_6_1.shH A D06-Apr-20001.9 KiB

isc.shH A D25-Mar-20131.3 KiB

isc_2.shH A D02-Dec-2003625

linux-android.shH A D02-Mar-20218.3 KiB

linux.shH A D15-May-202414.9 KiB

lynxos.shH A D06-Apr-2000385

midnightbsd.shH A D24-Mar-20141.4 KiB

minix.shH A D29-Dec-20193.2 KiB

mips.shH A D14-Feb-2019316

mirbsd.shH A D17-Nov-20142.3 KiB

mpc.shH A D19-Aug-199624

ncr_tower.shH A D19-Aug-1996634

netbsd.shH A D02-Mar-20217.3 KiB

newsos4.shH A D27-Oct-2002999

nonstopux.shH A D27-Oct-2002427

openbsd.shH A D15-May-20245.1 KiB

opus.shH A D19-Aug-199624

os2.shH A D24-Sep-201012.4 KiB

os390.shH A D15-May-202410.7 KiB

os400.shH A D02-Dec-2003520

posix-bc.shH A D25-Mar-20134.3 KiB

qnx.shH A D17-Nov-201411 KiB

README.hintsH A D15-May-202411.7 KiB

riscos.shH A D15-May-2024381

sco.shH A D25-Mar-20138.5 KiB

sco_2_3_0.shH A D19-Aug-199645

sco_2_3_1.shH A D19-Aug-199645

sco_2_3_2.shH A D19-Aug-199680

sco_2_3_3.shH A D30-Nov-1997200

sco_2_3_4.shH A D30-Nov-1997243

solaris_2.shH A D15-May-202422.2 KiB

stellar.shH A D19-Aug-199638

sunos_4_0.shH A D30-Nov-199749

sunos_4_1.shH A D29-Sep-20083.5 KiB

super-ux.shH A D27-Oct-2002470

svr4.shH A D14-Feb-20195.6 KiB

svr5.shH A D14-Feb-20197.5 KiB

t001.cH A D15-Feb-20232.7 KiB

ti1500.shH A D19-Aug-199616

umips.shH A D29-Sep-20081.2 KiB

unicos.shH A D28-Mar-20062.1 KiB

unicosmk.shH A D27-Oct-20021.2 KiB

unisysdynix.shH A D19-Aug-199616

utekv.shH A D02-Dec-2003499

vos.shH A D24-Mar-20142.6 KiB

README.hints

1# vim: syntax=pod
2
3=head1 NAME
4
5README.hints - hint files used by Configure
6
7=head1 DESCRIPTION
8
9These files are used by Configure to set things which Configure either
10can't or doesn't guess properly.  Most of these hint files have been
11tested with at least some version of perl5, but some are still left
12over from perl4.
13
14Please report any problems or suggested changes at
15L<https://github.com/Perl/perl5/issues>.
16
17=head1 Hint file naming convention.
18
19Each hint file name should have only
20one '.'.  (This is for portability to non-unix file systems.)  Names
21should also fit in <= 14 characters, for portability to older SVR3
22systems.  File names are of the form $osname_$osvers.sh, with all '.'
23changed to '_', and all characters (such as '/') that don't belong in
24Unix filenames omitted.
25
26For example, consider Sun OS 4.1.3.  Configure determines $osname=sunos
27(all names are converted to lower case) and $osvers=4.1.3.  Configure
28will search for an appropriate hint file in the following order:
29
30	sunos_4_1_3.sh
31	sunos_4_1.sh
32	sunos_4.sh
33	sunos.sh
34
35If you need to create a hint file, please try to use as general a name
36as possible and include minor version differences inside case or test
37statements.  For example, for IRIX 6.X, we have the following hints
38files:
39
40	irix_6_0.sh
41	irix_6_1.sh
42	irix_6.sh
43
44That is, 6.0 and 6.1 have their own special hints, but 6.2, 6.3, and
45up are all handled by the same irix_6.sh.  That way, we don't have to
46make a new hint file every time the IRIX O/S is upgraded.
47
48If you need to test for specific minor version differences in your
49hints file, be sure to include a default choice.  (See aix.sh for one
50example.) That way, if you write a hint file for foonix 3.2, it might
51still work without any changes when foonix 3.3 is released.
52
53Please also comment carefully on why the different hints are needed.
54That way, a future version of Configure may be able to automatically
55detect what is needed.
56
57A glossary of config.sh variables is in the file Porting/Glossary.
58
59=head1 Setting variables
60
61=head2 Optimizer
62
63If you want to set a variable, try to allow for Configure command-line
64overrides.  For example, suppose you think the default optimizer
65setting to be -O2 for a particular platform.  You should allow for
66command line overrides with something like
67
68	case "$optimize" in
69	'') optimize='-O2' ;;
70	esac
71
72or, if your system has a decent test(1) command,
73
74	test -z "$optimize" && optimize='-O2'
75
76This allows the user to select a different optimization level, e.g.
77-O6 or -g.
78
79=head2 Compiler and Linker flags
80
81If you want to set $ccflags or $ldflags, you should append to the existing
82value to allow Configure command-line settings, e.g. use
83
84	ccflags="$ccflags -DANOTHER_OPTION_I_NEED"
85
86so that the user can do something like
87
88	sh Configure -Dccflags='FIX_NEGATIVE_ZERO'
89
90and have the FIX_NEGATIVE_ZERO value preserved by the hints file.
91
92=head2 Libraries
93
94Configure will attempt to use the libraries listed in the variable
95$libswanted.  If necessary, you should remove broken libraries from
96that list, or add additional libraries to that list.  You should
97*not* simply set $libs -- that ignores the possibilities of local
98variations.  For example, a setting of libs='-lgdbm -lm -lc' would
99fail if another user were to try to compile Perl on a system without
100GDBM but with Berkeley DB.  See hints/dec_osf.sh and hints/solaris_2.sh
101for examples.
102
103=head2 Other
104
105In general, try to avoid hard-wiring something that Configure will
106figure out anyway.  Also try to allow for Configure command-line
107overrides.
108
109=head1 Working around compiler bugs
110
111Occasionally, the root cause of a bug in perl turns out to be due to a bug
112in the compiler.  Often, changing the compilation options (particularly the
113optimization level) can work around the bug.  However, if you try to do
114this on the command line, you will be changing the compilation options for
115every component of perl, which can really hurt perl's performance.
116Instead, consider placing a test case into the hints directory to detect
117whether the compiler bug is present, and add logic to the hints file to
118take a specific and appropriate action
119
120=head2 Test-case conventions
121
122Test cases should be named "tNNN.c", where NNN is the next unused sequence
123number.  The test case must be executable and should display a message
124containing the word "fails" when the compiler bug is present.  It should
125display the word "works" with the compiler bug is not present.  The test
126cases should be liberally commented and may be used by any hints file that
127needs them.  See the first hints file (t001.c) for an example.
128
129=head2 Hint file processing
130
131The hint file must define a call-back unit (see below) that will compile,
132link, and run the test case, and then check for the presence of the string
133"fails" in the output.  If it finds this string, it sets a special variable
134to specify the compilation option(s) for the specific perl source file that
135is affected by the bug.
136
137The special variable is named "XXX_cflags" where "XXX" is the name of
138the source file (without the ".c" suffix).  The value of this variable
139is the string "optimize=YYY", where "YYY" is the compilation option
140necessary to work around the bug.  The default value of this variable
141is "-O" (letter O), which specifies that the C compiler should compile
142the source program at the default optimization level.  If you can
143avoid the compiler bug by disabling optimization, just reset the
144"optimize" variable to the null string.  Sometimes a bug is present at
145a higher optimization level (say, O3) and not present at a lower
146optimization level (say, O1).  In this case, you should specify the
147highest optimization level at which the bug is not present, so that
148you will retain as many of the benefits of code optimization as
149possible.
150
151For example, if the pp_pack.c source file must be compiled at
152optimization level 0 to work around a problem on a particular
153platform, one of the statements
154
155	pp_pack_cflags="optimize=-O0"	or
156	pp_pack_cflags="optimize="
157
158will do the trick, since level 0 is equivalent to no optimization.
159(In case your printer or display device does not distinguish the
160letter O from the digit 0, that is the letter O followed by the digit
1610).  You can specify any compiler option or set of options here, not
162just optimizer options.  These options are appended to the list of all
163other compiler options, so you should be able to override almost any
164compiler option prepared by Configure.  (Obviously this depends on how
165the compiler treats conflicting options, but most seem to go with the
166last value specified on the command line).
167
168You should also allow for the XXX_cflags variable to be overridden on the
169command line.
170
171See the vos.sh hints file for an extended example of these techniques.
172
173=head1 Hint file tricks
174
175=head2 Printing critical messages
176
177[This is still experimental]
178
179If you have a *REALLY* important message that the user ought to see at
180the end of the Configure run, you can store it in the file
181'config.msg'.  At the end of the Configure run, Configure will display
182the contents of this file.  Currently, the only place this is used is
183in Configure itself to warn about the need to set LD_LIBRARY_PATH if
184you are building a shared libperl.so.
185
186To use this feature, just do something like the following
187
188	$cat <<EOM  | $tee -a ../config.msg >&4
189
190    This is a really important message.  Be sure to read it
191    before you type 'make'.
192    EOM
193
194This message will appear on the screen as the hint file is being
195processed and again at the end of Configure.
196
197Please use this sparingly.
198
199=head2 Propagating variables to config.sh
200
201Sometimes, you want an extra variable to appear in config.sh.  For
202example, if your system can't compile toke.c with the optimizer on,
203you can put
204
205    toke_cflags='optimize=""'
206
207at the beginning of a line in your hints file.  Configure will then
208extract that variable and place it in your config.sh file.  Later,
209while compiling toke.c, the cflags shell script will eval $toke_cflags
210and hence compile toke.c without optimization.
211
212Note that for this to work, the variable you want to propagate must
213appear in the first column of the hint file.  It is extracted by
214Configure with a simple sed script, so beware that surrounding case
215statements aren't any help.
216
217By contrast, if you don't want Configure to propagate your temporary
218variable, simply indent it by a leading tab in your hint file.
219
220For example, prior to 5.002, a bug in scope.c led to perl crashing
221when compiled with -O in AIX 4.1.1.  The following "obvious"
222workaround in hints/aix.sh wouldn't work as expected:
223
224    case "$osvers" in
225	4.1.1)
226    scope_cflags='optimize=""'
227	;;
228    esac
229
230because Configure doesn't parse the surrounding 'case' statement, it
231just blindly propagates any variable that starts in the first column.
232For this particular case, that's probably harmless anyway.
233
234Three possible fixes are:
235
236=over
237
238=item 1
239
240Create an aix_4_1_1.sh hint file that contains the scope_cflags
241line and then sources the regular aix hints file for the rest of
242the information.
243
244=item 2
245
246Do the following trick:
247
248    scope_cflags='case "$osvers" in 4.1*) optimize=" ";; esac'
249
250Now when $scope_cflags is eval'd by the cflags shell script, the
251case statement is executed.  Of course writing scripts to be eval'd is
252tricky, especially if there is complex quoting.  Or,
253
254=item 3
255
256Write directly to Configure's temporary file UU/config.sh.
257You can do this with
258
259    case "$osvers" in
260	4.1.1)
261	echo "scope_cflags='optimize=\"\"'" >> UU/config.sh
262	scope_cflags='optimize=""'
263	;;
264    esac
265
266Note you have to both write the definition to the temporary
267UU/config.sh file and set the variable to the appropriate value.
268
269This is sneaky, but it works.  Still, if you need anything this
270complex, perhaps you should create the separate hint file for
271aix 4.1.1.
272
273=back
274
275=head2 Call-backs
276
277=over 4
278
279=item Compiler-related flags
280
281The settings of some things, such as optimization flags, may depend on
282the particular compiler used.  For example, consider the following:
283
284    case "$cc" in
285    *gcc*)  ccflags="$ccflags -posix"
286	    ldflags="$ldflags -posix"
287	    ;;
288    *)      ccflags="$ccflags -Xp -D_POSIX_SOURCE"
289	    ldflags="$ldflags -Xp"
290	    ;;
291    esac
292
293However, the hints file is processed before the user is asked which
294compiler should be used.  Thus in order for these hints to be useful,
295the user must specify  sh Configure -Dcc=gcc on the command line, as
296advised by the INSTALL file.
297
298For versions of perl later than 5.004_61, this problem can
299be circumvented by the use of "call-back units".  That is, the hints
300file can tuck this information away into a file UU/cc.cbu.  Then,
301after Configure prompts the user for the C compiler, it will load in
302and run the UU/cc.cbu "call-back" unit.  See hints/solaris_2.sh for an
303example. Some callbacks exist for other variables than cc, such as for
304uselongdouble. At the present time, these callbacks are only called if the
305variable in question is defined; however, this may change, so the scheme in
306hints/solaris_2.sh of checking to see if uselongdouble is defined is a good
307idea.
308
309=item Call status
310
311Call-backs are only called always, even if the value for the call-back is
312uset: UU/usethreads.cbu is called when Configure is about to deal with
313threads. All created call-backs from hints should thus check the status
314of the variable, and act upon it.
315
316=item Future status
317
318I hope this "call-back" scheme is simple enough to use but powerful
319enough to deal with most situations.  Still, there are certainly cases
320where it's not enough.  For example, for aix we actually change
321compilers if we are using threads.
322
323I'd appreciate feedback on whether this is sufficiently general to be
324helpful, or whether we ought to simply continue to require folks to
325say things like "sh Configure -Dcc=gcc -Dusethreads" on the command line.
326
327=back
328
329Have the appropriate amount of fun :-)
330
331    Andy Dougherty		doughera@lafayette.edu (author)
332    Paul Green			paul.green@stratus.com (compiler bugs)
333