summaryrefslogtreecommitdiff
path: root/Build/source/doc/README.solaris
blob: 4570b06ddc86aaaa5077547b6dd9e5bd610e8fe1 (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
(This file public domain.  Originally written by Mojca Miklavec, 2015.)

Compiling TeX binaries on Solaris

(The document describes the procedures used on Sparc Solaris binaries,
but the same rules should apply to i386 and x86_64 as well.)

Solaris 9 has been out of official support for a while and making
software compile on that platform is challenging, so it hardly makes any
sense to try to support it.

Solaris 10 reaches end of support in January 2021:
    http://en.wikipedia.org/wiki/Solaris_(operating_system)#Version_history
and TeX Live binaries try to stay compatible with that OS version.

Every once in a while a new Update is shipped:
    U1  2006-01
    U2  2006-06
    U3  2006-11
    U4  2007-08
    U5  2008-05
    U6  2008-10
    U7  2009-05
    U8  2009-10
    U9  2010-09
    U10 2011-08
    U11 2013-01
and the problem is that binaries compiled on an updated system might not
run on an older one.

You can check the libc version with
> pvs -no /usr/lib/libc.so

> pvs -d /lib/libc.so.1 | grep SUNW
        SUNW_1.23;
        SUNW_1.22.7;
        SUNW_1.22.6;
        /.../
        SUNW_1.1;
        SUNW_0.9;
        SUNW_0.8;
        SUNW_0.7;

Building wget
=============

Building wget on the latest version of Solaris 10 will make the binary
useless on older Updates of Solaris 10 as it would depend on SUNW_1.22.7.

One option to build wget in a "compatible way" would be to build it on
Solaris 9 with "cc".  The other hack is the usage of map files.

To make it work on older systems the following hack was used (thanks to
the OpenCSW community):
    https://buildfarm.opencsw.org/source/xref/opencsw/csw/mgar/pkg/wget/trunk/files/map.wget

> cat mapfile
libc.so - SUNW_1.22.5 SUNWprivate_1.1 $ADDVERS=SUNW_1.22.5;

export LD_OPTIONS="-M $PWD/mapfile"

And the following configuration was used to get rid of dependencies (which
are not installed on Solaris by default):

> ./configure --enable-ipv6 --disable-iri --disable-nls \
              --disable-ntlm --disable-pcre --without-libiconv-prefix \
              --without-libintl-prefix --without-libuuid --without-libpsl \
              --without-ssl --without-zlib

The binary was built with gcc 4.9.2.

> pvs Master/tlpkg/installer/wget/wget.sparc-solaris
    libsocket.so.1 (SUNW_1.4);
    libnsl.so.1 (SUNW_1.7);
    librt.so.1 (SUNW_1.2);
    libc.so.1 (SUNW_1.22.5, SUNWprivate_1.1);

> ./Master/tlpkg/installer/wget/wget.sparc-solaris --version
    GNU Wget 1.16.3 built on solaris2.10.
    +digest -https +ipv6 -iri +large-file -nls -ntlm +opie -psl -ssl 

(That list of configure options is current as of the above version of
wget; not all those dependencies are present in earlier versions.)

Building xz
===========

The xz binaries would likewise depend on SUNW_1.22.6 by default, so we
used the same hack with a map file to make it work on slightly older
systems.

> export LD_OPTIONS="-M $PWD/mapfile"
> ./configure --disable-nls --disable-shared

> pvs Master/tlpkg/installer/xz/xz.sparc-solaris
    librt.so.1 (SUNW_1.2);
    libpthread.so.1 (SUNW_1.2);
    libc.so.1 (SUNW_1.22);
> pvs Master/tlpkg/installer/xz/xzdec.sparc-solaris
    libc.so.1 (SUNW_1.22);

If users need binaries to run on even older systems, we can target what
is desired by changing the map file.

Building texlive
================

Two extra settings were needed to compile TeX Live with gcc 5.2:
  * export LIBPNG_USER_CPPFLAGS="-D_XOPEN_SOURCE=600"
  * ./Build --without-iconv

The second option makes sure to avoid linking against libiconv
which is not available on SunOS by default.

The first option is only needed on Solaris 10 to circumvent a problem
in libpng <https://sourceforge.net/p/libpng/bugs/245/>.

Using `#define _POSIX_SOURCE 1` will fail to compile on Solaris 10 with gcc 5.x
unless one of `_XPG6`, `_XOPEN_SOURCE = 600`, or `_POSIX_C_SOURCE = 200112L` is set.