1PERLSOLARIS(1)         Perl Programmers Reference Guide         PERLSOLARIS(1)
2
3
4

NAME

6       perlsolaris - Perl version 5 on Solaris systems
7

DESCRIPTION

9       This document describes various features of Sun's Solaris operating
10       system that will affect how Perl version 5 (hereafter just perl) is
11       compiled and/or runs.  Some issues relating to the older SunOS 4.x are
12       also discussed, though they may be out of date.
13
14       For the most part, everything should just work.
15
16       Starting with Solaris 8, perl5.00503 (or higher) is supplied with the
17       operating system, so you might not even need to build a newer version
18       of perl at all.  The Sun-supplied version is installed in /usr/perl5
19       with /usr/bin/perl pointing to /usr/perl5/bin/perl.  Do not disturb
20       that installation unless you really know what you are doing.  If you
21       remove the perl supplied with the OS, you will render some bits of your
22       system inoperable.  If you wish to install a newer version of perl,
23       install it under a different prefix from /usr/perl5.  Common prefixes
24       to use are /usr/local and /opt/perl.
25
26       You may wish to put your version of perl in the PATH of all users by
27       changing the link /usr/bin/perl.  This is probably OK, as most perl
28       scripts shipped with Solaris use an explicit path.  (There are a few
29       exceptions, such as /usr/bin/rpm2cpio and /etc/rcm/scripts/README, but
30       these are also sufficiently generic that the actual version of perl
31       probably doesn't matter too much.)
32
33       Solaris ships with a range of Solaris-specific modules.  If you choose
34       to install your own version of perl you will find the source of many of
35       these modules is available on CPAN under the Sun::Solaris:: namespace.
36
37       Solaris may include two versions of perl, e.g. Solaris 9 includes both
38       5.005_03 and 5.6.1.  This is to provide stability across Solaris
39       releases, in cases where a later perl version has incompatibilities
40       with the version included in the preceding Solaris release.  The
41       default perl version will always be the most recent, and in general the
42       old version will only be retained for one Solaris release.  Note also
43       that the default perl will NOT be configured to search for modules in
44       the older version, again due to compatibility/stability concerns.  As a
45       consequence if you upgrade Solaris, you will have to rebuild/reinstall
46       any additional CPAN modules that you installed for the previous Solaris
47       version.  See the CPAN manpage under 'autobundle' for a quick way of
48       doing this.
49
50       As an interim measure, you may either change the #! line of your
51       scripts to specifically refer to the old perl version, e.g. on Solaris
52       9 use #!/usr/perl5/5.00503/bin/perl to use the perl version that was
53       the default for Solaris 8, or if you have a large number of scripts it
54       may be more convenient to make the old version of perl the default on
55       your system.  You can do this by changing the appropriate symlinks
56       under /usr/perl5 as follows (example for Solaris 9):
57
58        # cd /usr/perl5
59        # rm bin man pod
60        # ln -s ./5.00503/bin
61        # ln -s ./5.00503/man
62        # ln -s ./5.00503/lib/pod
63        # rm /usr/bin/perl
64        # ln -s ../perl5/5.00503/bin/perl /usr/bin/perl
65
66       In both cases this should only be considered to be a temporary measure
67       - you should upgrade to the later version of perl as soon as is
68       practicable.
69
70       Note also that the perl command-line utilities (e.g. perldoc) and any
71       that are added by modules that you install will be under
72       /usr/perl5/bin, so that directory should be added to your PATH.
73
74   Solaris Version Numbers.
75       For consistency with common usage, perl's Configure script performs
76       some minor manipulations on the operating system name and version
77       number as reported by uname.  Here's a partial translation table:
78
79                 Sun:                      perl's Configure:
80        uname    uname -r   Name           osname     osvers
81        SunOS    4.1.3     Solaris 1.1     sunos      4.1.3
82        SunOS    5.6       Solaris 2.6     solaris    2.6
83        SunOS    5.8       Solaris 8       solaris    2.8
84        SunOS    5.9       Solaris 9       solaris    2.9
85        SunOS    5.10      Solaris 10      solaris    2.10
86
87       The complete table can be found in the Sun Managers' FAQ
88       <ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq> under "9.1) Which
89       Sun models run which versions of SunOS?".
90

RESOURCES

92       There are many, many sources for Solaris information.  A few of the
93       important ones for perl:
94
95       Solaris FAQ
96           The Solaris FAQ is available at
97           <http://www.science.uva.nl/pub/solaris/solaris2.html>.
98
99           The Sun Managers' FAQ is available at
100           <ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq>
101
102       Precompiled Binaries
103           Precompiled binaries, links to many sites, and much, much more are
104           available at <http://www.sunfreeware.com/> and
105           <http://www.blastwave.org/>.
106
107       Solaris Documentation
108           All Solaris documentation is available on-line at
109           <http://docs.sun.com/>.
110

SETTING UP

112   File Extraction Problems on Solaris.
113       Be sure to use a tar program compiled under Solaris (not SunOS 4.x) to
114       extract the perl-5.x.x.tar.gz file.  Do not use GNU tar compiled for
115       SunOS4 on Solaris.  (GNU tar compiled for Solaris should be fine.)
116       When you run SunOS4 binaries on Solaris, the run-time system magically
117       alters pathnames matching m#lib/locale# so that when tar tries to
118       create lib/locale.pm, a file named lib/oldlocale.pm gets created
119       instead.  If you found this advice too late and used a SunOS4-compiled
120       tar anyway, you must find the incorrectly renamed file and move it back
121       to lib/locale.pm.
122
123   Compiler and Related Tools on Solaris.
124       You must use an ANSI C compiler to build perl.  Perl can be compiled
125       with either Sun's add-on C compiler or with gcc.  The C compiler that
126       shipped with SunOS4 will not do.
127
128       Include /usr/ccs/bin/ in your PATH.
129
130       Several tools needed to build perl are located in /usr/ccs/bin/:  ar,
131       as, ld, and make.  Make sure that /usr/ccs/bin/ is in your PATH.
132
133       On all the released versions of Solaris (8, 9 and 10) you need to make
134       sure the following packages are installed (this info is extracted from
135       the Solaris FAQ):
136
137       for tools (sccs, lex, yacc, make, nm, truss, ld, as): SUNWbtool,
138       SUNWsprot, SUNWtoo
139
140       for libraries & headers: SUNWhea, SUNWarc, SUNWlibm, SUNWlibms,
141       SUNWdfbh, SUNWcg6h, SUNWxwinc
142
143       Additionally, on Solaris 8 and 9 you also need:
144
145       for 64 bit development: SUNWarcx, SUNWbtoox, SUNWdplx, SUNWscpux,
146       SUNWsprox, SUNWtoox, SUNWlmsx, SUNWlmx, SUNWlibCx
147
148       And only on Solaris 8 you also need:
149
150       for libraries & headers: SUNWolinc
151
152       If you are in doubt which package contains a file you are missing, try
153       to find an installation that has that file. Then do a
154
155        $ grep /my/missing/file /var/sadm/install/contents
156
157       This will display a line like this:
158
159       /usr/include/sys/errno.h f none 0644 root bin 7471 37605 956241356
160       SUNWhea
161
162       The last item listed (SUNWhea in this example) is the package you need.
163
164       Avoid /usr/ucb/cc.
165
166       You don't need to have /usr/ucb/ in your PATH to build perl.  If you
167       want /usr/ucb/ in your PATH anyway, make sure that /usr/ucb/ is NOT in
168       your PATH before the directory containing the right C compiler.
169
170       Sun's C Compiler
171
172       If you use Sun's C compiler, make sure the correct directory (usually
173       /opt/SUNWspro/bin/) is in your PATH (before /usr/ucb/).
174
175       GCC
176
177       If you use gcc, make sure your installation is recent and complete.
178       perl versions since 5.6.0 build fine with gcc > 2.8.1 on Solaris >=
179       2.6.
180
181       You must Configure perl with
182
183        $ sh Configure -Dcc=gcc
184
185       If you don't, you may experience strange build errors.
186
187       If you have updated your Solaris version, you may also have to update
188       your gcc.  For example, if you are running Solaris 2.6 and your gcc is
189       installed under /usr/local, check in /usr/local/lib/gcc-lib and make
190       sure you have the appropriate directory, sparc-sun-solaris2.6/ or
191       i386-pc-solaris2.6/.  If gcc's directory is for a different version of
192       Solaris than you are running, then you will need to rebuild gcc for
193       your new version of Solaris.
194
195       You can get a precompiled version of gcc from
196       <http://www.sunfreeware.com/> or <http://www.blastwave.org/>. Make sure
197       you pick up the package for your Solaris release.
198
199       If you wish to use gcc to build add-on modules for use with the perl
200       shipped with Solaris, you should use the Solaris::PerlGcc module which
201       is available from CPAN.  The perl shipped with Solaris is configured
202       and built with the Sun compilers, and the compiler configuration
203       information stored in Config.pm is therefore only relevant to the Sun
204       compilers.  The Solaris:PerlGcc module contains a replacement Config.pm
205       that is correct for gcc - see the module for details.
206
207       GNU as and GNU ld
208
209       The following information applies to gcc version 2.  Volunteers to
210       update it as appropriately for gcc version 3 would be appreciated.
211
212       The versions of as and ld supplied with Solaris work fine for building
213       perl.  There is normally no need to install the GNU versions to compile
214       perl.
215
216       If you decide to ignore this advice and use the GNU versions anyway,
217       then be sure that they are relatively recent.  Versions newer than 2.7
218       are apparently new enough.  Older versions may have trouble with
219       dynamic loading.
220
221       If you wish to use GNU ld, then you need to pass it the -Wl,-E flag.
222       The hints/solaris_2.sh file tries to do this automatically by setting
223       the following Configure variables:
224
225        ccdlflags="$ccdlflags -Wl,-E"
226        lddlflags="$lddlflags -Wl,-E -G"
227
228       However, over the years, changes in gcc, GNU ld, and Solaris ld have
229       made it difficult to automatically detect which ld ultimately gets
230       called.  You may have to manually edit config.sh and add the -Wl,-E
231       flags yourself, or else run Configure interactively and add the flags
232       at the appropriate prompts.
233
234       If your gcc is configured to use GNU as and ld but you want to use the
235       Solaris ones instead to build perl, then you'll need to add
236       -B/usr/ccs/bin/ to the gcc command line.  One convenient way to do that
237       is with
238
239        $ sh Configure -Dcc='gcc -B/usr/ccs/bin/'
240
241       Note that the trailing slash is required.  This will result in some
242       harmless warnings as Configure is run:
243
244        gcc: file path prefix `/usr/ccs/bin/' never used
245
246       These messages may safely be ignored.  (Note that for a SunOS4 system,
247       you must use -B/bin/ instead.)
248
249       Alternatively, you can use the GCC_EXEC_PREFIX environment variable to
250       ensure that Sun's as and ld are used.  Consult your gcc documentation
251       for further information on the -B option and the GCC_EXEC_PREFIX
252       variable.
253
254       Sun and GNU make
255
256       The make under /usr/ccs/bin works fine for building perl.  If you have
257       the Sun C compilers, you will also have a parallel version of make
258       (dmake).  This works fine to build perl, but can sometimes cause
259       problems when running 'make test' due to underspecified dependencies
260       between the different test harness files.  The same problem can also
261       affect the building of some add-on modules, so in those cases either
262       specify '-m serial' on the dmake command line, or use /usr/ccs/bin/make
263       instead.  If you wish to use GNU make, be sure that the set-group-id
264       bit is not set.  If it is, then arrange your PATH so that
265       /usr/ccs/bin/make is before GNU make or else have the system
266       administrator disable the set-group-id bit on GNU make.
267
268       Avoid libucb.
269
270       Solaris provides some BSD-compatibility functions in
271       /usr/ucblib/libucb.a.  Perl will not build and run correctly if linked
272       against -lucb since it contains routines that are incompatible with the
273       standard Solaris libc.  Normally this is not a problem since the
274       solaris hints file prevents Configure from even looking in /usr/ucblib
275       for libraries, and also explicitly omits -lucb.
276
277   Environment for Compiling perl on Solaris
278       PATH
279
280       Make sure your PATH includes the compiler (/opt/SUNWspro/bin/ if you're
281       using Sun's compiler) as well as /usr/ccs/bin/ to pick up the other
282       development tools (such as make, ar, as, and ld).  Make sure your path
283       either doesn't include /usr/ucb or that it includes it after the
284       compiler and compiler tools and other standard Solaris directories.
285       You definitely don't want /usr/ucb/cc.
286
287       LD_LIBRARY_PATH
288
289       If you have the LD_LIBRARY_PATH environment variable set, be sure that
290       it does NOT include /lib or /usr/lib.  If you will be building
291       extensions that call third-party shared libraries (e.g. Berkeley DB)
292       then make sure that your LD_LIBRARY_PATH environment variable includes
293       the directory with that library (e.g. /usr/local/lib).
294
295       If you get an error message
296
297        dlopen: stub interception failed
298
299       it is probably because your LD_LIBRARY_PATH environment variable
300       includes a directory which is a symlink to /usr/lib (such as /lib).
301       The reason this causes a problem is quite subtle.  The file
302       libdl.so.1.0 actually *only* contains functions which generate 'stub
303       interception failed' errors!  The runtime linker intercepts links to
304       "/usr/lib/libdl.so.1.0" and links in internal implementations of those
305       functions instead.  [Thanks to Tim Bunce for this explanation.]
306

RUN CONFIGURE.

308       See the INSTALL file for general information regarding Configure.  Only
309       Solaris-specific issues are discussed here.  Usually, the defaults
310       should be fine.
311
312   64-bit perl on Solaris.
313       See the INSTALL file for general information regarding 64-bit compiles.
314       In general, the defaults should be fine for most people.
315
316       By default, perl-5.6.0 (or later) is compiled as a 32-bit application
317       with largefile and long-long support.
318
319       General 32-bit vs. 64-bit issues.
320
321       Solaris 7 and above will run in either 32 bit or 64 bit mode on SPARC
322       CPUs, via a reboot. You can build 64 bit apps whilst running 32 bit
323       mode and vice-versa. 32 bit apps will run under Solaris running in
324       either 32 or 64 bit mode.  64 bit apps require Solaris to be running 64
325       bit mode.
326
327       Existing 32 bit apps are properly known as LP32, i.e. Longs and
328       Pointers are 32 bit.  64-bit apps are more properly known as LP64.  The
329       discriminating feature of a LP64 bit app is its ability to utilise a
330       64-bit address space.  It is perfectly possible to have a LP32 bit app
331       that supports both 64-bit integers (long long) and largefiles (> 2GB),
332       and this is the default for perl-5.6.0.
333
334       For a more complete explanation of 64-bit issues, see the "Solaris
335       64-bit Developer's Guide" at <http://docs.sun.com/>
336
337       You can detect the OS mode using "isainfo -v", e.g.
338
339        $ isainfo -v   # Ultra 30 in 64 bit mode
340        64-bit sparcv9 applications
341        32-bit sparc applications
342
343       By default, perl will be compiled as a 32-bit application.  Unless you
344       want to allocate more than ~ 4GB of memory inside perl, or unless you
345       need more than 255 open file descriptors, you probably don't need perl
346       to be a 64-bit app.
347
348       Large File Support
349
350       For Solaris 2.6 and onwards, there are two different ways for 32-bit
351       applications to manipulate large files (files whose size is > 2GByte).
352       (A 64-bit application automatically has largefile support built in by
353       default.)
354
355       First is the "transitional compilation environment", described in
356       lfcompile64(5).  According to the man page,
357
358        The transitional compilation  environment  exports  all  the
359        explicit 64-bit functions (xxx64()) and types in addition to
360        all the regular functions (xxx()) and types. Both xxx()  and
361        xxx64()  functions  are  available to the program source.  A
362        32-bit application must use the xxx64() functions in  order
363        to  access  large  files.  See the lf64(5) manual page for a
364        complete listing of the 64-bit transitional interfaces.
365
366       The transitional compilation environment is obtained with the following
367       compiler and linker flags:
368
369        getconf LFS64_CFLAGS        -D_LARGEFILE64_SOURCE
370        getconf LFS64_LDFLAG        # nothing special needed
371        getconf LFS64_LIBS          # nothing special needed
372
373       Second is the "large file compilation environment", described in
374       lfcompile(5).  According to the man page,
375
376        Each interface named xxx() that needs to access 64-bit entities
377        to  access  large  files maps to a xxx64() call in the
378        resulting binary. All relevant data types are defined to  be
379        of correct size (for example, off_t has a typedef definition
380        for a 64-bit entity).
381
382        An application compiled in this environment is able  to  use
383        the  xxx()  source interfaces to access both large and small
384        files, rather than having to explicitly utilize the  transitional
385        xxx64()  interface  calls to access large files.
386
387       Two exceptions are fseek() and ftell().  32-bit applications should use
388       fseeko(3C) and ftello(3C).  These will get automatically mapped to
389       fseeko64() and ftello64().
390
391       The large file compilation environment is obtained with
392
393        getconf LFS_CFLAGS      -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
394        getconf LFS_LDFLAGS     # nothing special needed
395        getconf LFS_LIBS        # nothing special needed
396
397       By default, perl uses the large file compilation environment and relies
398       on Solaris to do the underlying mapping of interfaces.
399
400       Building an LP64 perl
401
402       To compile a 64-bit application on an UltraSparc with a recent Sun
403       Compiler, you need to use the flag "-xarch=v9".  getconf(1) will tell
404       you this, e.g.
405
406        $ getconf -a | grep v9
407        XBS5_LP64_OFF64_CFLAGS:         -xarch=v9
408        XBS5_LP64_OFF64_LDFLAGS:        -xarch=v9
409        XBS5_LP64_OFF64_LINTFLAGS:      -xarch=v9
410        XBS5_LPBIG_OFFBIG_CFLAGS:       -xarch=v9
411        XBS5_LPBIG_OFFBIG_LDFLAGS:      -xarch=v9
412        XBS5_LPBIG_OFFBIG_LINTFLAGS:    -xarch=v9
413        _XBS5_LP64_OFF64_CFLAGS:        -xarch=v9
414        _XBS5_LP64_OFF64_LDFLAGS:       -xarch=v9
415        _XBS5_LP64_OFF64_LINTFLAGS:     -xarch=v9
416        _XBS5_LPBIG_OFFBIG_CFLAGS:      -xarch=v9
417        _XBS5_LPBIG_OFFBIG_LDFLAGS:     -xarch=v9
418        _XBS5_LPBIG_OFFBIG_LINTFLAGS:   -xarch=v9
419
420       This flag is supported in Sun WorkShop Compilers 5.0 and onwards (now
421       marketed under the name Forte) when used on Solaris 7 or later on
422       UltraSparc systems.
423
424       If you are using gcc, you would need to use -mcpu=v9 -m64 instead.
425       This option is not yet supported as of gcc 2.95.2; from
426       install/SPECIFIC in that release:
427
428        GCC version 2.95 is not able to compile code correctly for sparc64
429        targets. Users of the Linux kernel, at least, can use the sparc32
430        program to start up a new shell invocation with an environment that
431        causes configure to recognize (via uname -a) the system as sparc-*-*
432        instead.
433
434       All this should be handled automatically by the hints file, if
435       requested.
436
437       Long Doubles.
438
439       As of 5.8.1, long doubles are working if you use the Sun compilers
440       (needed for additional math routines not included in libm).
441
442   Threads in perl on Solaris.
443       It is possible to build a threaded version of perl on Solaris.  The
444       entire perl thread implementation is still experimental, however, so
445       beware.
446
447   Malloc Issues with perl on Solaris.
448       Starting from perl 5.7.1 perl uses the Solaris malloc, since the perl
449       malloc breaks when dealing with more than 2GB of memory, and the
450       Solaris malloc also seems to be faster.
451
452       If you for some reason (such as binary backward compatibility) really
453       need to use perl's malloc, you can rebuild perl from the sources and
454       Configure the build with
455
456        $ sh Configure -Dusemymalloc
457
458       You should not use perl's malloc if you are building with gcc.  There
459       are reports of core dumps, especially in the PDL module.  The problem
460       appears to go away under -DDEBUGGING, so it has been difficult to track
461       down.  Sun's compiler appears to be okay with or without perl's malloc.
462       [XXX further investigation is needed here.]
463

MAKE PROBLEMS.

465       Dynamic Loading Problems With GNU as and GNU ld
466           If you have problems with dynamic loading using gcc on SunOS or
467           Solaris, and you are using GNU as and GNU ld, see the section "GNU
468           as and GNU ld" above.
469
470       ld.so.1: ./perl: fatal: relocation error:
471           If you get this message on SunOS or Solaris, and you're using gcc,
472           it's probably the GNU as or GNU ld problem in the previous item
473           "GNU as and GNU ld".
474
475       dlopen: stub interception failed
476           The primary cause of the 'dlopen: stub interception failed' message
477           is that the LD_LIBRARY_PATH environment variable includes a
478           directory which is a symlink to /usr/lib (such as /lib).  See
479           "LD_LIBRARY_PATH" above.
480
481       #error "No DATAMODEL_NATIVE specified"
482           This is a common error when trying to build perl on Solaris 2.6
483           with a gcc installation from Solaris 2.5 or 2.5.1.  The Solaris
484           header files changed, so you need to update your gcc installation.
485           You can either rerun the fixincludes script from gcc or take the
486           opportunity to update your gcc installation.
487
488       sh: ar: not found
489           This is a message from your shell telling you that the command 'ar'
490           was not found.  You need to check your PATH environment variable to
491           make sure that it includes the directory with the 'ar' command.
492           This is a common problem on Solaris, where 'ar' is in the
493           /usr/ccs/bin/ directory.
494

MAKE TEST

496   op/stat.t test 4 in Solaris
497       op/stat.t test 4 may fail if you are on a tmpfs of some sort.  Building
498       in /tmp sometimes shows this behavior.  The test suite detects if you
499       are building in /tmp, but it may not be able to catch all tmpfs
500       situations.
501
502   nss_delete core dump from op/pwent or op/grent
503       See "nss_delete core dump from op/pwent or op/grent" in perlhpux.
504

CROSS-COMPILATION

506       Nothing too unusual here.  You can easily do this if you have a cross-
507       compiler available;  A usual Configure invocation when targetting a
508       Solaris x86 looks something like this:
509
510           sh ./Configure -des -Dusecrosscompile \
511               -Dcc=i386-pc-solaris2.11-gcc      \
512               -Dsysroot=$SYSROOT                \
513               -Alddlflags=" -Wl,-z,notext"      \
514               -Dtargethost=... # The usual cross-compilation options
515
516       The lddlflags addition is the only abnormal bit.
517

PREBUILT BINARIES OF PERL FOR SOLARIS.

519       You can pick up prebuilt binaries for Solaris from
520       <http://www.sunfreeware.com/>, <http://www.blastwave.org>, ActiveState
521       <http://www.activestate.com/>, and <http://www.perl.com/> under the
522       Binaries list at the top of the page.  There are probably other sources
523       as well.  Please note that these sites are under the control of their
524       respective owners, not the perl developers.
525

RUNTIME ISSUES FOR PERL ON SOLARIS.

527   Limits on Numbers of Open Files on Solaris.
528       The stdio(3C) manpage notes that for LP32 applications, only 255 files
529       may be opened using fopen(), and only file descriptors 0 through 255
530       can be used in a stream.  Since perl calls open() and then fdopen(3C)
531       with the resulting file descriptor, perl is limited to 255 simultaneous
532       open files, even if sysopen() is used.  If this proves to be an
533       insurmountable problem, you can compile perl as a LP64 application, see
534       "Building an LP64 perl" for details.  Note also that the default
535       resource limit for open file descriptors on Solaris is 255, so you will
536       have to modify your ulimit or rctl (Solaris 9 onwards) appropriately.
537

SOLARIS-SPECIFIC MODULES.

539       See the modules under the Solaris:: and Sun::Solaris namespaces on
540       CPAN, see <http://www.cpan.org/modules/by-module/Solaris/> and
541       <http://www.cpan.org/modules/by-module/Sun/>.
542

SOLARIS-SPECIFIC PROBLEMS WITH MODULES.

544   Proc::ProcessTable on Solaris
545       Proc::ProcessTable does not compile on Solaris with perl5.6.0 and
546       higher if you have LARGEFILES defined.  Since largefile support is the
547       default in 5.6.0 and later, you have to take special steps to use this
548       module.
549
550       The problem is that various structures visible via procfs use off_t,
551       and if you compile with largefile support these change from 32 bits to
552       64 bits.  Thus what you get back from procfs doesn't match up with the
553       structures in perl, resulting in garbage.  See proc(4) for further
554       discussion.
555
556       A fix for Proc::ProcessTable is to edit Makefile to explicitly remove
557       the largefile flags from the ones MakeMaker picks up from Config.pm.
558       This will result in Proc::ProcessTable being built under the correct
559       environment.  Everything should then be OK as long as
560       Proc::ProcessTable doesn't try to share off_t's with the rest of perl,
561       or if it does they should be explicitly specified as off64_t.
562
563   BSD::Resource on Solaris
564       BSD::Resource versions earlier than 1.09 do not compile on Solaris with
565       perl 5.6.0 and higher, for the same reasons as Proc::ProcessTable.
566       BSD::Resource versions starting from 1.09 have a workaround for the
567       problem.
568
569   Net::SSLeay on Solaris
570       Net::SSLeay requires a /dev/urandom to be present. This device is
571       available from Solaris 9 onwards.  For earlier Solaris versions you can
572       either get the package SUNWski (packaged with several Sun software
573       products, for example the Sun WebServer, which is part of the Solaris
574       Server Intranet Extension, or the Sun Directory Services, part of
575       Solaris for ISPs) or download the ANDIrand package from
576       <http://www.cosy.sbg.ac.at/~andi/>. If you use SUNWski, make a symbolic
577       link /dev/urandom pointing to /dev/random.  For more details, see
578       Document ID27606 entitled "Differing /dev/random support requirements
579       within Solaris[TM] Operating Environments", available at
580       <http://sunsolve.sun.com> .
581
582       It may be possible to use the Entropy Gathering Daemon (written in
583       Perl!), available from <http://www.lothar.com/tech/crypto/>.
584

SunOS 4.x

586       In SunOS 4.x you most probably want to use the SunOS ld, /usr/bin/ld,
587       since the more recent versions of GNU ld (like 2.13) do not seem to
588       work for building Perl anymore.  When linking the extensions, the GNU
589       ld gets very unhappy and spews a lot of errors like this
590
591         ... relocation truncated to fit: BASE13 ...
592
593       and dies.  Therefore the SunOS 4.1 hints file explicitly sets the ld to
594       be /usr/bin/ld.
595
596       As of Perl 5.8.1 the dynamic loading of libraries (DynaLoader,
597       XSLoader) also seems to have become broken in in SunOS 4.x.  Therefore
598       the default is to build Perl statically.
599
600       Running the test suite in SunOS 4.1 is a bit tricky since the
601       dist/Tie-File/t/09_gen_rs.t test hangs (subtest #51, FWIW) for some
602       unknown reason.  Just stop the test and kill that particular Perl
603       process.
604
605       There are various other failures, that as of SunOS 4.1.4 and gcc 3.2.2
606       look a lot like gcc bugs.  Many of the failures happen in the Encode
607       tests, where for example when the test expects "0" you get "&#48;"
608       which should after a little squinting look very odd indeed.  Another
609       example is earlier in t/run/fresh_perl where chr(0xff) is expected but
610       the test fails because the result is chr(0xff).  Exactly.
611
612       This is the "make test" result from the said combination:
613
614         Failed 27 test scripts out of 745, 96.38% okay.
615
616       Running the "harness" is painful because of the many failing Unicode-
617       related tests will output megabytes of failure messages, but if one
618       patiently waits, one gets these results:
619
620        Failed Test                     Stat Wstat Total Fail  Failed  List of Failed
621        -----------------------------------------------------------------------------
622        ...
623        ../ext/Encode/t/at-cn.t            4  1024    29    4  13.79%  14-17
624        ../ext/Encode/t/at-tw.t           10  2560    17   10  58.82%  2 4 6 8 10 12
625                                                                       14-17
626        ../ext/Encode/t/enc_data.t        29  7424    ??   ??       %  ??
627        ../ext/Encode/t/enc_eucjp.t       29  7424    ??   ??       %  ??
628        ../ext/Encode/t/enc_module.t      29  7424    ??   ??       %  ??
629        ../ext/Encode/t/encoding.t        29  7424    ??   ??       %  ??
630        ../ext/Encode/t/grow.t            12  3072    24   12  50.00%  2 4 6 8 10 12 14
631                                                                       16 18 20 22 24
632         Failed Test                     Stat Wstat Total Fail  Failed  List of Failed
633        ------------------------------------------------------------------------------
634        ../ext/Encode/t/guess.t          255 65280    29   40 137.93%  10-29
635        ../ext/Encode/t/jperl.t           29  7424    15   30 200.00%  1-15
636        ../ext/Encode/t/mime-header.t      2   512    10    2  20.00%  2-3
637        ../ext/Encode/t/perlio.t          22  5632    38   22  57.89%  1-4 9-16 19-20
638                                                                       23-24 27-32
639        ../ext/List/Util/t/shuffle.t       0   139    ??   ??       %  ??
640        ../ext/PerlIO/t/encoding.t                    14    1   7.14%  11
641        ../ext/PerlIO/t/fallback.t                     9    2  22.22%  3 5
642        ../ext/Socket/t/socketpair.t       0     2    45   70 155.56%  11-45
643        ../lib/CPAN/t/vcmp.t                          30    1   3.33%  25
644        ../lib/Tie/File/t/09_gen_rs.t      0    15    ??   ??       %  ??
645        ../lib/Unicode/Collate/t/test.t              199   30  15.08%  7 26-27 71-75
646                                                                       81-88 95 101
647                                                                       103-104 106 108-
648                                                                       109 122 124 161
649                                                                       169-172
650        ../lib/sort.t                      0   139   119   26  21.85%  107-119
651        op/alarm.t                                     4    1  25.00%  4
652        op/utfhash.t                                  97    1   1.03%  31
653        run/fresh_perl.t                              91    1   1.10%  32
654        uni/tr_7jis.t                                 ??   ??       %  ??
655        uni/tr_eucjp.t                    29  7424     6   12 200.00%  1-6
656        uni/tr_sjis.t                     29  7424     6   12 200.00%  1-6
657        56 tests and 467 subtests skipped.
658        Failed 27/811 test scripts, 96.67% okay. 1383/75399 subtests failed,
659          98.17% okay.
660
661       The alarm() test failure is caused by system() apparently blocking
662       alarm().  That is probably a libc bug, and given that SunOS 4.x has
663       been end-of-lifed years ago, don't hold your breath for a fix.  In
664       addition to that, don't try anything too Unicode-y, especially with
665       Encode, and you should be fine in SunOS 4.x.
666

AUTHOR

668       The original was written by Andy Dougherty doughera@lafayette.edu
669       drawing heavily on advice from Alan Burlison, Nick Ing-Simmons, Tim
670       Bunce, and many other Solaris users over the years.
671
672       Please report any errors, updates, or suggestions to
673       <https://github.com/Perl/perl5/issues>.
674
675
676
677perl v5.36.0                      2022-08-30                    PERLSOLARIS(1)
Impressum