This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlapi: Remove per-thread section; move to real scns
[perl5.git] / README.solaris
CommitLineData
d420ca49
AD
1If you read this file _as_is_, just ignore the funny characters you
2see. It is written in the POD format (see pod/perlpod.pod) which is
3specifically designed to be readable as is.
4
5=head1 NAME
6
de2902a6 7perlsolaris - Perl version 5 on Solaris systems
d420ca49
AD
8
9=head1 DESCRIPTION
10
11This document describes various features of Sun's Solaris operating system
12that will affect how Perl version 5 (hereafter just perl) is
13compiled and/or runs. Some issues relating to the older SunOS 4.x are
14also discussed, though they may be out of date.
15
16For the most part, everything should just work.
17
18Starting with Solaris 8, perl5.00503 (or higher) is supplied with the
19operating system, so you might not even need to build a newer version
20of perl at all. The Sun-supplied version is installed in /usr/perl5
635d4d9b 21with F</usr/bin/perl> pointing to F</usr/perl5/bin/perl>. Do not disturb
2a5ccb22 22that installation unless you really know what you are doing. If you
43857681
AB
23remove the perl supplied with the OS, you will render some bits of
24your system inoperable. If you wish to install a newer version of perl,
25install it under a different prefix from /usr/perl5. Common prefixes
26to use are /usr/local and /opt/perl.
2a5ccb22
LC
27
28You may wish to put your version of perl in the PATH of all users by
635d4d9b 29changing the link F</usr/bin/perl>. This is probably OK, as most perl
b9b9bf5a 30scripts shipped with Solaris use an explicit path. (There are a few
635d4d9b 31exceptions, such as F</usr/bin/rpm2cpio> and F</etc/rcm/scripts/README>, but
b9b9bf5a
AD
32these are also sufficiently generic that the actual version of perl
33probably doesn't matter too much.)
34
35Solaris ships with a range of Solaris-specific modules. If you choose
36to install your own version of perl you will find the source of many of
37these modules is available on CPAN under the Sun::Solaris:: namespace.
43857681
AB
38
39Solaris may include two versions of perl, e.g. Solaris 9 includes
40both 5.005_03 and 5.6.1. This is to provide stability across Solaris
41releases, in cases where a later perl version has incompatibilities
f858446f 42with the version included in the preceding Solaris release. The
43857681
AB
43default perl version will always be the most recent, and in general
44the old version will only be retained for one Solaris release. Note
45also that the default perl will NOT be configured to search for modules
46in the older version, again due to compatibility/stability concerns.
47As a consequence if you upgrade Solaris, you will have to
48rebuild/reinstall any additional CPAN modules that you installed for
49the previous Solaris version. See the CPAN manpage under 'autobundle'
50for a quick way of doing this.
51
52As an interim measure, you may either change the #! line of your
53scripts to specifically refer to the old perl version, e.g. on
54Solaris 9 use #!/usr/perl5/5.00503/bin/perl to use the perl version
55that was the default for Solaris 8, or if you have a large number of
56scripts it may be more convenient to make the old version of perl the
57default on your system. You can do this by changing the appropriate
58symlinks under /usr/perl5 as follows (example for Solaris 9):
59
60 # cd /usr/perl5
61 # rm bin man pod
62 # ln -s ./5.00503/bin
63 # ln -s ./5.00503/man
64 # ln -s ./5.00503/lib/pod
65 # rm /usr/bin/perl
66 # ln -s ../perl5/5.00503/bin/perl /usr/bin/perl
67
68In both cases this should only be considered to be a temporary
69measure - you should upgrade to the later version of perl as soon as
70is practicable.
71
72Note also that the perl command-line utilities (e.g. perldoc) and any
73that are added by modules that you install will be under
74/usr/perl5/bin, so that directory should be added to your PATH.
d420ca49
AD
75
76=head2 Solaris Version Numbers.
77
78For consistency with common usage, perl's Configure script performs
79some minor manipulations on the operating system name and version
80number as reported by uname. Here's a partial translation table:
81
43857681
AB
82 Sun: perl's Configure:
83 uname uname -r Name osname osvers
84 SunOS 4.1.3 Solaris 1.1 sunos 4.1.3
85 SunOS 5.6 Solaris 2.6 solaris 2.6
86 SunOS 5.8 Solaris 8 solaris 2.8
87 SunOS 5.9 Solaris 9 solaris 2.9
88 SunOS 5.10 Solaris 10 solaris 2.10
d420ca49 89
2a5ccb22 90The complete table can be found in the Sun Managers' FAQ
37a78d01 91L<ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq> under
2a5ccb22
LC
92"9.1) Which Sun models run which versions of SunOS?".
93
d420ca49
AD
94=head1 RESOURCES
95
5511f325 96There are many, many sources for Solaris information. A few of the
d420ca49
AD
97important ones for perl:
98
99=over 4
100
101=item Solaris FAQ
102
103The Solaris FAQ is available at
104L<http://www.science.uva.nl/pub/solaris/solaris2.html>.
105
2a5ccb22 106The Sun Managers' FAQ is available at
37a78d01 107L<ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq>
2a5ccb22 108
d420ca49
AD
109=item Precompiled Binaries
110
43857681
AB
111Precompiled binaries, links to many sites, and much, much more are
112available at L<http://www.sunfreeware.com/> and
113L<http://www.blastwave.org/>.
d420ca49
AD
114
115=item Solaris Documentation
116
5511f325 117All Solaris documentation is available on-line at L<http://docs.sun.com/>.
d420ca49
AD
118
119=back
120
121=head1 SETTING UP
122
a83b6f46 123=head2 File Extraction Problems on Solaris.
d420ca49
AD
124
125Be sure to use a tar program compiled under Solaris (not SunOS 4.x)
126to extract the perl-5.x.x.tar.gz file. Do not use GNU tar compiled
127for SunOS4 on Solaris. (GNU tar compiled for Solaris should be fine.)
128When you run SunOS4 binaries on Solaris, the run-time system magically
129alters pathnames matching m#lib/locale# so that when tar tries to create
130lib/locale.pm, a file named lib/oldlocale.pm gets created instead.
5511f325 131If you found this advice too late and used a SunOS4-compiled tar
2a5ccb22
LC
132anyway, you must find the incorrectly renamed file and move it back
133to lib/locale.pm.
d420ca49 134
a83b6f46 135=head2 Compiler and Related Tools on Solaris.
d420ca49
AD
136
137You must use an ANSI C compiler to build perl. Perl can be compiled
138with either Sun's add-on C compiler or with gcc. The C compiler that
139shipped with SunOS4 will not do.
140
141=head3 Include /usr/ccs/bin/ in your PATH.
142
143Several tools needed to build perl are located in /usr/ccs/bin/: ar,
144as, ld, and make. Make sure that /usr/ccs/bin/ is in your PATH.
145
81fa5f19
CR
146
147On all the released versions of Solaris (8, 9 and 10) you need to make sure the following packages are installed (this info is extracted from the Solaris FAQ):
d420ca49
AD
148
149for tools (sccs, lex, yacc, make, nm, truss, ld, as): SUNWbtool,
150SUNWsprot, SUNWtoo
151
152for libraries & headers: SUNWhea, SUNWarc, SUNWlibm, SUNWlibms, SUNWdfbh,
81fa5f19
CR
153SUNWcg6h, SUNWxwinc
154
ab473f03 155Additionally, on Solaris 8 and 9 you also need:
d420ca49
AD
156
157for 64 bit development: SUNWarcx, SUNWbtoox, SUNWdplx, SUNWscpux,
158SUNWsprox, SUNWtoox, SUNWlmsx, SUNWlmx, SUNWlibCx
159
81fa5f19
CR
160And only on Solaris 8 you also need:
161
162for libraries & headers: SUNWolinc
163
164
2a5ccb22
LC
165If you are in doubt which package contains a file you are missing,
166try to find an installation that has that file. Then do a
167
43857681 168 $ grep /my/missing/file /var/sadm/install/contents
2a5ccb22
LC
169
170This will display a line like this:
171
172/usr/include/sys/errno.h f none 0644 root bin 7471 37605 956241356 SUNWhea
173
b29a8fb9 174The last item listed (SUNWhea in this example) is the package you need.
2a5ccb22 175
d420ca49
AD
176=head3 Avoid /usr/ucb/cc.
177
178You don't need to have /usr/ucb/ in your PATH to build perl. If you
2a5ccb22
LC
179want /usr/ucb/ in your PATH anyway, make sure that /usr/ucb/ is NOT
180in your PATH before the directory containing the right C compiler.
d420ca49
AD
181
182=head3 Sun's C Compiler
183
184If you use Sun's C compiler, make sure the correct directory
2a5ccb22 185(usually /opt/SUNWspro/bin/) is in your PATH (before /usr/ucb/).
d420ca49
AD
186
187=head3 GCC
188
9a04b58a 189If you use gcc, make sure your installation is recent and complete.
43857681 190perl versions since 5.6.0 build fine with gcc > 2.8.1 on Solaris >=
9a04b58a
RS
1912.6.
192
193You must Configure perl with
d420ca49 194
43857681 195 $ sh Configure -Dcc=gcc
d420ca49 196
9a04b58a
RS
197If you don't, you may experience strange build errors.
198
d420ca49 199If you have updated your Solaris version, you may also have to update
9a04b58a 200your gcc. For example, if you are running Solaris 2.6 and your gcc is
d420ca49 201installed under /usr/local, check in /usr/local/lib/gcc-lib and make
2a5ccb22
LC
202sure you have the appropriate directory, sparc-sun-solaris2.6/ or
203i386-pc-solaris2.6/. If gcc's directory is for a different version of
204Solaris than you are running, then you will need to rebuild gcc for
205your new version of Solaris.
d420ca49
AD
206
207You can get a precompiled version of gcc from
43857681
AB
208L<http://www.sunfreeware.com/> or L<http://www.blastwave.org/>. Make
209sure you pick up the package for your Solaris release.
210
211If you wish to use gcc to build add-on modules for use with the perl
212shipped with Solaris, you should use the Solaris::PerlGcc module
213which is available from CPAN. The perl shipped with Solaris
214is configured and built with the Sun compilers, and the compiler
215configuration information stored in Config.pm is therefore only
216relevant to the Sun compilers. The Solaris:PerlGcc module contains a
217replacement Config.pm that is correct for gcc - see the module for
218details.
d420ca49
AD
219
220=head3 GNU as and GNU ld
221
74144837 222The following information applies to gcc version 2. Volunteers to
f858446f 223update it as appropriately for gcc version 3 would be appreciated.
74144837 224
d420ca49 225The versions of as and ld supplied with Solaris work fine for building
74144837
AD
226perl. There is normally no need to install the GNU versions to
227compile perl.
d420ca49
AD
228
229If you decide to ignore this advice and use the GNU versions anyway,
230then be sure that they are relatively recent. Versions newer than 2.7
231are apparently new enough. Older versions may have trouble with
232dynamic loading.
233
74144837 234If you wish to use GNU ld, then you need to pass it the -Wl,-E flag.
43857681
AB
235The hints/solaris_2.sh file tries to do this automatically by setting
236the following Configure variables:
74144837 237
43857681
AB
238 ccdlflags="$ccdlflags -Wl,-E"
239 lddlflags="$lddlflags -Wl,-E -G"
74144837
AD
240
241However, over the years, changes in gcc, GNU ld, and Solaris ld have made
242it difficult to automatically detect which ld ultimately gets called.
243You may have to manually edit config.sh and add the -Wl,-E flags
244yourself, or else run Configure interactively and add the flags at the
245appropriate prompts.
246
d420ca49
AD
247If your gcc is configured to use GNU as and ld but you want to use the
248Solaris ones instead to build perl, then you'll need to add
249-B/usr/ccs/bin/ to the gcc command line. One convenient way to do
250that is with
251
43857681 252 $ sh Configure -Dcc='gcc -B/usr/ccs/bin/'
d420ca49
AD
253
254Note that the trailing slash is required. This will result in some
2a5ccb22 255harmless warnings as Configure is run:
d420ca49 256
43857681 257 gcc: file path prefix `/usr/ccs/bin/' never used
d420ca49
AD
258
259These messages may safely be ignored.
260(Note that for a SunOS4 system, you must use -B/bin/ instead.)
261
262Alternatively, you can use the GCC_EXEC_PREFIX environment variable to
263ensure that Sun's as and ld are used. Consult your gcc documentation
264for further information on the -B option and the GCC_EXEC_PREFIX variable.
265
43857681 266=head3 Sun and GNU make
d420ca49 267
43857681
AB
268The make under /usr/ccs/bin works fine for building perl. If you
269have the Sun C compilers, you will also have a parallel version of
270make (dmake). This works fine to build perl, but can sometimes cause
271problems when running 'make test' due to underspecified dependencies
272between the different test harness files. The same problem can also
273affect the building of some add-on modules, so in those cases either
274specify '-m serial' on the dmake command line, or use
275/usr/ccs/bin/make instead. If you wish to use GNU make, be sure that
276the set-group-id bit is not set. If it is, then arrange your PATH so
277that /usr/ccs/bin/make is before GNU make or else have the system
278administrator disable the set-group-id bit on GNU make.
d420ca49
AD
279
280=head3 Avoid libucb.
281
282Solaris provides some BSD-compatibility functions in /usr/ucblib/libucb.a.
283Perl will not build and run correctly if linked against -lucb since it
284contains routines that are incompatible with the standard Solaris libc.
285Normally this is not a problem since the solaris hints file prevents
286Configure from even looking in /usr/ucblib for libraries, and also
287explicitly omits -lucb.
288
43857681 289=head2 Environment for Compiling perl on Solaris
d420ca49
AD
290
291=head3 PATH
292
293Make sure your PATH includes the compiler (/opt/SUNWspro/bin/ if you're
294using Sun's compiler) as well as /usr/ccs/bin/ to pick up the other
295development tools (such as make, ar, as, and ld). Make sure your path
296either doesn't include /usr/ucb or that it includes it after the
297compiler and compiler tools and other standard Solaris directories.
298You definitely don't want /usr/ucb/cc.
299
300=head3 LD_LIBRARY_PATH
301
302If you have the LD_LIBRARY_PATH environment variable set, be sure that
303it does NOT include /lib or /usr/lib. If you will be building
304extensions that call third-party shared libraries (e.g. Berkeley DB)
305then make sure that your LD_LIBRARY_PATH environment variable includes
306the directory with that library (e.g. /usr/local/lib).
307
308If you get an error message
309
43857681 310 dlopen: stub interception failed
d420ca49
AD
311
312it is probably because your LD_LIBRARY_PATH environment variable
313includes a directory which is a symlink to /usr/lib (such as /lib).
314The reason this causes a problem is quite subtle. The file
315libdl.so.1.0 actually *only* contains functions which generate 'stub
316interception failed' errors! The runtime linker intercepts links to
317"/usr/lib/libdl.so.1.0" and links in internal implementations of those
318functions instead. [Thanks to Tim Bunce for this explanation.]
319
320=head1 RUN CONFIGURE.
321
322See the INSTALL file for general information regarding Configure.
323Only Solaris-specific issues are discussed here. Usually, the
324defaults should be fine.
325
43857681 326=head2 64-bit perl on Solaris.
d420ca49
AD
327
328See the INSTALL file for general information regarding 64-bit compiles.
329In general, the defaults should be fine for most people.
330
331By default, perl-5.6.0 (or later) is compiled as a 32-bit application
332with largefile and long-long support.
333
334=head3 General 32-bit vs. 64-bit issues.
335
2a5ccb22
LC
336Solaris 7 and above will run in either 32 bit or 64 bit mode on SPARC
337CPUs, via a reboot. You can build 64 bit apps whilst running 32 bit
338mode and vice-versa. 32 bit apps will run under Solaris running in
339either 32 or 64 bit mode. 64 bit apps require Solaris to be running
b29a8fb9 34064 bit mode.
d420ca49
AD
341
342Existing 32 bit apps are properly known as LP32, i.e. Longs and
343Pointers are 32 bit. 64-bit apps are more properly known as LP64.
344The discriminating feature of a LP64 bit app is its ability to utilise a
34564-bit address space. It is perfectly possible to have a LP32 bit app
2a5ccb22 346that supports both 64-bit integers (long long) and largefiles (> 2GB),
d420ca49
AD
347and this is the default for perl-5.6.0.
348
43857681
AB
349For a more complete explanation of 64-bit issues, see the
350"Solaris 64-bit Developer's Guide" at L<http://docs.sun.com/>
d420ca49
AD
351
352You can detect the OS mode using "isainfo -v", e.g.
353
43857681
AB
354 $ isainfo -v # Ultra 30 in 64 bit mode
355 64-bit sparcv9 applications
356 32-bit sparc applications
d420ca49 357
43857681
AB
358By default, perl will be compiled as a 32-bit application. Unless
359you want to allocate more than ~ 4GB of memory inside perl, or unless
360you need more than 255 open file descriptors, you probably don't need
361perl to be a 64-bit app.
d420ca49 362
5511f325 363=head3 Large File Support
d420ca49
AD
364
365For Solaris 2.6 and onwards, there are two different ways for 32-bit
2a5ccb22 366applications to manipulate large files (files whose size is > 2GByte).
d420ca49
AD
367(A 64-bit application automatically has largefile support built in
368by default.)
369
370First is the "transitional compilation environment", described in
371lfcompile64(5). According to the man page,
372
43857681
AB
373 The transitional compilation environment exports all the
374 explicit 64-bit functions (xxx64()) and types in addition to
375 all the regular functions (xxx()) and types. Both xxx() and
376 xxx64() functions are available to the program source. A
377 32-bit application must use the xxx64() functions in order
378 to access large files. See the lf64(5) manual page for a
379 complete listing of the 64-bit transitional interfaces.
d420ca49
AD
380
381The transitional compilation environment is obtained with the
382following compiler and linker flags:
383
43857681
AB
384 getconf LFS64_CFLAGS -D_LARGEFILE64_SOURCE
385 getconf LFS64_LDFLAG # nothing special needed
386 getconf LFS64_LIBS # nothing special needed
d420ca49
AD
387
388Second is the "large file compilation environment", described in
389lfcompile(5). According to the man page,
390
43857681
AB
391 Each interface named xxx() that needs to access 64-bit entities
392 to access large files maps to a xxx64() call in the
393 resulting binary. All relevant data types are defined to be
394 of correct size (for example, off_t has a typedef definition
395 for a 64-bit entity).
d420ca49 396
43857681
AB
397 An application compiled in this environment is able to use
398 the xxx() source interfaces to access both large and small
399 files, rather than having to explicitly utilize the transitional
400 xxx64() interface calls to access large files.
d420ca49
AD
401
402Two exceptions are fseek() and ftell(). 32-bit applications should
403use fseeko(3C) and ftello(3C). These will get automatically mapped
404to fseeko64() and ftello64().
405
406The large file compilation environment is obtained with
407
43857681
AB
408 getconf LFS_CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
409 getconf LFS_LDFLAGS # nothing special needed
410 getconf LFS_LIBS # nothing special needed
d420ca49
AD
411
412By default, perl uses the large file compilation environment and
413relies on Solaris to do the underlying mapping of interfaces.
414
43857681 415=head3 Building an LP64 perl
d420ca49 416
b29a8fb9
JH
417To compile a 64-bit application on an UltraSparc with a recent Sun Compiler,
418you need to use the flag "-xarch=v9". getconf(1) will tell you this, e.g.
d420ca49 419
43857681
AB
420 $ getconf -a | grep v9
421 XBS5_LP64_OFF64_CFLAGS: -xarch=v9
422 XBS5_LP64_OFF64_LDFLAGS: -xarch=v9
423 XBS5_LP64_OFF64_LINTFLAGS: -xarch=v9
424 XBS5_LPBIG_OFFBIG_CFLAGS: -xarch=v9
425 XBS5_LPBIG_OFFBIG_LDFLAGS: -xarch=v9
426 XBS5_LPBIG_OFFBIG_LINTFLAGS: -xarch=v9
427 _XBS5_LP64_OFF64_CFLAGS: -xarch=v9
428 _XBS5_LP64_OFF64_LDFLAGS: -xarch=v9
429 _XBS5_LP64_OFF64_LINTFLAGS: -xarch=v9
430 _XBS5_LPBIG_OFFBIG_CFLAGS: -xarch=v9
431 _XBS5_LPBIG_OFFBIG_LDFLAGS: -xarch=v9
432 _XBS5_LPBIG_OFFBIG_LINTFLAGS: -xarch=v9
d420ca49 433
b29a8fb9
JH
434This flag is supported in Sun WorkShop Compilers 5.0 and onwards
435(now marketed under the name Forte) when used on Solaris 7 or later on
436UltraSparc systems.
2a5ccb22
LC
437
438If you are using gcc, you would need to use -mcpu=v9 -m64 instead. This
439option is not yet supported as of gcc 2.95.2; from install/SPECIFIC
440in that release:
d420ca49 441
43857681
AB
442 GCC version 2.95 is not able to compile code correctly for sparc64
443 targets. Users of the Linux kernel, at least, can use the sparc32
444 program to start up a new shell invocation with an environment that
445 causes configure to recognize (via uname -a) the system as sparc-*-*
446 instead.
d420ca49
AD
447
448All this should be handled automatically by the hints file, if
449requested.
450
d420ca49
AD
451=head3 Long Doubles.
452
43857681
AB
453As of 5.8.1, long doubles are working if you use the Sun compilers
454(needed for additional math routines not included in libm).
d420ca49 455
43857681 456=head2 Threads in perl on Solaris.
d420ca49
AD
457
458It is possible to build a threaded version of perl on Solaris. The entire
459perl thread implementation is still experimental, however, so beware.
d420ca49 460
43857681 461=head2 Malloc Issues with perl on Solaris.
d420ca49 462
43857681 463Starting from perl 5.7.1 perl uses the Solaris malloc, since the perl
83bd2f30
LC
464malloc breaks when dealing with more than 2GB of memory, and the Solaris
465malloc also seems to be faster.
466
467If you for some reason (such as binary backward compatibility) really
43857681 468need to use perl's malloc, you can rebuild perl from the sources
83bd2f30
LC
469and Configure the build with
470
43857681 471 $ sh Configure -Dusemymalloc
210b36aa 472
d420ca49
AD
473You should not use perl's malloc if you are building with gcc. There
474are reports of core dumps, especially in the PDL module. The problem
475appears to go away under -DDEBUGGING, so it has been difficult to
5511f325 476track down. Sun's compiler appears to be okay with or without perl's
d420ca49
AD
477malloc. [XXX further investigation is needed here.]
478
d420ca49
AD
479=head1 MAKE PROBLEMS.
480
481=over 4
482
483=item Dynamic Loading Problems With GNU as and GNU ld
484
485If you have problems with dynamic loading using gcc on SunOS or
486Solaris, and you are using GNU as and GNU ld, see the section
016af039 487L</"GNU as and GNU ld"> above.
d420ca49
AD
488
489=item ld.so.1: ./perl: fatal: relocation error:
490
491If you get this message on SunOS or Solaris, and you're using gcc,
492it's probably the GNU as or GNU ld problem in the previous item
016af039 493L</"GNU as and GNU ld">.
d420ca49
AD
494
495=item dlopen: stub interception failed
496
497The primary cause of the 'dlopen: stub interception failed' message is
498that the LD_LIBRARY_PATH environment variable includes a directory
499which is a symlink to /usr/lib (such as /lib). See
016af039 500L</"LD_LIBRARY_PATH"> above.
d420ca49
AD
501
502=item #error "No DATAMODEL_NATIVE specified"
503
504This is a common error when trying to build perl on Solaris 2.6 with a
505gcc installation from Solaris 2.5 or 2.5.1. The Solaris header files
506changed, so you need to update your gcc installation. You can either
507rerun the fixincludes script from gcc or take the opportunity to
508update your gcc installation.
509
510=item sh: ar: not found
511
512This is a message from your shell telling you that the command 'ar'
513was not found. You need to check your PATH environment variable to
514make sure that it includes the directory with the 'ar' command. This
515is a common problem on Solaris, where 'ar' is in the /usr/ccs/bin/
516directory.
517
518=back
519
520=head1 MAKE TEST
521
a83b6f46 522=head2 op/stat.t test 4 in Solaris
d420ca49 523
635d4d9b 524F<op/stat.t> test 4 may fail if you are on a tmpfs of some sort.
d420ca49
AD
525Building in /tmp sometimes shows this behavior. The
526test suite detects if you are building in /tmp, but it may not be able
527to catch all tmpfs situations.
528
1081c3b9
JH
529=head2 nss_delete core dump from op/pwent or op/grent
530
531See L<perlhpux/"nss_delete core dump from op/pwent or op/grent">.
532
03224839
BF
533=head1 CROSS-COMPILATION
534
535Nothing too unusual here. You can easily do this if you have a
536cross-compiler available; A usual Configure invocation when targetting a
537Solaris x86 looks something like this:
538
539 sh ./Configure -des -Dusecrosscompile \
540 -Dcc=i386-pc-solaris2.11-gcc \
541 -Dsysroot=$SYSROOT \
542 -Alddlflags=" -Wl,-z,notext" \
543 -Dtargethost=... # The usual cross-compilation options
544
545The lddlflags addition is the only abnormal bit.
546
a83b6f46 547=head1 PREBUILT BINARIES OF PERL FOR SOLARIS.
d420ca49
AD
548
549You can pick up prebuilt binaries for Solaris from
43857681
AB
550L<http://www.sunfreeware.com/>, L<http://www.blastwave.org>,
551ActiveState L<http://www.activestate.com/>, and
552L<http://www.perl.com/> under the Binaries list at the top of the
553page. There are probably other sources as well. Please note that
554these sites are under the control of their respective owners, not the
555perl developers.
d420ca49 556
a83b6f46 557=head1 RUNTIME ISSUES FOR PERL ON SOLARIS.
d420ca49 558
a83b6f46 559=head2 Limits on Numbers of Open Files on Solaris.
d420ca49 560
43857681
AB
561The stdio(3C) manpage notes that for LP32 applications, only 255
562files may be opened using fopen(), and only file descriptors 0
563through 255 can be used in a stream. Since perl calls open() and
564then fdopen(3C) with the resulting file descriptor, perl is limited
565to 255 simultaneous open files, even if sysopen() is used. If this
566proves to be an insurmountable problem, you can compile perl as a
016af039 567LP64 application, see L</Building an LP64 perl> for details. Note
43857681
AB
568also that the default resource limit for open file descriptors on
569Solaris is 255, so you will have to modify your ulimit or rctl
570(Solaris 9 onwards) appropriately.
d420ca49
AD
571
572=head1 SOLARIS-SPECIFIC MODULES.
573
43857681
AB
574See the modules under the Solaris:: and Sun::Solaris namespaces on CPAN,
575see L<http://www.cpan.org/modules/by-module/Solaris/> and
576L<http://www.cpan.org/modules/by-module/Sun/>.
d420ca49
AD
577
578=head1 SOLARIS-SPECIFIC PROBLEMS WITH MODULES.
579
a83b6f46 580=head2 Proc::ProcessTable on Solaris
d420ca49
AD
581
582Proc::ProcessTable does not compile on Solaris with perl5.6.0 and higher
583if you have LARGEFILES defined. Since largefile support is the
584default in 5.6.0 and later, you have to take special steps to use this
585module.
586
587The problem is that various structures visible via procfs use off_t,
588and if you compile with largefile support these change from 32 bits to
58964 bits. Thus what you get back from procfs doesn't match up with
590the structures in perl, resulting in garbage. See proc(4) for further
591discussion.
592
593A fix for Proc::ProcessTable is to edit Makefile to
594explicitly remove the largefile flags from the ones MakeMaker picks up
595from Config.pm. This will result in Proc::ProcessTable being built
2a5ccb22 596under the correct environment. Everything should then be OK as long as
d420ca49
AD
597Proc::ProcessTable doesn't try to share off_t's with the rest of perl,
598or if it does they should be explicitly specified as off64_t.
599
5511f325 600=head2 BSD::Resource on Solaris
d420ca49
AD
601
602BSD::Resource versions earlier than 1.09 do not compile on Solaris
603with perl 5.6.0 and higher, for the same reasons as Proc::ProcessTable.
604BSD::Resource versions starting from 1.09 have a workaround for the problem.
605
5511f325 606=head2 Net::SSLeay on Solaris
2a5ccb22 607
43857681
AB
608Net::SSLeay requires a /dev/urandom to be present. This device is
609available from Solaris 9 onwards. For earlier Solaris versions you
610can either get the package SUNWski (packaged with several Sun
611software products, for example the Sun WebServer, which is part of
612the Solaris Server Intranet Extension, or the Sun Directory Services,
613part of Solaris for ISPs) or download the ANDIrand package from
614L<http://www.cosy.sbg.ac.at/~andi/>. If you use SUNWski, make a
60193da3
AD
615symbolic link /dev/urandom pointing to /dev/random. For more details,
616see Document ID27606 entitled "Differing /dev/random support requirements
617within Solaris[TM] Operating Environments", available at
635d4d9b 618L<http://sunsolve.sun.com> .
2a5ccb22
LC
619
620It may be possible to use the Entropy Gathering Daemon (written in
621Perl!), available from L<http://www.lothar.com/tech/crypto/>.
622
42600de6
JH
623=head1 SunOS 4.x
624
625In SunOS 4.x you most probably want to use the SunOS ld, /usr/bin/ld,
626since the more recent versions of GNU ld (like 2.13) do not seem to
627work for building Perl anymore. When linking the extensions, the
628GNU ld gets very unhappy and spews a lot of errors like this
629
630 ... relocation truncated to fit: BASE13 ...
631
632and dies. Therefore the SunOS 4.1 hints file explicitly sets the
635d4d9b 633ld to be F</usr/bin/ld>.
42600de6
JH
634
635As of Perl 5.8.1 the dynamic loading of libraries (DynaLoader, XSLoader)
636also seems to have become broken in in SunOS 4.x. Therefore the default
637is to build Perl statically.
638
8f212d40 639Running the test suite in SunOS 4.1 is a bit tricky since the
cb0ee57a 640F<dist/Tie-File/t/09_gen_rs.t> test hangs (subtest #51, FWIW) for some
8f212d40
JH
641unknown reason. Just stop the test and kill that particular Perl
642process.
643
644There are various other failures, that as of SunOS 4.1.4 and gcc 3.2.2
645look a lot like gcc bugs. Many of the failures happen in the Encode
646tests, where for example when the test expects "0" you get "&#48;"
647which should after a little squinting look very odd indeed.
648Another example is earlier in F<t/run/fresh_perl> where chr(0xff) is
649expected but the test fails because the result is chr(0xff). Exactly.
2597a6d1 650
8f212d40
JH
651This is the "make test" result from the said combination:
652
653 Failed 27 test scripts out of 745, 96.38% okay.
654
2597a6d1
JH
655Running the C<harness> is painful because of the many failing
656Unicode-related tests will output megabytes of failure messages,
657but if one patiently waits, one gets these results:
658
659 Failed Test Stat Wstat Total Fail Failed List of Failed
660 -----------------------------------------------------------------------------
661 ...
662 ../ext/Encode/t/at-cn.t 4 1024 29 4 13.79% 14-17
663 ../ext/Encode/t/at-tw.t 10 2560 17 10 58.82% 2 4 6 8 10 12
664 14-17
665 ../ext/Encode/t/enc_data.t 29 7424 ?? ?? % ??
666 ../ext/Encode/t/enc_eucjp.t 29 7424 ?? ?? % ??
667 ../ext/Encode/t/enc_module.t 29 7424 ?? ?? % ??
668 ../ext/Encode/t/encoding.t 29 7424 ?? ?? % ??
669 ../ext/Encode/t/grow.t 12 3072 24 12 50.00% 2 4 6 8 10 12 14
670 16 18 20 22 24
671 Failed Test Stat Wstat Total Fail Failed List of Failed
672 ------------------------------------------------------------------------------
673 ../ext/Encode/t/guess.t 255 65280 29 40 137.93% 10-29
674 ../ext/Encode/t/jperl.t 29 7424 15 30 200.00% 1-15
675 ../ext/Encode/t/mime-header.t 2 512 10 2 20.00% 2-3
676 ../ext/Encode/t/perlio.t 22 5632 38 22 57.89% 1-4 9-16 19-20
677 23-24 27-32
678 ../ext/List/Util/t/shuffle.t 0 139 ?? ?? % ??
679 ../ext/PerlIO/t/encoding.t 14 1 7.14% 11
680 ../ext/PerlIO/t/fallback.t 9 2 22.22% 3 5
681 ../ext/Socket/t/socketpair.t 0 2 45 70 155.56% 11-45
682 ../lib/CPAN/t/vcmp.t 30 1 3.33% 25
683 ../lib/Tie/File/t/09_gen_rs.t 0 15 ?? ?? % ??
684 ../lib/Unicode/Collate/t/test.t 199 30 15.08% 7 26-27 71-75
685 81-88 95 101
686 103-104 106 108-
687 109 122 124 161
688 169-172
689 ../lib/sort.t 0 139 119 26 21.85% 107-119
690 op/alarm.t 4 1 25.00% 4
691 op/utfhash.t 97 1 1.03% 31
692 run/fresh_perl.t 91 1 1.10% 32
693 uni/tr_7jis.t ?? ?? % ??
694 uni/tr_eucjp.t 29 7424 6 12 200.00% 1-6
695 uni/tr_sjis.t 29 7424 6 12 200.00% 1-6
696 56 tests and 467 subtests skipped.
e46aa1dd
KW
697 Failed 27/811 test scripts, 96.67% okay. 1383/75399 subtests failed,
698 98.17% okay.
2597a6d1
JH
699
700The alarm() test failure is caused by system() apparently blocking
701alarm(). That is probably a libc bug, and given that SunOS 4.x
702has been end-of-lifed years ago, don't hold your breath for a fix.
e214c99d
JH
703In addition to that, don't try anything too Unicode-y, especially
704with Encode, and you should be fine in SunOS 4.x.
2597a6d1 705
d420ca49
AD
706=head1 AUTHOR
707
708The original was written by Andy Dougherty F<doughera@lafayette.edu>
709drawing heavily on advice from Alan Burlison, Nick Ing-Simmons, Tim Bunce,
710and many other Solaris users over the years.
711
8166b4e0
DB
712Please report any errors, updates, or suggestions to
713L<https://github.com/Perl/perl5/issues>.