summaryrefslogtreecommitdiff
path: root/hints/sco.sh
blob: 079ab78035afb64df182ef8087cd013d42458aee (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
# sco.sh
# Courtesy of Joel Rosi-Schwartz <j.schwartz@agonet.it>
###############################################################
# Additional SCO version info from
# Peter Wolfe	<wolfe@teloseng.com>
# Fri Jul 19 14:54:25 EDT 1996
# and again Tue Sep 29 16:37:25 EDT 1998
# by Andy Dougherty  <doughera@lafayette.edu>
# Mostly rewritten on
# Tue Jan 19 23:00:00 CET 1999
# by Francois Desarmenien <desar@club-internet.fr>
# Modified by Boyd Gerber <gerberb@zenez.com>
# Tue Sep 21 1999
###############################################################
#
# To use cc,  use   sh Configure
# To use gcc, use   sh Configure -Dcc=gcc
#
# Default on 3.2v4 is to use static link (dynamic loading unsupported).
# Default on 3.2v5 is to use dynamic loading.
# To use static linkink instead, use to sh Configure -Dusedl=n
#
# Warning: - to use dynamic loading with gcc, you need gcc 2.8.0 or later
# ******** - to compile with older releases of gcc, use Configure -Dusedl=n
#            or it wont compile properly
#
###############################################################
# NOTES:
# -----
#
# I Have removed inclusion of ODBM_File for OSR5
# because it core dumps and make tests fails.
#
# Support for icc compiler has been removed, because it 'breaks'
# a lot of code :-(
#
# It's *always* a good idea to first make a static link to be sure to
# have all symbols resolved with the current choice of libraries, since
# with dynamic linking, unresolved symbols are allowed an will be detected
# only at runtime (when you try to load the module or worse, when you call
# the symbol)
#
# The best choice of compiler on OSR 5 (3.2v5.*) seems to be gcc >= 2.8.0:
# -You cannot optimize with genuine sco cc (miniperl core dumps),
#  so Perl is faster if compiled with gcc.
# -Even optimized for speed, gcc generated code is smaller (!!!)
# -gcc is free
# -I use ld to link which is distributed with the core OS distribution, so you
#  don't need to buy the developement kit, just find someone kind enough to
#  give you a binary release of gcc.
#
#

###############################################################
# figure out what SCO version we are. The output of uname -X is
# something like:
#	System = SCO_SV
#	Node = xxxxx
#	Release = 3.2v5.0.0
#	KernelID = 95/08/08
#   Machine = Pentium
#	BusType = ISA
#	Serial = xxxxx
#	Users = 5-user
#	OEM# = 0
#	Origin# = 1
#   NumCPU = 1

# Use /bin/uname (because GNU uname may be first in $PATH and
# it does not support -X) to figure out what SCO version we are:
# Matching '^Release' is broken by locale setting:
# matching '3.2v' should be enough -- FD
case `/bin/uname -X | egrep '3\.2v'` in
*3.2v4.*) scorls=3 ;;   # OSR 3
*3.2v5.*) scorls=5 ;;   # OSR 5
*)
   # Future of SCO OSR is SCO UnixWare: there should not be new OSR releases
   echo "************************************************************" >&4
   echo "" >&4
   echo "  sco.sh hints file only supports:" >&4
   echo "" >&4
   echo "    - SCO Unix 3.2v4.x (OSR 3)" >&4
   echo "    - SCO Unix 3.2v5.x (OSR 5)" >&4
   echo "" >&4
   echo "" >&4
   echo "  For UnixWare, use svr4.sh hints instead" >&4
   echo "  For UnixWare 7.*, use svr5.sh hints instead" >&4
   echo "" >&4
   echo "***********************************************************" >&4
   exit
;;
esac

###############################################################
# Common fixes for all compilers an releases:

###############################################################
# What is true for SCO5 is true for SCO3 too today, so let's have a single
# symbol for both
ccflags="-U M_XENIX -D PERL_SCO"

###############################################################
# Compilers options section:
if test "$scorls" = "3"
then 
    dlext=''
    case "$cc" in
        *gcc*)  optimize='-O2' ;;
        *)      ccflags="$ccflags -W0 -quiet"
                optimize='-O' ;;
    esac
else
    ###############################################################
    # Need this in release 5 because of changed fpu exeption rules
    ccflags="$ccflags -D PERL_SCO5"

    ###############################################################
    # In Release 5, always compile ELF objects
    case "$cc" in
        *gcc*)
            ccflags="$ccflags -melf"
            optimize='-O2'
        ;;
        *)
            ccflags="$ccflags -w0 -belf"
            optimize='-O0'
        ;;
    esac
    ###############################################################
    # Dynamic loading section:
    #
    # We use ld to build shared libraries as it is always available
    # and seems to work better than GNU's one on SCO
    #
    # ccdlflags : must tell the linker to export all global symbols
    # cccdlflags: must tell the compiler to generate relocatable code
    # lddlflags : must tell the linker to output a shared library
    #
    # /usr/local/lib is added for convenience, since 'foreign' libraries
    # are usually put there in sco
    #
    if test "$usedl" != "n"; then
        ld='ld'
        case "$cc" in
            *gcc*)
                ccdlflags='-Xlinker -Bexport -L/usr/local/lib'
                cccdlflags='-fpic'
                lddlflags='-G -L/usr/local/lib'
            ;;
            *)
                ccdlflags='-Bexport -L/usr/local/lib'
                cccdlflags='-Kpic'
                lddlflags='-G -L/usr/local/lib'
            ;;
        esac

        ###############################################################
        # Use dynamic loading
        usedl='define'
        dlext='so'
        dlsrc='dl_dlopen.xs'

        ###############################################################
        # Force to define those symbols, as they are #defines and not
        # catched by Configure, and they are useful
        d_dlopen='define'
        d_dlerror='define'
    fi
fi


###############################################################
# Various hints, common to all releases, to have it work better:

###############################################################
# We need to remove libdl, as libdl.so exists, but ld complains
# it can't find libdl.a ! Bug or feature ? :-)
libswanted=`echo " $libswanted " | sed -e 's/ dl / /'`
set X $libswanted
shift
libswanted="$*"

###############################################################
# Remove libbind because it conflicts with libsocket.
libswanted=`echo " $libswanted " | sed -e 's/ bind / /'`
set X $libswanted
shift
libswanted="$*"

###############################################################
# Try to use libintl.a since it has strcoll and strxfrm
libswanted="intl $libswanted"

###############################################################
# Try to use libdbm.nfs.a since it has dbmclose.
if test -f /usr/lib/libdbm.nfs.a ; then
    libswanted=`echo "dbm.nfs $libswanted " | sed -e 's/ dbm / /'`
    set X $libswanted
    shift
    libswanted="$*"
fi

###############################################################
# We disable ODBM_File if OSR5 because it's mostly broken
# but keep it for ODT3 as it seems to work.
if test "$scorls" = "5"; then
    i_dbm='undef'
fi

###############################################################
# We don't want Xenix cross-development libraries
glibpth=`echo $glibpth | sed -e 's! /usr/lib/386 ! !' -e 's! /lib/386 ! !'`
xlibpth=''

###############################################################
# I have received one report that nm extraction doesn't work if you're
# using the scocc compiler.  This system had the following 'myconfig'
# uname='xxx xxx 3.2 2 i386 '
# cc='scocc', optimize='-O'
# You can override this with Configure -Dusenm.
case "$usenm" in
'') usenm='false' ;;
esac

###############################################################
# If you want to use nm, you'll probably have to use nm -p.  The
# following does that for you:
nm_opt='-p'

###############################################################
# I have received one report that you can't include utime.h in
# pp_sys.c.  Uncomment the following line if that happens to you:
# i_utime=undef

###############################################################
# Perl 5.003_05 and later try to include both <time.h> and <sys/select.h>
# in pp_sys.c, but that fails due to a redefinition of struct timeval.
# This will generate a WHOA THERE.  Accept the default.
i_sysselct=$undef


###############################################################
#END of hint file