xref: /titanic_44/usr/src/lib/libshell/misc/buildksh93.sh (revision 7c2fbfb345896881c631598ee3852ce9ce33fb07)
1*7c2fbfb3SApril Chin#!/bin/ksh -p
2*7c2fbfb3SApril Chin# (note we use "/bin/ksh -p" for Linux/pdksh support in this script)
3*7c2fbfb3SApril Chin
4*7c2fbfb3SApril Chin#
5*7c2fbfb3SApril Chin# CDDL HEADER START
6*7c2fbfb3SApril Chin#
7*7c2fbfb3SApril Chin# The contents of this file are subject to the terms of the
8*7c2fbfb3SApril Chin# Common Development and Distribution License (the "License").
9*7c2fbfb3SApril Chin# You may not use this file except in compliance with the License.
10*7c2fbfb3SApril Chin#
11*7c2fbfb3SApril Chin# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
12*7c2fbfb3SApril Chin# or http://www.opensolaris.org/os/licensing.
13*7c2fbfb3SApril Chin# See the License for the specific language governing permissions
14*7c2fbfb3SApril Chin# and limitations under the License.
15*7c2fbfb3SApril Chin#
16*7c2fbfb3SApril Chin# When distributing Covered Code, include this CDDL HEADER in each
17*7c2fbfb3SApril Chin# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
18*7c2fbfb3SApril Chin# If applicable, add the following below this CDDL HEADER, with the
19*7c2fbfb3SApril Chin# fields enclosed by brackets "[]" replaced with your own identifying
20*7c2fbfb3SApril Chin# information: Portions Copyright [yyyy] [name of copyright owner]
21*7c2fbfb3SApril Chin#
22*7c2fbfb3SApril Chin# CDDL HEADER END
23*7c2fbfb3SApril Chin#
24*7c2fbfb3SApril Chin
25*7c2fbfb3SApril Chin#
26*7c2fbfb3SApril Chin# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
27*7c2fbfb3SApril Chin# Use is subject to license terms.
28*7c2fbfb3SApril Chin#
29*7c2fbfb3SApril Chin
30*7c2fbfb3SApril Chin#
31*7c2fbfb3SApril Chin# buildksh93.ksh - ast-ksh standalone build script for the
32*7c2fbfb3SApril Chin# OpenSolaris ksh93-integration project
33*7c2fbfb3SApril Chin#
34*7c2fbfb3SApril Chin
35*7c2fbfb3SApril Chin# ksh93t sources can be downloaded like this from the AT&T site:
36*7c2fbfb3SApril Chin# wget --http-user="I accept www.opensource.org/licenses/cpl" --http-passwd="." 'http://www.research.att.com/~gsf/download/tgz/INIT.2008-11-04.tgz'
37*7c2fbfb3SApril Chin# wget --http-user="I accept www.opensource.org/licenses/cpl" --http-passwd="." 'http://www.research.att.com/~gsf/download/tgz/ast-ksh.2008-11-04.tgz'
38*7c2fbfb3SApril Chin
39*7c2fbfb3SApril Chinfunction fatal_error
40*7c2fbfb3SApril Chin{
41*7c2fbfb3SApril Chin    print -u2 "${progname}: $*"
42*7c2fbfb3SApril Chin    exit 1
43*7c2fbfb3SApril Chin}
44*7c2fbfb3SApril Chin
45*7c2fbfb3SApril Chinset -o errexit
46*7c2fbfb3SApril Chinset -o xtrace
47*7c2fbfb3SApril Chin
48*7c2fbfb3SApril Chintypeset progname="$(basename "${0}")"
49*7c2fbfb3SApril Chintypeset buildmode="$1"
50*7c2fbfb3SApril Chin
51*7c2fbfb3SApril Chinif [[ "${buildmode}" == "" ]] ; then
52*7c2fbfb3SApril Chin    fatal_error "buildmode required."
53*7c2fbfb3SApril Chinfi
54*7c2fbfb3SApril Chin
55*7c2fbfb3SApril Chin# Make sure we use the C locale during building to avoid any unintended
56*7c2fbfb3SApril Chin# side-effects
57*7c2fbfb3SApril Chinexport LANG=C
58*7c2fbfb3SApril Chinexport LC_ALL=$LANG LC_MONETARY=$LANG LC_NUMERIC=$LANG LC_MESSAGES=$LANG LC_COLLATE=$LANG LC_CTYPE=$LANG
59*7c2fbfb3SApril Chin# Make sure the POSIX/XPG6 tools are in front of /usr/bin (/bin is needed for Linux after /usr/bin)
60*7c2fbfb3SApril Chinexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/bin:/opt/SUNWspro/bin
61*7c2fbfb3SApril Chin
62*7c2fbfb3SApril Chin# Make sure the POSIX/XPG6 packages are installed (mandatory for building
63*7c2fbfb3SApril Chin# our version of ksh93 correctly).
64*7c2fbfb3SApril Chinif [[ "$(uname -s)" == "SunOS" ]] ; then
65*7c2fbfb3SApril Chin    if [[ ! -x "/usr/xpg6/bin/tr" ]] ; then
66*7c2fbfb3SApril Chin        fatal_error "XPG6/4 packages (SUNWxcu6,SUNWxcu4) not installed."
67*7c2fbfb3SApril Chin    fi
68*7c2fbfb3SApril Chinfi
69*7c2fbfb3SApril Chin
70*7c2fbfb3SApril Chinfunction print_solaris_builtin_header
71*7c2fbfb3SApril Chin{
72*7c2fbfb3SApril Chin# Make sure to use \\ instead of \ for continuations
73*7c2fbfb3SApril Chincat <<ENDOFTEXT
74*7c2fbfb3SApril Chin/*
75*7c2fbfb3SApril Chin * CDDL HEADER START
76*7c2fbfb3SApril Chin *
77*7c2fbfb3SApril Chin * The contents of this file are subject to the terms of the
78*7c2fbfb3SApril Chin * Common Development and Distribution License (the "License").
79*7c2fbfb3SApril Chin * You may not use this file except in compliance with the License.
80*7c2fbfb3SApril Chin *
81*7c2fbfb3SApril Chin * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
82*7c2fbfb3SApril Chin * or http://www.opensolaris.org/os/licensing.
83*7c2fbfb3SApril Chin * See the License for the specific language governing permissions
84*7c2fbfb3SApril Chin * and limitations under the License.
85*7c2fbfb3SApril Chin *
86*7c2fbfb3SApril Chin * When distributing Covered Code, include this CDDL HEADER in each
87*7c2fbfb3SApril Chin * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
88*7c2fbfb3SApril Chin * If applicable, add the following below this CDDL HEADER, with the
89*7c2fbfb3SApril Chin * fields enclosed by brackets "[]" replaced with your own identifying
90*7c2fbfb3SApril Chin * information: Portions Copyright [yyyy] [name of copyright owner]
91*7c2fbfb3SApril Chin *
92*7c2fbfb3SApril Chin * CDDL HEADER END
93*7c2fbfb3SApril Chin */
94*7c2fbfb3SApril Chin
95*7c2fbfb3SApril Chin/*
96*7c2fbfb3SApril Chin * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
97*7c2fbfb3SApril Chin * Use is subject to license terms.
98*7c2fbfb3SApril Chin */
99*7c2fbfb3SApril Chin
100*7c2fbfb3SApril Chin#ifndef _SOLARIS_KSH_CMDLIST_H
101*7c2fbfb3SApril Chin#define	_SOLARIS_KSH_CMDLIST_H
102*7c2fbfb3SApril Chin
103*7c2fbfb3SApril Chin#ifdef	__cplusplus
104*7c2fbfb3SApril Chinextern "C" {
105*7c2fbfb3SApril Chin#endif
106*7c2fbfb3SApril Chin
107*7c2fbfb3SApril Chin/*
108*7c2fbfb3SApril Chin * List builtins for Solaris.
109*7c2fbfb3SApril Chin * The list here is partially autogenerated and partially hand-picked
110*7c2fbfb3SApril Chin * based on compatibility with the native Solaris versions of these
111*7c2fbfb3SApril Chin * tools
112*7c2fbfb3SApril Chin */
113*7c2fbfb3SApril Chin
114*7c2fbfb3SApril Chin/* POSIX compatible commands */
115*7c2fbfb3SApril Chin#ifdef _NOT_YET
116*7c2fbfb3SApril Chin#define	XPG6CMDLIST(f)	\\
117*7c2fbfb3SApril Chin	{ "/usr/xpg6/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
118*7c2fbfb3SApril Chin#define	XPG4CMDLIST(f)	\\
119*7c2fbfb3SApril Chin	{ "/usr/xpg4/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
120*7c2fbfb3SApril Chin#else
121*7c2fbfb3SApril Chin#define	XPG6CMDLIST(f)
122*7c2fbfb3SApril Chin#define	XPG4CMDLIST(f)
123*7c2fbfb3SApril Chin#endif /* NOT_YET */
124*7c2fbfb3SApril Chin/*
125*7c2fbfb3SApril Chin * Commands which are 100% compatible with native Solaris versions (/bin is
126*7c2fbfb3SApril Chin * a softlink to ./usr/bin, ksh93 takes care about the lookup)
127*7c2fbfb3SApril Chin */
128*7c2fbfb3SApril Chin#define	BINCMDLIST(f)	\\
129*7c2fbfb3SApril Chin	{ "/bin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
130*7c2fbfb3SApril Chin#define	USRBINCMDLIST(f)	\\
131*7c2fbfb3SApril Chin	{ "/usr/bin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
132*7c2fbfb3SApril Chin#define	SBINCMDLIST(f)	\\
133*7c2fbfb3SApril Chin	{ "/sbin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
134*7c2fbfb3SApril Chin#define	SUSRBINCMDLIST(f)	\\
135*7c2fbfb3SApril Chin	{ "/usr/sbin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
136*7c2fbfb3SApril Chin/*
137*7c2fbfb3SApril Chin * Make all ksh93 builtins accessible when /usr/ast/bin was added to
138*7c2fbfb3SApril Chin * /usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/bin:/opt/SUNWspro/bin
139*7c2fbfb3SApril Chin */
140*7c2fbfb3SApril Chin#define	ASTCMDLIST(f)	\\
141*7c2fbfb3SApril Chin	{ "/usr/ast/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
142*7c2fbfb3SApril Chin
143*7c2fbfb3SApril Chin/* undo ast_map.h #defines to avoid collision */
144*7c2fbfb3SApril Chin#undef basename
145*7c2fbfb3SApril Chin#undef dirname
146*7c2fbfb3SApril Chin
147*7c2fbfb3SApril Chin/* Generated data, do not edit. */
148*7c2fbfb3SApril ChinXPG4CMDLIST(basename)
149*7c2fbfb3SApril ChinASTCMDLIST(basename)
150*7c2fbfb3SApril ChinBINCMDLIST(cat)
151*7c2fbfb3SApril ChinASTCMDLIST(cat)
152*7c2fbfb3SApril ChinXPG4CMDLIST(chgrp)
153*7c2fbfb3SApril ChinASTCMDLIST(chgrp)
154*7c2fbfb3SApril ChinASTCMDLIST(chmod)
155*7c2fbfb3SApril ChinXPG4CMDLIST(chown)
156*7c2fbfb3SApril ChinBINCMDLIST(chown)
157*7c2fbfb3SApril ChinASTCMDLIST(chown)
158*7c2fbfb3SApril ChinBINCMDLIST(cksum)
159*7c2fbfb3SApril ChinASTCMDLIST(cksum)
160*7c2fbfb3SApril ChinBINCMDLIST(cmp)
161*7c2fbfb3SApril ChinASTCMDLIST(cmp)
162*7c2fbfb3SApril ChinASTCMDLIST(comm)
163*7c2fbfb3SApril ChinXPG4CMDLIST(cp)
164*7c2fbfb3SApril ChinASTCMDLIST(cp)
165*7c2fbfb3SApril ChinBINCMDLIST(cut)
166*7c2fbfb3SApril ChinASTCMDLIST(cut)
167*7c2fbfb3SApril ChinXPG4CMDLIST(date)
168*7c2fbfb3SApril ChinASTCMDLIST(date)
169*7c2fbfb3SApril ChinASTCMDLIST(dirname)
170*7c2fbfb3SApril ChinXPG4CMDLIST(expr)
171*7c2fbfb3SApril ChinASTCMDLIST(expr)
172*7c2fbfb3SApril ChinASTCMDLIST(fds)
173*7c2fbfb3SApril ChinASTCMDLIST(fmt)
174*7c2fbfb3SApril ChinASTCMDLIST(fold)
175*7c2fbfb3SApril ChinBINCMDLIST(head)
176*7c2fbfb3SApril ChinASTCMDLIST(head)
177*7c2fbfb3SApril ChinXPG4CMDLIST(id)
178*7c2fbfb3SApril ChinASTCMDLIST(id)
179*7c2fbfb3SApril ChinASTCMDLIST(join)
180*7c2fbfb3SApril ChinXPG4CMDLIST(ln)
181*7c2fbfb3SApril ChinASTCMDLIST(ln)
182*7c2fbfb3SApril ChinBINCMDLIST(logname)
183*7c2fbfb3SApril ChinASTCMDLIST(logname)
184*7c2fbfb3SApril ChinBINCMDLIST(mkdir)
185*7c2fbfb3SApril ChinASTCMDLIST(mkdir)
186*7c2fbfb3SApril ChinBINCMDLIST(mkfifo)
187*7c2fbfb3SApril ChinASTCMDLIST(mkfifo)
188*7c2fbfb3SApril ChinXPG4CMDLIST(mv)
189*7c2fbfb3SApril ChinASTCMDLIST(mv)
190*7c2fbfb3SApril ChinBINCMDLIST(paste)
191*7c2fbfb3SApril ChinASTCMDLIST(paste)
192*7c2fbfb3SApril ChinASTCMDLIST(pathchk)
193*7c2fbfb3SApril ChinBINCMDLIST(rev)
194*7c2fbfb3SApril ChinASTCMDLIST(rev)
195*7c2fbfb3SApril ChinXPG4CMDLIST(rm)
196*7c2fbfb3SApril ChinASTCMDLIST(rm)
197*7c2fbfb3SApril ChinBINCMDLIST(rmdir)
198*7c2fbfb3SApril ChinASTCMDLIST(rmdir)
199*7c2fbfb3SApril ChinXPG4CMDLIST(stty)
200*7c2fbfb3SApril ChinASTCMDLIST(stty)
201*7c2fbfb3SApril ChinBINCMDLIST(sum)
202*7c2fbfb3SApril ChinASTCMDLIST(sum)
203*7c2fbfb3SApril ChinSUSRBINCMDLIST(sync)
204*7c2fbfb3SApril ChinSBINCMDLIST(sync)
205*7c2fbfb3SApril ChinBINCMDLIST(sync)
206*7c2fbfb3SApril ChinASTCMDLIST(sync)
207*7c2fbfb3SApril ChinXPG4CMDLIST(tail)
208*7c2fbfb3SApril ChinASTCMDLIST(tail)
209*7c2fbfb3SApril ChinBINCMDLIST(tee)
210*7c2fbfb3SApril ChinASTCMDLIST(tee)
211*7c2fbfb3SApril ChinBINCMDLIST(tty)
212*7c2fbfb3SApril ChinASTCMDLIST(tty)
213*7c2fbfb3SApril ChinASTCMDLIST(uname)
214*7c2fbfb3SApril ChinBINCMDLIST(uniq)
215*7c2fbfb3SApril ChinASTCMDLIST(uniq)
216*7c2fbfb3SApril ChinBINCMDLIST(wc)
217*7c2fbfb3SApril ChinASTCMDLIST(wc)
218*7c2fbfb3SApril Chin
219*7c2fbfb3SApril Chin/* Mandatory for ksh93 test suite and AST scripts */
220*7c2fbfb3SApril ChinBINCMDLIST(getconf)
221*7c2fbfb3SApril Chin
222*7c2fbfb3SApril Chin#ifdef	__cplusplus
223*7c2fbfb3SApril Chin}
224*7c2fbfb3SApril Chin#endif
225*7c2fbfb3SApril Chin
226*7c2fbfb3SApril Chin#endif /* !_SOLARIS_KSH_CMDLIST_H */
227*7c2fbfb3SApril ChinENDOFTEXT
228*7c2fbfb3SApril Chin}
229*7c2fbfb3SApril Chin
230*7c2fbfb3SApril Chinfunction build_shell
231*7c2fbfb3SApril Chin{
232*7c2fbfb3SApril Chin    set -o errexit
233*7c2fbfb3SApril Chin    set -o xtrace
234*7c2fbfb3SApril Chin
235*7c2fbfb3SApril Chin    # OS.cputype.XXbit.compiler
236*7c2fbfb3SApril Chin    case "${buildmode}" in
237*7c2fbfb3SApril Chin        *.linux.*)
238*7c2fbfb3SApril Chin            # ksh93+AST config flags
239*7c2fbfb3SApril Chin            bast_flags="-DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_SYSRC -D_map_libc=1"
240*7c2fbfb3SApril Chin
241*7c2fbfb3SApril Chin            # gcc flags
242*7c2fbfb3SApril Chin            bgcc99="gcc -std=gnu99 "
243*7c2fbfb3SApril Chin            bgcc_ccflags="${bon_flags} ${bast_flags} -g"
244*7c2fbfb3SApril Chin
245*7c2fbfb3SApril Chin            case "${buildmode}" in
246*7c2fbfb3SApril Chin                # Linux i386
247*7c2fbfb3SApril Chin                *.i386.32bit.gcc*)  HOSTTYPE="linux.i386" CC="${bgcc99} -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"
248*7c2fbfb3SApril Chin                    ;;
249*7c2fbfb3SApril Chin                *)
250*7c2fbfb3SApril Chin                    fatal_error "build_shell: Illegal Linux type/compiler build mode \"${buildmode}\"."
251*7c2fbfb3SApril Chin                    ;;
252*7c2fbfb3SApril Chin            esac
253*7c2fbfb3SApril Chin            ;;
254*7c2fbfb3SApril Chin        *.solaris.*)
255*7c2fbfb3SApril Chin            # Notes:
256*7c2fbfb3SApril Chin            # 1. Do not remove/modify these flags or their order before either
257*7c2fbfb3SApril Chin            # asking the project leads at
258*7c2fbfb3SApril Chin            # http://www.opensolaris.org/os/project/ksh93-integration/
259*7c2fbfb3SApril Chin            # These flags all have a purpose, even if they look
260*7c2fbfb3SApril Chin            # weird/redundant/etc. at the first look.
261*7c2fbfb3SApril Chin            #
262*7c2fbfb3SApril Chin            # 2. We use -KPIC here since -Kpic is too small on 64bit sparc and
263*7c2fbfb3SApril Chin            # on 32bit it's close to the barrier so we use it for both 32bit and
264*7c2fbfb3SApril Chin            # 64bit to avoid later suprises when people update libast in the
265*7c2fbfb3SApril Chin            # future
266*7c2fbfb3SApril Chin            #
267*7c2fbfb3SApril Chin            # 3. "-D_map_libc=1" is needed to force map.c to add a "_ast_" prefix to all
268*7c2fbfb3SApril Chin            # AST symbol names which may otherwise collide with Solaris/Linux libc
269*7c2fbfb3SApril Chin            #
270*7c2fbfb3SApril Chin            # 4. "-DSHOPT_SYSRC" enables /etc/ksh.kshrc support (AST default is currently
271*7c2fbfb3SApril Chin            # to enable it if /etc/ksh.kshrc or /etc/bash.bashrc are available on the
272*7c2fbfb3SApril Chin            # build machine).
273*7c2fbfb3SApril Chin            #
274*7c2fbfb3SApril Chin            # 5. -D_lib_socket=1 -lsocket -lnsl" was added to make sure ksh93 is compiled
275*7c2fbfb3SApril Chin            # with networking support enabled, the current AST build infratructure has
276*7c2fbfb3SApril Chin            # problems with detecting networking support in Solaris.
277*7c2fbfb3SApril Chin            #
278*7c2fbfb3SApril Chin            # 6. "-xc99=%all -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1" is used to force
279*7c2fbfb3SApril Chin            # the compiler into C99 mode. Otherwise ksh93 will be much slower and lacks
280*7c2fbfb3SApril Chin            # lots of arithmethic functions.
281*7c2fbfb3SApril Chin            #
282*7c2fbfb3SApril Chin            # 7. "-D_TS_ERRNO -D_REENTRANT" are flags taken from the default OS/Net
283*7c2fbfb3SApril Chin            # build system.
284*7c2fbfb3SApril Chin            #
285*7c2fbfb3SApril Chin            # 8. "-xpagesize_stack=64K is used on SPARC to enhance the performace
286*7c2fbfb3SApril Chin            #
287*7c2fbfb3SApril Chin            # 9. -DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_CMDLIB_HDR=\\\"/home/test001/ksh93/ast_ksh_20070322/solaris_cmdlist.h\\\"
288*7c2fbfb3SApril Chin            # is used to bind all ksh93 builtins to a "virtual" directory
289*7c2fbfb3SApril Chin            # called "/usr/ast/bin/" and to adjust the list of builtins
290*7c2fbfb3SApril Chin            # enabled by default to those defined by PSARC 2006/550
291*7c2fbfb3SApril Chin
292*7c2fbfb3SApril Chin            solaris_builtin_header="${PWD}/tmp_solaris_builtin_header.h"
293*7c2fbfb3SApril Chin            print_solaris_builtin_header >"${solaris_builtin_header}"
294*7c2fbfb3SApril Chin
295*7c2fbfb3SApril Chin            # OS/Net build flags
296*7c2fbfb3SApril Chin            bon_flags="-D_TS_ERRNO -D_REENTRANT"
297*7c2fbfb3SApril Chin
298*7c2fbfb3SApril Chin            # ksh93+AST config flags
299*7c2fbfb3SApril Chin            bast_flags="-DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_CMDLIB_HDR=\\\"${solaris_builtin_header}\\\" -DSHOPT_SYSRC -D_map_libc=1"
300*7c2fbfb3SApril Chin
301*7c2fbfb3SApril Chin            # Sun Studio flags
302*7c2fbfb3SApril Chin            bsunc99="/opt/SUNWspro/bin/cc -xc99=%all -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1"
303*7c2fbfb3SApril Chin            bsuncc_app_ccflags_sparc="-xpagesize_stack=64K" # use bsuncc_app_ccflags_sparc only for final executables
304*7c2fbfb3SApril Chin            bsuncc_ccflags="${bon_flags} -KPIC -g -xs -xspace -Xa -xstrconst -z combreloc -xildoff -xcsi -errtags=yes ${bast_flags} -D_lib_socket=1 -lsocket -lnsl"
305*7c2fbfb3SApril Chin
306*7c2fbfb3SApril Chin            # gcc flags
307*7c2fbfb3SApril Chin            bgcc99="/usr/sfw/bin/gcc -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1"
308*7c2fbfb3SApril Chin            bgcc_ccflags="${bon_flags} ${bast_flags} -D_lib_socket=1 -lsocket -lnsl"
309*7c2fbfb3SApril Chin
310*7c2fbfb3SApril Chin
311*7c2fbfb3SApril Chin            case "${buildmode}" in
312*7c2fbfb3SApril Chin                *.i386.32bit.suncc*)  HOSTTYPE="sol11.i386" CC="${bsunc99}"                            cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}"  ;;
313*7c2fbfb3SApril Chin                *.i386.64bit.suncc*)  HOSTTYPE="sol11.i386" CC="${bsunc99} -xarch=amd64 -KPIC"         cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}"  ;;
314*7c2fbfb3SApril Chin                *.sparc.32bit.suncc*) HOSTTYPE="sol11.sun4" CC="${bsunc99}"                            cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" bsuncc_app_ccflags="${bsuncc_app_ccflags_sparc}" ;;
315*7c2fbfb3SApril Chin                *.sparc.64bit.suncc*) HOSTTYPE="sol11.sun4" CC="${bsunc99} -xarch=v9 -dalign -KPIC"    cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" bsuncc_app_ccflags="${bsuncc_app_ccflags_sparc}" ;;
316*7c2fbfb3SApril Chin
317*7c2fbfb3SApril Chin                *.i386.32bit.gcc*)  HOSTTYPE="sol11.i386" CC="${bgcc99} -fPIC"                                            cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
318*7c2fbfb3SApril Chin                *.i386.64bit.gcc*)  HOSTTYPE="sol11.i386" CC="${bgcc99} -m64 -mtune=opteron -Ui386 -U__i386 -fPIC"        cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
319*7c2fbfb3SApril Chin                *.sparc.32bit.gcc*) HOSTTYPE="sol11.sun4" CC="${bgcc99} -m32 -mcpu=v8 -fPIC"                              cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
320*7c2fbfb3SApril Chin                *.sparc.64bit.gcc*) HOSTTYPE="sol11.sun4" CC="${bgcc99} -m64 -mcpu=v9 -fPIC"                              cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
321*7c2fbfb3SApril Chin                *.s390.32bit.gcc*)  HOSTTYPE="sol11.s390" CC="${bgcc99} -m32          -fPIC"				  cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
322*7c2fbfb3SApril Chin                *.s390.64bit.gcc*)  HOSTTYPE="sol11.s390" CC="${bgcc99} -m64          -fPIC"				  cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
323*7c2fbfb3SApril Chin
324*7c2fbfb3SApril Chin                *)
325*7c2fbfb3SApril Chin                    fatal_error "build_shell: Illegal Solaris type/compiler build mode \"${buildmode}\"."
326*7c2fbfb3SApril Chin                    ;;
327*7c2fbfb3SApril Chin            esac
328*7c2fbfb3SApril Chin            ;;
329*7c2fbfb3SApril Chin        *)
330*7c2fbfb3SApril Chin            fatal_error "Illegal OS build mode \"${buildmode}\"."
331*7c2fbfb3SApril Chin            ;;
332*7c2fbfb3SApril Chin    esac
333*7c2fbfb3SApril Chin
334*7c2fbfb3SApril Chin    # some prechecks
335*7c2fbfb3SApril Chin    [[ -z "${CCFLAGS}"  ]] && fatal_error "build_shell: CCFLAGS is empty."
336*7c2fbfb3SApril Chin    [[ -z "${CC}"       ]] && fatal_error "build_shell: CC is empty."
337*7c2fbfb3SApril Chin    [[ -z "${HOSTTYPE}" ]] && fatal_error "build_shell: HOSTTYPE is empty."
338*7c2fbfb3SApril Chin    [[ ! -f "bin/package" ]] && fatal_error "build_shell: bin/package missing."
339*7c2fbfb3SApril Chin    [[ ! -x "bin/package" ]] && fatal_error "build_shell: bin/package not executable."
340*7c2fbfb3SApril Chin
341*7c2fbfb3SApril Chin    export CCFLAGS CC HOSTTYPE
342*7c2fbfb3SApril Chin
343*7c2fbfb3SApril Chin    # build ksh93
344*7c2fbfb3SApril Chin    bin/package make CCFLAGS="${CCFLAGS}" CC="${CC}" HOSTTYPE="${HOSTTYPE}"
345*7c2fbfb3SApril Chin
346*7c2fbfb3SApril Chin    root="${PWD}/arch/${HOSTTYPE}"
347*7c2fbfb3SApril Chin    [[ -d "$root" ]] || fatal_error "build_shell: directory ${root} not found."
348*7c2fbfb3SApril Chin    log="${root}/lib/package/gen/make.out"
349*7c2fbfb3SApril Chin
350*7c2fbfb3SApril Chin    [[ -s $log ]] || fatal_error "build_shell: no make.out log found."
351*7c2fbfb3SApril Chin
352*7c2fbfb3SApril Chin    if [[ "${buildmode}" != *.staticshell* ]] ; then
353*7c2fbfb3SApril Chin        # libcmd causes some trouble since there is a squatter in solaris
354*7c2fbfb3SApril Chin        # This has been fixed in Solaris 11/B48 but may require adjustments
355*7c2fbfb3SApril Chin        # for older Solaris releases
356*7c2fbfb3SApril Chin        for lib in libast libdll libsum libcmd libshell ; do
357*7c2fbfb3SApril Chin            (( $? == 0 )) || exit 1
358*7c2fbfb3SApril Chin            case "$lib" in
359*7c2fbfb3SApril Chin            libshell)
360*7c2fbfb3SApril Chin                base="lib/"
361*7c2fbfb3SApril Chin                vers=1
362*7c2fbfb3SApril Chin                link="-L${root}/lib/ -lcmd -lsum -ldll -last -lm"
363*7c2fbfb3SApril Chin                ;;
364*7c2fbfb3SApril Chin            libdll)
365*7c2fbfb3SApril Chin                base="src/lib/${lib}"
366*7c2fbfb3SApril Chin                vers=1
367*7c2fbfb3SApril Chin                link="-ldl"
368*7c2fbfb3SApril Chin                ;;
369*7c2fbfb3SApril Chin            libast)
370*7c2fbfb3SApril Chin                base="src/lib/${lib}"
371*7c2fbfb3SApril Chin                vers=1
372*7c2fbfb3SApril Chin                link="-lm"
373*7c2fbfb3SApril Chin                ;;
374*7c2fbfb3SApril Chin            *)
375*7c2fbfb3SApril Chin                base="src/lib/${lib}"
376*7c2fbfb3SApril Chin                vers=1
377*7c2fbfb3SApril Chin                link="-L${root}/lib/ -last -lm"
378*7c2fbfb3SApril Chin                ;;
379*7c2fbfb3SApril Chin            esac
380*7c2fbfb3SApril Chin
381*7c2fbfb3SApril Chin            (
382*7c2fbfb3SApril Chin            cd "${root}/${base}"
383*7c2fbfb3SApril Chin            if [[ "${buildmode}" == *solaris* ]] ; then
384*7c2fbfb3SApril Chin                ${CC} ${cc_sharedlib} ${CCFLAGS} -Bdirect -Wl,-zallextract -Wl,-zmuldefs -o "${root}/lib/${lib}.so.${vers}" "${lib}.a"  $link
385*7c2fbfb3SApril Chin            else
386*7c2fbfb3SApril Chin                ${CC} ${cc_sharedlib} ${CCFLAGS} -Wl,--whole-archive -Wl,-zmuldefs "${lib}.a" -Wl,--no-whole-archive -o "${root}/lib/${lib}.so.${vers}" $link
387*7c2fbfb3SApril Chin            fi
388*7c2fbfb3SApril Chin
389*7c2fbfb3SApril Chin            #rm ${lib}.a
390*7c2fbfb3SApril Chin            mv "${lib}.a" "disabled_${lib}.a_"
391*7c2fbfb3SApril Chin
392*7c2fbfb3SApril Chin            cd "${root}/lib"
393*7c2fbfb3SApril Chin            ln -sf "${lib}.so.${vers}" "${lib}.so"
394*7c2fbfb3SApril Chin            )
395*7c2fbfb3SApril Chin        done
396*7c2fbfb3SApril Chin
397*7c2fbfb3SApril Chin        (
398*7c2fbfb3SApril Chin          base=src/cmd/ksh93
399*7c2fbfb3SApril Chin          cd "${root}/${base}"
400*7c2fbfb3SApril Chin          rm -f \
401*7c2fbfb3SApril Chin	      "${root}/lib/libshell.a" \
402*7c2fbfb3SApril Chin              "${root}/lib/libsum.a" \
403*7c2fbfb3SApril Chin              "${root}/lib/libdll.a" \
404*7c2fbfb3SApril Chin              "${root}/lib/libast.a"
405*7c2fbfb3SApril Chin
406*7c2fbfb3SApril Chin          if [[ "${buildmode}" == *solaris* ]] ; then
407*7c2fbfb3SApril Chin              ${CC} ${CCFLAGS} ${bsuncc_app_ccflags} -L${root}/lib/ -Bdirect -o ksh pmain.o -lshell -Bstatic -lcmd -Bdynamic -lsum -ldll -last -lm -lmd -lsecdb
408*7c2fbfb3SApril Chin          else
409*7c2fbfb3SApril Chin              ${CC} ${CCFLAGS} ${bsuncc_app_ccflags} -L${root}/lib/ -o ksh pmain.o -lshell -lcmd -lsum -ldll -last -lm
410*7c2fbfb3SApril Chin          fi
411*7c2fbfb3SApril Chin
412*7c2fbfb3SApril Chin	  file ksh
413*7c2fbfb3SApril Chin	  file shcomp
414*7c2fbfb3SApril Chin
415*7c2fbfb3SApril Chin	  export LD_LIBRARY_PATH="${root}/lib:${LD_LIBRARY_PATH}"
416*7c2fbfb3SApril Chin	  export LD_LIBRARY_PATH_32="${root}/lib:${LD_LIBRARY_PATH_32}"
417*7c2fbfb3SApril Chin	  export LD_LIBRARY_PATH_64="${root}/lib:${LD_LIBRARY_PATH_64}"
418*7c2fbfb3SApril Chin	  ldd ksh
419*7c2fbfb3SApril Chin        )
420*7c2fbfb3SApril Chin    fi
421*7c2fbfb3SApril Chin}
422*7c2fbfb3SApril Chin
423*7c2fbfb3SApril Chinfunction test_builtin_getconf
424*7c2fbfb3SApril Chin{
425*7c2fbfb3SApril Chin(
426*7c2fbfb3SApril Chin    print "# testing getconf builtin..."
427*7c2fbfb3SApril Chin    set +o errexit
428*7c2fbfb3SApril Chin    export PATH=/bin:/usr/bin
429*7c2fbfb3SApril Chin    for lang in ${TEST_LANG} ; do
430*7c2fbfb3SApril Chin        (
431*7c2fbfb3SApril Chin	    printf "## testing LANG=%s\n" "${lang}"
432*7c2fbfb3SApril Chin            export LC_ALL="${lang}" LANG="${lang}"
433*7c2fbfb3SApril Chin            ${SHELL} -c '/usr/bin/getconf -a |
434*7c2fbfb3SApril Chin                         while read i ; do
435*7c2fbfb3SApril Chin                         t="${i%:*}" ; a="$(getconf "$t" 2>/dev/null)" ;
436*7c2fbfb3SApril Chin                         b="$(/usr/bin/getconf "$t" 2>/dev/null)" ; [ "$a" != "$b" ] && print "# |$t|:|$a| != |$b|" ;
437*7c2fbfb3SApril Chin                         done'
438*7c2fbfb3SApril Chin        )
439*7c2fbfb3SApril Chin    done
440*7c2fbfb3SApril Chin    print "# testing getconf done."
441*7c2fbfb3SApril Chin)
442*7c2fbfb3SApril Chin}
443*7c2fbfb3SApril Chin
444*7c2fbfb3SApril Chinfunction test_shell
445*7c2fbfb3SApril Chin{
446*7c2fbfb3SApril Chin    set -o errexit
447*7c2fbfb3SApril Chin    set -o xtrace
448*7c2fbfb3SApril Chin
449*7c2fbfb3SApril Chin    export SHELL="$(ls -1 $PWD/arch/*/src/cmd/ksh93/ksh)"
450*7c2fbfb3SApril Chin    export LD_LIBRARY_PATH="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH}"
451*7c2fbfb3SApril Chin    export LD_LIBRARY_PATH_32="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH_32}"
452*7c2fbfb3SApril Chin    export LD_LIBRARY_PATH_64="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH_64}"
453*7c2fbfb3SApril Chin    printf "## SHELL is |%s|\n" "${SHELL}"
454*7c2fbfb3SApril Chin    printf "## LD_LIBRARY_PATH is |%s|\n" "${LD_LIBRARY_PATH}"
455*7c2fbfb3SApril Chin
456*7c2fbfb3SApril Chin    [[ ! -f "${SHELL}" ]] && fatal_error "test_shell: |${SHELL}| is not a file."
457*7c2fbfb3SApril Chin    [[ ! -x "${SHELL}" ]] && fatal_error "test_shell: |${SHELL}| is not executable."
458*7c2fbfb3SApril Chin
459*7c2fbfb3SApril Chin    [[ "${TEST_LANG}" == "" ]] && TEST_LANG="C"
460*7c2fbfb3SApril Chin
461*7c2fbfb3SApril Chin    case "${buildmode}" in
462*7c2fbfb3SApril Chin            testshell.bcheck*)
463*7c2fbfb3SApril Chin                for lang in ${TEST_LANG} ; do
464*7c2fbfb3SApril Chin                    (
465*7c2fbfb3SApril Chin                        export LC_ALL="${lang}" LANG="${lang}"
466*7c2fbfb3SApril Chin                        for i in ./src/cmd/ksh93/tests/*.sh ; do
467*7c2fbfb3SApril Chin                            bc_logfile="$(basename "$i").$$.bcheck"
468*7c2fbfb3SApril Chin                            rm -f "${bc_logfile}"
469*7c2fbfb3SApril Chin                            /opt/SUNWspro/bin/bcheck -q -access -o "${bc_logfile}" ${SHELL} ./src/cmd/ksh93/tests/shtests \
470*7c2fbfb3SApril Chin                                LD_LIBRARY_PATH_64="$LD_LIBRARY_PATH_64" \
471*7c2fbfb3SApril Chin                                LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \
472*7c2fbfb3SApril Chin                                LD_LIBRARY_PATH_32="$LD_LIBRARY_PATH_32"\
473*7c2fbfb3SApril Chin                                LC_ALL="${lang}" LANG="${lang}" \
474*7c2fbfb3SApril Chin                                VMDEBUG=a \
475*7c2fbfb3SApril Chin                                "$i"
476*7c2fbfb3SApril Chin                            cat "${bc_logfile}"
477*7c2fbfb3SApril Chin                        done
478*7c2fbfb3SApril Chin                    )
479*7c2fbfb3SApril Chin                done
480*7c2fbfb3SApril Chin                ;;
481*7c2fbfb3SApril Chin            testshell.builtin.getconf)
482*7c2fbfb3SApril Chin                test_builtin_getconf
483*7c2fbfb3SApril Chin                ;;
484*7c2fbfb3SApril Chin            testshell)
485*7c2fbfb3SApril Chin                for lang in ${TEST_LANG} ; do
486*7c2fbfb3SApril Chin                    (
487*7c2fbfb3SApril Chin                        export LC_ALL="${lang}" LANG="${lang}"
488*7c2fbfb3SApril Chin                        for i in ./src/cmd/ksh93/tests/*.sh ; do
489*7c2fbfb3SApril Chin                            ${SHELL} ./src/cmd/ksh93/tests/shtests -a \
490*7c2fbfb3SApril Chin                                LD_LIBRARY_PATH_64="$LD_LIBRARY_PATH_64" \
491*7c2fbfb3SApril Chin                                LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \
492*7c2fbfb3SApril Chin                                LD_LIBRARY_PATH_32="$LD_LIBRARY_PATH_32" \
493*7c2fbfb3SApril Chin                                LC_ALL="${lang}" LANG="${lang}" \
494*7c2fbfb3SApril Chin                                VMDEBUG=a \
495*7c2fbfb3SApril Chin				SHCOMP=$PWD/arch/*/bin/shcomp \
496*7c2fbfb3SApril Chin                                "$i"
497*7c2fbfb3SApril Chin                        done
498*7c2fbfb3SApril Chin                    )
499*7c2fbfb3SApril Chin                done
500*7c2fbfb3SApril Chin                test_builtin_getconf
501*7c2fbfb3SApril Chin                ;;
502*7c2fbfb3SApril Chin    esac
503*7c2fbfb3SApril Chin}
504*7c2fbfb3SApril Chin
505*7c2fbfb3SApril Chin# main
506*7c2fbfb3SApril Chincase "${buildmode}" in
507*7c2fbfb3SApril Chin        build.*) build_shell ;;
508*7c2fbfb3SApril Chin        testshell*)  test_shell  ;;
509*7c2fbfb3SApril Chin        *) fatal_error "Illegal build mode \"${buildmode}\"." ;;
510*7c2fbfb3SApril Chinesac
511*7c2fbfb3SApril Chin# EOF.
512